Please enable JavaScript in your browser.

fltech - 富士通研究所の技術ブログ

富士通研究所の研究員がさまざまなテーマで語る技術ブログ

ASCII×Microsoft の生成AIコンテスト「AI Challenge Day」参加レポート

こんにちは、DS)DI Platform事業部 Kozuchi delivery Group の仲程凜太朗です。2024/04/18~4/19に神戸にあるMicrosoft AI Co-Innovation Labs Japanで開催された ASCII × Microsoft が主催している RAG の精度向上コンテスト、「AI Challenge Day」に参加してきました。 富士通からは、Kozuchi Conversational Generative AIの開発メンバーの 技術戦略本部 SME推進統括部 岡元大輔、越智諒、 DS)DI Platform事業部 Kozuchi delivery Group 福田芳樹、仲程凜太朗の以上四名が参加してきました。今回はこちらのコンテストの参加報告させていただきます。

今回参加してきたメンバー(左から仲程凜太朗、福田芳樹、越智諒、岡元大輔)

Fujitsu Kozuchi Conversational Generative AIとは

このチームが業務で開発している Kozuchi Conversational Generative AI は、生成AIを用いたチャット機能を提供しており、研究所技術も利用できるようになっています。本アプリケーションは、今回のコンテストのテーマになっている RAG を用いたドキュメント管理機能の他にも、幻覚(ハルシネーション)検出機能、フィッシングURL検知機能、 CPU 版の Fugaku-LLM 機能が搭載されています。以下の記事に詳細な説明がありますので、どのような技術なのかについて興味を持っていただいた方にはこちらの記事を参考にしていただければ幸いです。 blog.fltech.dev

RAGとは

RAGとは、ドキュメント参照機能のことで、Retrieval-Augmented Generationの略です。 大規模言語モデル(LLM)に外部情報の検索を組み合わせることで、テキスト生成の回答精度を向上させることができます。

  • RAG とは何か?を理解するための前提として、大規模言語モデル(LLM)の特徴をとらえておく必要があります。大規模言語モデル(LLM)は曖昧な回答を返したり、学習データに含まれていない情報に関する質問には適切に答えることができないといった特徴があります。
  • RAG は回答根拠となる文書を検索し、それらの情報をユーザーの入力に加えることで、精度の高い回答を得ることができるアーキテクチャーです。RAG を採用するメリットとしては以下の点が挙げられます。
    • LLM単体よりも回答の精度が増すだけでなく、モデル自体の学習データに含まれない内容にも対応可能で、社内ドキュメントなど固有の情報を利用することができます。
    • RAG を使う方法の他にも大規模言語モデルをファインチューニングする方法もあります。モデルそのものの精度は上がりますが、試行回数が増え、コストは非常に高いものとなります。一方で、RAG は比較的低コストで大規模言語モデルでデータを検索することを可能にし、テキストの回答精度を向上させることができます。

RAGの一般的なアーキテクチャー

コンテストのテーマ

本題となっている今回のコンテストのテーマは「日本の世界遺産」を紹介するトラベルアシスタントの作成でした。事前情報がなく、このテーマを見るのも当日が初めてでした。本コンテストで一日強という短い期間で設計、開発、スライド作成、発表を行う必要があり、非常にタイトなスケジュールでの開発が求められました。

今回のハッカソンのテーマ
評価方法には、RAGの精度だけでなく、工夫した点や、カスタマーストーリー、エンタープライズグレード、Copilot要素も含まれていました。

問題の傾向について

今回のコンテストには、単に RAG を開発すればよいというものではなく、今回の RAG の学習データにいくつかのトラップを仕込まれていました。

  1. 一つ目のトラップは、架空の観光地のデータでした。 LLM による回答が「日本の世界遺産」に関するものであれば、 LLM 単体に過去のデータが学習されているので対応できますが、架空の観光地のデータにはRAGなどを用いて回答できるように LLM のチューニングをしないと対応できない状態でした。
  2. 二つ目のトラップは、テキストファイル以外のリッチテキスト(PDF、PPTX、DOCX)やマルチモーダル(PNG、JPG、GIF)なデータがありました。特に Word などのテキストファイル内に画像データが含められていたり、画像(GIFなどのもの)しかない場合もあったため、それ用の前処理をする必要がありました。

例えば、以下の写真のような問題が出題され、それにRAGを用いてLLMに正確に答えさせる必要がありました。

こちらは「ハート 木の中 写真 どこ」という問題で、 PDF 内の画像からハートの形状を探し、文章中と関連付けて場所を特定する必要がありました
寺院はどこ?という問題で答えが平等院鳳凰堂なのですがこれも正解させる必要がありました

採用したアーキテクチャー

今回 Microsoft のサービスの提供があったため、我々は普段の業務では用いていない Azure AI Search 、 Prompt Flow 、Document Intelligence といった Microsoft 製のサービスを用いたアーキテクチャーで挑戦してみました。これらの機能を採用したことで開発速度を高めることができました。また、質問と検索結果を組み合わせて GPT-4 で回答させ、画像が入力にある場合は GPT-4V を利用して文字列に変換して読み込みをさせることで、先ほど述べたトラップに対応しました。

今回採用したアーキテクチャー

  • Azure Machine Learning Prompt Flow: LLM による AI アプリケーション開発の合理化を実現するための開発ツールです。こちらの機能を用いることで入出力のデータやLLMといった処理を視覚的に確認できる「グラフ形式」での開発が可能なので、システム全体の流れを直感的に把握できます。
    • Prompt Flowと同様なことが実現できるライブラリとしてLangChainがあげられます。今回使ってみた感想として、複雑な処理を行いたい場合の実装のスケーラビリティを重視するのであればLangChainが相応しいですが、実装の容易さという点に関してはPrompt Flowが秀でていると感じました。

PromptFlowのイメージ

  • Azure AI Search: Azure AI SearchはAzureのフルマネージドの検索サービスです。全文検索、ベクトル検索、ハイブリッド検索、あいまい検索、自動補完、geo検索など豊富な検索ソリューションに対応するだけでなく、データソースからの自動検索インデックスへの保存処理など他のAzureサービスとの統合機能を提供しています。今回我々はベクターストアのコンポーンントとしてAzure AI Search を利用しました。
  • Document Intelligence : Document Intelligence は PDF や DOCX などの帳票形式のデータを読み取りを可能にしてくれるサービスです。ドキュメントの構造などを理解し、Parseしてくれる機能を提供しています。今回、ドキュメント読み込みにコンポーネントとして Document Intelligence を利用しました。

今回の工夫点

  1. リフレーズという手法を用いました。リフレーズとは「質問の意図」の明確化ができることによって、LLMモデルが理解できやすい形で、質問文を修正してくれるというものです。効果としては質問の精度を向上させることができることで、 LLM から期待した回答を得やすくなります。例えば、「きよみず寺 電車 アクセス」とだけユーザーが検索した場合、内部で「清水寺への電車へのアクセスの時間を計算してください。」と質問文をリフレーズすることでより正確な回答をLLMから得ることができます。
    リフレーズの例
  2. データ形式ごとに処理方法を変えて、LLM にとって分かりやすい形で回答文を得られるようにしました。また、回答文では根拠となるソースを得られる機能があります。(画像例では Wikipedia を根拠として示しています。)また、画像の読み込みに対応しているため、GIF、PNG、PDF、PPTX、DOCXなどの画像データやリッチテキスデータから検索できる機能も実装されています。
    今回作成したアプリケーションでは、拡張子ごとに前処理を行いました。

結果

今回のスコアは18.77点と全体の中で中位くらいでした。 改善点としては、機能を完成させることに時間を使いすぎて、あまり精度を上げることに時間を使うことができなかったところがあげられます。チームメンバー全員がこういったコンテスト初参加で慣れていない中でタイトなタイムスケジュールでひとまずアプリケーションとして完成はできたことは達成感を感じました。しかし、早い段階でデータの前処理や方針立てのために、トラップのあるデータの要因分析をできれば良かったと感じます。また同様のコンテストに参加する機会があれば、こちらの対策などもチームで考えた上で参加させていただきたいです。また、我々としては評価方法など自社の製品にも活かせるヒントになる要素を沢山得られた実りのあるコンテストになりました。

評価スコアは18.77/30でした

おまけ

今回作業部屋として提供していただいた部屋。とても景観がいい部屋でした。私たちの部屋はホワイトボードがなかったため、紙に色々書き込んで相談して決めていました。ある意味、このリモートワークの時代にあまり経験のできないような空間で、和気あいあいと作業ができて楽しかったです。

作業部屋( AI のコンテストでありながら、くじ引きという形で部屋の位置が決められました。)
今回のコンテストの期間中、Kozuchi Conversational Generative AI の開発にどういったことが活きるのかとメンバー同士でディスカッションを気軽にすることができました。これもオフラインならではだと感じました。また、普段業務を共にしている仲間と楽しみながら、ある程度の品質のものを作るという経験はかけがいのないものになりました。このような素晴らしい場を提供していただけたMicorosoft様、ASCII様、温かく応援していただいた皆様には重ねてお礼申し上げます。ありがとうございました。

なお、今回の成果発表について、アーカイブ動画がYoutubeにアップロードされています。我々の発表は27:00からです。


www.youtube.com

また、ASCII様より以下の記事が公開されています。