ChatGPTの曖昧なプロンプトを理解する能力の向上

*この記事はThe New Stackに掲載されたもので、許可を得てここに再掲載している。
**プロンプトエンジニアリングの技術は、大規模言語モデル(LLM)が検索拡張世代(RAG)システムで代名詞や他の複雑な共参照を扱うのを助ける。
拡大し続けるAIの領域において、ChatGPTのような大規模言語モデル(LLM)は、かつてないスピードで革新的な研究とアプリケーションを推進している。一つの重要な発展は、検索拡張世代(RAG)の出現である。この技術は、LLMのパワーと、長期記憶として機能するベクトルデータベースを組み合わせることで、生成される応答の精度を高めるものである。RAGアプローチの模範的な現れは、オープンソースプロジェクトAkcioであり、堅牢な質問応答システムを提供している。
Accioのアーキテクチャ](https://assets.zilliz.com/akcio_architecture_1024x863_5057f39ead.png)
Akcioのアーキテクチャでは、ドメイン固有の知識は、データローダーを使って、MilvusやZilliz(フルマネージドMilvus)のようなベクトルストアにシームレスに統合される。ベクトルストアは、ユーザのクエリに最も関連性の高いトップKの結果を取得し、それらをLLMに伝え、ユーザの質問に関するコンテキストをLLMに提供する。その後、LLMは外部知識に基づいて応答を改良する。
例えば、Akcioにインポートされた "Insights Report on the Progress of Large Language Models in 2023 "という記事について、ユーザーが "What are the use cases of large language models in 2023? "と質問した場合、LLMはその記事から最も関連性の高い3つの文章を探し出す:
1.2023年、LLMのユースケースは、ジェネレーションAIと意思決定の2つに分けられる。意思決定シナリオはより高いビジネス価値が期待される。
2.2.世代AIのシナリオには、主に対話対話、コード開発、インテリジェントエージェントなどが含まれる。
3.NLP アプリケーションには、テキスト分類、機械翻訳、感情分析、自動要約などが含まれる。
Accioはこれらの文章を元のクエリと組み合わせ、LLMに転送し、ニュアンスのある的確な応答を生成する:
大規模なモデル産業のアプリケーション・シナリオは、生成シナリオと意思決定シナリオに分けられる。
RAG における共参照解決の課題
しかしながら、RAGシステムを導入することは、進歩があったにもかかわらず、特に共参照解決を伴う複数ターンの会話において、課題をもたらす。この一連の質問を考えてみよう:
Q1: 2023年の大規模言語モデルのユースケースは?
A1:大規模言語モデルのユースケースは、生成AIと意思決定に分けられる。
Q2: 両者の違いと例を教えてください。
Q2の代名詞 "they "は、"generation AI and decision-making "を指している。しかし、LLMはこの質問に対して、会話の一貫性を損なうような無関係な結果を生成するかもしれない:
1.BERT と GPT は NLP 分野で重要なモデルであるが、その設計と適用シナリオには大きな違いがある。
2.大型モデルと小型モデルの違いは、その規模と複雑さにある。大型モデルは通常、より多くのパラメータと複雑な構造を持ち、学習と推論に多くの計算資源と時間を必要とする。一方、小型モデルは比較的単純で、パラメータ数も少なく、学習や推論の速度も速い。
3.しかし、この2つの製品は非常によく似ているため、区別するための追加情報はない。
共参照の解決にChatGPTを使う
トークン化、レマタイゼーション、リカレントニューラルネットワークを使ったキーワード置換といった従来の方法は、複雑な参照を解決するには不十分なことが多い。そのため、研究者はChatGPTのようなLLMを共参照解決タスクに利用しています。このアプローチでは、提供された文脈に基づいて、ChatGPTに代名詞の置換や元の質問の保持を指示する。この方法は有望ですが、プロンプトの指示に従わずに直接回答を生成することがあり、より洗練された戦略の必要性を示しています。
テストした例
以下のプロンプトフォーマットを使用して、ChatGPTに代名詞を置き換えるように促すストレートコマンドを実験しました:
prompt = f'''Please generate a new question adherence to the following guidelines:
1.1.文脈に基づいて、質問に欠けている代名詞や条件を補ってください。
2.2.すでに完成している場合は、元の質問を保持してください。
歴史
質問{質問}''
**例1
クエリー
history = ''' NLPとは?
NLPとは、Natural Language Processing(自然言語処理)の略。コンピュータサイエンスと人工知能の一分野であり、自然言語を用いたコンピュータと人間の相互作用に焦点を当てています。'''
question = 'どのような問題を解決するのですか?
ChatGPTの回答
自然言語処理(NLP)はどのような問題を解決するのですか?
この場合、ChatGPTは "それ "を "自然言語処理(NLP)"に置き換えて、素晴らしい仕事をしました。
例 2
クエリー
history = '''GPT4はいつリリースされましたか?
GPT4は2023年にリリースされました。
question = '今年のコンピュータビジョンの進歩は?
ChatGPTの回答
今年はコンピュータビジョンでどのような進展がありましたか?
この場合、ChatGPTは "this year "を代入するのに苦労し、不完全な解決につながった。
**例3
クエリー
history = '''GPT3とは?
GPT-3 (Generative Pre-trained Transformer 3) はOpenAIによって開発された最先端の言語処理モデルです。
GPT4はいつリリースされましたか?
GPT4は2023年にリリースされました。
question = '両者の違いは何ですか?後者の利点は何ですか?
ChatGPTの回答
申し訳ありませんが、GPT-4のリリース日に関する情報は、OpenAIから公式に発表されていないため、正確ではありません。そのため、GPT-3とGPT-4の違いや、GPT-4の利点についてお答えすることはできません。
残念ながら、ChatGPTはその複雑な決定プロセスのためか、指示と乖離しています。プロンプトを強化する努力にもかかわらず、ChatGPTは時折直接的な答えに向かい、共参照解決タスクを複雑にしています。
チェーン・オブ・ソートによる数発プロンプト:洗練されたアプローチ
プロンプトエンジニアリングはLLMを効果的に利用する上で極めて重要な役割を果たす。我々は、有望な戦略として、数発プロンプトとChain of Thought (CoT)メソッドを組み合わせてテストすることにした。数発プロンプトは、LLMに複数の参考例を提示し、LLMがそれらの例を模倣して回答するように導く。CoTは、LLMの回答に段階的な推論を促すことで、複雑な推論タスクにおけるLLMのパフォーマンスを向上させる。
これらの技術を統合することで、我々はChatGPTを共参照解決に導くプロンプトフォーマットを開発した。改訂されたプロンプトフォーマットには、空の会話履歴、基本的な例、失敗した代名詞の置き換え、複数の代名詞を含むケースが含まれ、ChatGPTにより明確な指示と参考例を提供します。ChatGPTがNEED COREFERENCE RESOLUTION: Yes
を返すケースは、ChatGPTが首尾一貫した応答をするために代名詞やあいまいな参照を置き換える必要があることを示すため、非常に重要です。
以下は洗練されたプロンプトのフォーマットです:
REWRITE_TEMP = f'''
HISTORY
[]
質問:こんにちは、お元気ですか?
NEED COREFERENCE RESOLUTION: いいえ:その結果、出力質問は現在のクエリを反映する。
-------------------
履歴
[Q: Milvusはベクトルデータベースですか?
A: はい、Milvusはベクトルデータベースです。]
NOW QUESTION: 使い方は?
NEED COREFERENCE RESOLUTION: はい => THOUGHT: 現在の質問では、'it'を'Milvus'に置き換えなければならない => OUTPUT QUESTION: Milvusの使い方は?
-------------------
履歴
[]
NOW QUESTION: Milvusの特徴は?
NEED COREFERENCE RESOLUTION: はい => THOUGHT:it」には置き換えが必要だが、履歴には適切な参照がない。したがって、出力質問は変更されません。
-------------------
ヒストリ
[Q: PyTorchとは何ですか?
A: PyTorchはPython用のオープンソースの機械学習ライブラリです。ディープニューラルネットワークを構築・学習するための柔軟で効率的なフレームワークを提供します。
Q: Tensorflowとは何ですか?
A: TensorFlowはオープンソースの機械学習フレームワークです。TensorFlowは、機械学習モデルの構築とデプロイのためのツール、ライブラリ、リソースの包括的なセットを提供します。]
NOW QUESTION:両者の違いは何ですか?
NEED COREFERENCE RESOLUTION: Yes => THOUGHT: 'Them'は、現在の質問では'PyTorch and Tensorflow'に置き換えるべきである。 => OUTPUT QUESTION: PyTorchとTensorflowの違いは何ですか?
-------------------
HISTORY
ヒストリー}] [ヒストリー
NOW QUESTION: {question}
必要な共参照の解決: '''
テストされ、洗練された回答例
以下は、洗練されたプロンプトを使用した実験の結果です:
**例1
クエリー
history = '''GPT-4はいつリリースされましたか?
GPT-4は2023年にリリースされました。
question = '今年のコンピュータビジョンの進歩は?
ChatGPTの洗練された回答:
Yes => THOUGHT: now questionの "this year "を "2023 "に置き換える必要があります。 => OUTPUT QUESTION: 2023年にコンピュータビジョンでどのような進歩がありましたか?
**例
クエリー
history = '''GPT-3とは?
GPT-3 (Generative Pre-trained Transformer 3) はOpenAIによって開発された最先端の言語処理モデルです。
GPT-4はいつリリースされましたか?
GPT-4は2023年にリリースされました。
question = '両者の違いは何ですか?後者の利点は何ですか?
ChatGPTの洗練された回答:
Yes => THOUGHT: 今の質問で'the two'を'GPT-3とGPT-4'に、'the latter'を'GPT-4'に置き換える必要があります。 => OUTPUT QUESTION: GPT-3とGPT-4の違いは何ですか?GPT-4の利点は何ですか?
洗練されたプロンプトフォーマットはChatGPTの複雑な相互参照解決タスクを処理する能力を大幅に向上させます。以前は困難であった複数のエンティティを含む質問にも効果的に対応できるようになりました。ChatGPTは代名詞や曖昧な参照を巧みに置換し、正確で文脈に即した回答を提供します。
結論
プロンプトエンジニアリングは、LLMを使用したRAGシステムにおける共参照問題の解決において、極めて重要な役割を果たす。数発のプロンプトやCoTメソッドなどの革新的なテクニックを統合することで、我々はRAGシステムにおける複雑な参照の扱いを大幅に改善し、ChatGPTのようなLLMが代名詞や曖昧な参照を正確に置き換え、首尾一貫した応答を返すことを可能にした。
読み続けて

Designing Multi-Tenancy RAG with Milvus: Best Practices for Scalable Enterprise Knowledge Bases
We’ve explored how multi-tenancy frameworks play a critical role in the scalability, security, and performance of RAG-powered knowledge bases.

Deploying a Multimodal RAG System Using vLLM and Milvus
This blog will guide you through creating a Multimodal RAG with Milvus and vLLM.

Transformers4Rec: Bringing NLP Power to Modern Recommendation Systems
Transformers4Rec is a powerful and flexible library designed for creating sequential and session-based recommendation systems with PyTorch.