第2回「AI Challenge Day」に参加しました
こんにちは。
株式会社 PHONE APPLI でエンジニアをしているシュウです。今回は AI Challenge Day に参加したメンバーでこの記事を書いています。
AI Challenge Day は 2024年6月11日から12日にかけて開催された、「株式会社角川アスキー総合研究所」と「日本マイクロソフト株式会社」主催の AI コンテストです。
私たちのチームは新卒 3 年目から 5 年目の若手メンバー 5 名で挑戦しました。
本記事では、イベントの模様・取り組みについてご紹介します。
コンテスト概要
AI Challenge Day とは
株式会社角川アスキー総合研究所と日本マイクロソフト株式会社が共同で企画したハッカソンイベントです。
生成AIを活用してテーマに沿ったシステムを構築し、作ったサービスやアイデアを競います。
コンテストの発表が YouTube で公開されているので、ぜひご覧ください。
PHONE APPLI の発表は 25 分くらいからです。
RAG(Retrieval-Augmented Generation)とは
大規模言語モデル(LLM)の 1 つである GPT-4 などは一般的な質問に対して回答が可能ですが、会社独自の就業規則など学習データに含まれていないものは回答ができません。
そこで独自データでも回答できる様にする手法として RAG があります。
回答を生成する前に独自データを検索することで、学習データには含まれていなくても答えることができます。
他にもファインチューニングという手法もありますが、今回のテーマからは外れるので詳細は割愛します。
今回のテーマ
「日本の世界遺産を紹介するアシスタントを開発しよう!」というテーマのもと日本の世界遺産について回答をしてくれる RAG のサービスを開発しました。
質問の中には現実にない仮想遺産も入っており、RAG を構築しなければ答えられないものになっています。
また、テキストだけでなく画像でも回答してくれる様にマルチモーダル対応も必要になっていました。
採点方法
RAG のスコアリングは Microsoft で用意していただいた評価スクリプトを実行することで点数が表示されます。
点数が高いほど、正解に近い回答を AI が生成したことになります。
成果物の概要
修学旅行中の中学生・高校生をターゲットに世界遺産について気軽に質問できる Q&A アシスタントアプリ「トラベルアシスタント」を作成しました。
トラベルアシスタントを利用して、AI と対話しながら世界遺産の情報やお土産などの関連情報を入手して修学旅行自体の体験の質を高めることを目標に据えています。
アプリは、Web 上で動作します。
テキスト入力だけでなく、画像を添付することも可能で、画像に関する質問をAIにリクエストできます。
成果物の構成
ドキュメントのインデックス化
アーキテクチャ図の右側の部分にあたります。
参考とするドキュメントを Azure AI Search を使ってベクトル検索ができるように、あらかじめ Azure AI Search にインデックスを作成してデータを登録します。
Document Intelligence を使用して、ドキュメントの内容を分析をします。
テキストデータは分割を行い、LLM(ext-embedding-ada-002)を使用して変換したベクトルデータと一緒にインデックスにデータを追加します。
画像の場合は、Azure AI Vision を使用し変換したベクトルデータと一緒にインデックスにデータを追加します。
検索時のユースケースには、2つ含まれています。
テキスト入力の質問に対して、テキスト出力の回答を提示する
画像+テキスト入力の質問(画像と画像に関連する質問)に対して、テキスト出力の回答を提示する
2つ目のユースケースに対応するために、テキストベースのドキュメントのインデックスとは別に、画像ファイルで構成したインデックスを用意することにしました。検索時にまずどんな画像なのかを画像用のインデックスを用いて解決して、その後テキストの質問と合わせて LLM を使って解釈をする想定です。
チャットベースでの検索
アーキテクチャ図の左側の部分にあたります。
UIからユーザーが質問をすると、Azure AI Search を使用してベクトル検索を行い、質問に近い情報のドキュメント情報を取得します。その後、ドキュメント情報と質問を LLM に渡して、回答を生成します。
お題にあるように、マルチモーダルとして画像と質問の入力から回答を作成できるようになっています。
アーキテクチャ図では省略されているのですが、画像をベクトルに変換する必要がありますので、インデキシングと同様に Azure AI Vision を使用して実現しています。
工夫したところ
LangChain の活用
LangChain とは、LLM(大規模言語モデル)に基づいてアプリケーションを効率よく作成するための OSS のフレームワークです。
LangChain の中の Chains の機能を使用することで、メソッドチェーンのようにステップに分けて処理をつなぎこむことができます。
Chains については以下のページにわかりやすくまとまっています。
LCEL 記法で一連の処理をつないでいきますが、少し癖があり多少慣れが必要でした。
ただ、LangChain を使ってみてフレームワークを使用しない場合に比べて効率的に処理を実装できるのを強く実感しました。
Chains は、プロンプト + LLM の組み合わせのチェーンを複数繋げられるので、チェーンとなる処理の付け替えや追加がしやすい印象です。今回のコンテストのような試行錯誤が多い中で、処理の変更が比較的容易なのは大きなメリットだと思います。
マルチモーダルの場合には、画像を解釈した上で質問の意図を汲み取って、適切な質問に調整した後に、ベクトル検索をおこなって回答を生成します。
細かくは以下のようなプロセスに分解できます。この一連の処理を、LangChain を使うことで1つの Chains として定義できます。
Azure AI Vision を使用して画像データをベクトルデータに変換する
画像インデックスを使用して、Azure AI Search でベクトル検索を行う
LLM(GPT-4o)を使用して、質問と画像のキャプションなどの情報から、質問を調整する
質問を LLM(text-embedding-ada-002)を使用して、ベクトルデータに変換する
テキストインデックスを使用して、Azure AI Search でベクトル検索を行う
LLM(GPT-4o)を使用して、ベクトル検索の結果を参考にしつつ、質問の意図に沿った回答を生成する
参考にしたドキュメント情報を脚注に追加して、ユーザーに回答する
データセットのインデキシング
インデックスはテキスト用インデックスと画像用インデックスの 2 種類作成しました。テキスト用インデックスは最終的な回答を生成する LLM に渡すコンテキストを提供するインデックスです。画像用インデックスはマルチモーダルの画像に対応するためのインデックスです。
データセットの中には PDF や Microsoft Office ファイル、スキャンデータなどさまざまな形式のファイルが存在していました。そこで Azure AI Document Intelligence を使用して各ファイルから Markdown 形式で抽出しました。抽出したテキストを Azure Open AI の埋め込みモデルを使って、それぞれ embedding することで、意味の近いドキュメントを検索できるようにしています。
マルチモーダルへの対応をするために、画像のデータセットに対しては画像のベクトル化とキャプションの生成の 2 個のアプローチを検討し、2つのサービスを利用しました。
画像のベクトル化 : マルチモーダル埋め込みの概念 - Image Analysis 4.0 - Azure AI services
キャプションの生成 : 画像キャプション - Image Analysis 4.0 - Azure AI services
AI Search にはベクトルとキャプションをセットで 1 ドキュメントとして画像用インデックスに登録しておきます。これにより入力画像のベクトルから近似した画像をベクトル検索で取得できます。そしてキャプションの内容からテキスト用のインデックスに問い合わせをすることで、マルチモーダルを実現しました。
結果
最終的なスコアリングは、16.000点(25点 満点中)です。
得点は高くなく悔しい結果ではありましたが、1日目の夜までは評価スクリプトが回せない状況だったので、得点がついた点で一安心ではありました。
今後 TRY したいこと
今回構築した RAG ではベクトル検索のみを用いています。
ハイブリッド検索も試してみたのですが、評価スクリプトのスコアが下がってしまいました。
他のチームはハイブリッド検索で高いスコアを獲得していたので、どこかにボトルネックがあると考えています。当日の時間の関係上、原因追求ができなかったので今後の課題としたいと思います。また、Azure AI Search が提供しているセマンティックハイブリット検索がさまざまなユースケースで優れた検索を実現できるみたいなので、今後試してみたいです。
感想&おわりに
今回のコンテストへの参加を通じて、生成 AI と RAG の技術に触れる貴重な機会を得ることができました。
コンテスト当日からその準備期間に至るまで、普段は触れることのない新しい概念や技術に圧倒されることもありましたが、実際に手を動かして取り組むことで、それらの有用性や技術的な面白みに気づくことができました。
とくに印象深かったのは、コンテスト期間中に出会った多くのアイデアとそれを実現するための創意工夫です。他の参加者の方々の発表を通じて、多様なアプローチや応用方法に触れ、多くの知識や視野を広げることができました。また、チームメンバーと協力しあい、問題を解決していく過程で得た経験は今後のプロジェクトにおいても大いに役立つと感じています。
当日の結果には悔しさが残ることとなった一方で、現状の課題やそれらを解決するための手法に気づくことができ、新たな挑戦への意欲がさらに高まったかと感じます。
最後になりますが、今回のコンテストを主催してくださった「株式会社角川アスキー総合研究所」と「日本マイクロソフト株式会社」の皆様、また当日参加された多くの企業の皆様方、そして当コンテストに送り出してくださった社内の皆様方、本当にありがとうございました。
貴重な経験と多くの学びを得ることができたことに、心から感謝します。