A Coven of Witches, Burley
© Copyright Oscar Taylor and licensed for reuse under this Creative Commons Licence.

 

 

Difyについてーその6」では、再ランク(Rerank)モデルを利用したチャットボットのRAGアプリをDifyで作成し、ご覧いただきました。

結構簡単に完成したので、本日は、FiD もどきのRAGアプリをDifyで作成してみようと思います。

 

まず、「Difyについてーその3」でClaude3(との対話の#2および#3)が教えてくれたRAGおよび最近の3つのRAG実装アプローチの特徴を再掲しておきます。

RAG (Retrieval-Augmented Generation) は、大規模な言語モデルと外部知識ソースを組み合わせた自然言語処理のアプローチです。具体的には、次の2ステップからなります。

1.     情報検索 (Retrieval): 入力テキストに関連する文書や文章を、外部の大規模なコーパス(ウェブページ、ウィキペディア、企業内文書など)から検索します。

2.     生成 (Generation): 言語モデルが、入力テキストと検索された関連情報を組み合わせて、最終的な出力を生成します。

 

RAGの長所は、大規模な言語モデルの高い生成能力と、外部知識ソースの豊富な情報を組み合わせることで、より正確で豊富な応答を生成できる点にあります。一方で、検索の品質や関連する情報の扱いなど、課題も残されています。

RAGは質問回答や対話システム、要約、データ対データ変換など、様々なNLPタスクに応用が期待されています。DPRやRAG-Sequence、FiDなどのRAGモデルが提案されており、研究が活発に行われている分野です。

DPR、RAG-Sequence、FiDはいずれもRAGアプローチを採用した代表的なモデルですが、以下のような違いがあります。

 

DPR (Dense Passage Retriever):

  • ベルトリブ社が提案した、情報検索部分に特化したモデル
  • 双方向エンコーダを使い、質問とパッセージの密なベクトル表現を学習
  • パッセージ検索時に、質問とパッセージのベクトル類似度を計算し関連度を判断

 

RAG-Sequence:

  • マイクロソフト社が提案した、エンドツーエンドのRAGモデル
  • BERT等の事前学習言語モデルと、DPRによる情報検索部を組み合わせている
  • シーケンス間の attentionにより、生成時に検索された関連情報を効果的に利用可能

 

FiD (Fusion-in-Decoder):

  • スタンフォード大学が提案したRAGモデルの拡張
  • デコーダ内でエンコーダの出力と検索された関連情報を融合させる新しいアーキテクチャ
  • 関連情報を生成に柔軟に活用できるため、より高い応答品質が期待できる

 

いずれも情報検索と生成を組み合わせるRAGの枠組みは同じですが、具体的な検索・生成のアーキテクチャや、関連情報の利用方法が異なります。モデルの性能や特性を踏まえ、用途に合わせて使い分ける必要があります。

 

今回は、その後のClaude3との対話の「私#8」で述べた以下の手順をDifyで定義してAI検索アプリとすることを目論んでいます。

私#8

これまで、RAGは使っていませんでしたが、生成AIのハルシネーション対策として、1つの生成AIの回答を別の生成AIに与えて内容を評価し加筆訂正してもらうというアプローチをとっていました。DifyでRAGを構築する際は、RAG-Sequenceに近い形になると思いますが、LLM1の回答をLLM2で評価し、必要に応じて加筆訂正させることで、FiD相当のことができそうですね。

 

さっそくDifyでのアプリ構築に入ってもよいのですが、出来上がったアプリのテストデータ(生成AIによって異なる結果が得られるような質問)の1つとして、上記のClaude3のRAGに関する説明を他の生成AIに与えて、間違い探しをしてもらい、テストに使えるかどうか試してみました。

他の生成AIに対する質問内容は以下の通りです。

Claude3が、RAGの実装方法について以下の3種類の技法の説明をしているのですが、内容が正しいかどうか確認し、間違いがあれば訂正してください。

###

DPR、RAG-Sequence、FiDはいずれもRAGアプローチを採用した代表的なモデルですが、以下のような違いがあります。

DPR (Dense Passage Retriever):

・ベルトリブ社が提案した、情報検索部分に特化したモデル

・双方向エンコーダを使い、質問とパッセージの密なベクトル表現を学習

・パッセージ検索時に、質問とパッセージのベクトル類似度を計算し関連度を判断

RAG-Sequence:

・マイクロソフト社が提案した、エンドツーエンドのRAGモデル

・BERT等の事前学習言語モデルと、DPRによる情報検索部を組み合わせている

・シーケンス間の attentionにより、生成時に検索された関連情報を効果的に利用可能

FiD (Fusion-in-Decoder):

・スタンフォード大学が提案したRAGモデルの拡張

・デコーダ内でエンコーダの出力と検索された関連情報を融合させる新しいアーキテクチャ

・関連情報を生成に柔軟に活用できるため、より高い応答品質が期待できる

 

いずれも情報検索と生成を組み合わせるRAGの枠組みは同じですが、具体的な検索・生成のアーキテクチャや、関連情報の利用方法が異なります。モデルの性能や特性を踏まえ、用途に合わせて使い分ける必要があります。

 

この質問を他の生成AIに与えた結果は以下の通りでした。

 

■ChatGPT-4oの回答

ChatGPT

Claude3によるRAG(Retrieval-Augmented Generation)アプローチの説明について確認し、以下の訂正と補足を行います。

訂正内容

DPR (Dense Passage Retriever):

提案した企業は「ベルトリブ社」ではなく「Facebook(現Meta)」です。

提案されたモデルは主に質問応答(QA)タスクに特化していますが、情報検索部分に特化したものではありません。

RAG-Sequence:

提案者は「マイクロソフト」ではなく、「Facebook(現Meta)」です。

RAG(Retrieval-Augmented Generation)全体のフレームワークの一部としてRAG-SequenceとRAG-Tokenという2つの変種が提案されました。

Attentionの使い方について、シーケンス間のattentionというより、生成時に逐次検索を行い、各生成トークンに対して関連情報を利用する点が重要です。

FiD (Fusion-in-Decoder):

提案者は「スタンフォード大学」ではなく、「Facebook(現Meta)」です。

FiDはエンコーダの出力と検索されたパッセージをデコーダ内で統合することにより、RAGの生成精度を向上させる手法です。

 

いろいろ違いが指摘されていますが、Claude3とChatGPT-4oと、どちらが正しいのでしょうか?

バックエンドの生成AIはGPTなので、同じような評価になるかもしれませんが、Copilotにも聞いてみました。

 

■Microsoft Copilotの回答

Copilot

webを使用しています

 

Claude3さんの説明は基本的に正確ですが、いくつかの点を補足・訂正します。

DPR (Dense Passage Retriever):

  • DPRは、Facebook AIが提案した情報検索部分に特化したモデルで、ベルトリブ社ではなく1。
  • のモデルは、質問とパッセージの密なベクトル表現を学習するための双方向エンコーダを使用します1。
  • ッセージ検索時には、質問とパッセージのベクトル類似度を計算し、関連度を判断します1。

 

RAG-Sequence:

  • RAG-Sequenceは、Facebook AIが提案したエンドツーエンドのRAGモデルで、マイクロソフト社ではなく23。
  • このモデルは、BERT等の事前学習言語モデルと、DPRによる情報検索部を組み合わせています23。
  • シーケンス間のattentionにより、生成時に検索された関連情報を効果的に利用可能です23。

 

FiD (Fusion-in-Decoder):

  • FiDは、スタンフォード大学が提案したRAGモデルの拡張です4。
  • このモデルは、デコーダ内でエンコーダの出力と検索された関連情報を融合させる新しいアーキテクチャを採用しています4。
  • 関連情報を生成に柔軟に活用できるため、より高い応答品質が期待できます4。

 

これらのモデルは、情報検索と生成を組み合わせるRAGの枠組みを共有していますが、具体的な検索・生成のアーキテクチャや、関連情報の利用方法が異なります。モデルの性能や特性を踏まえ、用途に合わせて使い分ける必要があります。これらのモデルは、特定のタスクに対して最適な結果を提供するために、それぞれ異なるアプローチを採用しています。これらの詳細を理解することで、各モデルがどのような状況で最も効果的であるかを理解することができます。1234

 

詳細情報

1:huggingface.co

2:huggingface.co

3:paperswithcode.com

4:wandb.ai

※Facebook AIはメタ(旧称Facebook)の一部であり、同社のAI技術開発を担当しています

 

ふーむ! Claude3の回答に対してOpenAI/Microsoftは、DPRとRAG-Sequenceの

提案者はFacebookだと言っています。

CohereのCommand R+にも尋ねてみました。

 

■Command R+の回答

DPR(Dense Passage Retriever)、RAG-Sequence、FiD(Fusion-in-Decoder)は、確かにRAG(Retrieval-Augmented Generation)アプローチを採用した代表的なモデルですが、いくつかの点について補足や訂正が必要です。以下に各モデルの説明を完成させたものを示します。

 

DPR (Dense Passage Retriever):

  • ベルトリブ社(BERTとRETRIVERのかばん語)が提案したモデルで、情報検索部分に特化している。
  • 双方向エンコーダを使用し、質問とパッセージの両方を密なベクトル表現に埋め込むことで、関連性の高いパッセージを効率的に検索できる。
  • パッセージ検索時は、質問とパッセージのベクトル類似度を計算し、最も類似度が高いパッセージを関連度の高いものとして判断する。
  • DPRはRAGアプローチの最初のステップである情報検索部に相当し、生成モデルと組み合わせることでRAGの枠組みを完成させる。

 

RAG-Sequence:

  • マイクロソフト社が提案した、エンドツーエンドのRAGモデル。
  • BERTなどの事前学習言語モデルをエンコーダとして用い、DPRによる効率的な情報検索部と組み合わせている。
  • シーケンス間のattention機構を導入することで、質問に対する回答を生成する際に、検索された関連情報を効果的に利用することができる。
  • エンコーダで文脈を理解し、DPRで関連パッセージを検索、デコーダで回答を生成する、RAGの生成プロセス全体を1つのモデルで実現している。

 

FiD (Fusion-in-Decoder):

  • スタンフォード大学が提案したRAGモデルの拡張。
  • エンコーダとデコーダを持つ標準的なシーケンスツーシークエンス(Seq2Seq)モデルをベースに、デコーダ内でエンコーダの出力と検索された関連情報を融合させるアーキテクチャを提案している。
  • 関連情報をデコーダの浅い層と深い層の両方に注入することで、生成に柔軟に活用できるようにしている。
  • これにより、関連情報をより効果的に活用した応答生成が可能となり、RAGモデルの応答品質を向上させることができる。

 

以上のように、3つのモデルはいずれもRAGの枠組みを採用しながら、検索・生成のアーキテクチャや関連情報の利用方法に違いがあります。DPRは情報検索部に特化し、RAG-SequenceはエンドツーエンドのRAGモデルを実現、FiDはデコーダ内の情報融合に焦点を当てた拡張を提案しています。用途や必要とする性能、特性に応じて、適切なモデルを選択することが重要です。

 

Mistral AIにも尋ねてみました。

 

■Mistral AIの回答

DPR(Dense Passage Retriever)、RAG-Sequence、FiD(Fusion-in-Decoder)は、RAG(Retrieval-Augmented Generation)アプローチを基盤とした代表的なモデルです。以下に、それぞれのモデルの説明を日本語で提供します。

DPR(Dense Passage Retriever):

DPRは、Facebook AI(Beltrive Corporationではなく)が提案したモデルで、情報検索部分に特化しています。双方向エンコーダを使用して、質問とパッセージの両方を密なベクトル表現に埋め込むことで、関連性の高いパッセージを効率的に検索できます。パッセージ検索時には、質問とパッセージのベクトル類似度を計算し、最も類似度が高いパッセージを関連度の高いものとして判断します。DPRはRAGアプローチの最初のステップである情報検索部に相当し、生成モデルと組み合わせることでRAGの枠組みを完成させることができます。

RAG-Sequence:

RAG-Sequenceは、マイクロソフト社が提案したエンドツーエンドのRAGモデルです。BERTなどの事前学習言語モデルをエンコーダとして使用し、DPRによる効率的な情報検索部と組み合わせています。シーケンス間のattention機構を導入することで、質問に対する回答を生成する際に、検索された関連情報を効果的に利用することができます。RAG-Sequenceは、エンコーダで文脈を理解し、DPRで関連パッセージを検索、デコーダで回答を生成するRAGの生成プロセス全体を1つのモデルで実現しています。

FiD(Fusion-in-Decoder):

FiDは、スタンフォード大学が提案したRAGモデルの拡張です。標準的なシーケンスツーシークエンス(Seq2Seq)モデルをベースに、デコーダ内でエンコーダの出力と検索された関連情報を融合させるアーキテクチャを提案しています。関連情報をデコーダの浅い層と深い層の両方に注入することで、生成に柔軟に活用できるようにしています。これにより、関連情報をより効果的に活用した応答生成が可能となり、RAGモデルの応答品質を向上させることができます。

以上のように、3つのモデルはRAGの枠組みを基盤としながら、検索・生成のアーキテクチャや関連情報の利用方法において異なります。DPRは情報検索部に特化し、RAG-SequenceはエンドツーエンドのRAGモデルを実現し、FiDはデコーダ内の情報融合に焦点を当てた拡張を提案しています。用途や必要とする性能、特性に応じて、適切なモデルを選択することが重要です。

 

この3種類のRAGアプローチの提案者に関する生成AIの回答を比較すると、以下のようになります。

 

Claude3

GPT-4o     

Copilot

Command R+

Mistral AI

DPR

ベルトリブ

META

META

ベルトリブ

META

RAG-Sequence

MS

META

META

MS

MS

FiD

スタンフォード大学

META

スタンフォード大学

スタンフォード大学

スタンフォード大学

DPRの提案者について:そもそもベルトリブ社というのが、よくわからなかったので、Claude3にもう一度日本語でなく、英語で回答してもらうと、「ベルトリブ」というのは、「BertLab」という自然言語処理の分野で先進的な研究を行っている組織の名前でした。そして、BertLabは、META(旧Facebook)社内に存在する研究開発組織「Facebook AI Research」の研究グループで主にBertなどの大規模言語モデルの開発と応用に特化しているということなので、実はみな同じ回答だったことになります。(本来は「BERTラボ」とでも訳したほうがよさそうです)。

RAG-Sequenceの提案者について:GPT-4oとCopilot以外はMicrosoftが提案者だとしているので、「Claude3, Command R+, Mistral AIはMicrosoftをRAG-Sequenceの提案者としている」と伝えたところ、以下の反応がありました。

  • ChatGPT-4oの反応:

それに対して、Copilotは次のように反論してきました。

  •      Copilotの反応:

「その詳細は以下の論文で確認できます23」で示された2のURLのサイトを確認したところ、確かに下図の通り、「Facebook AI Research」となっていることが確認できました。(3も同様でした)この論文は、2020年5月22日に初版が投稿され、2021年4月12日に最終版が改訂されていました。

 

ということは、3:2で少数派のChatGPT-4o/Copilotの方が正しかったのでしょうか?

Claude3に、この論文を示してどう思うか尋ねてみたところ、

と、Claude3は引き下がったのですが、Command R+にも確認すると、今度は、Command R+が反論してきました。

ということで、日付からすると、Facebook AI Researchの論文が4日早く投稿されていますが、論文タイトルからすると、Microsoftのものは、「RAG-Sequence: Retrieval-Augmented Language Generation with Latent Retrieval」というタイトルで、こちらのほうが、明確にRAG-Sequenceに関する論文と呼ぶに相応しい、すなわち、『「RAGーSequenceの概念はMicrosoftによって最初に導入された」という方が一般的な理解である』というCommand R+の主張の方が正しいのかもしれません。

FiDの提案者についてFiDの提案者については、ChatGPT-4oのみが違う意見でしたが、Claude3、Microsoft Copilot、Cohere Command R+、Mistral AIは、スタンフォード大学が提案者だとしていると指摘したところ、あっさり前言を撤回しました。

以上をまとめると、

  • 当初、5つの生成AIの回答がバラバラでしたが、掘り下げていくと、FiDの提案者に関するChatGPT-4oの回答以外は正解と言って良いものでした
  • 今回のいろいろな生成AIへの再確認の過程を見ると、正解が多数決でも決まらない(つまり、どちらがハルシネーションかを機械的に判定できない)ことがあるということが分かりました

ということになります。

 

当初は、安易に

私#8

これまで、RAGは使っていませんでしたが、生成AIのハルシネーション対策として、1つの生成AIの回答を別の生成AIに与えて内容を評価し加筆訂正してもらうというアプローチをとっていました。DifyでRAGを構築する際は、RAG-Sequenceに近い形になると思いますが、LLM1の回答をLLM2で評価し、必要に応じて加筆訂正させることで、FiD相当のことができそうですね。

などと考えていましたが、そう簡単にはいかないことが分かりましたので、どうすればDifyで複数の生成AIを利用して、回答でハルシネーションが起きるのを防ぐことができるのか、腰を落ち着けて策を練ってみようと思います。

なお、今回、他の生成AIの回答が自分の回答と違うと指摘された際の態度として、あっさり非を認めるChatGPT-4oやCluade3に対して、しっかり反論するCopilotやCommand R+の応答に、どちらに対しても、どこか人間味を感じてしまいました。

 

本日は以上です。

 

終わり