37
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure OpenAI Service #AOAIドーナツ本 第4章 RAG 勉強メモ

Posted at

この本『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 エンジニア選書』(通称『AOAIドーナツ本』)を読んだので、
学んだことや調べたことを軽くメモしていきます。
この記事では RAG を中心にまとめます。

この記事の続きです↓

(つよつよエンジニア7名によって書かれた、すごく良い本でした!おすすめです!)

発売日:2024/01/24(水)

めっちゃ言いたいこと:

この本の内容が良すぎる(とくに図が分かりやすい)ので、このまとめ記事では、この本からたくさん引用しています。
でも、もちろん全部は引用していませんので、購入してすべてを読むのをとてもオススメします。

(ちなみに、前回の記事を書いてから何人かに聞かれたので、ここで一応書いておきますが、この本がたくさん売れても私に 1 円も入りません。アフィリエイトもやってないし宣伝も頼まれていません。 本当に良い本なので勝手に書いてるだけ です)(本当に素晴らしい本をありがとうございます!)

紹介ツイート

本のもくじ

充実していますね…!!

第1部 Microsoft AzureでのChatGPT活用

  1. 第1章 生成AIとChatGPT
  2. 第2章 プロンプトエンジニアリング
  3. 第3章 Azure OpenAI Service

第2部 RAGによる社内文章検索の実装

  1. 第4章 RAGの概要と設計
  2. 第5章 RAGの実装と評価

第3部 Copilot stackによるLLMアプリケーションの実装

  1. 第6章 AIオーケストレーション
  2. 第7章 基盤モデルとAIインフラストラクチャ
  3. 第8章 Copilotフロントエンド

第4部 ガバナンスと責任あるAI

  1. 第9章 ガバナンス
  2. 第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 GenerationRAG)として知られており、
大規模言語モデルを活用したシステム開発では重要な概念です。

また、大規模言語モデルに外部情報を連携することは グラウンディング と呼ばれています。

引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p.56) より

image.png

↑図の引用元『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 も示してくれます。

image.png

image.png

↑図の引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 55) より

RAG のメリット

  • RAG を利用することで、LLM が知らない情報について回答を生成できる
  • 最新の情報を参照できる
  • モデルが言ってる情報の根拠(情報ソース)をユーザが参照できる → ハルシネーション(幻覚)(嘘情報を自信満々に返してくるやつ)への対策としても有効

RAG アーキテクチャとその要素

image.png

↑図の引用元『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

検索システムについて

image.png

↑図の引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 57) より

4-4: Azure AI Search

高精度な検索システムを構築できる PaaS の Azure AI Search について。

検索対象のドキュメントに事前に インデックス を登録してくれるので、
高速、効率的に検索を行うことが可能。

処理フロー

  1. 検索用の インデックス作成
  2. 作成されたインデックスを使用して ドキュメント検索 (フルテキスト検索に加え、AI 搭載の セマンティック検索ベクトル検索 にも対応)

image.png

↑図の引用元『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 の処理フロー

image.png

↑図の引用元『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 Service On Your Data

Azure OpenAI on your data は、その名の通り、
とても簡単に、Azure OpenAI のモデルに独自のデータを使用 (グラウンディング) することができる機能です。
社内システムを参照する chat bot とかに便利そうですね。

公式ドキュメント

今がアツい

ずっと public preview でしたが、
ちょうど先月 (2024/2/20) に 一般リリースされたという記事が出ていましたね

利用方法

Azure OpenAI Studio の Web ブラウザから利用できます。
(Azure サブスクリプションが必要です。)

image.png

↑ 「データ持ち込み」をクリック

image.png

↑ 「+ データソースの追加」をクリック

image.png

これで簡単に参照したいデータを食わせることができる、、、!
マウスポチポチで めっちゃ簡単でござる、けどその分、チューニングには制限あり。

そして、
この後 本では 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 オーケストレータを自前で実装するパターンもあります。

実装を便利にするライブラリに LangChainSemantic Kernel があります。

Semantic Kernel 推し

ちなみに個人的に、マイクロソフトがオープンソースで開発している LLM 用ライブラリ Semantic Kernel が大好きです。
C# で書けるから。(Pyton や Java も対応してるよ)

ハローワールド記事 (C#) も書いたのでぜひ👀

まとめ

  • RAG (Retrieval-Augmented Generation) - 大規模言語モデル LLM に学習されている知識だけでなく、外部から情報を検索して回答を生成するアーキテクチャ
  • RAG においての登場人物たち:オーケストレータ、検索システム、LLM
  • Azure OpenAI を使う場合、オーケストレータやデータストアに Azure 周りを使って実装したら、連携がとてもスムーズに行きそう

次もまた読書メモ書こうと思います

37
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?