ChatGPTのコンテキストを英語要約の文書ベクトルで作る
先日こちらの記事を書いたのですが、コンテキストのウィンドウが4096トークンしかない問題があり、あまり良い結果が得られませんでした。
そこで改善策として、次の点を実施してみました。
記事を要約することで、コンテキストに詰め込める情報量を増やす。
英語に翻訳する。日本語に比べるとトークン数が半減する。また、英語の方が精度が上がる。
ドキュメントを要約&翻訳する
今回もライブドアニュースを使用します。
openai.ChatCompletion.create()を使用して要約します。出力は英語になります。
プロンプトは以下のようになります。要約後のトークンが4096になるようにします。
ベクトル化する
今回は、openai.Embedding.create()を使用して要約した英語文章をベクトル化します。日本語の場合は、GiNZAを使用しましたが英語の場合はOpenAI APIで良いかと思います。コストが気になるのであれば、HuggingfaceのSentenceTransformerなどを使用すると良いでしょう。
プロットしてみる
生成されたベクトルをUMAPでプロットして確認してみましょう。
いい感じに分類できているようです。これは期待ができます。
コンテキストをプロンプトに差し込む
最終ステップです。ベクトル検索エンジンから取得したドキュメントをプロンプトに差し込みます。for url, body in docs: のところです。
また、なるべくrole: systemで差し込んだ情報をもとにして答えるように指示します。
さて、実行してみよう
2011年に発売された美容器具の取得
パナソニックのヘアーアイロン、電動歯ブラシ、フェイススチーマー、マッサージ機、ヘッドスパ、日立のまつ毛カーラー、鼻毛切りなどが抽出されました。
篠田麻里子に関連したドキュメントの要約
前田敦子の容姿をいじったこと、第4回AKB総選挙でのスピーチ、ジャンケントーナメントのことが抽出されました。
CIAエージェントが登場する映画のリスト
このように、OpenAIのgpt-3.5 turboモデルに存在しない情報を、ベクトル検索エンジンを使用することで情報を補完できることを紹介しました。ただし、使用できるサイズに制限がある(4095トークン)のと、トークン数で課金されるなどの制約があることに注意してください。また、プロンプトで差し込んだ情報はOpenAI API側に飛びますので機密情報を投げないようにしてください。
この記事が気に入ったらサポートをしてみませんか?