LoginSignup
0
0

言語モデルを使用したデータとのチャットの仕方

Posted at

今回は手元のデータとチャットをして内容を調べるという便利な使い方を説明します。

この手の手法については既に説明している方が大勢いますが、情報が古くなっているものも見られるので自分自身の知識を定着させるため、備忘録代わりに手元のデータとチャットをする方法をメモ書きします。

言語モデルを用いることで(現状では有力な選択肢がOpenAIのAPI位しかないものの)様々なサービスと接続することにより、手元のデータとチャットをすることが出来るようになります。

独自のデータを持ってきて、そのデータの内容をチャットをすることが出来るというのは、何となく分かっているもののその具体的な仕組みまでは分からない。またはChatGPT-Pluginを経由して利用しているので、仕組みは全く分からないという方は、具体的にどのような事を行っているか理解する助けになればと思います。

今回は、DeepLearning.AI が公開している無償のショートコースで学習した成果を踏まえて、比較的新しい概念であるリトリーブ(検索という訳語でよいのだか、Searchとはニュアンスが異なる)について説明します。

まず、まとまったデータが手元にありそのデータとチャット形式でないようについて調べたい場合のアプローチです。

まとまった情報の中からユーザーの質問に関連したデータをフィルタリングし、関連性の高い上位n個のデータを言語モデルに提示して以下のようなプロンプトを提示します。

以下の文脈を利用して、最後の質問に答えてください。答えがわからない場合は、答えを作ろうとせず、わからないと答えましょう。
{コンテキスト}

質問 {質問文}
役に立つ回答

実際の仕組みについての説明を続けます。

データとチャットするにあたって必要になるのが比較的新しい(まだ頻繁なバージョンアップが行われています)LangChainというモジュールです。

このモジュールは、コンポーネント化された部品を組み立てたり、鎖のように繋いでいくことで様々な機能を実現するというものです。

今回はLangChainで利用出来る、リトリーバルという方法で、上位k個のデータからユーザーからの質問の答えに該当する部分を探す処理を言語モデルに行わせます。

上記の講義で用いられていた図のうち、簡単な枠だけを利用させていただきました。恐らく問題ないとは思いますが、問題があるという方は教えてください。

リトリーブの流れ.jpg

まず、最初の段階でドキュメントの読み込みを行います。
このドキュメントの読み込みにはLangChainは、CSV、Discord、Dropbox、Email、Evernote、git、html等など、合計で80種類以上のサービスからデータを読み込み、チャット形式で対話可能な Document オブジェクトの形にすることが出来ます。実際には、言語モデルのコンテキストの制限から、トークン数を限定した上でdocumentオブジェクトのリストを作成する形になります。

元になるデータは構造化されたデータだけでなく、非構造化データであっても(内容に矛盾がない、質問に答えている箇所がある等の条件はありますが)対応出来ます(いくつかのケースでは失敗しますが、工夫を凝らす事で対応出来ます)

一番手軽な方法としてはWebサイトを丸ごとクローリングして、そのデータとチャットをするというものがあります。
ただ、Webサイトのクローリングはあくまで相手先のサーバーに迷惑を掛けないようリスペクトフルなクローリングを心がけるほか、利用規約などに反しないように注意しましょう。

今回は無難なところで税務署のタックスアンサーのサイトをクローリングして、そのクローリングしたデータとチャットする方法を解説します。

Google Colabのノートブックへのリンクです。
Open In Colab

ドキュメントの読み込み

税務署のタックスアンサーのサイトをクローリングするにあたっては、
スタートのページを、
https://www.nta.go.jp/taxes/shiraberu/taxanswer/index2.htm」
として、クローリングドメインの範囲を
https://www.nta.go.jp/taxes/shiraberu/taxanswer/」
とするのがよいでしょう。

クローリングしたデータは一旦、LangChain固有の「Documentオブジェクトのリスト」という形にします。
Documentオブジェクトというのは、ドキュメントの本文に加えて、メタデータを保存できるLangChainの標準的な文章の形式です。

まずWebサイトを非構造化データとして扱うという前提でデータを袖手します。
その際必要になるのが、**unstructured**というモジュールになります。
また当然ですがlangchainやopenai等のモジュールも必要になります。

税務署のタックスアンサーの範囲にあるURLのリストを取得する必要がありますが、その手順はここでは触れません(予めURLの一覧を取得しておいて下さい)。

以下は、実際にタックスアンドアンサーのサイトからの質問応答を行うGoogle Colabのノートブックになります。
別途pathに指定した箇所にURLs.txtという、タックスアンドアンサーのサイトのURLを記録したテキストファイルが必要になりますが、URLリストを取得するのが面倒な方に、以下のリンクからダウンロードできるように共有します。
タックスアンドアンサーのサイトのURLテキストファイル

上記のURLテキストファイルを、pathで指定した(デフォルトでは、"/content/drive/MyDrive/TaxAndAnswer/"以下)に配置してから、documentオブジェクトのリスト生成の実行を行う事で、URLからdocumentオブジェクトのリストを生成できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0