【書評】『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門』~日本におけるAOAIの入門本決定版!

はじめに

Summary
  • この本は、MicrosoftとOpenAIが共同で提供するAzure OpenAI Service(AOAI)を使って、ビジネスに応用する方法について解説している本だよ
  • 筆者たちは日本Microsoftのクラウドソリューションアーキテクトであり、本書は日本におけるAOAIの公式ガイドブックと言えるよ
  • 内容は、生成AIとChatGPTの基本から、プロンプトエンジニアリング、社内文章検索システム、アプリケーション開発に至るまで幅広くカバーしているよ
  • 特に、「RAG(Retrieval-Augmented Generation)」と呼ばれる技術について詳しく解説しているよ
    • これは外部知識を取り込む技術であり、社内ドキュメントなどの知識を取り入れるニーズに応えるものだよ
    • Azure AI SearchやAzure OpenAI APIを活用する方法が書かれているよ
  • AOAIの利点としては、Microsoftの安全なセキュリティで、情報漏洩の危険を最小限に抑えることができるよ
  • LLMサービスを作ってみたいな、という人や企業にとっては、最初の一冊としてとてもオススメだよ

この本は、MicrosoftとOpenAIが共同で提供しているAzure OpenAI Serviceを使ってOpenAIモデルにアクセスし、それをビジネスに応用する方法が詳細に書かれています。筆者たちは日本Microsoftのクラウドソリューションアーキテクトなので、この本は日本におけるAzure OpenAI Service(以下AOAI)の公式ガイドブックと言えそうです。

本書がカバーしている内容は幅広く、生成AIとChatGPTの基本から、プロンプトエンジニアリング、社内文章検索システム、そしてCopilotのようなアプリケーション開発まで、具体的かつ体系的に解説されています。

本書では、ChatGPTの実務運用で最も期待されている「RAG」について半分ほど紙面を割いています。RAGは簡単に言うと検索や社内ドキュメントなどの外部知識を取り入れる技術です。実務においては社内ドキュメントなどの知識を取り入れたいというニーズがありますね。

ChatGPTを使いたいと考えている企業は多いですが、社内文章や機密情報を取り込みたいとなったときに、情報漏洩の危険を恐れて二の足を踏んでいるという話を結構聞きます。

その点、AOAIならばMicrosoftのセキュティなので安心というのが売りです。

また、第4部で触れられているガバナンスや責任あるAIの使用については、現代の技術導入における重要なテーマです。Microsoftの取り組みについて説明があります。

わたしは会社にLLMシステムを導入を検討するとしたら、セキュリティ的な観点からAOAIが第一選択かな、と思っており、読んでみることにしました。

1章 生成AIとChatGPT

第1章では、生成AIとChatGPTの基本的な概念とその働きについて詳しく解説されています。GPTは確率モデルで、次に続く単語を予測することによって自然な文章を生成するというものですが、その過程でハルシネーションと呼ばれる、実際には存在しない情報を生成してしまう問題があることが指摘されています。

この問題への対策として、本書ではユーザーが外部の情報源を併用すること(RAGなどの技術)や、プロンプトエンジニアリング技術を駆使することが提案されています。

2章 プロンプトエンジニアリング

第2章では、ChatGPTを始めとする言語モデルの出力精度を向上させるためのプロンプトエンジニアリングに焦点を当てています。プロンプトとは、AIに対する入力指示文のことで、この入力の仕方によってAIの出力結果が大きく変わるため、効果的なプロンプトの書き方は非常に重要です。

具体的なテクニックとして、指示を明確に書くこと、モデルに逃げ道を与えないようにすること、役割をはっきりさせること、具体的な入出力例を提供することが挙げられています。これらはすべて、モデルがより正確で有用な回答を生成するために役立ちます。また、指示文を構造的に書くことで、ChatGPTが情報を区別しやすくなり、精度が向上することも強調されています。

特に興味深いのは、思考の連鎖(Chain of Thought; CoT)に関する部分です。このテクニックは、モデルに問題解決の過程を段階的に表現させることで、より正確な結論を導く方法です。簡単なキーフレーズの追加だけで、モデルの回答の正確性を向上させることができます。これはすぐに使えそうなテクニックですね。

プロンプトエンジニアリングの知識は、AIを日常業務に活用する際に非常に重要で、わたしも興味を持っていくつか本を読んでいるところです。プロンプト変えるだけで結構応答変わるんですよね。

3章 Azure OpenAI Service

第3章では、OpenAIとMicrosoftが協力して提供している「Azure OpenAI Service」について詳細に説明しています。このサービスは、2022年10月からパブリックプレビューが開始され、2023年1月には一般提供(GA)が始まりました。それにより、GPT-3、ChatGPT、DALL-E、WhisperなどのOpenAIが開発したさまざまなAIモデルがMicrosoftのクラウドプラットフォームAzureを通じて利用可能になっています。

Azure OpenAIの大きな特長は、Microsoft Azureの提供する安定したインフラ高度なセキュリティ機能を背景に、企業が本番環境でAIモデルを安心して運用できる点です。これにより、企業はAIを活用したアプリケーションの開発を容易に進めることができ、さらにはAzureの豊富なクラウドサービスと組み合わせることで、より複雑なシステムの構築も可能です。

また、Azure OpenAIではAPIを通じたサービス利用が基本となっており、これがAIモデルの種類やバージョンを柔軟に選べることを可能にしています。さらに、チャットプレイグラウンドと呼ばれるWeb GUIベースの開発環境が用意されており、これによりAPIのテストや各種パラメータの調整が直感的に行えるようになっています。

ただし、最新のAIモデルや機能を利用したい場合は、OpenAI社の直接的なAPIサービスを利用する必要があります。Azure OpenAIでは、新機能がOpenAI社から提供された後に、Azureのインフラでの安定した提供が可能になるまで時間がかかるため、最新技術を迅速に取り入れたいユーザーにとっては少々不便かもしれません。

料金体系に関しては、トークン課金制を採用しており、入力されたトークンと出力されるトークンの両方に対して課金が発生します。この部分は特に注意が必要で、使用するAPIや機能によってコストが大きく変わる可能性があります

最後に、Azure OpenAIを利用するためには、リソースの作成と事前申請が必要であり、これにはAzureのサブスクリプションIDが求められます。現在のところ、ビジネス用途以外での利用申請は認められていないようで、会社のメールアドレスで申請する必要があるようです。

4章 RAGの概要と設計

この章では、Retrieval-Augmented Generation(RAG)という技術について詳しく解説されています。RAGは、大規模言語モデル(LLM)が知らない情報を外部の検索システムを通じて取得し、それを基に回答を生成する方法です。これによって、モデルは最新かつ信頼性の高い情報にアクセス可能となり、ユーザーはその情報源を確認することで、生成された内容の正確さを検証できます。これがRAGの大きな利点です。

特に、オーケストレータの役割が重要です。オーケストレータとは、主に複数のコンポーネントやプロセスが関わるシステム内で、それらの動作を調整し、管理する役割を持つソフトウェアまたはシステムのことを指します。検索システムは、BingやAzure AI Searchなどを利用して、ユーザーの質問に最も関連する情報を提供します。一方で、大規模言語モデルは、それらの情報を基に具体的な回答を生成する役割を持っています。

この技術の応用により、より精度の高い情報提供が可能になる一方で、検索結果の文量が多すぎると大規模言語モデルのトークン制限に引っかかるなどの問題も指摘されています。また、文意に基づいた検索を実現するためのベクトル検索の導入が推奨されています。

Azureを用いたRAGの具体的な実装例として、Azure AI SearchAzure OpenAI APIの利用が挙げられています。これらのサービスを組み合わせることで、より効率的なシステム構築が可能です。

Azure AI Search(旧称:Azure Cognitive Search)についての説明はかなり詳細です。

Azure AI Searchは、さまざまなデータソースから情報を取得し、検索用のインデックスを作成するPaaS型のサービスです。データソースにはPDF、データベース、Azure Blob Storage、Azure Cosmos DBなどがあり、これらからデータを読み取り、インデックスとして登録します。

インデックスの作成には二つのアプローチがあります。一つ目はインデクサーを使用する方法で、データソースを定期的にスキャンしてインデックスを更新します。二つ目はAPIを利用する方法で、これはよりリアルタイムの更新が可能ですが、ドキュメントからテキストを抽出する処理はユーザーが自分で行う必要があります。

また、Azure AI Searchの検索機能は、フルテキスト検索ベクトルベースの検索、そしてセマンティック検索をサポートしています。特にベクトル検索では、文章や単語をベクトル値に変換し、その類似度を計算することで、意味の近いドキュメントを見つけ出すことが可能です。これにより、単語の出現頻度だけでなく、文書の内容の意味も理解しやすくなります。

ハイブリッド検索は、これらの検索手法を組み合わせて使用することで、さらに高精度な検索結果を提供します。これには、Reciprocal RankFusion(RRF)という手法を用いて、検索手法ごとのスコアを統合し、最終的な検索結果をランク付けします。

まず、オーケストレータの基本的な処理フローについてですが、ユーザーからの質問に応じて関連ドキュメントを検索し、スコアが高いものを選択して大規模言語モデルによって回答を生成し、それをユーザーに返す流れがあります。この一連の流れが、Azureのさまざまなサービスを利用して実装可能であることが示されています。

Azure OpenAI on your dataは、特に初心者にとって取り組みやすいオプションとして紹介されていますね。Web ブラウザを通じて簡単に検索システムとの連携が可能であり、オーケストレータの実装をAzureが担ってくれるため、煩雑な設定をすることなくRAGのシステムを利用できます。ただし、この方法では精度のチューニングが限られるとのことですので、プロジェクトによっては適さない場合もあるかもしれません。

次に、Azure Machine Learning プロンプトフローはもう少し高度なカスタマイズが可能で、ローコードでオーケストレータを作成できる点が魅力です。特に、プロンプトのバリエーションを試すことができる「プロンプトバリアント」機能は、多様なシナリオでの性能を一度にテストできるため、非常に便利だと思います。

自前で完全にオーケストレータを実装する方法も説明されていて、これは最も柔軟性が高いものの、実装の難易度も高いです。LangChainやSemantic Kernelなどのライブラリの利用が推奨されている点は、開発の効率化につながる良いアドバイスです。

全体として、この章の説明は非常に実用的で具体的な例やフローが豊富に提供されており、読者が具体的なイメージを持ちやすい内容になっています。Azureの機能をフルに活用して、RAGシステムを構築するための素晴らしいガイドだと思いました。

5章 RAGの実装と評価

この章では、RAG(Retrieval-Augmented Generation)の実装と評価に焦点を当てています。まず、社内文章検索アプリを例にして、具体的な実装方法について解説しているのが大変参考になります。RAGは検索精度と生成精度の2つの要素が重要で、どちらかが不十分だと回答の質が低下してしまいます。

評価方法については、オフライン評価とオンライン評価の2つのアプローチがあること、そしてここではオフライン評価に重点を置いていることが説明されています。オフライン評価では、適合率、再現率、F値といった基本的な指標から、より詳細なランキングを評価するPrecision@kやMAP、nDCGなどの指標が使われます。これらは、検索システムがどれだけ関連性の高い結果を返すかを定量的に評価するために非常に役立ちます。

また、章の後半部では、生成された回答の評価指標についても言及されており、異なる指標を組み合わせて全体的な性能を測ることの重要性が強調されています。特に、GPTを用いた評価が新しいアプローチとして挙げられており、その方法論や限界についても触れられている点が興味深いです。

6章 AIオーケストレーション

CopilotというAIツールを開発するためのCopilot stackについて詳しく解説されています。Copilotは、ユーザーの指示に応じてタスクを効率的に遂行するために設計されたシステムで、特にLLM(大規模言語モデル)を核として使用しています。

まず、Copilot stackのコンセプトは、AIオーケストレーションを中心に展開されています。AIオーケストレーションは、ユーザーからの質問や指示を受け、それを解析して必要なタスクに分解し、適切な情報を集めたり具体的な行動を実行したりする役割を果たします。これにより、ユーザーはより複雑な問題も効率的に解決できるようになります。

また、CopilotはチャットUIを通じて直感的な操作が可能で、OpenAIのGPT-4などの技術を活用しています。このUIは、フロントエンドから直接機能を拡張することが可能で、ユーザーにとって非常に使いやすい環境を提供します。

さらに、Copilot stackは、LLMの活用だけでなく、LangChainやSemantic Kernelといったオープンソースのライブラリを組み合わせることで、より柔軟な開発が可能になっています。これらのツールはプログラミングの知識がある開発者にとって、非常に強力な支援となります。

Copilotの実装では、AIオーケストレーションが重要な役割を担い、RAG(検索拡張生成)やプロンプトエンジニアリングといった技術も活用されています。これにより、ユーザーの質問に対して適切なコンテキストを基にした答えを生成することが可能です。

7章 基盤モデルとAIインフラストラクチャ

この文章は、AIインフラストラクチャと基盤モデル、特にLarge Language Models(LLM)とその応用に関して書かれています。

基盤モデルとは、OpenAIのGPTシリーズのようなモデルや他社の類似モデル、オープンソースのLLM、ファインチューニングされたモデルなど、AIインフラストラクチャにおいて根底を支える技術のことです。これらのモデルは様々な専門的なAIタスクに応用され、高度な自然言語処理能力を提供します。

AIインフラストラクチャの部分では、これらのモデルを効率的に実行するための計算リソースや、ロードバランサーなどのネットワーク管理ツールが含まれます。特に、GPU搭載のサーバーがこれらのリソースの要となっていますね。また、Azure OpenAI Serviceのようなクラウドサービスは、これらのモデルをAPI経由で簡単に利用できるようにし、ファインチューニングやその他のカスタマイズを可能にしています。

量子化、枝刈り、蒸留は、AIモデル、特にニューラルネットワークを効率的に動作させるための技術です。これらはモデルのサイズを縮小し、推論の速度を上げるために使用されます。

量子化は、モデルのパラメータを低ビット表現に変換することで、メモリ使用量と計算量を削減する技術です。たとえば、通常32ビットで表される浮動小数点数を8ビットの整数に変換することがあります。これにより、モデルのサイズが小さくなり、推論速度が向上します。ただし、パラメータの精度が低下するため、性能に悪影響を及ぼさないように注意が必要です。PyTorchやTensorFlowなどの主要な機械学習フレームワークでは、量子化をサポートしています。

枝刈りは、モデルから重要でないと考えられるパラメータ(重み)を削除することにより、モデルを簡素化する技術です。これには主に二つの方法があります。一つ目はニューロンをカットする方法で、モデルの特定のニューロンを無視し、そのニューロンに関連する重みを削除します。二つ目はニューロン間のコネクションをカットする方法で、重み行列の一部のエントリーをゼロに設定し、そのパスを無効にします。枝刈りはモデルの計算効率を高める一方で、過度に行うとモデルの性能が低下する可能性があります。

知識蒸留は、大きなモデル(教師モデル)の知識を小さなモデル(生徒モデル)に伝える技術です。教師モデルの出力(ソフトラベル)を使って、生徒モデルを訓練します。これにより、小さなモデルでも教師モデルに近い性能を持たせることが可能になります。蒸留はモデルのサイズを大幅に削減しながらも、性能の低下を最小限に抑えることができますが、最も実装コストが重い手法です。蒸留後の軽量モデルが公開されていることもあるので確認してみましょう。

AIモデルのファインチューニングには、特定のタスクに特化させるために特定のデータセットを使用して行われることが多いです。これにより、モデルの応答速度と精度のバランスを取りながら、具体的な問題解決に適用することができます。ファインチューニングの過程では、必要なデータ量やその品質も重要なポイントとなります。

8章 Copilotフロントエンド

アプリケーションの使いやすさはユーザーの満足度に直結します。

まず、ユーザーとアプリケーションの相互作用の設計についてですが、ユーザーがどのように感じ、どのように行動するかを予測し、それに基づいたインターフェイス設計が重要です。例えば、よく使われる機能はアクセスしやすい場所に配置する、不要なステップは省略する、といった工夫が挙げられますね。

次に、LLMアプリケーションの倫理的な設計ですが、これは特に注意が必要です。AIが生成する回答には偏見が含まれてしまうことがあり、それによってユーザー体験が悪影響を受ける場合があります。バイアスを最小限に抑えるために、様々な背景を持つユーザーのデータを訓練に使用すること、または出力のフィルタリングを行うことが考えられます。

音声入力のサポートは非常に良いアクセシビリティを提供します。これにより、視覚障害を持つユーザーや物理的な制約があるユーザーでもアプリケーションを利用しやすくなります。

RAG(Retrieval-Augmented Generation)に関する部分では、応答の正確性と速度が重要です。ユーザーの質問に対して正確かつ迅速に回答するために、検索アルゴリズムの精度を高めることが必須です。さらに、どの文書を参照したかを明示することで、ユーザーに対して回答の透明性と信頼性を提供することができます。

UXの改善は、ユーザーの期待に応え、さらにそれを超える体験を提供することが目標です。

9章 ガバナンス

組織内でAzure OpenAIを効果的に導入し、運用するための共通基盤の要件とそのアーキテクチャに関する詳細は、特に大きな組織や多様な部門が連携して作業を進める際に非常に重要です。

まず、Azure OpenAIの利用においては、API Managementを通じて認証・認可を行い、セキュリティを確保しつつ利便性を高めることが求められます。Microsoft Entra IDによるロールベースのアクセス制御(RBAC)は、適切なユーザーが適切なリソースにアクセスすることを保証し、組織全体のセキュリティポリシーに沿った運用を可能にします。

さらに、AzureのAPI Managementを利用することで、APIの流量制限やログ出力などの非機能要件も効果的に管理できます。これにより、プロンプトの内容や生成結果の透明性を保ちつつ、利用状況に基づいた課金が可能になるわけです。

また、プライベートネットワークでの閉域化やマルチリージョンでの負荷分散は、セキュリティとパフォーマンスの向上を図るための重要な手段です。特にAzure Application Gatewayを活用することで、異なるリージョン間での負荷を効率的に分散させることが可能となり、グローバルな展開を見据えたアーキテクチャを構築できるわけですね。

10章 責任あるAI

この章では、MicrosoftがどのようにしてAzure OpenAIを使ったAIシステムの責任ある開発と運用を支援しているか、非常に詳しく解説しています。責任あるAIの実践は、技術の発展と共により重要なテーマになっています。

MicrosoftはAzure OpenAIの使用において、責任あるAIの原則に従った運用を推奨しており、特に透明性、倫理規定、プライバシー、そしてセキュリティが強調されています。これらの要素は、AIシステムを社会に受け入れられる形で実装する上で欠かせないものです。

Microsoftは、AIシステムを設計、開発、デプロイ、使用する際のガイドラインを提供しています。これには、リスクの特定や軽減策の設計などが含まれ、Microsoft Responsible AI StandardやNIST AI Risk Management Frameworkに基づいています。

また、Microsoftは、Azure OpenAIの利用に関連する行動規範を設定し、不正利用を防ぐための規定を定めています。

さらに、Azure OpenAIは、提供されたデータの取り扱いにおいて高いプライバシーとセキュリティを確保しています。データはMicrosoftのAzure環境で厳格に管理され、外部のサービスとの不必要なデータ共有は行われません。

この点がAOAIがOpenAIを始めとするほかのLLMサービスと比較したときに圧倒的優位だろうと思います。

おわりに

全体的に「タイトルに偽りなし!」という感想です。

Azure OpenAI Serviceで「はじめる」ChatGPT/LLMシステム構築入門」なのです。

もしもAzureで本格的にLLMシステムを構築する、となった場合には、インフラ構築に関する知識など、この本では足りないでしょう。ですが、LLMシステムを作ってみたいな、という人や企業にとっては、この本を読むことでどんな技術があるのか把握できます。

とくに、最もニーズがあると思われる「RAG(外部知識を取り込む)」について二章にわたって書かれていて、かゆいところに手が届く構成になっていたと思いました。

コメント

タイトルとURLをコピーしました