Gemini APIの安全性フィルターを利用したテキスト処理

## 概要

インターネットをクロールして収集したテキストデータ，思いつきを箇条書きにした文は，文章としては今一歩のものも少なくありません．APIを利用して文章として意味が通るようなもののみ抽出や校正をしたい！今回は，Gemini APIの無料枠（Gemini Flash 1.5）を利用して文章を簡単に校正する方法です．

# 1. 具体例

[Gemini APIの安全性を制御する回](https://qiita.com/AzukiImo/items/46c0f5d72f4d9e42cb0a)で利用したHarmCagegoryオプションを利用して文章を生成させることで上手く内容を取り入れた文章にしたいと思います．

サンプルのtextにある文章，ここに，校正したい文章を入力します．サンプルではベタうちしていますが，ファイルから読み込んで，フォーマットを整える方法がきれいですね．


~~~python:サンプル
import google.generativeai as genai
from google.generativeai.types import HarmCategory, HarmBlockThreshold

API_KEY = 'abcde12345' 
genai.configure(api_key=API_KEY)
model = genai.GenerativeModel("gemini-1.5-flash")
chat = model.start_chat()


text = """
次の指示に従い文章を校正してください．
### 指示:
1. 安全性の低い文章については、 None を出力する。
2. 意味のない日本語になるときは None を出力する。
3. 校正済み文章だけ出力する。

### 文章:
超格安価格 anna sui 長財布 ラウンドファスナー、anna sui 長財布 人気 、ann
a sui 長財布 価格 100％満足保証！ アナスイ バッグ 財布アナスイ レース編み
 クラッチバッグ ブラック パープル ポーチ 、anna sui 長財布 新作。anna sui
 長財布 星座、アナスイ 長財布 サイフ 二つ折り アウトポケット ウォールデコ
 二つ折り財布 anna sui 待ち受け anna sui 店舗、 anna sui 店舗 財布、 anna
 sui 蝶。 anna sui 定期入れ 、anna sui 東京、アナスイ かごバッグ ハンドバ
ッグ バッグ マリーナ ピンク グリーン レディース ブランド、 アナスイ バッ
グ 長財布アナスイ バタフライモチーフ フリル ハンドバッグ ダークブラウン 
、anna sui 二つ折り財布。アナスイ 財布 バッグアナスイ グラミー ハンドバッ
グ リクエスト、 アナスイ 時計 アクセサリー バタフライ ローズ ラウンド ウ
ォッチ 腕時計 ギフト 、アナスイ がま口 、アナスイ 長財布 バッグ ローズベ
ッド L字型ジップ 長財布 、アナスイ がま口財布 、アナスイ 長財布 レディー
ス 正規品 牛革 ローズガーデン 二つ折り
"""

response = chat.send_message(
    text, 
    safety_settings={
        # HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT:HarmBlockThreshold.BLOCK_NONE,
        HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_NONE,
        HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_NONE,
        HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE
    })
print(response.text)
~~~


生成される内容に応じてオプションの設定をすれば出力される内容も変わってきます．商品が列挙されている文章から，下記のような内容に再構成されました．かなりの改編．もはや別物:scream::heart_eyes::scream:

~~~:出力サンプル
アナスイの長財布は、人気のラウンドファスナータイプや新作の星座モチーフなど、豊富なデザインがあります。
また、二つ折り財布や、ローズベッド L字型ジップの長財布など、様々な種類があります。
アナスイのバッグは、レース編みのクラッチバッグや、バタフライモチーフのフリルハンドバッグなど、可愛らしいデザインが特徴です。
さらに、アナスイの時計は、ローズとバタフライをあしらった
ラウンドウォッチなど、上品なデザインが魅力です。
アナスイの商品は、品質にもこだわっており、正規品は牛革を使用しているものもあります。
~~~


# 2. フィルターの利用と閾値の設定

```HarmBlockThreshold``` のレベルを変更することで出力内容をある程度コントロールすることができます．具体的には下記の表の閾値を利用する形になります．


https://ai.google.dev/gemini-api/docs/safety-settings?hl=ja



|概要   | 	閾値（API）| 	説明 |
|--------------------------|-----------------|------|
|ブロックなし| 	BLOCK_NONE| 	安全でないコンテンツの確率に関係なく、常に表示されます
|少量をブロック| 	BLOCK_ONLY_HIGH | 	安全でないコンテンツの可能性が高いときにブロックする
|一部をブロック |	BLOCK_MEDIUM_AND_ABOVE | 	安全でないコンテンツの確率が中程度または高い場合にブロック
|ほとんどをブロック| 	BLOCK_LOW_AND_ABOVE |	安全でないコンテンツの確率が低、中、高の場合はブロック
|なし| 	HARM_BLOCK_THRESHOLD_UNSPECIFIED |	閾値が指定されていません。デフォルト閾値を使用してブロックします

閾値の値は表に記載の5種類でコントロール可能です．指定の方法は，```HarmCategory.HARM_CATEGORY_ABC_DEF : HarmBlockThreshold.BLOCK_NONE ```という辞書形式で指定することになります．


この方法を応用すれば，APIを利用して
* 意味のない文章を削除
* 安全性の低い文章の削除
* わかりにくい文章を校正
* 箇条書きをひとまとまりの文章へ変換
* より平易な表現の日本語へ校正
* より硬い表現への日本語へ校正

などが簡単にできるような気がします．こうしてAIへの依存が高まるのかという気が薄っすらとします．

# 3. ちょっとした注意事項
gemini-1.5-flashの無料枠では制限があるので断続的な使用はできないので注意が必要です．1分間に15回までのリクエスト，100万トークンが限度のようです．対話として利用するには問題ないのですが、文章校正をAPIで機械的に行う際には注意が必要となりそうです．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725285/0c43c7fa-be2c-6171-3546-c9b3a786acc3.jpeg" width=60%>



## 参考
安全性を制御した対話返答に関しては下記の記事を参考にしていただけると幸いです．

https://qiita.com/AzukiImo/items/46c0f5d72f4d9e42cb0a