Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
チャット履歴と質問を組み合わせLLMの回答精度を高めるLangChain Conversati...
Search
西岡 賢一郎 (Kenichiro Nishioka)
December 29, 2023
Technology
0
1k
チャット履歴と質問を組み合わせLLMの回答精度を高めるLangChain Conversational Retrieval QA
機械学習の社会実装勉強会第30回 (
https://machine-learning-workshop.connpass.com/event/305446/
) の発表資料です。
西岡 賢一郎 (Kenichiro Nishioka)
December 29, 2023
Tweet
Share
More Decks by 西岡 賢一郎 (Kenichiro Nishioka)
See All by 西岡 賢一郎 (Kenichiro Nishioka)
LangGraph Templatesによる効率的なワークフロー構築
knishioka
0
91
AIエージェントの開発に特化した統合開発環境 LangGraph Studio
knishioka
0
130
LangGraphを用いたAIアプリケーションにおけるメモリ永続化の実践
knishioka
1
350
Text-to-SQLをLangSmithで評価
knishioka
0
190
効果的なLLM評価法 LangSmithの技術と実践
knishioka
1
350
LangGraphのノード・エッジ・ルーティングを深堀り
knishioka
1
520
LangGraphでマルチエージェントワークフローを構築
knishioka
0
380
LLMアプリケーションで使用するVector Databaseの比較
knishioka
0
2.4k
LLMアプリケーションの デバッグ・テスト・評価・監視を楽にするLangSmith
knishioka
0
310
Other Decks in Technology
See All in Technology
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
120
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
130
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.3k
20241220_S3 tablesの使い方を検証してみた
handy
4
460
5分でわかるDuckDB
chanyou0311
10
3.2k
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
530
フロントエンド設計にモブ設計を導入してみた / 20241212_cloudsign_TechFrontMeetup
bengo4com
0
1.9k
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
540
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
130
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
530
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
260
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Adopting Sorbet at Scale
ufuk
73
9.1k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Fireside Chat
paigeccino
34
3.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
Transcript
チャット履歴と質問を組み合わせLLMの回答精度を高める LangChain Conversational Retrieval QA 2023/12/30 第30回勉強会
自己紹介 • 名前: 西岡 賢一郎 ◦ 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) ◦ 自社および他社のプロダクト開発チーム・データサイエンスチームの立ち上げ経験
本日のお話 • RAG (Retrieval Augmented Generation) • チャット履歴を考慮したRAG • デモ
RAG (Retrieval Augmented Generation)
RAG(Retrieval Augmented Generation)のアーキテクチャ • 質問に関連した外部リソースをLLMに連携し、LLMの回答の精度を高める手法 • 外部リソースのデータ検索のプロセス ◦ RAGでは、入力されたプロンプトに基づいてデータを検索し、その結果をLLMに組み込んで回答を生 成
◦ 検索サーバの設置が必要。 • 検索方式の多様性 ◦ RAGでは、キーワード検索とセマンティック検索(ベクターサーチ)の両方が利用される。 ◦ セマンティック検索では、入力されたプロンプトをベクトルに変換し、関連するデータを検索。今回 はこちらを利用。 • 文章の分割とサマリ ◦ LLMの入力制限に対応するため、データは適切に分割され、必要に応じてサマリされる。 ◦ これにより、ベクトル内の情報が適切に反映されるように管理される。 • Vector Databaseの役割 ◦ RAGのセマンティック検索には、Vector Databaseが重要。これにより、プロンプトに関連するデー タを効率的に検索が可能になる。
Vector Databaseとは • Vector Databaseは、ベクトル埋め込みを効率的に保存・管理する特殊なデータ ベース。 • AIアプリケーション、特に大規模言語モデル(LLM)にとって、長期記憶や高速検 索・クエリ能力を提供。 •
ベクトル (テキスト) 埋め込み(Vector Embedding) ◦ ベクトル埋め込みは、オブジェクトが数値のリストに変換され、非構造化データを検索可能にする。 ◦ 機械学習アルゴリズムを使用して、複雑なデータを低次元のベクトル空間に表現。 • 最近傍探索(Nearest Neighbour Search) ◦ ベクトル間の距離は類似性を表し、最も類似したデータを探す「最近傍探索」が重要な概念。 ◦ 最近傍を迅速に見つける能力が、Vector Databaseの価値となる。 • Vector Databaseの必要性 ◦ 伝統的なデータベースにベクター拡張を追加することも可能だが、、特化型Vector Databaseが必要 という議論もある。
RAGのアーキテクチャ: インデックス作成 • RAGを実現するためには、手元にある文書をベクトル化して、Vector Databaseに保存する。 • 「文書を読み込む」→ 「文書を分割する」→「分割された文書をベクトル 化」→「ベクトル化された文書と文書情報をVectore Storeに保存」
RAGのアーキテクチャ: LLMのプロンプト作成 • ユーザの質問に関連した文書をプロンプトに埋め込み、LLMに答えさせられ るようにする。 • 「ユーザの質問をベクトル化」→「Vectore Databaseで関連文書を抽出」→ 「抽出された文書をPromptに埋め込む」 •
質問と回答がベクトル空間上で近いことを前提としている
単純なRAGでうまくいかない例 質問と近い文書を検索し、プロンプトに組み込むだけではうまくいかない場合も多くある。 • 抽象的な質問と具体的な回答 ◦ 質問: 幸せとは何ですか? ◦ 抽出される文書: 幸福の心理学:幸せを感じるための要因と方法
◦ 幸福に関する心理学的な視点を提供するかもしれないが、質問の抽象的な性質に直接的な答えを与えるものではない • 因果関係の質問と統計的な回答 ◦ 質問: なぜ日本の人口は減少しているのですか? ◦ 抽出される文書: 日本の人口動態:出生率と死亡率の統計データ ◦ 日本の人口動態に関する統計情報を提供するかもしれないが、人口減少の社会的、経済的な原因については詳しく説明していない可能性がある • 比喩的な質問と文字通りの回答 ◦ 質問: 心が重いとはどういう感じですか? ◦ 抽出される文書: うつ病とその症状:心理的な重圧感の理解 ◦ うつ病や関連する心理的な症状について説明しているかもしれないが、比喩的な「心が重い」という表現の感覚的な側面には触れていないかもしれない • 広範な質問と特定の回答 ◦ 質問: 科学とは何ですか? ◦ 抽出される文書: 現代科学の基礎:科学的方法とその歴史 ◦ 科学の基本的な原則や歴史について説明しているかもしれないが、質問の広範な性質に対して特定の側面のみを照らし出しいる 質問からLLMに仮の答えを作らせて、その答えから文書を検索するHypothetical Document Embeddings (HyDE) という手法もある。 そもそもLLMがうまく回答できる良い質問を作ること自体が難しい
チャット履歴を考慮したRAG
フォローアップクエスチョンの重要性 • そもそも、質問が常に完全な情報を提供するわけではない。 • 会話の中で出てくるフォローアップクエスチョンは、より深い理解と具体的な回答を導く 鍵となる。 • フォローアップクエスチョンが必要となる例 ◦ 初期質問とAIの回答
▪ ユーザーの質問: 「気候変動は経済にどのような影響を与えるか?」 ▪ AIの回答: 「気候変動は、農業、エネルギー、保険業界など多くの経済セクターに影響を与えます。特 に、気候変動による極端な気象は農作物の生産に影響を及ぼし、エネルギー需要の変動を引き起こす可 能性があります。」 ◦ ユーザーのフォローアップ質問 ▪ フォローアップ質問: 「特に再生可能エネルギーの市場における気候変動の影響について詳しく教えて ください。」 ▪ 目的: AIの一般的な回答から、ユーザーは特定の関心領域(再生可能エネルギー市場)に焦点を絞る。 • RAGシステム内で、過去の会話を考慮し、フォローアップクエスチョンに対応することが 重要
会話を考慮する vs 会話を考慮しない 会話を考慮したAIへの質問例 • ユーザー: こんばんは、今夜のディナーに何かおすすめのレシピは ありますか? • サービス:
もちろんです。お好みの料理の種類はありますか?例え ば、和食、洋食、中華など。 • ユーザー: 和食がいいですね。 • サービス: [データベース検索: 和食レシピ] では、「鮭の味噌焼 き」と「きのこの和風パスタ」はいかがでしょうか? • ユーザー: 鮭の味噌焼きに興味があります。どのように作るんです か? • サービス: [データベース検索: 鮭の味噌焼きレシピ] 鮭の切り身に 味噌ベースのタレを塗り、オーブンで焼くだけです。具体的なレシ ピをお送りしますね。 • ユーザー: ありがとうございます。それに合うサイドディッシュは ありますか? • サービス: [データベース検索: 和食サイドディッシュ] 「ほうれん 草の胡麻和え」や「だし巻き卵」はいかがでしょうか?どちらも和 食の主菜によく合います。 • ユーザー: ほうれん草の胡麻和えを作ってみます。レシピを教えて ください。 • サービス: [データベース検索: ほうれん草の胡麻和えレシピ] ほう れん草を茹でて、すりごまと醤油、砂糖で和えるだけです。詳しい 手順を送りますね。 会話を考慮しないAIへの質問例 • ユーザー: 「和食のレシピを教えてください。」 • AIは和食のレシピを提案しますが、これが初めての質 問であると解釈します。 • ユーザー: 「鮭の味噌焼きの作り方を教えてくださ い。」 • AIは「鮭の味噌焼き」のレシピを提供しますが、これ が新しい、独立した質問であると解釈します。 • ユーザー: 「和食に合うサイドディッシュは何です か?」 • AIは和食に合うサイドディッシュを提案しますが、こ れが新しい質問であると解釈します。 • ユーザー: 「ほうれん草の胡麻和えのレシピを教えて ください。」 • AIは「ほうれん草の胡麻和え」のレシピを提供します が、これも新しい、独立した質問であると解釈しま す。 LLMが会話を考慮できないと、独立した質問に毎回必要な情報を埋め込む必要がある
会話を考慮したRAG • 過去の会話とフォローアップクエスチョンから、新しい質問をLLMに生成させ関連文書を 検索する • フォローアップクエスチョン単体で抜け落ちてしまう情報をチャット履歴から抽出が可能
デモ • デモの内容 ◦ 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