2.3K Views
July 11, 24
スライド概要
2024年7月6日に行われたイベント「[東北][岩手][JAWS-UGいわて]LT会+生成系AIハンズオン」でお話した際の資料です。
イベントリンク: https://jaws-tohoku.connpass.com/event/319205/
SFとコンピュータが好き
2024-07-06 JAWS-UGいわて LT会+生成系AIハンズオン BedrockとOpenSearchで RAGの仕組みを理解しよう 山崎 拓也
自己紹介 • 名前: 山崎 拓也 • 所属: SIer • 仕事: • システム開発、インフラ構築、運用など • 好き: 低レイヤ、SF、AWS • その他: • 2022~ Japan AWS All Certifications Engineer • 2024 Japan AWS Top Engineer
Amazon Bedrock • AWSの提供しているフルマネージドな生成AIサービス 入力 入力 出力 出力
モデルの学習データに無い情報は正確に答えられない 例 • 社内の業務知識 • 製品に関する情報 それを解決する技術がRAG
モデルが絶対に持っていない情報を用意「はにわロボット.txt」 「はにわロボット」ドキュメント # 概要 はにわロボットはあらゆる家事をこなす。 掃除、洗濯、料理、買い出し、雑談など。 # 材料 - 粘土 1kg - ニューロチップ 1個 # 製造方法 1. 粘土ではにわを作る 2. ニューロチップを後頭部に埋め込む 3. 完成 # 注意事項 - 製造には「人工はにわ製造免許」が必要 - 製造したはにわロボットは国に登録する必要がある はにわロボット
RAGではない場合 • 当然モデルは「はにわロボット」の作り方を知らない 粘土もニューロチップもない 作り方も間違ってる
RAGの場合 材料も作り方も正しい 他の情報まで教えてくれる
RAG(Retrieval-Augmented Generation)(検索拡張生成) • モデルが持たない知識を答えさせる • データソースから情報を取得し、モデルへの入力に含める 例 入力 はにわロボットの 作り方を教えて 1 2 RAG プログラム 出力 4 はにわロボットの 作り方は~ 3
RAG(Retrieval-Augmented Generation)(検索拡張生成) 入力と関連性の高い情報を 取得する必要がある 入力 はにわロボットの 作り方を教えて 1 2 RAG プログラム 出力 4 はにわロボットの 作り方は~ 3
ベクトル検索で関連性の高い情報を取得する
埋め込み(embedding) • コンピュータ向けに意味のある数値に変換したもの • 生成AIの文脈ではだいたいベクトル • 埋め込みによっては距離を類似度として扱える 例 埋め込み 犬 犬 -0.00805057, 0.009231321, 0.010734093, … 猫 猫 -0.03134355, -0.021038823, 0.021754429, … 冷蔵庫 0.006404675, -0.00805057, -0.045512553, … 庫蔵冷
文埋め込み • 文章自体から埋め込みを作成 • 埋め込み作成用の「埋め込みモデル」がある • Amazon Titan Text Embeddings • Cohere Embed 例 公園で犬と遊ぶ [-0.054807376, -0.001945111, 0.034289036, -0.00750503, 0.011980507, -0.026577447, -0.00438941, 0.018865855, -0.023272479, -0.034289036, -0.051226992, -0.0110854115, -0.031534895, 0.029882412, 0.033325087, 0.012737895, -0.03497757, 0.00877882, 0.021482287, -0.0026508593, 0.019003563, 0.035803813, -0.020380633, 0.016937958, -0.060315654, -0.019278977, 0.061968137, -0.059764825, 0.07766673, -0.048472855, 0.00602468, 0.014941206, -0.028367637, -0.043790817, 0.042964574, 0.102453984, 0.041587505, -0.0058181197, 0.040761266, 0.002220525, 0.07876839, 0.018728148, 0.003614808, 0.014046111, 0.0013942831, -0.049849924, 0.041036677, 0.046544958, 0.03139719, 0.019967511, 0.022997065, 0.04048585, -0.00084775855, 0.061968137, -0.0055427058, 0.07876839, 0.020242926, 0.037456296, -0.015698595, -0.040210437, -0.02272165, -0.016249422, -0.045167886, 0.0025475791, 0.004957451, -0.036905468, 0.007883724, 0.008021431, -0.0096394885, 0.007918151, 0.03002012, -0.024374135, 0.015698595, -0.017488785, 0.01363299, 0.032911967, 0.048472855, 0.01321987, -0.039935023, 0.042964574, -0.0065410812, -0.0034598878, 0.0012393628, 0.00034211576, 0.038557954, -0.031534895, 0.02588891, 0.06334521, 0.020518338, -0.0056804125, -0.01680025, 0.0057148393, -0.00055513124, 0.034289036, 0.04874827, -0.08152253, -0.016249422, -0.04819744, 0.049023684, 0.015285474, -0.0022377383, 0.018039614, 0.028505344, -0.045718715, 0.022033116, 0.042138334, 0.0454433, -4.545406e-05, 0.01955439, -0.022859357, 0.009777195, 0.01363299, 0.015698595, -0.041587505, 0.023685599, -0.023961013, 0.037180882, 0.024374135, 0.010878851, 0.028092222, -0.087030806, -0.030570948, -0.033325087, 0.100801505, -0.031534895, …
ベクトルDBとは • ベクトルを保存しておけるデータベース • 類似したベクトルを検索できる • AWSでベクトルDBとして使えるサービス • Amazon OpenSearch Serviceなど 2 犬 -0.00805057, 0.009231321, … 3 40% クエリ 応答 猫 10% 冷蔵庫 -0.03134355, -0.021038823, … 0.006404675, -0.00805057, … 1 猫 -0.03134355, -0.021038823, … 冷蔵庫 0.006404675, -0.00805057, …
類似した文章を検索する 1 検索したい文字列 犬を連れた人が歩いている。白い犬だ。 2 類似度61% 3 埋め込みベクトル -0.015502, -0.006543, … クエリ 結果
ベクトル検索を利用したRAG 1 入力 はにわロボットの作り方を教えて 3 2 RAG プログラム 出力 6 5 4
ユーザーの入力のままでは余計な情報も多く検索精度が落ちる ベクトル検索の精度が上がるような クエリにする必要がある 入力 はにわロボットの作り方を教えて 3 2 RAG プログラム 出力 6 1 5 4
入力からベクトル検索用の文字列を生成する • モデル「Command R+」には専用のオプションがある • search_queries_onlyオプションをTrueにする 入力 はにわロボットの作り方を教えて 出力 はにわロボット 作り方 検索精度が上がりそうな テキストを生成 https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-cohere-command-r-plus.html
クエリ用文字列生成ステップを追加 クエリ用文字列を生成 「はにわロボット 作り方」 1 入力 はにわロボットの作り方を教えて 2 4 3 RAG プログラム 出力 7 6 5
最終的なモデルへの入力はどうなるのか 1 入力 はにわロボットの作り方を教えて 2 4 3 RAG プログラム 出力 7 5 6 ここの入力はどうなるの?
赤文字がプログラム追加部分 「はにわロボット.txt」の内容を そのまま含んでいる 最終的なモデルへの入力 はにわロボットの作り方を教えて 回答には以下のdocumentを参考に して 1 <document> 入力 はにわロボットの作り方を教えて 2 4 3 RAG プログラム 出力 7 6 「はにわロボット」ドキュメント # 概要 はにわロボットはあらゆる家事をこなす。 掃除、洗濯、料理、買い出し、雑談など。 # 材料 - 粘土 1kg 5 - ニューロチップ 1個 # 製造方法 1. 粘土ではにわを作る 2. ニューロチップを後頭部に埋め込む 3. 完成 # 注意事項 - 製造には「人工はにわ製造免許」が必要 - 製造したはにわロボットは国に登録する必要が ある </document>
Knowledge bases for Amazon Bedrock • RAGを簡単に構築できるBedrockの機能 https://aws.amazon.com/jp/bedrock/knowledge-bases/
まとめ • RAGではモデルが持たない知識を答えさせることができる • いかにして入力と関連性の高い情報を検索するかが重要
もっと知りたい方へ • 5/31社内セッション資料を公開しています 「AWSで生成AI入門!LLMの基本からRAG、Agentまで」(109ページ, 1時間) https://www.docswell.com/s/kkmtyyz/K24X7R-2024-05-31-205635
ご清聴ありがとうございました。