背景
私は修士一年の時に、Sony AIのインターンに応募しました。実は当時、私は全然日本語が分からなかったのですが、日本の職場や社会がどのように動いているのかに興味がありました。そして、英語で活動している技術系のサークルにいろいろ参加しました。その中で、Tokyo Devというサークルで、あるメンバーに相談しました。その方はSony AIでロボットエンジニアとして働いていました。私はその方に、「東京に英語で働ける会社がありますか」と聞きました。その方は、「自分の会社は外国人が多くて、主に英語でコミュニケーションをしています」と言っていました。そして、私もインターンとしてやってみようと思ったので、応募しました。
チーム
私が所属していたチームはSpaiceというチームでした、3ヶ月後にチーム名が変更され、現在はHakkenとして活動しています。Hakkenは日本語で、「発見」という意味です、そして、いまScientific Discoveryをテーマに取り組んでいます。Spaiceの時期は、メンバは主にGastronomyをテーマに取り組んでいました。例えば、レシピの分析、栄養量計算、食品と医療品の関係、新しい医療品の発見など、様々なトピックに関わりました。その中で私は主にレシピの分析、生成、人の健康を中心としたシステムを開発しました。
システムの構築
このシステムは、主に三つの役割が担ってます。レシピの分析・評価・個人向けレシピの生成を含みます。
第一部分はレシピの分析と評価
そのため、本システムではレシピに含まれる栄養量を算出する必要があります。しかし、多くのレシピはウェブサイトのテキストとして保存されているため、文章中から食材名と数量を抽出する必要があります。例えば、「大根250g使用する」といった記述です。レシピ記事の文章からこのような情報を認識・抽出するために、本システムではNERという機械学習モデルを使用しています。NERは自然言語処理の分野でよく使われるモデルの一つです。NERは、文章中で「どの単語が時間を示しているのか」「どの単語が場所を示しているのか」といった情報を判定し、特定の意味を持つ語を抽出・分類する役割を担います。レシピの場合は、食材名・量・単位を抽出することで、そのレシピの含まれる栄養量を計算できます。一般的には、レシピの含まれる栄養量を、個人が1日に必要な栄養量と比較することで、このレシピが良いか悪いかを分かりやすく判断できます。しかし、この方法だけでは、とり複雑の状況には十分対応できません。例えば、特定の食材にアレルギーがある場合や、糖尿病のため糖分の多い食べ物を控える必要がある場合です。このような場合は、ユーザーの健康情報を考慮しなければなりません。そして、個人向けの分析・評価の部分を行うために、LLMとRAGを導入して対応しました。個人向け分析を行うためには、まずレシピ中の食材と、ユーザーが抱える病気との関係を明確にする必要があります、しかし、LLMにそのまま質問するだけでは、回答の信頼性は担保されません。現在のLLMには、医療分野における知識の不足や学習データの偏りといった課題があります。そのため、LLMが参考できる信頼性の高い知識を外部から提供する必要があり、RAGシステムを構築しました。本システムでは、大量の医療論文を文単位に分割し、その文をベクターデータベースに保存しています。レシピの分析する際に、抽出した食材情報とユーザーの疾患情報に基づいて、ベクターデータベースから関連する根拠情報を検索します。得られた検索結果を整理してLLMに与えることで、LLMがその情報を参照し、より適切な評価を生成します。
第二部分はレシピの生成
個人向けレシピの生成では、ユーザーの健康状態や嗜好に応じて、生成されるレシピが異なる必要があります。しかし、心理状態や疾患などの複雑な要因を考慮すると、単一のLLMだけでは高品質の対応が困難になります。この課題を解決するために、本システムではマルチエージェントシステムを設計しました。複数のLLMを用いて、専門知識を持つエージェントを構築しています。これらのLLMは、それぞれ専門知識のデータセットを学習しており、専門分野の表現において、他のLLMと比べて高い性能を持っています。これらのLLMは、チェフエージェント、医師エージェント、栄養士エージェントといった専門エージェントとして機能し、相互に連携しながら複雑な問題を解決します。まず、本システムはユーザーからの質問やレシピ生成の要求を入力として受け取り、それを推論モデルに送信します。推論モデルは、質問を解決するために、どのような専門知識を必要か、またどの専門エージェントを割り当てるべきかをか判断します、その後、質問を複数のサブタスクに分解し、それぞれを対応するエージェントに渡します。複数のエージェントから得られた回答を収集・統合し、最終的に適切な回答を生成します。また、これらの専門エージェントは、外部ツールを利用することができます。例えば、医師エージェントは、先ほど述べた医療論文を保存しているベクターデータベースを検索できます。一方で、チェフエージェントはWeb検索を用いてレシピ情報を取得できます。これらのツールを活用することで、最終的に生成されるレシピの品質を向上させています。
このシステムについては、以下の録画で説明しています。
まとめ
このシステムの主な機能は、レシピの分析・評価・個人向けレシピの生成、そして健康に関する問題対するアドバイスの提供です。本システムには、機械学習モデル、LLMのデプロイ、ベクターデータベースの構築、マルチエージェントシステムの設計・実装、LLMの選定やテストなど、さまざまな技術要素が含まれています。例えば、なぜこのLLMを選択してたのか、どのようにマーチエージェントシステムを設計したか、またベクターデータベースにおける文埋め込みモデルをどのように選定したのかといった点です。また、このシステム平均応答時間などについても、可能であれば触れたいと考えています。次の記事では、これらの点について技術的な視点から詳しく説明したいと考えています。ぜひご覧ください。
参考