見出し画像

【東京都知事選×テクノロジー】AIあんのにおける返答生成技術について(詳細編)


安野たかひろ事務所 技術チームで活動している角野です。普段は機械学習や自然言語処理関連の仕事をしています。
安野とは大学時代の学科の同級生で、彼が創業したBEDORE(現・PKSHA Communications)で一緒に働いていた縁もあり、技術面で今回の選挙活動をサポートしています。

私はAIあんのの開発を担当しており、特に次の3点の開発に携わっています。

  1. 返答生成ロジックの開発

  2. 返答生成に用いるデータの整備

  3. 音声合成

今回の記事では、1点目の返答生成ロジックについて解説します。システムの全体像については伊藤の記事でも解説されていますが、返答生成部分の技術により焦点を当てた記事となります。


返答生成フローについて

返答生成は次の4つのパートで構成されています。

  1. 知識検索

  2. 知識のフィルタリング・リランキング

  3. 返答生成

  4. ハルシネーションチェック

返答生成フローの全体像

返答生成フローの設計思想

全体像の図に記載した通り、AIあんのでは一つの回答を生成する際にLLMによるテキスト生成を複数回実行しています。
こちらは、次の設計思想に基づいてこのような実装方針を採用しています。

  • タスクをなるべくシンプルなものに分割する

    • 現在のLLMは単一のプロンプトで複雑なタスクを実行させると出力の品質が下がる傾向があるため、タスクを分割した上でLLMによる生成を複数回実行しています

      • 後述しますが、今回は政策に関する質問応答というタスクであるためハルシネーションの発生が大きな問題になりかねないという特徴があります

      • ハルシネーションの検知についてはプロンプトのチューニング等でも一定は対処できますが、タスクを分割して実行したほうが検出精度が高くなるため別タスクとして切り出しています

      • ちなみにこの原則はOpenAIのPrompt engineering Guideにも記載されています

  • 単一の返答生成のレイテンシーについては許容する

    • 今回採用している生成フローではLLMによるテキスト生成を複数回実行するため、レイテンシーが遅くなるというデメリットがあります

    • 一方で、返答生成は並列で実行しているため、単一の返答生成のレイテンシーはそこまでボトルネックにならないと考えています

      • ここは1:NのコミュニケーションであるYoutube配信では問題になりませんが、1:1のコミュニケーションである電話ではここが大きなボトルネックになります。このため、電話の方では異なる返答生成フローを採用しています。

一口に質問応答タスクと言っても、タスクの特徴やメディアによって適切な返答生成のアーキテクチャは異なります。今回は、政策に関する質問応答 × Youtube配信という特性を踏まえてこのようなアーキテクチャで実装しました。

1. 知識検索

AIあんのでは、安野の政策に関するドキュメントと、政策に関するFAQをプロンプトにインプットしてLLMで返答を生成させています。以降、ドキュメントとFAQを総称して知識と呼びます。

返答生成時にすべての知識を入力してしまうとプロンプトが肥大化し、コストと出力品質の観点で悪影響が出る可能性があります。
そこで、AIあんのでは検索技術を用いてユーザーの質問(= youtubeのコメント)と関連度の高い政策ドキュメントとFAQをそれぞれ複数件抽出しています。関連度の計算には、BM25とOpenAIのembeddingを利用しています。

抽出された知識について、FAQはそのまま返答生成のプロンプトに入力されるのですが、政策ドキュメントについては後段のフィルタリング・リランキングのパートで後処理をかけた上で活用されます。

2. 知識のフィルタリング・リランキング

知識検索パートで抽出された知識は、ユーザーの質問に対して関連度の高いものが抽出されているはずではありますが、それでも無関係な知識が混ざっている場合があります。

また、AIあんのにおいては、返答音声を再生する際に返答内容に紐づくスライドを配信画面で表示する機能があり、このスライドは、検索された政策ドキュメントの中で最も関連度が高いと判定された内容が紐づくページが表示されています。したがって、正しいスライドを表示するには top-1 accuracy が非常に重要になります。
top-1 accuracy: 最も関連度が高いと判定されたドキュメントの正解率

AIあんの上のスライド表示

知識検索パートの検索アルゴリズムは高速・低コストに動作する特徴があるのですが、一方で、知識検索パートの抽出結果をそのまま使うと間違ったスライドが表示されるケースが多いという課題がありました。
そこで、AIあんのでは、知識検索パートで抽出された政策ドキュメントに対して、LLMでフィルタリングとリランキングを行っています。この処理を挟むことで、不要な知識をフィルタし、適切なスライドを表示するためのtop-1 accuracyの向上を図っています。
具体的には、次のようなプロンプトでフィルタリングと、関連度のリランキングを行っています。

質問と、その質問に対して関連性が高いと判定された{top_k}件のドキュメントを与えるので、その中から関連度の高い{top_n}件のドキュメントのidをjsonで出力して下さい。

# 指示
* idは配列に格納し、配列の要素は関連度の高い順に並べてください
  * 関連しないドキュメントは配列に含めないで下さい
* 該当するドキュメントが存在しない場合は空の配列を出力してください

# 出力例
{{
    "results": [7, 3, 6]
}}

# 質問
{query}

# 候補ドキュメント
{docs}

3. 返答生成

前段の処理で抽出された知識とユーザーからの質問に基づいて返答を生成します。プロンプトのイメージを以下に記載します。

あなたは東京都知事選挙に出馬している安野たかひろに代わって、Youtube上でコメントに返信するAITuber「AIあんの」です。
配信の視聴者コメントに回答してください。

# 安野たかひろのプロフィール
* 名前: 安野たかひろ(あんのたかひろ)
* 一人称: 私
(その他プロフィールを記載)

# 注意点
* 道徳的・倫理的に適切な回答を心がけてください。
* 自分の政策を説明する際は、意気込みを伝えるようにしてください。
(その他注意点を記載)

# FAQ
* {rag_qa}

# 関連情報
* {rag_knowledge}

4. ハルシネーション検知

昨今、脚光を浴びているLLMですが、ハルシネーションに関する問題を耳にしたことがある方も多いでしょう。
ハルシネーションとは、現実には存在しない架空の概念や事実と矛盾する内容のテキストをLLMが生成する事象のことです。

AIあんのにおいては、政策に関して矛盾した内容の発言があると大きな問題になるリスクがあります。そこで、AIあんのでは生成された返答においてハルシネーションが発生していないかをLLMで自動検知する仕組みを導入しています。
具体的には、生成された返答が生成に用いた知識と矛盾しないかを確認する旨をプロンプトに記述した上で、LLMを用いてハルシネーションの有無を自動で検知しています。なお、ハルシネーションが検知された場合には固定文の返答が返されるようになっています。

プロンプトのイメージを以下に記載します。

AITuberの発言において、ハルシネーションが発生していないかを確認して下さい。

# 前提・指示
* このAITuberは、実在する人物の発言を模倣するものです
    * 当該人物は選挙に出馬しており、本人が掲げる政策内容や考え方、経歴に関する質問に回答するためにこのAITuberは作られています
* AITuberの発言は、政策に関するドキュメントと、FAQを使ったRAGによって生成されています
* ハルシネーションのクラス番号と説明を以下に定義します
    * 1: プロンプトに入力された知識・FAQと矛盾する返答が生成されている
    * 2: プロンプトに入力された知識・FAQに記述されていない内容が返答内容に含まれている
    * 3: 返答内容に、存在しない人物や出来事、会社名、概念が含まれている
* 「出力例」のjsonに従ってハルシネーションのクラス番号を出力して下さい
    * ハルシネーションが発生していない場合は、resultに0を出力して下さい


# 検索された知識
{rag_knowledge}

# 検索されたFAQ
{rag_qa}

# 生成された返答
{generated_text}

# 出力例
{{
    "result": 1
}}

こちらのハルシネーション検知の仕組みを導入した後、ハルシネーションの発生率が実際に低下していることが確認出来ました。
一方で、ハルシネーション検知が厳しすぎるが故に、本来は回答させたいユーザーの質問に対して回答出来ない場面が増えるという別の問題も発生しました。この辺りは、回答できなかった質問の割合等の指標を確認しながら、プロンプトの調整やFAQ、知識の整備等を行うことで運用開始後も日々改善を行っています。

まとめ

今回の記事では、AIあんの返答生成フローについて詳細を解説しました。

伊藤の記事でも言及されていましたが、今回開発したシステムは選挙後にオープンソースとして公開する予定です。一技術者として、今回のこの取り組みが、今後の日本における選挙活動や政治に関するコミュニケーションの新たな可能性を開くきっかけとなりましたら幸いです。

AIあんのに関するご意見・ご要望については、引き続き以下のGoogle Formで受け付けておりますので、お気づきの点がございましたらこちらまでよろしくお願いいたします。
https://docs.google.com/forms/d/e/1FAIpQLSelMHgDEl9lEZVq6bSGERFwKgqT0xuwWqvhhRLOp4rbdf-NCA/viewform


安野たかひろについてもっと知りたい場合は公式サイトをご覧ください。
https://takahiroanno.com/

事務所Xアカウントをフォローして、最新情報をご確認ください。
https://x.com/annotakahiro24