この本『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 エンジニア選書』(通称『AOAIドーナツ本』)を読んだので、
学んだことや調べたことを軽くメモしていきます。
この記事では RAG を中心にまとめます。
この記事の続きです↓
(つよつよエンジニア7名によって書かれた、すごく良い本でした!おすすめです!)
発売日:2024/01/24(水)
めっちゃ言いたいこと:
この本の内容が良すぎる(とくに図が分かりやすい)ので、このまとめ記事では、この本からたくさん引用しています。
でも、もちろん全部は引用していませんので、購入してすべてを読むのをとてもオススメします。
(ちなみに、前回の記事を書いてから何人かに聞かれたので、ここで一応書いておきますが、この本がたくさん売れても私に 1 円も入りません。アフィリエイトもやってないし宣伝も頼まれていません。 本当に良い本なので勝手に書いてるだけ です)(本当に素晴らしい本をありがとうございます!)
紹介ツイート
本のもくじ
充実していますね…!!
第1部 Microsoft AzureでのChatGPT活用
- 第1章 生成AIとChatGPT
- 第2章 プロンプトエンジニアリング
- 第3章 Azure OpenAI Service
第2部 RAGによる社内文章検索の実装
- 第4章 RAGの概要と設計
- 第5章 RAGの実装と評価
第3部 Copilot stackによるLLMアプリケーションの実装
- 第6章 AIオーケストレーション
- 第7章 基盤モデルとAIインフラストラクチャ
- 第8章 Copilotフロントエンド
第4部 ガバナンスと責任あるAI
- 第9章 ガバナンス
- 第10章 責任あるAI
この記事では
内容盛りだくさんなので、
今回は、とくに第4章から勉強メモを引っ張ってこようと思います。
第4章 RAGの概要と設計
- 4.1 ChatGPTの問題点と解決手法
- 4.2 Retrieval-Augmented Generation とは
- 4.3 検索システム
- 4.4 Azure AI Search
- 4.5 オーケストレータ
- 4.6 Azure OpenAI on your data
- 4.7 Azure Machine Learningプロンプトフロー
- 4.8 大規模言語モデル
- 4.9 Azure OpenAI API
- 4.10 まとめ
4-1: LLM の学習データが古い問題
ChatGPT など多くの LLM はインターネット上の多数のドキュメントをもとに学習しています。
(ちなみに、その「いつまでのデータを学習している」という期間を「カットオフ」といいます。)
なので、そのままだと、最新の内容は答えられません。
モデル | バージョン | いつまでのデータ (Training dataset cutoff) | 参照 (公式ドキュメント) |
---|---|---|---|
GPT-3.5 | (0125) | 2021 年 9 月まで | https://learn.microsoft.com/azure/ai-services/openai/concepts/models#fine-tuning-models |
GPT-4 Turbo Preview | (0125-Preview) | 2023 年 12 月まで | https://learn.microsoft.com/azure/ai-services/openai/concepts/models#gpt-4-and-gpt-4-turbo-preview-models |
4-2: そこで RAG ですよ
RAG アーキテクチャ(フレームワーク)、
本の説明がとてもわかり易いので、本からそのまま引用します
大規模言語モデル(LLM)が知らない情報を 外部の検索システムで検索し、その検索結果を情報源として回答を生成する手法は、
一般的に Retrieval-Augmented Generation(RAG)として知られており、
大規模言語モデルを活用したシステム開発では重要な概念です。
また、大規模言語モデルに外部情報を連携することは グラウンディング と呼ばれています。
引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p.56) より
↑図の引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 56) より
英和辞典を引く
RAG は Retrieval-Augmented Generation (検索により強化された文章生成)の略ということで、
それぞれの英単語の意味をメモ
Retrieval
/rɪtríːv(ə)l/ りとりーゔる
(なくしたものなどを) 取り戻すこと、
(失なわれた名誉・敗北などの) 回復、挽回(ばんかい)、
(損害・ミスなどの) 埋め合わせ、償い
(引用元: Weblio 英和辞典 https://ejje.weblio.jp/content/retrieval )
IT 分野ではよく 「(データの)検索」「取り出し」 の意味で使われることが多いと思います。
Augmented
/ɑˈgmɛntɪd/ おーぎゅめんてぃど
(…を) 増加させる
(引用元: Weblio 英和辞典 https://ejje.weblio.jp/content/augmented )
「拡張現実」と訳される AR (Augmented Reality) などで使われていますね。
Generation は「生成」の意味で使われているでしょう。(generate の名詞形)
なので「Retrieval-Augmented Generation」は
「検索により強化された文章生成」と理解するのが自然かなと思いました。
RAG 利用例 - Copilot (Bing Chat)
Bing (マイクロソフトの検索エンジン) のインターネット検索機能を使用して
最新の情報を参照し、それをもとに答えてくれます。
ちゃんとリファレンスの URL も示してくれます。
↑図の引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 55) より
RAG のメリット
- RAG を利用することで、LLM が知らない情報について回答を生成できる
- 最新の情報を参照できる
- モデルが言ってる情報の根拠(情報ソース)をユーザが参照できる → ハルシネーション(幻覚)(嘘情報を自信満々に返してくるやつ)への対策としても有効
RAG アーキテクチャとその要素
↑図の引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 56) より
RAG の要素(登場人物)たち一例
本 P56 の文章を表にまとめます。
要素名 | 説明 | Azure のサービス例 |
---|---|---|
オーケストレータ | orchestrate (組織的に計画や操作を行うこと) をする人。全体の重要な指示役。 RAG 全体の処理やプロンプトを定義し、検索システムや LLM との仲介になる |
* Azure OpenAI on your data * Azure Machine Learning プロンプトフロー * フルスクラッチ(自前で実装) |
検索システム | LLM に知識を与えるためのシステム。 |
Bing のようなインターネット検索エンジンだったり、 Azure AI Search (旧称:Azure Cognitive Search)を使って社内文章の検索システムを構築する場合も。 |
大規模言語モデル (LLM) | プロンプトに対して回答を生成する処理を行う。 | Azure OpenAI API |
検索システムについて
↑図の引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 57) より
4-4: Azure AI Search
高精度な検索システムを構築できる PaaS の Azure AI Search について。
検索対象のドキュメントに事前に インデックス を登録してくれるので、
高速、効率的に検索を行うことが可能。
処理フロー
- 検索用の インデックス作成
- 作成されたインデックスを使用して ドキュメント検索 (フルテキスト検索に加え、AI 搭載の セマンティック検索 や ベクトル検索 にも対応)
↑図の引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 59) より
多様なデータソースとフォーマットの対応
PDF やテーブルデータ、JSON など多種多様なデータフォーマットに対応しており、
Azure Blob Storage や Azure Cosmos DB などさまざまなデータソースにも対応
引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p.60) より
製品公式ページ
開発者向けドキュメント
この後、本では、
Azure AI Search のインデックス作成の詳しい流れ(インデクサーの動きや キーフレーズ抽出などさまざまな処理を行うスキルセットの働きなど)や
ベクトル検索とは、セマンティック検索とは、ハイブリッド検索とは、
など、詳しいことが書いてありますが、
このまとめ記事では省略します。(気になる方はぜひ本を…!)
4-5: オーケストレータ
続いて、重要人物 オーケストレータ についてです。
orchestrate (組織的に計画や操作を行うこと) をする人で、全体の重要な指示役です。
RAG 全体の処理やプロンプトを定義し、検索システムや LLM との仲介になります。
RAG の処理フロー
↑図の引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 73) より
オーケストレータのやってること
上記の RAG システムの場合で、オーケストレータがやってること流れ
# | 該当番号 | 説明 |
---|---|---|
1 | ① ② | ユーザーからの質問に基づき、 関連するドキュメントを検索システムから取得 |
2 | ③ | 検索結果の中からスコアが高いドキュメントを選ぶ |
3 | ④ ⑤ | 検索結果をプロンプトに埋め込み、 大規模言語モデルから回答を取得 |
4 | ⑥ | 生成された回答を最終的にユーザーに返却 |
↑引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 73) より
Azure で実装する場合
次の3つの方法がある
- Azure OpenAI on your data
- Azure Machine Learning プロンプトフロー
- フルスクラッチ(自前で実装)
Azure OpenAI on your data
Azure OpenAI on your data は、その名の通り、
とても簡単に、Azure OpenAI のモデルに独自のデータを使用 (グラウンディング) することができる機能です。
社内システムを参照する chat bot とかに便利そうですね。
公式ドキュメント
今がアツい
ずっと public preview でしたが、
ちょうど先月 (2024/2/20) に 一般リリースされたという記事が出ていましたね
利用方法
Azure OpenAI Studio の Web ブラウザから利用できます。
(Azure サブスクリプションが必要です。)
↑ 「データ持ち込み」をクリック
↑ 「+ データソースの追加」をクリック
これで簡単に参照したいデータを食わせることができる、、、!
マウスポチポチで めっちゃ簡単でござる、けどその分、チューニングには制限あり。
そして、
この後 本では P76 から
利用の流れがスクショ付きで丁寧に解説してあります。気になる方はぜひ👀
Azure Machine Learning プロンプトフロー
Azure Machine Learning プロンプトフロー は、
オーケストレータをローコードで作成できるサービスです。
(図引用:公式ドキュメント『フローを開発する』)
つまり
Azure OpenAI on your data と違って、ひとつひとつの処理を自分で作成していくため、プロンプトのチューニングが可能となります。
また、テンプレートを活用するとプログラミング不要でオーケストレータが作成できることもメリットです。
(引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 75) より)
そして、
この後 本では P84 から
利用の流れがスクショ付きで丁寧に解説してあります。気になる方はぜひ👀
公式ドキュメント
RAG オーケストレータを自前実装マン - LangChain や Semantic Kernel
RAG オーケストレータを自前で実装するパターンもあります。
実装を便利にするライブラリに LangChain や Semantic Kernel があります。
Semantic Kernel 推し
ちなみに個人的に、マイクロソフトがオープンソースで開発している LLM 用ライブラリ Semantic Kernel が大好きです。
C# で書けるから。(Pyton や Java も対応してるよ)
ハローワールド記事 (C#) も書いたのでぜひ👀
まとめ
- RAG (Retrieval-Augmented Generation) - 大規模言語モデル LLM に学習されている知識だけでなく、外部から情報を検索して回答を生成するアーキテクチャ
- RAG においての登場人物たち:オーケストレータ、検索システム、LLM
- Azure OpenAI を使う場合、オーケストレータやデータストアに Azure 周りを使って実装したら、連携がとてもスムーズに行きそう
次もまた読書メモ書こうと思います