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

生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Sessi...

Yuji Arakawa
December 18, 2024

生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20

Oracle AI Jam Session #20 「生成AIをより賢く エンジニアのための RAG入門」でお話しした資料です。
プログラムコードは、こちらの GitHubリポジトリで公開しています。
https://github.com/kutsushitaneko/orajam20_rag
目次
1. なぜ RAG が必要なのか?
2. ベクトルデータベース
3. 基本的なRAG の仕組み
4. RAG の技術的課題と解決策
5. RAG の今後の展望

Yuji Arakawa

December 18, 2024
Tweet

Other Decks in Technology

Transcript

  1. Copyright © 2024, Oracle and/or its affiliates 2 荒川裕二 (Arakawa

    Yuji) Github, Discord, Qiita などのアバター 自作イラスト+ Stable Diffusion + ControleNet (reference-only) Grok:私のこれまで の投稿から私のイメー ジを作成してください Grokは、アバターも参考にするらしい 日本オラクル株式会社 クラウド事業統括 クラウド・エンジニアリグCOE統括 ソリューションズ・アーキテクト部 AI/機械学習を活用したソリューションを担当 妻と猫二匹の4人で、埼玉県在住 マクロス、まどマギ、冴えカノ、魔法科高校、リリカルなのは、 お隣の天使様、転天、推しの子、本好き、16bit、ロシデレ、連れカノ… ) 好きなアニメ プライベート 日常使いのAI(一部) Cursor Glasp Notion AI Perplexity Claude ChatGPT 自作チャットボット https://x.com/yuji_amanogawa https://qiita.com/yuji-arakawa Zoom/ Slack のアバター ChatGPT DALL-E3
  2. Copyright © 2024, Oracle and/or its affiliates 3 1. なぜ

    RAG が必要なのか? 2. ベクトルデータベース 3. 基本的なRAG の仕組み 4. RAG の技術的課題と解決策 5. RAG の今後の展望 Agenda
  3. 入力された文字列の次の単語(トークン)を予測するように公開情報で訓練された機械学習モデル 大規模言語モデル( Large Language Model :LLM ) とは? Copyright ©

    2024, Oracle and/or its affiliates 5 ステップ 入力テキスト 予測した次の単語(トークン) 生成されたテキスト 1 日本 で 日本で 2 日本で 一番 日本で一番 3 日本で一番 高い 日本で一番高い 4 日本で一番高い 山 日本で一番高い山 5 日本で一番高い山 富士山 日本で一番高い山富士山 6 日本で一番高い山富士山 では 日本で一番高い山富士山では 詳細は、OraJAMでお馴染みの園田さんの QIITA の記事(ChatGPTのコア技術「GPT」をざっくり理解する)をご参照ください。 https://qiita.com/ksonoda/items/b767cbd283e379303178
  4. トークン化の可視化 Copyright © 2024, Oracle and/or its affiliates 6 https://huggingface.co/spaces/Xenova/the-tokenizer-playground

    エンジニアが Bookmark しておくと良いサイト - Xenova/the-tokenizer-playground
  5. エンジニアが Bookmark しておくと良いサイト - xu-song/tokenizer-arena トークン化の可視化 Copyright © 2024, Oracle

    and/or its affiliates 7 https://huggingface.co/spaces/xu-song/tokenizer-arena ご参考:Cohere Command R/R+ トークナイザの日本語効率を調べてみた
  6. LLMが得意なこと Copyright © 2024, Oracle and/or its affiliates 8 得意なこと

    概要 テキスト生成 LLMは、与えられたプロンプトに基づいて一貫性のあるテキストを生成する能力があります。これには、記事の作成、 物語の執筆、製品説明の生成などがあります 翻訳 LLMは、多言語に対応しており、テキストを異なる言語間で翻訳することができます。特に、文脈に応じた適切な 翻訳を提供する能力に優れています 要約 長文の記事や文書を短く要約する能力もLLMの得意分野です。これにより、ユーザーは重要な情報を迅速に把 握することができます 質問応答 LLMは、質問に対して適切な回答を生成する能力があります。これには、FAQの自動応答やカスタマーサポートの チャットボットなどが考えられます 分類 テキストの内容を分析し、指定したカテゴリのいずれに該当するのか分類することができます。スパムフィルタリングや トピックモデリング、文書が所定の要件を満たしているかなどの判定といった応用があります 感情分析 テキストの感情を分析し、ポジティブ、ネガティブ、ニュートラルなどの感情を分類することができます。これにより、顧 客のフィードバックやソーシャルメディアの投稿の感情を理解することができます コード生成 LLMは、膨大なプログラミングコードを学習しており、自然言語の説明に基づいてコードを生成することも得意です。 これにより、プログラマーの作業効率を向上させることができます コード説明 LLMは、コードを自然言語で説明することも得意です。これによりドキュメントが整備されていないレガシーコードのメ ンテナンスを支援したり、初学者の学習効率を向上させることができます デバッグ支援 LLMは、プログラムコードの不具合やエラーの事例も大量に学習しており、コードとエラーメッセージを提示することで デバッグを支援することができます
  7. 9 ネタバレ注意 Copyright © 2024, Oracle and/or its affiliates 次のスライドには、「推しの子」に関するネタバ

    レが含まれます。コミック1巻を未読、あるい は、アニメ1期を未視聴でネタバレを望まれ ない場合は、1分程、目と耳をふさいでくださ い。
  8. LLMが不得意なこと Copyright © 2024, Oracle and/or its affiliates 12 公開データにある常識的なことはそれらしく答えられる

    ※ Cohere Chat(Command R+) により生成 ※LLM は、入力された文字列の次の単語(トークン)を予測するように公開情報で事前学習された機械学習モデル (正しいとは限らずハルシネーションかもしれない)
  9. LLMが不得意なこと Copyright © 2024, Oracle and/or its affiliates 13 公開データにある常識的なことはそれらしく答えられる

    勤め先の社内手続きのことはアドバイスしてくれない ※ Cohere Chat(Command R+) により生成 ※LLM は、入力された文字列の次の単語(トークン)を予測するように公開情報で事前学習された機械学習モデル (正しいとは限らずハルシネーションかもしれない)
  10. LLM が生成する回答について 14 アプリケーション LLM 海外出張の準備は? パスポートを用意して • ハルシネーション(幻覚)を起こす可能性がある •

    LLM が事前学習した情報にない質問には回答できない • LLM の事前学習以降の新しい情報は学習していないので回答できない Copyright © 2024, Oracle and/or its affiliates
  11. Retrieval-Augmented Generation : RAG(検索拡張生成)とは 16 アプリケーション LLM Copyright © 2024,

    Oracle and/or its affiliates RAG のない AI チャットボット RAG を使ったAI チャットボット アプリケーション LLM 海外出張の準備は? 社内規定集等のドキュメント 事前に登録 検索 検索により回答生成を拡張 データベース XXXで事前申請してください 社内の事前申請手続き 海外出張の準備は? パスポートを用意してください
  12. なぜ RAG が必要なのか? ー RAG の目的 Copyright © 2024, Oracle

    and/or its affiliates 17 • ハルシネーション(幻覚)を減らすことができる(ゼロにはで きない) • データベースを検索することで社内固有の知識に基づいて 回答できるようになる • データベースを検索することで up-to-date な情報に基づ いて回答できるようになる アプリケーション LLM 質問 (回答)生成 社内規定集 事前に登録 検索 検索により生成を拡張
  13. Copyright © 2024, Oracle and/or its affiliates 18 事前学習で得た知識と外部知識(検索結果等) が矛盾したとき

    矛盾した情報に LLM はどう反応する? Adaptive Chameleon or Stubborn Sloth: Revealing the Behavior of Large Language Models in Knowledge Conflicts Jian Xie, Kai Zhang, Jiangjie Chen, Renze Lou, Yu Su ( https://arxiv.org/abs/2305.13300 ) 外部知識(検索結果等)が優先される 外部知識(検索結果等)が互いに矛盾したとき 事前学習で得た知識と整合する 外部知識(検索結果等)が優先される
  14. Copyright © 2024, Oracle and/or its affiliates よくある アーキテクチャ図 RAG(Retrieval-Augmented

    Generation:検索拡張生成) のアーキテクチャ 20 アプリケーション ベクトルデータベース LLM ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 様々なデータソース 非構造化データ ナレッジベース 各種ドキュメント
  15. Copyright © 2024, Oracle and/or its affiliates ベクトルデータベース 21 ID

    テキストのチャンク 埋め込み (エンベディング、ベクトル) メタデータ 1 遠い昔、はるか彼方の銀河系で [1.0, 1.2, 0.8, 0.6, 0.4,…….0.2] エピソード4.pdf 2 時は内乱のさなか。凶悪な銀河帝国の [2.0, 0.3, 0.5, 0.3, 0.7,…….1.2] エピソード4,pdf 3 反乱軍にとって試練の時だった。デス・スターを [0.7, 1.5, 1.8, 0.2, 1.9,…….1.4] エピソード5.pdf 4 レイア姫は盗み出した設計図を手に [1.1, 0.2, 0.7, 2.3, 4.5,…….0.6] エピソード4,pdf 格納されているデータのイメージ 問い合わせのイメージ similarity_search_with_score(“戦争を描いた映画”, k=3) 問い合わせ結果のイメージ Score テキストのチャンク メタデータ 0.610 反乱軍にとって試練の時だった。デス・スターを エピソード5.pdf 0.642 時は内乱のさなか。凶悪な銀河帝国の エピソード4,pdf 0.812 遠い昔、はるか彼方の銀河系で エピソード4,pdf LangChain の VectorStore クラスを使った例 ChromaDB の例
  16. Copyright © 2024, Oracle and/or its affiliates ベクトルデータベース 22 ID

    テキストのチャンク 埋め込み (エンベディング、ベクトル) メタデータ 1 遠い昔、はるか彼方の銀河系で [1.0, 1.2, 0.8, 0.6, 0.4,…….0.2] エピソード4.pdf 2 時は内乱のさなか。凶悪な銀河帝国の [2.0, 0.3, 0.5, 0.3, 0.7,…….1.2] エピソード4,pdf 3 反乱軍にとって試練の時だった。デス・スターを [0.7, 1.5, 1.8, 0.2, 1.9,…….1.4] エピソード5.pdf 4 レイア姫は盗み出した設計図を手に [1.1, 0.2, 0.7, 2.3, 4.5,…….0.6] エピソード4,pdf 格納されているデータのイメージ 問い合わせのイメージ similarity_search_with_score(“戦争を描いた映画”, k=3) 問い合わせ結果のイメージ Score テキストのチャンク メタデータ 0.610 反乱軍にとって試練の時だった。デス・スターを エピソード5.pdf 0.642 時は内乱のさなか。凶悪な銀河帝国の エピソード4,pdf 0.812 遠い昔、はるか彼方の銀河系で エピソード4,pdf LangChain の VectorStore クラスを使った例 ChromaDB の例
  17. Copyright © 2024, Oracle and/or its affiliates 23 画像や文書などの特徴を数値ベクトルの形 で表現したものを特徴ベクトルと呼びます

    特徴ベクトルの中でも、特に深層学習の表 現学習で得られたものを埋め込みと呼びます 埋め込みのイメージ (エンベディング) 埋め込みを生成する機械学習モデルを埋め 込みモデルといいます。LLMの一種です。 ※四次元ベクトルを二次元へ射影したイメージ
  18. Copyright © 2024, Oracle and/or its affiliates 埋め込みの可視化 24 ※OCI

    Generative AI サービスのプレイグランドで可視化 データはこちら
  19. Copyright © 2024, Oracle and/or its affiliates 埋め込みの可視化 25 国・地方共通相談チャットボット

    Govbot(ガボット)に搭 載されている各分野のFAQデータ(全分野)の「問い」を WiZMap で次元削減(二次元へ射影)して可視化 「RAGOpsはじめの0.1歩:高次元ベクトルの可視化」 https://qiita.com/yuji-arakawa/items/32dffa62c75e695019ef この周辺に“103万円の壁 や106万円の壁”が集まっ ている WizMap
  20. Copyright © 2024, Oracle and/or its affiliates 埋め込みの可視化 26 国・地方共通相談チャットボット

    Govbot(ガ ボット)に搭載されている各分野のFAQデータ (全分野)の「問い」を UMAP で次元削減 (二次元へ射影)して可視化 「RAGOpsはじめの0.1歩:高次元ベクトルの可視化」 https://qiita.com/yuji-arakawa/items/32dffa62c75e695019ef
  21. Copyright © 2024, Oracle and/or its affiliates 埋め込みの可視化 27 国・地方共通相談チャット

    ボット Govbot(ガボット)に 搭載されている各分野のFAQ データ(全分野)の「問い」と 「回答」を連結して UMAP で 次元削減(二次元へ射 影)して可視化 赤は「壁」が入っているQAで、 青はその他 103万円、150万円、106万 円、130万円の壁に関する QAが集まっている
  22. Copyright © 2024, Oracle and/or its affiliates ベクトル検索のイメージ 28 似た事物は、似た特徴を持ち、この多次元の埋め込み

    空間(ベクトル空間)の中で近くに位置します 代表的な距離の指標 L2距離:ユークリッド距離とも呼ばれる。3次元空間のお ける直観的な距離に相当 似たものを見つけるには、埋め込み間の距離を計算して、 最も近くに位置する埋め込みを見つければよいこととなり ます コサイン距離:ベクトル間の角度に基づく距離(1 – コ サイン類似度) 内積(ドットプロダクト):ベクトルとベクトルの内積。角 度に加えて、ベクトルの大きさを反映した指標。大き さを1に正規化するとコサイン類似度と同等。
  23. Copyright © 2024, Oracle and/or its affiliates ベクトルデータベース 29 問い合わせ発行

    similarity_search_with_score(“戦争を描いた映画”, k=3) 埋め込みモデル (LLMの一種) “戦争を描いた映画” [0.8, 1.2, 1.7, 0.2, 1.8,…….1.1] ベクトル検索 ID テキストのチャンク 埋め込み (エンベディング、ベクトル) メタデータ 1 遠い昔、はるか彼方の銀河系で [1.0, 1.2, 0.8, 0.6, 0.4,…….0.2] エピソード4.pdf 2 時は内乱のさなか。凶悪な銀河帝国の [2.0, 0.3, 0.5, 0.3, 0.7,…….1.2] エピソード4,pdf 3 反乱軍にとって試練の時だった。デス・スターを [0.7, 1.5, 1.8, 0.2, 1.9,…….1.4] エピソード5.pdf 4 レイア姫は盗み出した設計図を手に [1.1, 0.2, 0.7, 2.3, 4.5,…….0.6] エピソード4,pdf の中から問い合わせ文“戦争を描いた映画”の埋め込み [0.8, 1.2, 1.7, 0.2, 1.8,…….1.1] に近い順に 3 件を見つけ出し、そのスコア(問い合わせ文との距離) とテキストチャンクを返す 問い合わせ結果 Score テキストのチャンク メタデータ 0.610 反乱軍にとって試練の時だった。デス・スターを エピソード5.pdf 0.642 時は内乱のさなか。凶悪な銀河帝国の エピソード4,pdf 0.812 遠い昔、はるか彼方の銀河系で エピソード4,pdf
  24. Copyright © 2024, Oracle and/or its affiliates 30 デモ ー

    ベクトルデータベース(ChromaDB) 類似性検索 Demo_Chromadb_Similarity_Search.ipynb https://github.com/kutsushitaneko/orajam20_rag ご紹介するコードはすべて GitHub で公開しております GitHub リポジトリにはドキュメントデータは含まれません。ご自身でダウンロード(次ページご参照)して、 ./data フォルダへ格納してください。
  25. Copyright © 2024, Oracle and/or its affiliates デモ 31 デモで使用しているドキュメントは、ウィキペディアの以下の記事を

    PDF 形式でダウンロードしたものを使用しています。 ① ② 1. ハリー・ポッター_(架空の人物) 2. ハーマイオニー・グレンジャー 3. フェイト・テスタロッサ 4. マギアレコード_魔法少女まどか☆マギカ外伝 5. ロン・ウィーズリー 6. 八神はやて 7. 巴マミ 8. 暁美ほむら 9. 美樹さやか 10. 高町なのは 11. 魔法少女まどか☆マギカ 12. 魔法少女リリカルなのは 13. 魔法少女リリカルなのはA's 14. 魔法少女リリカルなのはStrikerS 15. 魔法少女リリカルなのはViVid 16. 魔法少女リリカルなのは_The_MOVIE_1st 17. 魔法少女リリカルなのは _The_MOVIE_2nd_A's 18. 魔法科高校の劣等生 19. 鹿目まどか GitHub リポジトリにはこれらのデータは含まれません。ご自身でダウンロードして、 ./data フォルダへ格納してください。
  26. Copyright © 2024, Oracle and/or its affiliates デモ - ベクトルデータベース(ChromaDB)類似性検索

    32 from dotenv import load_dotenv, find_dotenv from langchain_openai import OpenAIEmbeddings import chromadb from langchain_chroma import Chroma # 環境変数 OPENAI_API_KEY に OpenAI API Key を設定(.env ファイルの OPENAI_API_KEY からロード) _ = load_dotenv(find_dotenv()) embeddings = OpenAIEmbeddings(model="text-embedding-3 -large") # 埋め込みモデルの準備 collection_name = "mycollection_2 0 0 " # 検索対象のChromadb コレクション名(事前に作成済み) top_k = 4 # 取得する検索結果の数の設定 # LangChain の Chromadb VectorStore のインスタンスを作成 vector_store = Chroma( client=chromadb.PersistentClient(path="./chroma_db"), collection_name=collection_name, embedding_function=embeddings, collection_metadata={"hnsw:space": "ip"} ) query="ハグリッドがホグワーツへの入学案内書を持ってきたのはいつですか?それはどのような日でしたか?" # クエリーの定義 results =vector_store.similarity_search_with_score(query, k=top_k) # 類似性検索の実行 print("検索結果:") for i, (doc, score) in enumerate(results, 1 ): print(f"¥n=== 結果 {i} ===") print(f"ソース: {doc.metadata['source']}") print(f"スコア: {score:.4 f}") print(f"内容: {doc.page_content}") ベクトル距離の 指標として内積 を使うように指示 上位4件を取得 スコア付きの類似性検索を実行 コード例 ベクトル距離の指標は一般にはコサイン距離が用いられ る。OpenAI/Cohere など多くの埋め込みモデルは埋 め込み(ベクトル)が正規化(大きさを1に調整済 み)されているため、内積とコサイン類似度(1 – コサ イン距離)は同値となる。このような場合は、計算量が 少ない内積を使うとよい。
  27. Copyright © 2024, Oracle and/or its affiliates デモ - ベクトルデータベース(ChromaDB)類似性検索

    33 $ python Demo_Chromadb_Similarity_Search.py 検索結果: === 結果 1 === ソース: data¥Wikipedia-ハリー・ポッター_(架空の人物).pdf スコア: 0 .4 1 5 4 内容: しかし、ダーズリー家は魔法に対して、かたくななまでに否定的な態度を取っており、ハリーは両親や自分が魔法使いであることを知らされないまま、伯⺟一家の冷遇と 虐待を受けながら育った。1 991 年7 ⽉3 1 日(ハリーの1 1 歳の誕生日)、ホグワーツ魔法魔術学校への入学案内書を手にやってきたルビウス‧ハグリッドから自身が魔法使いである ことを知らされる。そして9⽉1 日、ホグワーツ魔法魔術学校に入学する[注 4 ]。 === 結果 2 === ソース: data¥Wikipedia-ハリー・ポッター_(架空の人物).pdf スコア: 0 .4 93 3 内容: ホグワーツ魔法魔術学校グリフィンドール寮の男子生徒となる。孤児として⺟親の親類の伯⺟夫婦の家で不遇な暮らしをして育った。1 1 歳を迎える年のある日突然、ホグ ワーツから入学許 可証が届いたのをきっかけに、亡くなった両親が魔法使いであったこと、そして出生時に下された予言により、闇の魔法使いヴォルデモートを倒す宿命を自分 が負っていると告げられる。 === 結果 3 === ソース: data¥Wikipedia-ロン・ウィーズリー.pdf スコア: 0 .5 3 1 7 内容: その後、ホグワーツ魔法魔術学校に入学し、ハリー同様グリフィンドール寮生となる。種族性別家族1 992 年夏、ハリーを自宅に迎えるため、⽗の所有するフォード‧アングリアを借りて、フレッド、 ジョージとともにダーズリー家を訪問。軟禁されていたハリーを救出する。 === 結果 4 === ソース: data¥Wikipedia-ロン・ウィーズリー.pdf スコア: 0 .5 5 0 7 内容: 軟禁されていたハリーを救出する。同年9⽉1 日にはドビーによりホグワーツ特急に乗⾞できなかったため、ふたたびフォード‧アングリアを借りてハリーとともにホグワーツへ向かうが、ホグワーツ到着 時に暴れ柳から攻撃を受け、杖が折れる。 実行結果
  28. 前処理①(チャンキング) 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    ベクトルデータベース 各種ドキュメント チャンキング(ベクトル化できる小さなチャンクに分割) [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] エンベディング (ベクトル化:類似性検索ができる埋め込みという数値表現へ変換) インデキシング(データベースへ登録) チャンキングが必要な理由 • 埋め込みモデル(embedding model)が埋め 込み(ベクトル)を生成する際の入力テキスト のサイズには上限があるため • LLMが受け入れられる入力データ(コンテキスト 長)には上限があるため
  29. 前処理②(エンベディング) 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    ベクトルデータベース 各種ドキュメント チャンキング(ベクトル化できる小さなチャンクに分割) [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] エンベディング (ベクトル化:類似性検索ができる埋め込みという数値 表現へ変換) インデキシング(データベースへ登録) エンベディング(ベクトル化)が必要な理由 • テキストサーチではなく、セマンティックサーチにより 文の意味を反映した検索を行うため。 • 文をその意味を反映した埋め込みに変換し、埋 め込み同士の近さを計算することで元の文同士 の類似性を判断できる。 ※用語 TIPS:エンベディング=埋め込み=ベクトル化
  30. 前処理③(インデキシング) 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    ベクトルデータベース 各種ドキュメント チャンキング(ベクトル化できる小さなチャンクに分割) [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] エンベディング (ベクトル化:類似性検索ができる埋め込みという数値表現へ変換) インデキシング(データベースへ登録) インデキシング(データベースへ登録) • ベクトルデータベースへベクトル化されたデータを 登録すること • ベクトル値とその元になった文データ(テキスト) を一緒に登録することが多い • メタデータとして、元の文やドキュメントへの参照 を保持することもある ※前処理3つをまとめてインデキシングと呼ぶこともある
  31. 前処理のまとめ 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    ベクトルデータベース 各種ドキュメント チャンキング(ベクトル化できる小さなチャンクに分割) [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] [1,4,8,2] エンベディング (ベクトル化:類似性検索ができる埋め込みという数値表現へ変換) インデキシング(データベースへ登録) インデキシング(データベースへ登録) ベクトルデータベースへベクトル化されたデータを登録すること エンベディング(ベクトル化)が必要な理由 テキストサーチではなく、セマンティックサーチにより文の意味を 反映した検索を行うため チャンキングが必要な理由 埋め込みモデル(embedding model)がベクトルを生成 する際の入力テキストのサイズには上限があるため
  32. 問い合わせ 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    38 アプリケーション ベクトルデータベース LLM ①質問 ナレッジベース ①ユーザーが自然言語で問い合わせを行う データソース 交通費を精算するにはど うしたらいい?
  33. リトリーバル:検索 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    39 アプリケーション ベクトルデータベース LLM ②クエリー ナレッジベース ②質問文と類似した チャンクを検索する データソース 交通費を精算するにはど うしたらいい?
  34. リトリーバル:検索 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    40 アプリケーション ベクトルデータベース LLM ③検索結果 ナレッジベース ③類似性検索の結果、質 問文に対する類似性の高 いチャンク群を返す データソース 経費精算君で精算できる経費には、 交通費、…などがあります。 入社したら最初に経費精算口座、経 理システムに登録してください。 交通費は銀行口座へ振り込まれます。
  35. 生成ー回答の生成 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    41 アプリケーション ベクトルデータベース LLM ④回答生成指示 ナレッジベース データソース ④質問文に検索結果を添え て、回答文の生成を指示する 経費精算君で精算できる経費には、 交通費、…などがあります。 入社したら最初に経費精算口座、経 理システムに登録してください。 交通費は銀行口座へ振り込まれます。
  36. 生成ー回答の生成 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    42 アプリケーション ベクトルデータベース LLM ナレッジベース データソース ⑤生成した回答文を返却 ⑤回答 経理システムに銀行口座を登 録の上、経費精算君で、日時 と経路を添えて申請しださい。
  37. 生成ー回答の生成 基本的なRAG の仕組み Copyright © 2024, Oracle and/or its affiliates

    43 アプリケーション ベクトルデータベース LLM ナレッジベース データソース ⑥ユーザーへ回答を提示 ⑥回答 経理システムに銀行口座を登 録の上、経費精算君で、日時 と経路を添えて申請しださい。
  38. Copyright © 2024, Oracle and/or its affiliates 44 デモ ー

    RAG(ChromaDB) Demo_Chromadb_RAG.ipynb
  39. Copyright © 2024, Oracle and/or its affiliates デモ - RAG(ChromaDB

    を使用) 45 from dotenv import load_dotenv, find_dotenv from langchain_openai import ChatOpenAI from langchain_openai import OpenAIEmbeddings import chromadb from langchain_chroma import Chroma from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough # 環境変数 OPENAI_API_KEY に OpenAI API Key を設定(.env ファイルの OPENAI_API_KEY からロード) _ = load_dotenv(find_dotenv()) # LLMの準備 llm = ChatOpenAI( model="gpt-4 o", # モデル temperature=0 , # ランダムさ ) # 埋め込みモデルの準備 embeddings = OpenAIEmbeddings(model="text-embedding-3 -large") # LangChain の Chromadb VectorStore のインスタンスを作成 vector_store = Chroma( client=chromadb.PersistentClient(path="./chroma_db"), collection_name="mycollection_2 0 0 ", # 検索対象のChromadb コレクション名(事前に作成済み) embedding_function=embeddings, collection_metadata={"hnsw:space": "ip"} ) retriever = vector_store.as_retriever( search_type="similarity", search_kwargs={"k": 4 } ) ベクトル距離の指標として内積を使うように指示 LLM と埋め込みモデルのインスタンスを作成 リトリーバー・インスタンスを作成 コード例 ベクトル距離の指標は一般にはコサイン距離が用いられ る。OpenAI/Cohere など多くの埋め込みモデルは埋 め込み(ベクトル)が正規化(大きさを1に調整済 み)されているため、内積とコサイン類似度(1 – コサ イン距離)は同値となる。このような場合は、計算量が 少ない内積を使うとよい。
  40. Copyright © 2024, Oracle and/or its affiliates デモ - RAG(ChromaDB

    を使用) 46 # プロンプトテンプレートの準備 prompt_template = ChatPromptTemplate.from_messages( [ ("system", "あなたの仕事は、human の question に答えることです。以下の手順で回答してください。前置きや思考経過は出力しないでください。context の中の source のファイル名には、 page_content の主題が含まれています。最初に、 context に書かれている情報だけを使用して、question の質問に答えることができるかどうか判断してください、判断結果は出力しません。次に、context にある 情報だけで回答が可能と判断した場合は、context に書かれている情報だけを使用して、question の質問に答えてください。context にある情報だけでは回答できないと判断した場合は、情報がないので回答できな いと答えてください。¥n¥ncontext: {context}"), ("human", "question: {input}"), ] ) # RAGチェーンの準備 rag_chain = ( {"context": retriever, "input": RunnablePassthrough()} | prompt_template | (lambda x: print(f"¥n=== Generated Prompt ===¥n{x}¥n========================¥n¥n") or x) # プロンプトを表示 | llm ) # 質問 query="ハグリッドがホグワーツへの入学案内書を持ってきたのはいつですか?それはどのような日でしたか?" response = rag_chain.invoke(query) # RAGの実行 print(f"=== LLM response ======¥n{response}¥n========================¥n") print(f"=== 回答 ===============¥n{response.content}¥n========================¥n") 検索結果(コンテキスト)の情報からは回答できないときにハルシネーションしないように指示 コード例~続き
  41. Copyright © 2024, Oracle and/or its affiliates デモ - RAG(ChromaDB

    を使用) 47 === Generated Prompt === messages=[SystemMessage(content="あなたの仕事は、human の question に答えることです。以下の手順で回答してください。前置きや思考経過は出力しないでください。context の中の source のファイル名には、content の主題が含まれています。最初に、 context に書かれている情報だけを使用して、question の質問に答えることができるかど うか判断してください、判断結果は出力しません。次に、context にある情報だけで回答が可能と判断した場合は、context に書かれている情報だけを使用して、question の質問に答えてください。context にある情報だけでは回答できないと判断した場合は、情報がないので回答できないと答えてください。¥n¥ncontext: [Document(metadata={'source': 'data¥¥¥¥Wikipedia-ハリー・ポッター_(架空 の人物).pdf'}, page_content='しかし、ダーズリー家は魔法に対して、かたくななまでに否定的な態度を取っており、ハリー は両親や自分が魔法使いであることを知らされないまま、伯⺟一家の冷遇と虐待を受 けながら育った。1 991 年7 ⽉3 1 日(ハリーの1 1 歳の誕生日)、ホグワーツ魔法魔術学校への入学案内書を手にやってきたルビウス‧ハグリッドから自身が魔法使いであることを知らされる。そして9⽉1 日、ホグワーツ魔 法魔術学校に入学する[注 4 ]。'), Document(metadata={'source': 'data¥¥¥¥Wikipedia-ハリー・ポッター_(架空の人物).pdf'}, page_content='ホグワーツ魔法魔術学校グリフィンドー ル寮の男子生徒となる。孤児として⺟親の親類の伯⺟夫婦の家で不遇な暮らしをして育った。1 1 歳を迎える年のある日突然、ホグワーツから入学許可証が届いたのをきっかけに、亡くなった両親が魔法使いであったこ と、 そして出生時に下された予言により、闇の魔法使いヴォルデモートを倒す宿命を自分が負っていると告げられる。'), Document(metadata={'source': 'data¥¥¥¥Wikipedia-ロン ・ウィーズ リー.pdf'}, page_content='その後、ホグワーツ魔法魔術学校に入学し、ハリー同様グリフィンドール寮生となる。種族性別家族1 992 年夏、ハリーを自宅に迎えるた め、⽗の所有するフォード‧アングリアを借り て、フレッド、ジョージとともにダーズリー家を訪問。軟禁されていたハリーを救出する。'), Document(metadata={'source': 'data¥¥¥¥Wikipedia-ロン・ウィーズリー.pdf'}, page_content='軟禁 されていたハリーを救出する。同年9⽉1 日にはドビーによりホグワーツ特急に乗⾞できなかったため、ふたた びフォード‧アングリアを借りてハリーとともにホグワーツへ向かうが、ホグワーツ到着時に暴れ柳から攻撃を受け、杖 が折れる。')]", additional_kwargs={}, response_metadata={}), HumanMessage(content='question: ハグリッドがホグワーツへの入学案内書を持ってきたのはいつですか?それはどのよ うな日でしたか?', additional_kwargs={}, response_metadata={})] ======================== === LLM response ====== content='1 991 年7 ⽉3 1 日、ハリーの1 1 歳の誕生日に、ハグリッドがホグワーツへの入学案内書を持ってきました。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 4 0 , 'prompt_tokens': 87 4 , 'total_tokens': 91 4 , 'completion_tokens_details': {'accepted_prediction_tokens': 0 , 'audio_tokens': 0 , 'reasoning_tokens': 0 , 'rejected_prediction_tokens': 0 }, 'prompt_tokens_details': {'audio_tokens': 0 , 'cached_tokens': 0 }}, 'model_name': 'gpt-4 o-2 0 2 4 -0 8-0 6 ', 'system_fingerprint': 'fp_a7 9d8dac1 f', 'finish_reason': 'stop', 'logprobs': None} id='run-0 0 6 6 8cae-0 2 b3 -4 e5 d-86 de-1 0 9b0 caa0 4 6 b-0 ' usage_metadata={'input_tokens': 87 4 , 'output_tokens': 4 0 , 'total_tokens': 91 4 , 'input_token_details': {'audio': 0 , 'cache_read': 0 }, 'output_token_details': {'audio': 0 , 'reasoning': 0 }} ======================== === 回答 =============== 1 991 年7 ⽉3 1 日、ハリーの1 1 歳の誕生日に、ハグリッドがホグワーツへの入学案内書を持ってきました。 ======================== 実行結果
  42. Copyright © 2024, Oracle and/or its affiliates デモ - RAG(ChromaDB

    を使用) 48 評価 検索件数 (top k) 質問 期待する正答 RAGの回答 正誤 検索できて いるか 検索結果に 基づいてい るか 評価 4 ハグリッドがホグワーツへの 入学案内書を持ってきた のはいつですか?それはど のような日でしたか? ハグリッドがホグワーツへ の入学案内書を持って きたのは、ハリーの11歳 の誕生日の1991年7 ⽉31日です。 1991年7⽉31日、ハ リーの11歳の誕生日に、 ハグリッドがホグワーツへ の入学案内書を持って きました。 〇 〇 〇 〇 4 アメリカの初代大統領は 誰ですか? 情報がないので回答でき ません。 情報がないので回答で きません。 〇 ー(DBにこの情 報はない) 〇(検索結果に この情報はない) 〇(ハルシネー ションしていない) 4 時空管理局のアースラの 艦長は誰ですか? 時空管理局のアースラの 艦長は、リンディ・ハラオ ウンです。 情報がないので回答で きません。 × ×(DBに情報が あるが検索結果に 含まれてない) 〇(検索結果に この情報はない) ×(DBに情報が あるので正答して 欲しい) 10 時空管理局のアースラの 艦長は誰ですか? 時空管理局のアースラの 艦長は、リンディ・ハラオ ウンです。 リンディ・ハラオウンです。 〇 〇 〇 〇
  43. まだ、完成ではない RAG は、急速に発展しつつある技術 Copyright © 2024, Oracle and/or its affiliates

    50 https://towardsdatascience.com/12-rag-pain-points-and-proposed-solutions-43709939a28c https://arxiv.org/abs/2401.05856
  44. LangChain AI による整理 Copyright © 2024, Oracle and/or its affiliates

    51 RAG From Scratch( https://github.com/langchain-ai/rag-from-scratch/blob/main/README.md )
  45. Copyright © 2024, Oracle and/or its affiliates 52 Retrieval のための

    Advanced RAG: • チャンクサイズ最適化 • 外部知識の構造化(再帰的Retrieval) • 知識グラフ • 埋め込みモデルのファインチューニング • クエリー埋め込みの変換(HyDE) Generation のための Advanced RAG: • 情報圧縮(ノイズ削減) • リランク Retrieval と Generation の両方を同時に 改善する Advanced RAG: • LLMによるクエリーの改善 • 多段階推論 LlamaIndex AI による整理
  46. チャンキングの課題 Copyright © 2024, Oracle and/or its affiliates 53 アプリケーション

    ベクトルデータベース LLM ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) エンベディングとインデキシング データソース ②質問文と類似した チャンクを検索する ③類似性検索の結果、質 問文に対する類似性の高 いチャンク群を返す ④質問文にリトリーブで得られ た検索結果を添えて、回答文 の生成を指示する
  47. チャンクサイズと取得件数(top k)の組み合わせで精度は変わる Copyright © 2024, Oracle and/or its affiliates 55

    ※ ドキュメント、クエリーによって異なります。ユースケース毎に検証が必要です。 ※ 本検証は小規模(20問)であり、大きな誤差がある可能性があります。 Ragasの Context Recall を測定した例 • Context Recall とは、正解(Ground Truth)の文がどの程度コンテキスト(検索結 果)に含まれていたかを表す指標。 • 回答に必要な情報の網羅率を表している。正 答率はこれを越えない。 • スコアは0~1の範囲で表され、高いほど良い。 (左のヒートマップでは色が濃いほど良い) Ragas の Context Recall は LLM を使って判 定しているため、100%正確ではありません。 Context Recall が “1” なのに、回答が間違って いる場合や、逆に “0”なにに正解している場合は データをよく確かめましょう。後者は、ハルシネーション が偶然正解していたり、事前学習した情報から回 答が生成されています。
  48. 大きすぎるチャンクサイズは精度が悪い上に高コスト! Copyright © 2024, Oracle and/or its affiliates 56 横軸:チャンクサイズ

    ※ 同じチャンク数(20個)を取得した場合の検証例 ※ ドキュメント、クエリーによって異なる コスト(LLMのAPI費用)は、 5倍! (チャンクサイズ200に対して)
  49. 埋め込みを生成するときに圧縮されて情報が希釈される Copyright © 2024, Oracle and/or its affiliates 57 A

    long far away ※トークン毎の埋め込みは文脈を反映した埋め込みです。同じ単語でも異なる文脈に現れると異なるベクトルとなります。 ※すべての埋め込みモデルがプーリングで「平均」操作をするわけではありません。最大値を取るものなどもあります。 トークン トークン毎の埋め込み 文全体の埋め込み プーリング 200個のトークン 200個の埋め込み 1個の埋め込み 1,000個のトークン 1,000個の埋め込み 1個の埋め込み
  50. 補足 Copyright © 2024, Oracle and/or its affiliates 58 「※トークン毎の埋め込みは文脈を反映した埋め込みです。同じ単語でも異なる文脈に現れると異なる埋め込みとなります。」

    の件 “Does BERT Make Any Sense? Interpretable Word Sense Disambiguation with Contextualized Embeddings“ https://arxiv.org/abs/1909.10430 より異なる文脈における"bank"のコンテキスト埋め込みの例 同じ”bank” という単語が、地形を表現する文脈に現れる場 合と銀行を表す場合では、埋め込み空間(ベクトル空間) 上で異なる領域に分布していることがわかります。 最近の主要な埋め込みモデルで採用されているトランスフォー マー・モデルの場合、Self-Attention メカニズムを使用して、テ キスト内の各単語が他のすべての単語とどのように関連してい るかを学習します。また、位置エンコーディングによりテキスト中 の単語の位置情報も反映されます。これにより、同じ単語で も文脈によって異なる意味を持つ場合(多義語など)や語 順が重要な場合にも適切な表現を生成できます。
  51. チャンクサイズが小さすぎると文脈が分断されて正解を導けない Copyright © 2024, Oracle and/or its affiliates 59 チャンクサイズ:100文字、Top_k(取得件数):20件

    で類似性検索した結果 質問 正解(Ground Truth) 取得したチャンクのうち正解に関連 聖王のゆりかごとは何ですか、どのくらい の大きさですか? 聖王のゆりかごとは、古代ベルカの遺 産の一つ。その正体は旧暦において一 度は世界を滅ぼしたとされる強大な質 量兵器で、全長数kmの巨大飛行戦 艦です。 搭載されているものが本物なのかレプリ カなのか、それが全てのガジェット‧ド ローンに内蔵されているのかどうかは不 明。聖王のゆりかご古代ベルカの遺産 の一つ。 スターライトブレイカーは誰のどのような 魔法ですか? スターライトブレイカーは、なのは最大 最強の切り札であり、彼女の代名詞と もなっている魔法。なのは本人(+カー トリッジ)の魔力に加えて、なのは個 人の希少スキル「魔力収束」をもって 戦場に漂う残留魔力をも呼び集めて 特大の一撃を放つ集束砲撃魔法です。 スターライトブレイカー(Starlight Breaker)なのは最大最強の切り札であ り、彼女の代名詞ともなっている魔法。 いずれも正解に必要な2つの情報のうち、1つしか取得できていない Context Recall = 0.5 と評価される
  52. チャンクサイズが小さすぎると文脈が分断されて正解を導けない Copyright © 2024, Oracle and/or its affiliates 60 質問

    正解(Ground Truth) RAGの回答 聖王のゆりかごとは何ですか、どのくらい の大きさですか? 聖王のゆりかごとは、古代ベルカの遺 産の一つ。その正体は旧暦において一 度は世界を滅ぼしたとされる強大な質 量兵器で、全長数kmの巨大飛行戦 艦です。 聖王のゆりかごは、古代ベルカの巨大 飛行船艦であり、聖王家の居城として 扱われていたものです。大きさについて の具体的な情報は、提供されたコンテ キストにはありません。情報がないので 回答できません。 スターライトブレイカーは誰のどのような 魔法ですか? スターライトブレイカーは、なのは最大 最強の切り札であり、彼女の代名詞と もなっている魔法。なのは本人(+カー トリッジ)の魔力に加えて、なのは個 人の希少スキル「魔力収束」をもって 戦場に漂う残留魔力をも呼び集めて 特大の一撃を放つ集束砲撃魔法です。 スターライトブレイカーは、高町なのはの 最大最強の切り札であり、彼女の代 名詞ともなっている魔法です。 いずれも、半分正解だが不十分な回答となった チャンクサイズ:100文字、Top_k(取得件数):20件 で類似性検索して、回答生成した結果
  53. チャンキングの課題 ナイーブ RAG(ベーシック RAG) Copyright © 2024, Oracle and/or its

    affiliates 61 アプリケーション ベクトルデータベース LLM ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) エンベディングとインデキシング 大きすぎるチャンク 検索精度が下がり、多くのノイズが LLM へ渡されてしまう ※最適なサイズの一般化ができない ユースケース(データ、質問)へ依存。試行錯誤が必要。 データソース ②質問文と類似した チャンクを検索する ③類似性検索の結果、質 問文に対する類似性の高 いチャンク群を返す ④質問文にリトリーブで得られ た検索結果を添えて、回答文 の生成を指示する
  54. チャンキングの課題 ナイーブ RAG(ベーシック RAG) Copyright © 2024, Oracle and/or its

    affiliates 62 アプリケーション ベクトルデータベース LLM ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) エンベディングとインデキシング 小さすぎるチャンク 文脈が分断されてLLMが正しい 回答を生成できない 大きすぎるチャンク 検索精度が下がり、多くのノイズが LLM へ渡されてしまう ※最適なサイズの一般化ができない ユースケース(データ、質問)へ依存。試行錯誤が必要。 データソース ②質問文と類似した チャンクを検索する ③類似性検索の結果、質 問文に対する類似性の高 いチャンク群を返す ④質問文にリトリーブで得られ た検索結果を添えて、回答文 の生成を指示する
  55. チャンキングの課題 ナイーブ RAG(ベーシック RAG) Copyright © 2024, Oracle and/or its

    affiliates 63 アプリケーション ベクトルデータベース LLM ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) エンベディングとインデキシング 小さすぎるチャンク 文脈が分断されてLLMが正しい 回答を生成できない 大きすぎるチャンク 検索精度が下がり、多くのノイズが LLM へ渡されてしまう ※最適なサイズの一般化ができない ユースケース(データ、質問)へ依存。試行錯誤が必要。 データソース ②質問文と類似した チャンクを検索する ③類似性検索の結果、質 問文に対する類似性の高 いチャンク群を返す ④質問文にリトリーブで得られ た検索結果を添えて、回答文 の生成を指示する 文が分断されたチャンク LLMが元の文の意味を追えな い
  56. ウィキペディアの「ハリー‧ポッター (架空の⼈物)」の先頭の500文字 素朴なチャンキング Copyright © 2024, Oracle and/or its affiliates

    64 ハリー‧ポッター (架空の人物) 出典: フリー百科事典『ウィキペディア(Wikipedia)』 ハリー‧ポッターシリーズ > ハリー‧ポッターシリーズの登場人物一覧 > ハリー‧ポッター (架空の人 物) ハリー‧ジェームズ‧ポッター(英: Harry James Potter)は、J‧K‧ローリングの小説『ハリー‧ ポッター』シリーズおよび、その派生作品に登場 する架空の人物であり、同シリーズの主人公。 ホグワーツ魔法魔術学校グリフィンドール寮の男 子生徒となる。孤児として⺟親の親類の伯⺟夫婦 の家で不遇な暮らしをして育った。11歳を迎える 年のある日突然、ホグワーツから入学許可証が届 いたのをきっかけに、亡くなった両親が魔法使い であったこと、そして出生時に下された予言によ り、闇の魔法使いヴォルデモートを倒す宿命を自 分が負っていると告げられる。マグル界では一介 の少年に過ぎない生活を送っていたが、魔法界で は本人が⼾惑うほど重要な人物として、あまねく 人々から知られている。 一人前の魔法使いになるべく、同級生のロン‧ウ ィーズリーやハーマイオニー‧グレンジャーらと LangChain の PDFMinerLoader でテキストを抽出したもの
  57. ウィキペディアの「ハリー‧ポッター (架空の⼈物)」をチャンクサイズ位置で強制的に分割 素朴なチャンキング Copyright © 2024, Oracle and/or its affiliates

    65 from langchain_community.document_loaders import PDFMinerLoader loader = PDFMinerLoader("./data/Wikipedia-ハリー・ポッター_(架空の人物).pdf") documents = [] chunk_size = 1 0 0 # 1 チャンクの文字数 for doc in loader.load(): text = doc.page_content.replace("¥n", "") for i in range(0 , len(text), chunk_size): chunk = text[i:i + chunk_size] documents.append(chunk) print(f"合計チャンク数: {len(documents)}") for i, doc in enumerate(documents[:5 ]): print(f"¥n=== Document {i+1 }:文字数: {len(doc)} ====================================================") print(doc) Python によるコード例 • ウィキペディアからダウンロードした PDF ファイルは、./data フォルダに保存されている想定 • PDFからのテキスト抽出には、LangChain の PDFMinerLoader を使用 • 100文字ごとに文章を分断している
  58. ウィキペディアの「ハリー‧ポッター (架空の⼈物)」をチャンクサイズ位置で強制的に分割 素朴なチャンキング Copyright © 2024, Oracle and/or its affiliates

    66 合計チャンク数: 1 2 2 === Document 1 :文字数: 1 0 0 ==================================================== ハリー‧ポッター (架空の人物)出典: フリー百科事典『ウィキペディア(Wikipedia)』ハリー‧ポッターシリーズ > ハリー‧ポッターシリーズの登場人物一覧 > ハリー‧ポッター (架空の人物) === Document 2 :文字数: 1 0 0 ==================================================== ハリー‧ジェームズ‧ポッター(英: Harry JamesPotter)は、J‧K‧ローリングの小説『ハリー‧ポッター』シリーズおよび、その派生作品に登場する架空の人物であり、同シリーズの 主人公。ホグ === Document 3 :文字数: 1 0 0 ==================================================== ワーツ魔法魔術学校グリフィンドール寮の男子生徒となる。孤児として⺟親の親類の伯⺟夫婦の家で不遇な暮らしをして育った。1 1 歳を迎える年のある日突然、ホグワーツから入学 許可証が届いたのをきっかけに、亡くな === Document 4 :文字数: 1 0 0 ==================================================== った両親が魔法使いであったこと、そして出生時に下された予言により、闇の魔法使いヴォルデモートを倒す宿命を自分が負っていると告げられる。マグル界では一介の少年に過ぎな い生活を送っていたが、魔法界では本人 === Document 5 :文字数: 1 0 0 ==================================================== が⼾惑うほど重要な人物として、あまねく人々から知られている。一人前の魔法使いになるべく、同級生のロン‧ウィーズリーやハーマイオニー‧グレンジャーらとともに、ホグワーツにて学 生生活を送りつつ、宿敵のヴォ 出力例 • 「ホグワーツ魔法学校」や「ヴォルデモート」が分割されてしまっている 検索できない、文脈を追えない
  59. LangChain による実装例 from langchain_community.document_loaders import PDFMinerLoader, DirectoryLoader from langchain_text_splitters import

    RecursiveCharacterTextSplitter # ドキュメントの読み込み loader = PDFMinerLoader("./data/Wikipedia-ハリー・ポッター_(架空の人物).pdf") # ドキュメントの分割 documents = [] for doc in loader.load(): doc.page_content = doc.page_content.replace("¥n", "") chunks = RecursiveCharacterTextSplitter( chunk_size=chunk_size, chunk_overlap=chunk_size // 10, separators=["。", "、", " "], keep_separator="end" ).split_documents([doc]) documents.extend(chunks) print(f"合計チャンク数: {len(documents)}") for i, doc in enumerate(documents[:6]): print(f"¥n=== Document {i+1}:文字数: {len(doc.page_content)} ====================================================") print(doc.page_content) リカーシブ(再帰的)チャンキング Copyright © 2024, Oracle and/or its affiliates 67 RecursiveCharacterTextSplitter() 指定したチャンクサイズより小さく、かつ、指定サイズに 近いセパレータ位置で分割します。 チャンクサイズ: 最大でもこの文字数となるように分割します。 チャンクのオーバーラップ: セパレータで区切ることができない場合は、文字数で区切ります。このとき、 LLMが前後のつながりを予測できるように前のチャンクが末尾の一部を重ね る文字数を指定します。 セパレータ: 分割する際に可能であれば、ここで指定した文字の位置で分割します。 キープセパレータ: セパレータの文字自体を残すかどうか、残す場合、チャンクの文末に残すか、 次のチャンクの先頭に配置するかを指定します(True, False, End, Start)。
  60. ウィキペディアの「ハリー‧ポッター (架空の⼈物)」をセパレータを指定して分割 リカーシブ(再帰的)チャンキング Copyright © 2024, Oracle and/or its affiliates

    68 合計チャンク数: 1 6 6 === Document 1 :文字数: 92 ==================================================== ハリー‧ポッター (架空の人物)出典: フリー百科事典『ウィキペディア(Wikipedia)』ハリー‧ポッターシリーズ > ハリー‧ポッターシリーズの登場人物一覧 > ハリー‧ポッター === Document 2 :文字数: 5 4 ==================================================== ハリー‧ポッター (架空の人物)ハリー‧ジェームズ‧ポッター(英: Harry JamesPotter)は、 === Document 3 :文字数: 6 0 ==================================================== J‧K‧ローリングの小説『ハリー‧ポッター』シリーズおよび、その派生作品に登場する架空の人物であり、同シリーズの主人公。 === Document 4 :文字数: 6 0 ==================================================== ホグワーツ魔法魔術学校グリフィンドール寮の男子生徒となる。孤児として⺟親の親類の伯⺟夫婦の家で不遇な暮らしをして育った。 === Document 5 :文字数: 7 5 ==================================================== 1 1 歳を迎える年のある日突然、ホグワーツから入学許可証が届いたのをきっかけに、亡くなった両親が魔法使いであったこと、そして出生時に下された予言により、 === Document 6 :文字数: 3 4 ==================================================== 闇の魔法使いヴォルデモートを倒す宿命を自分が負っていると告げられる。 出力例 • 「ホグワーツ魔法学校」も「ヴォルデモート」も分割されていない 検索可能、文脈理解可能と期待できる
  61. チャンキングの課題への対応策の例 1. チャンクサイズのチューニング 試行錯誤により個別ユースケースに最適なチャンクサイズを見つける。 2. リカーシブ(再帰的)チャンキング 文が不適切な位置で分断されないよう目標サイズに最も近い分割点を、最初は段落の末尾、次は文の末尾(読点位置)、次 は句点位置、最後は単語の切れ目の順といった再帰的な手順で探索して分割する(LangChain では、 RecursiveCharacterTextSplitter

    で実装されています)。 3. Small-to-big retrieval 検索時に小さなテキストチャンクを使用し、回答生成時にはそれが属する大きなテキストチャンクを使用する手法。これにより、検索 の精度が向上し、より多くの文脈情報が得られる。実装には、Child-Parent RecursiveRetriever:小さなチャンクを検索し、親IDを 参照して大きなチャンクを返す手法(LangChain では、Parent Document Retriever で実装されている)やSentence Window Retrieval:検索時に1つの文を取得し、その文の周りのテキストウィンドウを返す手法がある。 4. セマンティックチャンキング(Semantic chunking) チャンキングサイズと文の意味的なまとまりの両方に配慮して適切な分割を行う(研究段階)。類似の手法にエージェンティックチャ ンキング(Agentic chunking)がある。これは LLM を使って意味にも配慮した分割を行う手法。実装は容易だが LLM を使うためコ スト、処理時間、品質、チャンキングの根拠の説明に難がある。 5. ドキュメント固有のチャンキング(Document-specific chunking) 文書の種類や構造に応じて、チャンクの分割方法を調整するアプローチ。例えば、プログラミングコードには、関数、クラス、モジュール などの明確な区切りがるため、これらの区切りに基づいてチャンクを作成。論文や報告書であれば章、節、段落、対話形式のデータ では、発言者の交代をチャンクの区切りとする。文書の構造を解析するための特別なルールやアルゴリズムが必要で研究段階。 アドバンスト RAG Copyright © 2024, Oracle and/or its affiliates 69
  62. チャンキングの課題への対応策の例 • チャンクサイズのチューニング 試行錯誤により個別ユースケースに最適なチャンクサイズを見つける。 • リカーシブ(再帰的)チャンキング 文が不適切な位置で分断されないよう目標サイズに最も近い分割点を、最初は段落の末尾、次は文の末尾(読点位置)、次 は句点位置、最後は単語の切れ目の順といった再帰的な手順で探索して分割する。 • Small-to-big

    retrieval 検索時に小さなテキストチャンクを使用し、回答生成時にはそれが属する大きなテキストチャンクを使用する手法。これにより、検索 の精度が向上し、より多くの文脈情報が得られる。実装には、Child-Parent RecursiveRetrieverは、小さなチャンクを検索し、親IDを 参照して大きなチャンクを返す手法やSentence Window Retrievalは、検索時に1つの文を取得し、その文の周りのテキストウィンドウ を返す手法がある。 • セマンティックチャンキング チャンキングサイズと文の意味的なまとまりの両方に配慮して適切な分割を行う(研究段階)。類似の手法にエージェンティックチャ ンキング(Agentic chunking)がある。これは LLM を使って意味にも配慮した分割を行う手法。実装は容易だが LLM を使うためコ スト、処理時間、品質、チャンキングの根拠の説明に難がある。 • ドキュメント固有のチャンキング(Document-specific chunking) 文書の種類や構造に応じて、チャンクの分割方法を調整するアプローチ。例えば、プログラミングコードには、関数、クラス、モジュール などの明確な区切りがるため、これらの区切りに基づいてチャンクを作成。論文や報告書であれば章、節、段落、対話形式のデータ では、発言者の交代をチャンクの区切りとする。文書の構造を解析するための特別なルールやアルゴリズムが必要で研究段階。 アドバンスト RAG Copyright © 2024, Oracle and/or its affiliates 70 覚えておいておきたいこと • チャンクサイズと取得件数は RAG の精度に影響する • 精度向上のためにサイズのチューニングや検索手法の再検討が必要 なこともある
  63. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    71 アプリケーション ベクトルデータベース LLM ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 ナレッジベース インデックス化 ユーザーの「質問」をそのまま 丸投げしても適切な検索結 果が返ってこないことも多い 類似性検索であってもあらゆる同義 語、類義語、関連した言葉をすべて 見つけられるわけではない ※ユーザーの「質問するリテラシー」は様々 文書が多く似たようなセンテンスに埋 もれてしまう
  64. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    72 リトリーバル(検索)の課題 1 ノイズが多い(多数の文書の類似したセンテンスに埋もれてしまい検索結果に正解情報が含まれない) 2 網羅性(同義語、類義語、関連用語を網羅しきれない。セマンティック検索といっても万能ではない) 3 対話文脈の反映漏れ(ユーザーの直近の入力(質問)文だけでデータベースを検索してよいか?) 4 ベクトル検索に不適合なクエリー(型番など特定の文字列、フレーズへ正確に一致する検索は苦手) 5 複雑、複合的な質問(「Uber と Lyft のそれぞれの戦略の違いを教えてください」のような比較など) 6 そもそもデータベースに登録されているドキュメントは、「質問文」の形をしていない 7 検索結果をLLMのコンテキストに入力する際の並び順 Tips これらの課題には既に対処方法が提案されていますが、適用する対処方法が多い程、応答時間が長くなる、LLMの使用 料が増える、アプリケーションが複雑になるなどトレードオフがあります。また、副作用で精度が落ちることもありユースケース (データ、質問)に合わせた試行錯誤が必要です。
  65. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    73 リトリーバル(検索)の課題 1 ノイズが多い(多数の文書の類似したセンテンスに埋もれてしまい検索結果に正解情報が含まれない) 2 網羅性(同義語、類義語、関連用語を網羅しきれない。セマンティック検索といっても万能ではない) 3 対話文脈の反映漏れ(ユーザーの直近の入力(質問)文だけでデータベースを検索してよいか?) 4 ベクトル検索に不適合なクエリー(型番など特定の文字列、フレーズへ正確に一致する検索は苦手) 5 複雑、複合的な質問(「Uber と Lyft のそれぞれの戦略の違いを教えてください」のような比較など) 6 そもそもデータベースに登録されているドキュメントは、「質問文」の形をしていない 7 検索結果をLLMのコンテキストに入力する際の並び順 Tips これらの課題には既に対処方法が提案されていますが、適用する対処方法が多い程、応答時間が長くなる、LLMの使用 料が増える、アプリケーションが複雑になるなどトレードオフがあります。また、副作用で精度が落ちることもありユースケース (データ、質問)に合わせた試行錯誤が必要です。
  66. Copyright © 2024, Oracle and/or its affiliates 74 リトリーバル ノイズが多い

    Advanced RAG フィルタリング 1. ハリー・ポッター_(架空の人物) 2. ハーマイオニー・グレンジャー 3. フェイト・テスタロッサ 4. マギアレコード_魔法少女まどか☆マギカ外伝 5. ロン・ウィーズリー 6. 八神はやて 7. 巴マミ 8. 暁美ほむら 9. 美樹さやか 10. 高町なのは 11. 魔法少女まどか☆マギカ 12. 魔法少女リリカルなのは 13. 魔法少女リリカルなのはA's 14. 魔法少女リリカルなのはStrikerS 15. 魔法少女リリカルなのはViVid 16. 魔法少女リリカルなのは_The_MOVIE_1st 17. 魔法少女リリカルなのは _The_MOVIE_2nd_A's 18. 魔法科高校の劣等生 19. 鹿目まどか 質問 フェイトが留学生として通った小学校は? 1. ハリー・ポッター_(架空の人物) 2. ハーマイオニー・グレンジャー 3. フェイト・テスタロッサ 4. マギアレコード_魔法少女まどか☆マギカ外伝 5. ロン・ウィーズリー 6. 八神はやて 7. 巴マミ 8. 暁美ほむら 9. 美樹さやか 10. 高町なのは 11. 魔法少女まどか☆マギカ 12. 魔法少女リリカルなのは 13. 魔法少女リリカルなのはA's 14. 魔法少女リリカルなのはStrikerS 15. 魔法少女リリカルなのはViVid 16. 魔法少女リリカルなのは_The_MOVIE_1st 17. 魔法少女リリカルなのは _The_MOVIE_2nd_A's 18. 魔法科高校の劣等生 19. 鹿目まどか フェイト関連 学校関連 3. フェイト・テスタロッサ • 質問者に検索対象ドキュメントを絞り込 んでもらう • システム的に絞り込む(質問文を形態 素解析してメタデータを検索など)
  67. Copyright © 2024, Oracle and/or its affiliates 75 デモ ー

    RAG(ChromaDB)フィルタリングあり Demo_Chromadb_RAG_with_Filtering.ipynb
  68. フィルタリングなし Copyright © 2024, Oracle and/or its affiliates デモ -

    RAG(ChromaDB を使用)フィルタリングあり 76 retriever = vector_store.as_retriever( search_type="similarity", search_kwargs={"k": 2 0 } ) ソースファイルのリストをフィルターに設定 コード例(フィルタリング有無による違い) source_list=["data¥¥Wikipedia-フェイト・テスタロッサ.pdf"] retriever = vector_store.as_retriever( search_type="similarity", search_kwargs={"k": 2 0 , "filter": {"source": {"$in": source_list}}} ) 質問内容に合わせて「フェイト」に関するドキュメント1つだけを含むソース ファイルのリストを設定(複数設定も可能) フィルタリングあり 質問 フェイトが留学生として通った小学校は? 正答 私立聖祥大附属小学校です。
  69. Copyright © 2024, Oracle and/or its affiliates デモ - RAG(ChromaDB

    を使用)フィルタリングあり 77 === Generated Prompt === messages=[SystemMessage(content='あなたの仕事は、human の question に答えることです。以下の手順で回答してください。前置きや思考経過は出力しないでください。context の中の source のファイル名には、page_content の主題が含まれています。最初に、 context に 書かれている情報だけを使用して、question の質問に答えることができるかどうか判断してください、判断結果は出力しません。次に、context にある情報だけで回答が可能と判断した場合は、context に書かれている情報だけを使用して、question の質問に答えてください。context にある情報 だけでは回答できないと判断した場合は、情報がないので回答できないと答えてください。¥n¥ncontext: [Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'シグナムは事あるごとに、フェイトをからかうためにそのことを引き合い に出す(ただし、試験時期になのはの看病に時間を割いたために、万全の状態で試験に臨めなかった可能性が『StrikerS THECOMICS』でそれとなく記述されている)。また、自宅から聖祥大附属中学に通学している。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia- フェイト・テスタロッサ.pdf¥'}, page_content="後にリンディ‧ハラオウンの養子になり、名前がフェイト‧T(テスタロッサ)‧ハラオウン(Fate T. Harlaown)となる。担当声優は⽔樹奈々。人物像第1 期‧『A¥'s』時外見年齢は9歳(後述)。誕生日は5 ⽉2 9日。⾦の髪と「寂しげな目」をした[2 ]もう 1 人の魔法少女。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-魔法少女リリカルなのはViVid.pdf¥'}, page_content=¥'エルス‧タスミン学校では生徒会長を務める。ミカヤ‧シェベル抜⼑術天瞳流師範代。ノーヴェとは友人同士。ファビア‧クロゼルグ古代ベルカの 魔女の⾎を継いでいる少女。用語St.ヒルデ魔法学院ミッドチルダ⾸都クラナガンにあるヴィヴィオが通う聖王教会系列の学校。小学生に当たる初等科にはコロナ‧ティミル、リオ‧ウェズリー等が在籍し、中学生に当たる中等科にはアインハルト‧ストラトス等が在籍している。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-魔法少女リリカルなのは_The_MOVIE_1 st.pdf¥'}, page_content=¥'高町なのは - 田村ゆかり[4 ]フェイト‧テスタロッサ、¥'), Document(metadata={¥'source¥': "data¥¥¥¥Wikipedia-魔法少女リリ カルなのは_The_MOVIE_2 nd_A¥'s.pdf"}, page_content=¥'高町なのは - 田村ゆかりフェイト‧テスタロッサ、¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-魔法科高校の劣等生.pdf¥'}, page_content=¥'3 年前のリーブル‧エペーの試合で愛梨と対 戦したことをきっかけに愛梨に目をかけられ、彼女の伝手で⾦沢魔法理学研究所の特訓を受け、持ち前の空間把握能力を磨きあげた。十七夜家の養子縁組が決まったことを機に両親と決別したが、未だに両親たちから植え付けられた劣等感と元の居場所に戻ってしまうことへの恐怖が⼼の中に存在している。 ¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-高町なのは.pdf¥'}, page_content="7 . ^ フェイトとは文通を続けておりその時に管理世界標準文字を勉強している(『The MOVIE2 nd A¥'s』オーディオコメンタリーより)8. ^ しかし一時期のティアナには自 分が強くなっている自覚が無く、それが彼女の焦りと無茶を招いてしまう一因となってしまった。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="第1 期最終話エピローグからは日常で着けるリボンが細い黒のリボンから太めのピ ンクのリボンを着けるようになった[3 ]。『A¥'s』におけるフェイトなのはとの再会の約束を胸に、1 期の一連の出来事(PT事件)の重要参考人として裁判を受けていたが、ユーノやクロノ、リンディの働きかけで、保護観察は受けるものの(なお、保護観察官はギル‧グレアム提督である)ほぼ無罪が確定[4 ]。 "), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-魔法科高校の劣等生.pdf¥'}, page_content=¥'両親を亡くした後、四葉家のメイドをしていたが、2 0 96 年4 ⽉に真夜の指示によって第一高校に入学、司波兄妹のメイド兼深雪のガーディアン見習いとして同居を始め る。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-高町なのは.pdf¥'}, page_content=¥'ヴィータはともに教導に励む仲。 住居はミッドチルダで、高級住宅地を思わせる庭付きの一⼾建てに娘のヴィヴィオと二人暮らしであるが、家族団欒のシーンでは親友フェイト の登場頻度も高く、機動六課時代の後輩共々親しい交流が続いている。『ViVid』以降では、バリアジャケット時の髪型がサイドポニーになっている。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="5 . ^ なのはとは文 通を続けておりその時に日本語を勉強している(『The MOVIE 2 nd A¥'s』オーディオコメンタリーより)6 . ^ なお、1 期のフェイトはポジション、性格、言動など様々な⾯において原作『とらいあんぐるハート3 リリカルおもちゃ箱』に登場する原作版クロノを髣髴とさせるため、これらはかなり意味深な設定である。 "), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-八神はやて.pdf¥'}, page_content=¥'1 2 . ^ 八神はやて (http:==w==.nanoha.com/archive3 /character/hayate.html)魔法少女リリカルなのはStrikerS公式サイト1 3 . ^ ただし、リイン フォースは練習試合だからこそであり極限の勝負ではなのはに分があると分析している。1 4 . ^ なのは達と同じ私立聖祥大附属小学校。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-魔法少女リリカルなのは.pdf¥'}, page_content=¥'登場人物→「魔法少女リリ カルなのはシリーズの登場人物」を参照高町なのは本作の主人公。海鳴市に住む小学3 年生。ひょんなことからフェレットに似た動物の姿をしていたユーノと出会い、インテリジェントデバイスである「レイジングハート」を託されたことで魔法少女となる。フェイト‧テスタロッサもう一人の主人公。なのはと同い年の、異世 界出身の魔法少女。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-高町なのは.pdf¥'}, page_content=¥'1 1 歳の頃の事件のことを気にしているようで他人の無茶に対しては厳しく逆に他人から指摘されると「自分は武装隊だから危険は当然」と棚に上げ、結果 的に自身が一番無茶をしてしまうのでフェイト達に叱られることもしばしばある。¥¥x0 cまた、1 0 年の間に自⼰の鍛錬も怠っておらず、運動能力もさらに向上させている。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="彼 女の教育係だったリニスが、フェイト専用として愛情を込め作り上げたもの。常にフェイトの傍らにあって⼼の支えとなるが、『A¥'s』におけるシグナムとの戦いで中破した。後に、新機能(ベルカ式カートリッジシステム「CVK7 92 -R」)を組み込み「バルディッシュ‧アサルト」として生まれ変わった。黒ベースの服に⾚黒の マントがトレードマーク。『A¥'s』以降は左手と両⾜⾸下を装甲化した。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'使い魔のアルフとは「使い魔と主人」の関係を越えた深い絆で結ばれている。第1 期1 1 話のエイミィ の台詞からフェイトという名前はプロジェクトFの開発コードであることも明かされている。 なお誕生時から(死亡時の)アリシアと同じ年齢の⾁体‧記憶を持って生まれたため、フェイトとして生きた時間は外見より短いと思われる。¥¥x0 c使用デバイスはインテリジェントデバイス「バルディッシュ」。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-高町なのは.pdf¥'}, page_content=¥'階級は一尉のまま留まっており、(フェイトを養育するために艦隊勤務から外れたリンディ‧ハラオウン提督のように)前線には赴かず比較的平穏な任務に就き、生活も基本的には娘の ヴィヴィオに合わせている。ヴィータはともに教導に励む仲。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'第2 6 話エピローグの機動六課解散後は次元航行部隊に復隊、その際ティアナを2 人目の補佐官として、執務 官志望の彼女を現場で鍛え続けた。ティアナは約1 年半後にさらに難関となった執務官試験に見事合格している。『ViVid』におけるフェイト主人公高町ヴィヴィオの2 人のママの一方として登場。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="元来の防御の薄さを補うのではなく、さらに長所である高速戦闘を追求するあたり、「速度」に全てを賭けたフェイトの決意の表れである。『A¥'s』第7 話で名前のみ登場。実際に披露したのは第9話だが、このときも仮⾯の戦士が乱入したため、真価は発揮できずじまい。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-魔法少女リリカルなのはStrikerS.pdf¥'}, page_content=¥'プロジェクトF(またはF計画)第1 期で初登場し、当初は「プロジェクトF.A.T.E」と呼ばれていた計画(劇中で略称としてF計画とプロジェクトFが使われ迷⾛ していたが2 クール目に入ってプロジェクトFで統一された)。¥')]', additional_kwargs={}, response_metadata={}), HumanMessage(content='question: フェイトが留学生として通った小学校は?', additional_kwargs={}, response_metadata={})] ======================== === LLM response ====== content='情報がないので回答できません。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 8, 'prompt_tokens': 3 1 4 7 , 'total_tokens': 3 1 5 5 , 'completion_tokens_details': {'accepted_prediction_tokens': 0 , 'audio_tokens': 0 , 'reasoning_tokens': 0 , 'rejected_prediction_tokens': 0 }, 'prompt_tokens_details': {'audio_tokens': 0 , 'cached_tokens': 0 }}, 'model_name': 'gpt-4 o- 2 0 2 4 -0 8-0 6 ', 'system_fingerprint': 'fp_a7 9d8dac1 f', 'finish_reason': 'stop', 'logprobs': None} id='run-1 0 0 d6 6 0 b-d4 1 1 -4 0 5 1 -b93 c-5 7 2 4 a6 2 fccd3 -0 ' usage_metadata={'input_tokens': 3 1 4 7 , 'output_tokens': 8, 'total_tokens': 3 1 5 5 , 'input_token_details': {'audio': 0 , 'cache_read': 0 }, 'output_token_details': {'audio': 0 , 'reasoning': 0 }} ======================== === 回答 =============== 情報がないので回答できません。 ======================== フィルタリングなしの実行結果
  70. Copyright © 2024, Oracle and/or its affiliates デモ - RAG(ChromaDB

    を使用)フィルタリングあり 78 === Generated Prompt === messages=[SystemMessage(content='あなたの仕事は、human の question に答えることです。以下の手順で回答してください。前置きや思考経過は出力しないでください。context の中の source のファイル名には、content の主題が含まれています。最初に、 context に書かれて いる情報だけを使用して、question の質問に答えることができるかどうか判断してください、判断結果は出力しません。次に、context にある情報だけで回答が可能と判断した場合は、context に書かれている情報だけを使用して、question の質問に答えてください。context にある情報だけでは 回答できないと判断した場合は、情報がないので回答できないと答えてください。¥n¥ncontext: [Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'シグナムは事あるごとに、フェイトをからかうためにそのことを引き合いに出す (ただし、試験時期になのはの看病に時間を割いたために、万全の状態で試験に臨めなかった可能性が『StrikerS THECOMICS』でそれとなく記述されている)。また、自宅から聖祥大附属中学に通学している。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・ テスタロッサ.pdf¥'}, page_content="後にリンディ‧ハラオウンの養子になり、名前がフェイト‧T(テスタロッサ)‧ハラオウン(Fate T. Harlaown)となる。担当声優は⽔樹奈々。人物像第1 期‧『A¥'s』時外見年齢は9歳(後述)。誕生日は5 ⽉2 9日。⾦の髪と「寂しげな目」をした[2 ]もう1 人の 魔法少女。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="第1 期最終話エピローグからは日常で着けるリボンが細い黒のリボンから太めのピンクのリボンを着けるようになった[3 ]。『A¥'s』におけるフェイトなのはとの再会の 約束を胸に、1 期の一連の出来事(PT事件)の重要参考人として裁判を受けていたが、ユーノやクロノ、リンディの働きかけで、保護観察は受けるものの(なお、保護観察官はギル‧グレアム提督である)ほぼ無罪が確定[4 ]。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="5 . ^ なのはとは文通を続けておりその時に日本語を勉強している(『The MOVIE 2 nd A¥'s』オーディオコメンタリーより)6 . ^ なお、1 期のフェイトはポジション、性格、言動など様々な⾯において原作『とらいあんぐるハー ト3 リリカルおもちゃ箱』に登場する原作版クロノを髣髴とさせるため、これらはかなり意味深な設定である。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="彼女の教育係だったリニスが、フェイト専用として愛情を込め作り上 げたもの。常にフェイトの傍らにあって⼼の支えとなるが、『A¥'s』におけるシグナムとの戦いで中破した。後に、新機能(ベルカ式カートリッジシステム「CVK7 92 -R」)を組み込み「バルディッシュ‧アサルト」として生まれ変わった。黒ベースの服に⾚黒のマントがトレードマーク。『A¥'s』以降は左手と両⾜⾸下を装甲 化した。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'使い魔のアルフとは「使い魔と主人」の関係を越えた深い絆で結ばれている。第1 期1 1 話のエイミィの台詞からフェイトという名前はプロジェクトFの開発コードであるこ とも明かされている。 なお誕生時から(死亡時の)アリシアと同じ年齢の⾁体‧記憶を持って生まれたため、フェイトとして生きた時間は外見より短いと思われる。¥¥x0 c使用デバイスはインテリジェントデバイス「バルディッシュ」。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia- フェイト・テスタロッサ.pdf¥'}, page_content=¥'第2 6 話エピローグの機動六課解散後は次元航行部隊に復隊、その際ティアナを2 人目の補佐官として、執務官志望の彼女を現場で鍛え続けた。ティアナは約1 年半後にさらに難関となった執務官試験に見事合格している。『ViVid』におけるフェイト主 人公高町ヴィヴィオの2 人のママの一方として登場。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="元来の防御の薄さを補うのではなく、さらに長所である高速戦闘を追求するあたり、「速度」に全てを賭けたフェイトの決 意の表れである。『A¥'s』第7 話で名前のみ登場。実際に披露したのは第9話だが、このときも仮⾯の戦士が乱入したため、真価は発揮できずじまい。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'さらに、ヴィヴィオと保 護するなのはの後見人にもなっており、ヴィヴィオからは「もう1 人のママ」と思われている(とはいえ、フェイト自身は本当の意味でヴィヴィオが「⺟」と慕っているのはなのはであると語っている)。教育方針は少々過保護気味で、エリオとキャロの二人が局の魔導師になったことを本⼼では快く思っていない。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'『ViVid』ではかなり家庭的に¥¥x0 cなっていて、アインハルトからは、なのは同様穏やかで家庭的な普通の⺟親だと思われていたらしく、それを言ったときに『StrikerS』時の本 来の役職を知っているノーヴェに苦笑されていた。『Force』におけるフェイトエクリプス関連事件の捜査に従事する執務官として、なのはよりも早く登場。バリアジャケット時の髪型が再び変わっており、ストレートからポニーテールになっている。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content="軍服調へと大きく変化し、色も今までの黒から濃紺に。マントも⽩地の黒縁となり、これはエ¥¥x0 cリオ‧キャロにも引き継がれた。ただし「高速機動を生かす」というコンセプトは変わらず、左手と⾜⾸下の装甲も同様である。真‧ ソニックフォーム『StrikerS』以降でのフェイトのバリアジャケットの換装形態で、『A¥'s』のソニックフォームの完成形態というべきもの。"), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'フェイト‧テスタロッサ出典: フリー百 科事典『ウィキペディア(Wikipedia)』魔法少女リリカルなのはシリーズ > 登場人物 > フェイト‧テスタロッサフェイト‧テスタロッサ(Fate Testarossa)は、テレビアニメ作品『魔法少女リリカルなのは』シリーズに登場する架空の人物であり、同作の主人公の1 人である[1 ]。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'突然起こった事件の捜索と、時空管理局の巡行艦「アースラ」の修繕を機にリンディ、クロノ、アルフと一緒に海鳴市の高級マンション(高町家の近所にある)で新たな生活を始 め、アリサ、すずかとも晴れて対⾯しての友達となった。その数日後、留学生という形で私立聖祥大附属小学校へ通うことになる。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥' 「https:==ja.wikipedia.org/w/index.php?title=フェイト‧テスタロッサ&oldid=1 0 1 5 3 5 87 2 」から取得¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'ただし物語の中核が「なのはと教え子たち」に置 かれているためか、前二作と比べると幾分比重が落ちている(後期OPでなのはの対として描かれるキャラもフェイトからスバルに代わっている)。そのためか模擬戦に参加することも¥¥x0 cあまり見られなくなった。なのはと共に正式に管理局に所属。訓練学校を経て義兄のクロノと同様時空管理局執務官となり、 法務や事件捜査を担当している。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'第1 期におけるフェイト⺟プレシアの指示で、ジュエルシードを集めるために使い魔のアルフを伴ってなのは達の住む世界にやってきた。当 初はなのはと敵対していたが、彼女の真っ直ぐな優しさや強さに⼼を開いていく。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'またPT事件後、リンディから養子縁組の申し出をされており、⼾惑い保留していたものの、 「闇の書」事件終結後にそれを受け入れ、「フェイト‧T‧ハラオウン」を名乗る。リーゼ姉妹の評価によると能力的にはクロノと完全に兄妹と言ってよいほど近いらしく、『-THE BATTLE OF ACES-』でのシグナムの見立てでは性格⾯でもクロノとの⾎縁を疑うほど似ているとされている[6 ]。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'『-THE GEARS OF DESTINY-』の描き下ろしお⾵呂ポスターでは、レヴィに抱きつかれ、体を触られたり、前を隠そうとしないなのはにタオルを渡すなどやや苦労人として描かれ ている。『StrikerS』におけるフェイト第2 3 話を除く全話に登場する不動のレギュラー。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'といっても最初から上手く出来たわけではないらしく、子育てを始めた当初はリンディ やレティ、桃子に相談を持ちかけたり、大量の育児書を読み漁っていたらしい(StrikerS SS0 2 )。親友のはやてが設立した機動六課に出向という形で所属し、部隊付執務官として法務担当と広域捜査の主任を務める一方、「ライトニング分隊」隊長としてエリオとキャロを率い、前線で活躍する。¥'), Document(metadata={¥'source¥': ¥'data¥¥¥¥Wikipedia-フェイト・テスタロッサ.pdf¥'}, page_content=¥'また、あまり登場しないが闇の⽋⽚の彼女は、ジュエルシードを探していた頃(ヴィータシナリオ)と⺟親に捨てられた自身の苦悩が具現化した者が登場し、フェイト本人やクロノと 対決しており、闇の⽋⽚からも彼女の繊細さが現れている。「闇の書事件」後、小学4 年生のときに時空管理局執務官候補生となり義兄クロノと同じアースラに勤務。その後、時空管理局執務官となっている。執務官試験に2 度落ちており、そのことは禁句。¥')]', additional_kwargs={}, response_metadata={}), HumanMessage(content='question: フェイトが留学生として通った小学校は?', additional_kwargs={}, response_metadata={})] ======================== === LLM response ====== content='私立聖祥大附属小学校です。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 1 2 , 'prompt_tokens': 3 4 2 2 , 'total_tokens': 3 4 3 4 , 'completion_tokens_details': {'accepted_prediction_tokens': 0 , 'audio_tokens': 0 , 'reasoning_tokens': 0 , 'rejected_prediction_tokens': 0 }, 'prompt_tokens_details': {'audio_tokens': 0 , 'cached_tokens': 0 }}, 'model_name': 'gpt-4 o- 2 0 2 4 -0 8-0 6 ', 'system_fingerprint': 'fp_a7 9d8dac1 f', 'finish_reason': 'stop', 'logprobs': None} id='run-1 91 2 5 4 6 c-9d0 f-4 4 aa-aed8-5 3 d9fe1 83 2 3 e-0 ' usage_metadata={'input_tokens': 3 4 2 2 , 'output_tokens': 1 2 , 'total_tokens': 3 4 3 4 , 'input_token_details': {'audio': 0 , 'cache_read': 0 }, 'output_token_details': {'audio': 0 , 'reasoning': 0 }} ======================== === 回答 =============== 私立聖祥大附属小学校です。 ======================== フィルタリングありの実行結果
  71. Copyright © 2024, Oracle and/or its affiliates デモ - RAG(ChromaDB

    を使用)フィルタリングあり 79 評価 検索 件数 (top k) フィルタ リング 質問 期待する 正答 RAGの回答 正 誤 検索でき ているか 検索結果 に基づい ているか 評価 20 なし フェイトが留学生として 通った小学校は? 私立聖祥大附属小 学校です。 情報がないので回 答できません。 × × 〇(検索結果 にこの情報はな い) ×(DBに情報 があるので正答 して欲しい) 20 あり フェイトが留学生として 通った小学校は? 私立聖祥大附属小 学校です。 私立聖祥大附属 小学校です。 〇 〇 〇 〇
  72. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    80 リトリーバル(検索)の課題 1 多数の文書の類似したセンテンスに埋もれてしまう(ノイズ) 2 網羅性(同義語、類義語、関連用語を網羅しきれない。セマンティック検索といっても万能ではない) 3 対話文脈の反映漏れ(ユーザーの直近の入力(質問)文だけでデータベースを検索してよいか?) 4 ベクトル検索に不適合なクエリー(型番など特定の文字列、フレーズへ正確に一致する検索は苦手) 5 複雑、複合的な質問(「Uber と Lyft のそれぞれの戦略の違いを教えてください」のような比較など) 6 そもそもデータベースに登録されているドキュメントは、「質問文」の形をしていない 7 検索結果をLLMのコンテキストに入力する際の並び順 Tips これらの課題には既に対処方法が提案されていますが、適用する対処方法が多い程、応答時間が長くなる、LLMの使用 料が増える、アプリケーションが複雑になるなどトレードオフがあります。また、副作用で精度が落ちることもありユースケース (データ、質問)に合わせた試行錯誤が必要です。
  73. Copyright © 2024, Oracle and/or its affiliates 81 アプリケーション ベクトルデータベース

    LLM ④クエリー ⑤検索結果 ①質問 ⑧回答 ⑥回答生成指示 ⑦回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) インデックス化 クエリーの網羅性を高めるためオリジナルの 質問に近い質問文を複数生成する ②複数クエリーの生成を指示 ③生成したクエリー(複数) リトリーバル 網羅性 Advanced RAG クエリー拡張(マルチクエリー)
  74. Copyright © 2024, Oracle and/or its affiliates 82 アプリケーション ベクトルデータベース

    LLM ④クエリー ⑤検索結果 ①質問 ⑧回答 ⑥回答生成指示 ⑦回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) 生成された複数のクエ リーで検索 インデックス化 クエリーの網羅性を高めるためオリジナルの 質問に近い質問文を複数生成する ②複数クエリーの生成を指示 ③生成したクエリー(複数) リトリーバル 網羅性 Advanced RAG クエリー拡張(マルチクエリー)
  75. Copyright © 2024, Oracle and/or its affiliates 83 アプリケーション ベクトルデータベース

    LLM ④クエリー ⑤検索結果 ①質問 ⑧回答 ⑥回答生成指示 ⑦回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) 生成された複数のクエ リーで検索 インデックス化 クエリーの網羅性を高めるためオリジナルの 質問に近い質問文を複数生成する ②複数クエリーの生成を指示 ③生成したクエリー(複数) 検索結果に回答生成に 必要な情報が含まれ る可能性が高まる リトリーバル 網羅性 Advanced RAG クエリー拡張(マルチクエリー)
  76. Copyright © 2024, Oracle and/or its affiliates 84 アプリケーション ベクトルデータベース

    LLM ④クエリー ⑤検索結果 ①質問 ⑧回答 ⑥回答生成指示 ⑦回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) 生成された複数のクエ リーで検索 インデックス化 クエリーの網羅性を高めるためオリジナルの 質問に近い質問文を複数生成する ②複数クエリーの生成を指示 ③生成したクエリー(複数) 検索結果に回答生成に 必要な情報が含まれ る可能性が高まる リトリーバル 網羅性 Advanced RAG クエリー拡張(マルチクエリー) LangChain では、MultiQueryRetriever を 利用できます。
  77. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    85 リトリーバル(検索)の課題 1 多数の文書の類似したセンテンスに埋もれてしまう(ノイズ) 2 網羅性(同義語、類義語、関連用語を網羅しきれない。セマンティック検索といっても万能ではない) 3 対話文脈の反映漏れ(ユーザーの直近の入力(質問)文だけでデータベースを検索してよいか?) 4 ベクトル検索に不適合なクエリー(型番など特定の文字列、フレーズへ正確に一致する検索は苦手) 5 複雑、複合的な質問(「Uber と Lyft のそれぞれの戦略の違いを教えてください」のような比較など) 6 そもそもデータベースに登録されているドキュメントは、「質問文」の形をしていない 7 検索結果をLLMのコンテキストに入力する際の並び順 Tips これらの課題には既に対処方法が提案されていますが、適用する対処方法が多い程、応答時間が長くなる、LLMの使用 料が増える、アプリケーションが複雑になるなどトレードオフがあります。また、副作用で精度が落ちることもありユースケース (データ、質問)に合わせた試行錯誤が必要です。
  78. Copyright © 2024, Oracle and/or its affiliates 86 チャット形式の場合、ユーザーの直近の 「質問」だけでは文脈を反映していない

    東京都内のゼロメートル地帯は? ゼロメートル地帯とは、海抜が0メートル前後の低い土地のことをいい、高潮や豪雨などの際に浸⽔被害が発生する 可能性が高い地域です。東京都内のゼロメートル地帯としては、以下のような地域が知られています。 江⼾川区、葛飾区、⾜立区、江東区、港区、千代田区 これらの地域は、かつて海や川だった場所を埋め立てて土地を造成したエリアが多く、標高が低いためにゼロメートル 地帯となっています。 気候変動の影響は? 気候変動は、地球の自然な気候システムに長期的な変化をもたらす人間の活動の影響を指し、すでに深刻で広 範な影響を及ぼしています。気候変動の影響には次のようなものがあります。 極端な気象現象の増加:気候変動は、熱波、干ばつ、豪雨、暴⾵雨などの極端な気象現象の頻度と激しさを増 加させています。これらのイベントは人命、インフラ、農業に壊滅的な影響を与えます。たとえば、より激しい熱波は深 刻な健康問題を引き起こし、……….(以下省略)) ※LLMとのチャットでは、会話履歴を都度LLMへ入力して文脈をLLMに伝えることができますがベクトルデータ ベースの検索でクエリーに長い会話履歴を含めることはできません。 リトリーバル 対話文脈の反映漏れ Advanced RAG クエリーの文脈拡張
  79. Copyright © 2024, Oracle and/or its affiliates 87 チャット形式の場合、ユーザーの直近の 「質問」だけでは文脈を反映していない

    東京都内のゼロメートル地帯は? ゼロメートル地帯とは、海抜が0メートル前後の低い土地のことをいい、高潮や豪雨などの際に浸⽔被害が発生する 可能性が高い地域です。東京都内のゼロメートル地帯としては、以下のような地域が知られています。 江⼾川区、葛飾区、⾜立区、江東区、港区、千代田区 これらの地域は、かつて海や川だった場所を埋め立てて土地を造成したエリアが多く、標高が低いためにゼロメートル 地帯となっています。 気候変動の影響は? 気候変動は、地球の自然な気候システムに長期的な変化をもたらす人間の活動の影響を指し、すでに深刻で広 範な影響を及ぼしています。気候変動の影響には次のようなものがあります。 極端な気象現象の増加:気候変動は、熱波、干ばつ、豪雨、暴⾵雨などの極端な気象現象の頻度と激しさを増 加させています。これらのイベントは人命、インフラ、農業に壊滅的な影響を与えます。たとえば、より激しい熱波は深 刻な健康問題を引き起こし、……….(以下省略)) ※LLMとのチャットでは、会話履歴を都度LLMへ入力して文脈をLLMに伝えることができますがベクトルデータ ベースの検索でクエリーに長い会話履歴を含めることはできません。 リトリーバル 対話文脈の反映漏れ Advanced RAG クエリーの文脈拡張 東京のゼロメートル地帯への気候変動 の影響を聞いているのに一般的な気候 変動の影響を答えてしまっている
  80. Copyright © 2024, Oracle and/or its affiliates 88 アプリケーション ベクトルデータベース

    LLM ④クエリー ⑤検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) インデックス化 会話履歴から質問者の意図を推 測させてクエリーを書き換える。同時 にクエリーの網羅性を高めるため複 数のクエリーを生成する ②クエリーの書き換え指示 ③生成したクエリー(複数) リトリーバル 対話文脈の反映漏れ Advanced RAG クエリーの文脈拡張
  81. Copyright © 2024, Oracle and/or its affiliates 89 アプリケーション ベクトルデータベース

    LLM ④クエリー ⑤検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 ナレッジベース チャンキング(ベクトル化できる小さなチャンクに分割) 生成された複数のクエ リーで検索 インデックス化 会話履歴から質問者の意図を推 測させてクエリーを書き換える。同時 にクエリーの網羅性を高めるため複 数のクエリーを生成する ②クエリーの書き換え指示 ③生成したクエリー(複数) リトリーバル 対話文脈の反映漏れ Advanced RAG クエリーの文脈拡張
  82. Copyright © 2024, Oracle and/or its affiliates 90 **指示 あなたはデータサイエンティストです。セマンティックサーチが得意なベクトルデータベースに問い合わせるクエリーを書いています。

    以下のステップでユーザーの質問をベクトルデータベースへの適切な問い合わせ文5つに書き直してください。 各ステップの途中経過は出力しないでください。 ステップ1):会話履歴の中でユーザーが関⼼を持っている事物とアシスタントの応答の中でユーザーの関⼼と関連の深い事物を抽出します。 ステップ2):ユーザーの質問に現れる単語の同義語や言葉の揺らぎ、関連用語を幅広く想起します。 ステップ3):会話履歴からユーザーの意図を推測します。 ステップ4):抽出したユーザーが関⼼を持っている事物とアシスタントの応答の中でユーザーの関⼼と関連の深い事物を、問い合わせに反映します。 ステップ5):問い合わせ文を5つ生成します。 ステップ6):問い合わせ文群をjson形式で返してください。ステップバイステップで考えましょう。 jsonの例: [ {query:"問い合わせ1"}, {query:"問い合わせ2"}, {query:"問い合わせ3"}, {query:"問い合わせ4"}, {query:"問い合わせ5"} ] **会話履歴:{context} **ユーザーの質問:{question} クエリーへ文脈を反映させるプロンプトの例 [ {query: "ゼロメートル地帯は気候変動によってどのような影響を受ける可能性がありますか?"}, {query: "ゼロメートル地帯の浸⽔リスクは気候変動によってどのように変化すると予想されますか?"}, {query: "海抜0メートル前後の土地は気候変動による高潮や豪雨の影響をどれほど受けるのでしょうか?"}, {query: "東京都内のゼロメートル地帯が気候変動によって直⾯する課題は何ですか?"}, {query: "気候変動は東京都内のゼロメートル地帯の住環境にどのようなインパクトを与えますか?"} ] 東京ゼロメートル地帯と気候変動の場合のクエリー生成の例 会話履歴を挿入 ユーザーの質問を挿入 リトリーバル 対話文脈の反映漏れ Advanced RAG クエリーの文脈拡張 気候変動の影響は? 東京都内のゼロメートル地帯は? LangChain では、 create_history_aware_retriever 、もしくは、 LangGraph を利用できます。 下記は自前実装の例。
  83. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    91 リトリーバル(検索)の課題 1 多数の文書の類似したセンテンスに埋もれてしまう(ノイズ) 2 網羅性(同義語、類義語、関連用語を網羅しきれない。セマンティック検索といっても万能ではない) 3 対話文脈の反映漏れ(ユーザーの直近の入力(質問)文だけでデータベースを検索してよいか?) 4 ベクトル検索に不適合なクエリー(型番など特定の文字列、フレーズへ正確に一致する検索は苦手) 5 複雑、複合的な質問(「Uber と Lyft のそれぞれの戦略の違いを教えてください」のような比較など) 6 そもそもデータベースに登録されているドキュメントは、「質問文」の形をしていない 7 検索結果をLLMのコンテキストに入力する際の並び順 Tips これらの課題には既に対処方法が提案されていますが、適用する対処方法が多い程、応答時間が長くなる、LLMの使用 料が増える、アプリケーションが複雑になるなどトレードオフがあります。また、副作用で精度が落ちることもありユースケース (データ、質問)に合わせた試行錯誤が必要です。
  84. Copyright © 2024, Oracle and/or its affiliates 92 アプリケーション ベクトルデータベース

    LLM ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 ナレッジベース テキストサーチエンジン チャンキング インデキシング リトリーバル ベクトル検索に不適合 Advanced RAG ハイブリッド検索 型番などの文字列やフレーズに対する厳密な 検索はテキスト(キーワード)検索が優れて いる LangChain では、EnsembleRetriever で、 複数のリトリーバーの結果を統合できます。
  85. Copyright © 2024, Oracle and/or its affiliates 93 アプリケーション ベクトルデータベース

    LLM ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 チャンキング インデキシング テキストサーチエンジン リランカー リランク 質問文とデータベースの検索結果(複 数)を入力として、質問文への回答作成 に相応しい順番に並べ替える操作。リラン カーと呼ばれる機械学習モデル(Cohere Rerank等)が使われることが多い。 リトリーバル ベクトル検索に不適合 Advanced RAG ハイブリッド検索
  86. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    94 リトリーバル(検索)の課題 1 多数の文書の類似したセンテンスに埋もれてしまう(ノイズ) 2 網羅性(同義語、類義語、関連用語を網羅しきれない。セマンティック検索といっても万能ではない) 3 対話文脈の反映漏れ(ユーザーの直近の入力(質問)文だけでデータベースを検索してよいか?) 4 ベクトル検索に不適合なクエリー(型番など特定の文字列、フレーズへ正確に一致する検索は苦手) 5 複雑、複合的な質問(「Uber と Lyft のそれぞれの戦略の違いを教えてください」のような比較など) 6 そもそもデータベースに登録されているドキュメントは、「質問文」の形をしていない 7 検索結果をLLMのコンテキストに入力する際の並び順 Tips これらの課題には既に対処方法が提案されていますが、適用する対処方法が多い程、応答時間が長くなる、LLMの使用 料が増える、アプリケーションが複雑になるなどトレードオフがあります。また、副作用で精度が落ちることもありユースケース (データ、質問)に合わせた試行錯誤が必要です。
  87. Copyright © 2024, Oracle and/or its affiliates 95 ベクトルデータベースでは、入力クエリーが複雑な場合、複合的な意味を持っている場合、複数のサブクエリへ分 割することで精度を高められることがあります

    元のクエリー 分割されたサブクエリー “日本人のアニメファンがアニメ関連で年間で消費する ⾦額と鉄道ファンの年間消費⾦額は一人当たりでは どっちが多い?” 日本人 アニメファン 年間消費⾦額 日本人 鉄道ファン 年間消費⾦額 OCI Generative AI(Cohere Command R) の search_queries_only オプションの実行例 リトリーバル 複雑な質問 Advanced RAG サブクエリー そもそもデータベースに登録されているドキュ メントは、「質問文」の形をしていない
  88. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    96 リトリーバル(検索)の課題 1 多数の文書の類似したセンテンスに埋もれてしまう(ノイズ) 2 網羅性(同義語、類義語、関連用語を網羅しきれない。セマンティック検索といっても万能ではない) 3 対話文脈の反映漏れ(ユーザーの直近の入力(質問)文だけでデータベースを検索してよいか?) 4 ベクトル検索に不適合なクエリー(型番など特定の文字列、フレーズへ正確に一致する検索は苦手) 5 複雑、複合的な質問(「Uber と Lyft のそれぞれの戦略の違いを教えてください」のような比較など) 6 そもそもデータベースに登録されているドキュメントは、「質問文」の形をしていない 7 検索結果をLLMのコンテキストに入力する際の並び順 Tips これらの課題には既に対処方法が提案されていますが、適用する対処方法が多い程、応答時間が長くなる、LLMの使用 料が増える、アプリケーションが複雑になるなどトレードオフがあります。また、副作用で精度が落ちることもありユースケース (データ、質問)に合わせた試行錯誤が必要です。
  89. Copyright © 2024, Oracle and/or its affiliates 97 • ユーザーの質問とそれに対応するドキュメントの文章自体は必ずしも類似していないため適切なチャンクを見つけられな

    いことがあります ➢ 例:「何か美味しい物が食べたい」という質問に似た文章がレストランガイドにはないため、適切なレストランの情 報を見つけられない • HyDEでは、質問から想定される仮の回答を生成し、その埋め込みを使って類似するチャンクを検索します。 これにより、 質問文と直接的な類似性が低い文書であっても、質問に対する答えとなりうる情報を含む文書チャンクを取得できる ようになります(ひとつの仮想回答の特徴に引きずられないように複数の仮想回答の埋め込みの平均を使うこともで きます)。 元のクエリー 生成された仮の回答 KellyとWilliamsによる倫理の定義は何ですか? KellyとWilliamsによると、倫理とは人々が正しい行動をす るための原則や価値観の集合です。これには誠実さ、公正さ、 責任感などが含まれます。 Advanced RAG — Improving retrieval using Hypothetical Document Embeddings(HyDE) より引用 リトリーバル 質問文とドキュメントの乖離 Advanced RAG HyDE (Hypothetical Document Embeddings) ※HyDE は、” Does BERT Make Any Sense? Interpretable Word Sense Disambiguation with Contextualized Embeddings” (https://arxiv.org/abs/1909.10430)によって最初に提案されました。 RAGのベクトル検索結果をリランカーで再び並べかえるのはなぜ?そして、その先へ! 補⾜1:クエリとドキュメントは似ていない件 もご参照くさい。 LangChain では、 HypotheticalDocumentEmbedder を 利用できます。
  90. リトリーバルの課題 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    98 リトリーバル(検索)の課題 1 多数の文書の類似したセンテンスに埋もれてしまう(ノイズ) 2 網羅性(同義語、類義語、関連用語を網羅しきれない。セマンティック検索といっても万能ではない) 3 対話文脈の反映漏れ(ユーザーの直近の入力(質問)文だけでデータベースを検索してよいか?) 4 ベクトル検索に不適合なクエリー(型番など特定の文字列、フレーズへ正確に一致する検索は苦手) 5 複雑、複合的な質問(「Uber と Lyft のそれぞれの戦略の違いを教えてください」のような比較など) 6 そもそもデータベースに登録されているドキュメントは、「質問文」の形をしていない 7 検索結果をLLMのコンテキストに入力する際の並び順 Tips これらの課題には既に対処方法が提案されていますが、適用する対処方法が多い程、応答時間が長くなる、LLMの使用 料が増える、アプリケーションが複雑になるなどトレードオフがあります。また、副作用で精度が落ちることもありユースケース (データ、質問)に合わせた試行錯誤が必要です。
  91. リトリーバルと生成 ナイーブ(ベーシック) RAG Copyright © 2024, Oracle and/or its affiliates

    99 検索結果を LLM へ渡す際の並び順により生成される回答の品質が影響を受ける Lost in the Middle: How Language Models Use Long Contexts https://arxiv.org/abs/2307.03172 より • LLM は、コンテキスト(入力データ)の先頭付近と末尾付近の データ)は有効活用できるが、中ほどのデータを活用しきれない性 質がある。 • ベクトルデータベースは、「質問文の埋め込み」と「データベースに登 録されているテキストの埋め込み」の類似度を計算して、近い順に 返してくれるもの。文と文の類似度を直接計算しているわけではな い。つまり、本当に似ている順になっているか怪しい。 おぼえていま すか?
  92. Copyright © 2024, Oracle and/or its affiliates 100 リトリーバル 検索結果の並び順

    Advanced RAG リランカー 元のテキストの情報が希釈された埋め込 みを比較して並べ替えるため、精度は劣 るが高速に処理できる 元のテキストの全情報を使って、並べ替 えるため、高い精度で並べ替えることがで きる RAGのベクトル検索結果をリランカーで再び並べかえるのはなぜ?そして、その先へ! https://qiita.com/yuji-arakawa/items/3f68a7136e42f743ae6b (問い合わせ文) (DBに格納されたテキスト群) (問い合わせ文) (DBにから返された検索結果群) 検索結果を LLM へ渡す際の並び順により生成 される回答の品質が影響を受ける DBに保存する埋め込みはあらかじめ生成しておくことができるため、検 索時には「問い合わせ文」の埋め込みだけ生成すればよく高速
  93. Copyright © 2024, Oracle and/or its affiliates 101 リトリーバル 検索結果の並び順

    Advanced RAG リランカー (問い合わせ文) (DBに格納されたテキスト群) (問い合わせ文) (DBにから返された検索結果群) 1. ベクトルデータベースで大規模なデー タから候補を絞り込む(例:上位 100件) 2. 次にリランカーで候補のリランキングを 行い、より高い精度で並べ替えた検 索結果をLLMへの入力とする(例: 上位10件) 検索結果を LLM へ渡す際の並び順により生成 される回答の品質が影響を受ける LangChain では、ContextualCompressionRetriever で実装できます。
  94. 画像のキャプションに対する類似性検索 Copyright © 2024, Oracle and/or its affiliates 103 検索テキスト

    ⽩いベレー帽を被った女の子 リランカーなし リランカーあり マルチモーダル画像検索アプリを作ってみた!
  95. 最近の研究による発展 LLM への入力データ(DBの検索結果)の並び順に関する展望 Copyright © 2024, Oracle and/or its affiliates

    105 類似度検索のスコアやリランカーによって入力データの並び順を決定しているのは以下の仮定(期待)に基づいている 質問文への類似度が高いチャンクほど正解を含んでいる可能性が高いという仮定。つまり、正解を含んだチャンクや正 答率が高くなる配置はわからないので、次善の策として類似度順に並べ替えてうまく行くと期待している “Likelihood as a Performance Gauge for Retrieval-Augmented Generatio”n(https://arxiv.org/abs/2411.07773) という論文で、以下のことが報告されています また、この研究ではこの最適な配置を効率的に割り出す2つの方法(Naïve likelihood-based selectionとGold Document Reordering)も提案されており、今後の発展が期待されます。 RAGの回答精度が高くなる検索結果の配置を質問文の尤度(検索で与えられた文書群を見た後の質問文の条件 付き尤度)を計算することで予測できる RAGのベクトル検索結果をリランカーで再び並べかえるのはなぜ?そして、その先へ! 今後の展望もご参照くさい。
  96. 最近の研究による発展 LLM への入力データ(DBの検索結果)の並び順に関する展望 Copyright © 2024, Oracle and/or its affiliates

    106 類似度検索のスコアやリランカーによって入力データの並び順を決定しているのは以下の仮定(期待)に基づいている 質問文への類似度が高いチャンクほど正解を含んでいる可能性が高いという仮定。つまり、正解を含んだチャンクや正 答率が高くなる配置はわからないので、次善の策として類似度順に並べ替えてうまく行くと期待している “Likelihood as a Performance Gauge for Retrieval-Augmented Generatio”n(https://arxiv.org/abs/2411.07773) という論文で、以下のことが報告されています また、この研究ではこの最適な配置を効率的に割り出す2つの方法(Naïve likelihood-based selectionとGold Document Reordering)も提案されており、今後の発展が期待されます。 RAGの回答精度が高くなる検索結果の配置を質問文の尤度(検索で与えられた文書群を見た後の質問文の条件 付き尤度)を計算することで予測できる 誤解を恐れずに単純化すると、 LLMにとって入力されたチャンクの並びと質問の配置が「自然」に感じられる時、 回答の精度が高くなる傾向がある。 そして、この「自然」な配置を推測する方法が存在する。 したがって、データベースを検索したら、検索結果のこの「自然」な配置を割り出 して、その順番でLLMへ入力することで高い精度を実現できる可能性がある RAGのベクトル検索結果をリランカーで再び並べかえるのはなぜ?そして、その先へ! 今後の展望もご参照くさい。
  97. テキスト以外のデータも扱うマルチモーダルRAGへの展望 Copyright © 2024, Oracle and/or its affiliates 107 画像をできるだけ詳細

    に説明してください。 この画像は、RAG(Retrieval-Augmented Generation)のプロセ スを説明している図です。RAGは、検索と生成を組み合わせたテクノロ ジーで、特に行政やエンタープライズのデータ利活用に用いられます。 質問:ユーザーが質問を提出します。 クエリ:アプリケーションが質問を解析し、検索用のクエリを作成します。 検索結果:クエリがデータベースに送られ、関連するデータが検索されます。 回答生成指示:大規模言語モデルが検索結果を分析し、回答の指示 を生成します。 回答:アプリケーションが指示に基づいて回答を生成します。 回答:ユーザーが回答を受け取ります。 データソースには、非構造化データと構造化データがあります。非構造化 データには、住民情報、防災情報、ゴミ収集管理、文書管理、 Workday、議会情報、税務情報、福祉情報、公共施設予約などが含 まれます。構造化データには、JSON、リレーショナル、ベクトル、グラフ、テキ ストサーチ、地理空間データなどが含まれます。 このプロセスは、データの取り込み、同期、インデックス化を含みます。データ の取り込みは、さまざまなデータソースから行われ、同期はデータの更新を 管理し、インデックス化はデータの検索を効率化します。 MLLM(マルチモーダルLLM) もしくは LVLM (ラージビジョンランゲージモデル) MLLM(LVLM)で生成した画像のキャプションをベクトルデータベースへ格納しておくことで、 • 問い合わせ文に関連した画像を提示したり • 図で説明していることも根拠として回答を生成できる プロンプト マルチモーダル画像検索アプリを作ってみた!
  98. テキスト以外のデータも扱うマルチモーダルRAGへの展望 Copyright © 2024, Oracle and/or its affiliates 108 マルチモーダルLLMアーキテクチャ概要

    マルチモーダル画像検索アプリを作ってみた! マルチモーダルLLMは、画像埋め込みモデルと大規模言語モデルのキメラとも言える構造をしています。 • Vision Encoder:CLIPなどの画像埋め込みモデルを使用して、画像から視覚的特徴を抽出した画像ベクトルを生成します • Projection:画像ベクトルを大規模言語モデルの(テキストの)埋め込み空間へ マッピング します • 大規模言語モデル:テキストと視覚情報を統合して回答を生成します
  99. 生成AIアプリケーションのデプロイメント Copyright © 2024, Oracle and/or its affiliates 109 サーバーレス生成AIアプリの育てかた:OCI

    Generative AI + Functions + API Gateway + Gradio Lite 編 https://qiita.com/yuji-arakawa/items/28f30a5434ba429f3f16 エンタープライズAIモデルとサービスのAPI管理プラットフォームを実装 https://docs.oracle.com/ja/solutions/implement-ai-model-api- management/index.html
  100. Copyright © 2024, Oracle and/or its affiliates 110 Oracle Cloud

    Infrastructure(OCI)の利用は広がってきています! が、「OCIは情報が少ない」というお声をしばしばいただきます… 弊社でも情報発信は力を入れていますが、 社外の方にもブログや記事を書いていただけると大変ありがたいです! QiitaやZenn、はてなブログ、自社サイト、Xでのポストなどなんでも歓迎です!! サービス触ってみた/やってみた系、Tips、ちょっとした気づき、などなどなんでもありがたいです!! ぜひお力をお貸しください!! We want YOU for OCI contributors!! 書いてくれたらみんなで 「イイね!」するよ
  101. Copyright © 2024, Oracle and/or its affiliates 112 コラム –

    プロンプトエンジニアリング/RAG/ファインチューニング 特定のタスクやドメインへの最適化の必要性 • 分類や要約の精度を上げる、速度を上げる、推論コストを下げるなど • 医療、⾦融、数学などの特定領域の質問に的確に答えらえるようにするなど 外部知識の必要性 Retrieval-Augmented Generation for Large Language Models: A Survey Yunfan Gao, Yun Xiong, Xinyu Gao, et al. ( https://arxiv.org/abs/2312.10997 )
  102. Copyright © 2024, Oracle and/or its affiliates 113 コラム –

    プロンプトエンジニアリング/RAG/ファインチューニング Retrieval-Augmented Generation for Large Language Models: A Survey Yunfan Gao, Yun Xiong, Xinyu Gao, et al. ( https://arxiv.org/abs/2312.10997 ) 外部知識の必要性 プロンプトエンジニアリング + RAG プロンプト エンジニアリング プロンプトエンジニアリング + RAG + ファインチューニング ファイン チューニング 特定のタスクやドメインへの最適化の必要性 • 分類や要約の精度を上げる、速度を上げる、推論コストを下げるなど • 医療、⾦融、数学などの特定領域の質問に的確に答えらえるようにするなど