気の向くままに辿るIT/ICT
ソフトウェア

GPT-3のExamples/Advanced tweet classifierを試してみた

ホーム前へ次へ
フリーソフト・オープンソースを活用しよう。

GPT-3のExamples/Advanced tweet classifierを試してみた

GPT-3のExamples/Advanced tweet classifierを試してみた

2021/11/21

 OpenAIの自然言語処理モデルGPT-3のExamples/Advanced tweet classifierを試してみました。

Advanced tweet classifier

debian:~$ python openai_examples_adv-tweet-classifier.py
('これは、つぶやき感情分析です。\nTweet: "私はバットマンの映画が大好き!"\n感情: ポジティブ\n###\nツイート: "バッテリの切れた電話なんて嫌いだ"\n感情: ネガティブ\n###\nツイート: "今日一日は 👍"\n感情: ポジティブ\n###\nツイート: "これはその記事へのリンクさ。"\n感情: 普通\n###\nツイート文\n\n\n1. "私は新作のバットマン映画が好きだ!"\n2. "バッテリ切れの電話は嫌いだ"\n3. "今日一日は 👍"\n4. "これはその記事へのリンクさ"\n5. "このニューミュージックビデオは、私の心を揺さぶった"\n\n\nツイート感情評価:\n1: ポジティブ\n2: ネガティブ\n3: ポジティブ\n4: 普通\n5: ポジティブ\n\n\n###\nツイート文\n\n\n1. "僕は宿題には耐えられない"\n2. "これは最悪、飽きた 😠"\n3. "私ハロウィン待っていられない!!!"\n4. "私の猫はかわいらしい ❤️❤️"\n5. "俺はチョコレートが嫌い"\n\n\nツイート感情評価:\n1.',)
 
  ネガティブ
2. ネガティブ
3. ポジティブ
4. ポジティブ
5. ネガティブ
debian:~$ python openai_examples_adv-tweet-classifier.py
('これは、つぶやき感情分析です。\nTweet: "私はバットマンの映画が大好き!"\n感情: ポジティブ\n###\nツイート: "バッテリの切れた電話なんて嫌いだ"\n感情: ネガティブ\n###\nツイート: "今日一日は 👍"\n感情: ポジティブ\n###\nツイート: "これはその記事へのリンクさ。"\n感情: 普通\n###\nツイート文\n\n\n1. "私は新作のバットマン映画が好きだ!"\n2. "バッテリ切れの電話は嫌いだ"\n3. "今日一日は 👍"\n4. "これはその記事へのリンクさ"\n5. "このニューミュージックビデオは、私の心を揺さぶった"\n\n\nツイート感情評価:\n1: ポジティブ\n2: ネガティブ\n3: ポジティブ\n4: 普通\n5: ポジティブ\n\n\n###\nツイート文\n\n\n1. "僕は宿題には耐えられない"\n2. "これは最悪、飽きた 😠"\n3. "私ハロウィン待っていられない!!!"\n4. "私の猫はかわいらしい ❤️❤️"\n5. "俺はチョコレートが嫌い"\n\n\nツイート感情評価:\n1.',)
 
{
 "id": "cmpl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "object": "text_completion",
 "created": xxxxxxxx,
 "model": "davinci:2020-05-03",
 "choices": [
  {
   "text": " ネガティブ\n2. ネガティブ\n3. ポジティブ\n4. ポジティブ\n5. ネガティブ\n\n\n",
   "index": 0,
   "logprobs": null,
   "finish_reason": "stop"
  }
 ]
}
debian:~$

 いくつかの例文と感情のセットを交えて新たな一文を提供すると感情分析する進化したツイート分類器Advanced tweet classifier

 Tweet classifierに比べて進化ってことみたいです。

 おお、好き嫌いならですが、他の表現についても見事に感情分析できてますね。

debian:~$ cat openai_examples_adv-tweet-classifier.py
import openai
import json
 
openai.api_key = "API-KEY"
prompt="これは、つぶやき感情分析です。\nTweet: \"私はバットマンの映画が大好き!\"\n感情: ポジティブ\n###\nツイート: \"バッテリの切れた電話なんて嫌いだ\"\n感情: ネガティブ\n###\nツイート: \"今日一日は 👍\"\n感情: ポジティブ\n###\nツイート: \"これはその記事へのリンクさ。\"\n感情: 普通\n###\nツイート文\n\n\n1. \"私は新作のバットマン映画が好きだ!\"\n2. \"バッテリ切れの電話は嫌いだ\"\n3. \"今日一日は 👍\"\n4. \"これはその記事へのリンクさ\"\n5. \"このニューミュージックビデオは、私の心を揺さぶった\"\n\n\nツイート感情評価:\n1: ポジティブ\n2: ネガティブ\n3: ポジティブ\n4: 普通\n5: ポジティブ\n\n\n###\nツイート文\n\n\n1. \"僕は宿題には耐えられない\"\n2. \"これは最悪、飽きた 😠\"\n3. \"私ハロウィン待っていられない!!!\"\n4. \"私の猫はかわいらしい ❤️❤️\"\n5. \"俺はチョコレートが嫌い\"\n\n\nツイート感情評価:\n1."
 
response = openai.Completion.create(
 engine="davinci",
 prompt=prompt,
 temperature=0.3,
 max_tokens=60,
 top_p=1.0,
 frequency_penalty=0.0,
 presence_penalty=0.0,
 stop=["###"]
)
#print(prompt)
print(str(prompt))
print(" ")
print(response['choices'][0]['text'])
#print(str(response['choices'][0]['text']))
#print(json.dumps(response, ensure_ascii=False, indent=2))
debian:~$

 ソースはこんな感じ、そのままでは想定通り機能しないので一部オリジナルから変更しています。

 まず、os.get()が効かず、API-KEYを直接変数に格納すればいけるのでimport osもろとも削除。

 print()、もしくは、json出力しないと実行しても何も表示されないので何れかを追加する必要があり、後者用にimport jsonを追加。

 が、応答内容によっては、何れか一方では表示できないことがあり、他方を使用せざるを得ないこともあります。

 表示できないのが、print文なら、response配列を文字列にキャストすれば、たいていは凌げますが。

 応答文だけだとチャット状態にならず、問いかけ文も表示したいところ。

 が、サンプル通りだとprintやjson形式で出力しようにも問いかけ用の変数promptがスコープの範囲になく、スコープに入るようPythonの場合だとインデント階層を相応に上げたところで変数が登場(変数宣言)するようにする必要があります。

 また、promptの中身によっては、文字列にキャストしないとエラーとなるケースもありました。

ホーム前へ次へ