Upgrade to Pro — share decks privately, control downloads, hide ads and more …

チャット履歴と質問を組み合わせLLMの回答精度を高めるLangChain Conversational Retrieval QA

チャット履歴と質問を組み合わせLLMの回答精度を高めるLangChain Conversational Retrieval QA

機械学習の社会実装勉強会第30回 (https://machine-learning-workshop.connpass.com/event/305446/) の発表資料です。

More Decks by 西岡 賢一郎 (Kenichiro Nishioka)

Other Decks in Technology

Transcript

  1. 自己紹介 • 名前: 西岡 賢一郎 ◦ Twitter: @ken_nishi ◦ note:

    西岡賢一郎@研究者から経営者へ (https://note.com/kenichiro) ◦ YouTube: 【経営xデータサイエンスx開発】西岡 賢一郎のチャンネル (https://www.youtube.com/channel/UCpiskjqLv1AJg64jFCQIyBg) • 経歴 ◦ 東京大学で位置予測アルゴリズムを研究し博士 (学術) を取得 ◦ 東京大学の博士課程在学中にデータサイエンスをもとにしたサービスを提供する株式会社ト ライディアを設立 ◦ トライディアを別のIT会社に売却し、CTOとして3年半務め、2021年10月末にCTOを退職 ◦ CDPのスタートアップ (Sr. PdM)・株式会社データインフォームド (CEO)・株式会社ディース タッツ (CTO) ◦ 自社および他社のプロダクト開発チーム・データサイエンスチームの立ち上げ経験
  2. RAG(Retrieval Augmented Generation)のアーキテクチャ • 質問に関連した外部リソースをLLMに連携し、LLMの回答の精度を高める手法 • 外部リソースのデータ検索のプロセス ◦ RAGでは、入力されたプロンプトに基づいてデータを検索し、その結果をLLMに組み込んで回答を生 成

    ◦ 検索サーバの設置が必要。 • 検索方式の多様性 ◦ RAGでは、キーワード検索とセマンティック検索(ベクターサーチ)の両方が利用される。 ◦ セマンティック検索では、入力されたプロンプトをベクトルに変換し、関連するデータを検索。今回 はこちらを利用。 • 文章の分割とサマリ ◦ LLMの入力制限に対応するため、データは適切に分割され、必要に応じてサマリされる。 ◦ これにより、ベクトル内の情報が適切に反映されるように管理される。 • Vector Databaseの役割 ◦ RAGのセマンティック検索には、Vector Databaseが重要。これにより、プロンプトに関連するデー タを効率的に検索が可能になる。
  3. Vector Databaseとは • Vector Databaseは、ベクトル埋め込みを効率的に保存・管理する特殊なデータ ベース。 • AIアプリケーション、特に大規模言語モデル(LLM)にとって、長期記憶や高速検 索・クエリ能力を提供。 •

    ベクトル (テキスト) 埋め込み(Vector Embedding) ◦ ベクトル埋め込みは、オブジェクトが数値のリストに変換され、非構造化データを検索可能にする。 ◦ 機械学習アルゴリズムを使用して、複雑なデータを低次元のベクトル空間に表現。 • 最近傍探索(Nearest Neighbour Search) ◦ ベクトル間の距離は類似性を表し、最も類似したデータを探す「最近傍探索」が重要な概念。 ◦ 最近傍を迅速に見つける能力が、Vector Databaseの価値となる。 • Vector Databaseの必要性 ◦ 伝統的なデータベースにベクター拡張を追加することも可能だが、、特化型Vector Databaseが必要 という議論もある。
  4. 単純なRAGでうまくいかない例 質問と近い文書を検索し、プロンプトに組み込むだけではうまくいかない場合も多くある。 • 抽象的な質問と具体的な回答 ◦ 質問: 幸せとは何ですか? ◦ 抽出される文書: 幸福の心理学:幸せを感じるための要因と方法

    ◦ 幸福に関する心理学的な視点を提供するかもしれないが、質問の抽象的な性質に直接的な答えを与えるものではない • 因果関係の質問と統計的な回答 ◦ 質問: なぜ日本の人口は減少しているのですか? ◦ 抽出される文書: 日本の人口動態:出生率と死亡率の統計データ ◦ 日本の人口動態に関する統計情報を提供するかもしれないが、人口減少の社会的、経済的な原因については詳しく説明していない可能性がある • 比喩的な質問と文字通りの回答 ◦ 質問: 心が重いとはどういう感じですか? ◦ 抽出される文書: うつ病とその症状:心理的な重圧感の理解 ◦ うつ病や関連する心理的な症状について説明しているかもしれないが、比喩的な「心が重い」という表現の感覚的な側面には触れていないかもしれない • 広範な質問と特定の回答 ◦ 質問: 科学とは何ですか? ◦ 抽出される文書: 現代科学の基礎:科学的方法とその歴史 ◦ 科学の基本的な原則や歴史について説明しているかもしれないが、質問の広範な性質に対して特定の側面のみを照らし出しいる 質問からLLMに仮の答えを作らせて、その答えから文書を検索するHypothetical Document Embeddings (HyDE) という手法もある。 そもそもLLMがうまく回答できる良い質問を作ること自体が難しい
  5. フォローアップクエスチョンの重要性 • そもそも、質問が常に完全な情報を提供するわけではない。 • 会話の中で出てくるフォローアップクエスチョンは、より深い理解と具体的な回答を導く 鍵となる。 • フォローアップクエスチョンが必要となる例 ◦ 初期質問とAIの回答

    ▪ ユーザーの質問: 「気候変動は経済にどのような影響を与えるか?」 ▪ AIの回答: 「気候変動は、農業、エネルギー、保険業界など多くの経済セクターに影響を与えます。特 に、気候変動による極端な気象は農作物の生産に影響を及ぼし、エネルギー需要の変動を引き起こす可 能性があります。」 ◦ ユーザーのフォローアップ質問 ▪ フォローアップ質問: 「特に再生可能エネルギーの市場における気候変動の影響について詳しく教えて ください。」 ▪ 目的: AIの一般的な回答から、ユーザーは特定の関心領域(再生可能エネルギー市場)に焦点を絞る。 • RAGシステム内で、過去の会話を考慮し、フォローアップクエスチョンに対応することが 重要
  6. 会話を考慮する vs 会話を考慮しない 会話を考慮したAIへの質問例 • ユーザー: こんばんは、今夜のディナーに何かおすすめのレシピは ありますか? • サービス:

    もちろんです。お好みの料理の種類はありますか?例え ば、和食、洋食、中華など。 • ユーザー: 和食がいいですね。 • サービス: [データベース検索: 和食レシピ] では、「鮭の味噌焼 き」と「きのこの和風パスタ」はいかがでしょうか? • ユーザー: 鮭の味噌焼きに興味があります。どのように作るんです か? • サービス: [データベース検索: 鮭の味噌焼きレシピ] 鮭の切り身に 味噌ベースのタレを塗り、オーブンで焼くだけです。具体的なレシ ピをお送りしますね。 • ユーザー: ありがとうございます。それに合うサイドディッシュは ありますか? • サービス: [データベース検索: 和食サイドディッシュ] 「ほうれん 草の胡麻和え」や「だし巻き卵」はいかがでしょうか?どちらも和 食の主菜によく合います。 • ユーザー: ほうれん草の胡麻和えを作ってみます。レシピを教えて ください。 • サービス: [データベース検索: ほうれん草の胡麻和えレシピ] ほう れん草を茹でて、すりごまと醤油、砂糖で和えるだけです。詳しい 手順を送りますね。 会話を考慮しないAIへの質問例 • ユーザー: 「和食のレシピを教えてください。」 • AIは和食のレシピを提案しますが、これが初めての質 問であると解釈します。 • ユーザー: 「鮭の味噌焼きの作り方を教えてくださ い。」 • AIは「鮭の味噌焼き」のレシピを提供しますが、これ が新しい、独立した質問であると解釈します。 • ユーザー: 「和食に合うサイドディッシュは何です か?」 • AIは和食に合うサイドディッシュを提案しますが、こ れが新しい質問であると解釈します。 • ユーザー: 「ほうれん草の胡麻和えのレシピを教えて ください。」 • AIは「ほうれん草の胡麻和え」のレシピを提供します が、これも新しい、独立した質問であると解釈しま す。 LLMが会話を考慮できないと、独立した質問に毎回必要な情報を埋め込む必要がある
  7. デモ • デモの内容 ◦ RetrievalQAの復習 ◦ Conversational Retrieval Chain ▪

    チャット履歴とフォローアップクエスチョンで新しい質問を生成 ▪ 質問生成などで使われるプロンプトを変更 ▪ おまけ: langchainのソースコード探索方法 • ソースコード ◦ https://github.com/knishioka/machine-learning-workshop/blob/main/langchain/ConversationalRetri evalChain.ipynb ◦ GitHub: knishioka/machine-learning-workshop > langchain > ConversationalRetrievalChain.ipynb