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

GPT-3のExamples/Extract contact informationを試してみた

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

GPT-3のExamples/Extract contact informationを試してみた

GPT-3のExamples/Extract contact informationを試してみた

2021/11/23

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

Extract contact information

debian:~$ python openai_examples_extract_contact_info.py
('このメールから連絡先を抽出して:\n\n田中さんへ,\n\nこの前言ってた東京都庁の住所は、これみたいですよ。\n\n〒163-8001 東京都新宿区西新宿2-8-1 電話:03-5321-1111[代表]\n\n取り急ぎ、ご連絡まで。\n\n佐藤\n\n名前と住所:\n',)
 
田中さんへ,
 
この前言ってた東京都庁の住所は、これみたいですよ。
 
〒163-8001 東京都新
debian:~$ python openai_examples_extract_contact_info.py
('このメールから連絡先を抽出して:\n\n田中さんへ,\n\nこの前言ってた東京都庁の住所は、これみたいですよ。\n\n〒163-8001 東京都新宿区西新宿2-8-1 電話:03-5321-1111[代表]\n\n取り急ぎ、ご連絡まで。\n\n佐藤\n\n名前と住所:\n',)
 
{
 "id": "cmpl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "object": "text_completion",
 "created": xxxxxxxx,
 "model": "davinci:2020-05-03",
 "choices": [
  {
   "text": " \n田中さんへ,\n\nこの前言ってた東京都庁の住所は、これみたいですよ。\n\n〒163-8001 東京都新",
   "index": 0,
   "logprobs": null,
   "finish_reason": "length"
  }
 ]
}
debian:~$

 文中に含まれる連絡先情報を抽出するExtract contact information

 英語の元サンプルでは、欠落していたようですが、宛先の名前も拾い、[都庁]なのか[住所]なのか、こうしたワードもヒットしてしまい文章も入っているものの、郵便番号も住所もバッチリ抽出してくれているようです。

 というか、行単位で抽出するようですね、そりゃそうか...。

 応答が、途切れていますが、[finish_reason]が[length]とあるのでスクリプト内の[max_tokens]値が許せば、全て抽出できていることでしょう。

 正しく抽出されたかを確認するためには、前半に住所と無縁の一文も入れるか、応答をもっと表示するようにすべきでしたね...。

debian:~$ cat openai_examples_extract_contact_info.py
import openai
import os
import json
 
openai.api_key = os.getenv("OPENAI_API_KEY")
#prompt="Extract the mailing address from this email:\n\nDear Kelly,\n\nIt was great to talk to you at the seminar. I thought Jane's talk was quite good.\n\nThank you for the book. Here's my address 2111 Ash Lane, Crestview CA 92002\n\nBest,\n\nMaya\n\nName and address:\n",
prompt="このメールから連絡先を抽出して:\n\n田中さんへ,\n\nこの前言ってた東京都庁の住所は、これみたいですよ。\n\n〒163-8001 東京都新宿区西新宿2-8-1 電話:03-5321-1111[代表]\n\n取り急ぎ、ご連絡まで。\n\n佐藤\n\n名前と住所:\n"
 
response = openai.Completion.create(
 engine="davinci-instruct-beta",
 prompt=prompt,
 temperature=0,
 max_tokens=64,
 top_p=1.0,
 frequency_penalty=0.0,
 presence_penalty=0.0
)
#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:~$

 ソースはこんな感じ、環境変数OPENAI_API_KEYに自分のAPIキーが入っている前提です。

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

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

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

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

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

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

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

ホーム前へ次へ