拡張検索によりLLMが長文脈タスクでより優れた性能を発揮

拡張検索によりLLMが長文脈タスクでより優れた性能を発揮

主要なポイント

  • LLMにおける長文脈の扱い: 複数文書の要約や複雑な質問応答などのタスクにおいて、従来の文脈長を超えるシーケンスを管理するための課題と技術を探る。
  • 検索拡張の利点: 外部ソースから取得した関連情報のみに焦点を当てることで、LLMが任意の長い文脈を効率的に処理できるようにする検索拡張の利点を強調。
  • 実世界での応用: オープンドメインの質問応答、複数文書の要約、対話システムなど、検索拡張がLLMのパフォーマンスを向上させる実用的なユースケースを検討。
  • LLM API統合ガイドライン: 検索拡張をLLM APIと統合するための実践的な手順とガイドラインを提供。

はじめに

言語モデルが長い文書の要約などのタスクで大量の情報をどのように処理しているのか疑問に思ったことはありませんか?検索が長文脈の大規模言語モデルと出会うと何が起こるのでしょうか?

このブログでは、論文「Retrieval Meets Long Context Large Language Models」を参考に、LLMにおける長文脈処理の課題を掘り下げ、検索拡張のような革新的なソリューションを探り、その応用について議論し、拡張検索をLLM APIと統合するためのガイドを提供します。

LLMにおける長文脈の理解

定義

言語モデルにおける長文脈とは、事前学習中に使用される典型的な文脈長よりもはるかに長い入力シーケンスを処理する能力を指します。GPT-2やGPT-3のような広く使用されている言語モデルの多くは、最大1024または2048トークンのシーケンスで事前学習されています。しかし、長い文書に対する質問応答や複数文書の要約などの多くの実世界のタスクでは、数千から数万トークンに及ぶはるかに長い文脈を理解し推論する必要があります。

課題

言語モデルで長文脈を効率的に処理することは、Transformerベースのモデルで使用されるセルフアテンション機構の二次的な時間とメモリの複雑さのために、大きな課題となります。入力シーケンスの長さが増加するにつれて、セルフアテンションの計算とメモリ要件は二次的に増加し、正確なアテンションで非常に長いシーケンスを処理することは非現実的になります。

重要性

文書要約、大規模ナレッジベースに対する質問応答、マルチターン対話システムなど、多くの実世界のアプリケーションでは、複数の文書や会話ターンにわたる長文脈の推論が必要です。長文脈機能を強化することで、これらの領域における言語モデルの新たな可能性が開かれ、パフォーマンスが向上し、より効果的で人間らしい言語理解と生成が可能になります。

長文脈を扱う2つの方法

論文「Retrieval Meets Long Context Large Language Models」では、著者らがLLMが長文脈を扱う2つの方法を紹介しています。

拡大されたコンテキストウィンドウ

長文脈を扱う一つのアプローチは、言語モデル自体のコンテキストウィンドウサイズを拡張し、セルフアテンション機構を通じてより長い入力シーケンスを直接処理できるようにすることです。

これは以下のような様々な技術で達成できます。

  1. 効率的なアテンション実装:
    FlashAttention (Dao et al., 2022) のような方法は、GPUメモリ階層をより有効活用することで、正確なセルフアテンションの計算を最適化します。これにより、近似なしで正確なアテンションを用いてより長いシーケンスを処理できます。
  2. 位置補間:
    多くの言語モデルは、回転位置埋め込み (RoPE) のような相対位置埋め込みを使用します。位置補間技術 (Chen et al., 2023; Kaiokendev, 2023) は、これらの埋め込みを事前学習で使用された元のコンテキスト長を超えて外挿できます。これにより、完全な再学習なしでコンテキストウィンドウを拡張できます。
  3. 継続事前学習/ファインチューニング:
    モデルをより長いシーケンスでさらに事前学習またはファインチューニングすることで、コンテキスト機能を拡張できます。例えば、LongLLaMA (Tworkowski et al., 2023) は、8Kコンテキストでの対照学習を用いてOpenLLaMAチェックポイントをファインチューニングします。
  4. スパース/ランドマークアテンション:
    完全なセルフアテンションの代わりに、スパースアテンション (Child et al., 2019) やランドマークアテンション (Mohtashami & Jaggi, 2023) は、事前定義されたパターンや学習された「ランドマーク」表現に基づいて、コンテキストのスパースなサブセットにのみアテンションを適用します。これにより計算が削減され、より長いコンテキストが可能になります。
  5. ウィンドウ化/チャンク化:
    長いコンテキストを複数の重複するウィンドウ/チャンクに分割し、ウィンドウ間で位置埋め込みを再利用します (Ratner et al., 2023)。モデルは各チャンクを独立して処理した後、出力を結合します。

コンテキストウィンドウを拡大することで、言語モデルは別の検索システムに依存せずに、長いコンテキストに直接アテンションを当てて推論できるようになります。

検索拡張の説明

検索拡張は2段階のプロセスです。

1 検索ステップ
このステップでは、別の検索システムを使用して、入力クエリまたはプロンプトに基づいて大規模なコーパスから関連するコンテキストを特定し取得します。この検索システムは、密なパッセージ検索器、疎な用語ベースの検索器、またはそれらの組み合わせです。

検索システムは、コーパス内のすべての文書/パッセージを密なベクトル表現にエンコードします。入力クエリが与えられると、クエリ表現とコーパス内のすべての文書表現との類似度を計算することで、最も関連性の高い上位k件の文書/パッセージを取得します。

使用される一般的な検索モデルには、DPR (Karpukhin et al., 2020)、REALM (Guu et al., 2020)、ColBERT (Khattab & Zaharia, 2020) などがあります。最近の研究では、学習された密な検索器 (Xiong et al., 2021) やパラメトリックメモリストアに対する検索 (Borgeaud et al., 2022) も探求されています。

2 言語モデルステップ
取得された上位k件の関連文書/パッセージは連結され、元のクエリ/プロンプトとともに言語モデルへの入力コンテキストとして渡されます。言語モデルは、セルフアテンション機構を使用してこの長い連結コンテキストを処理し、出力を生成します。

検索拡張の主な利点は次のとおりです。

  • 関連する部分のみを取得することで、任意に長いコンテキストを処理できる。
  • 検索システムは、大規模コーパスに対する効率的な最大内積検索に高度に最適化できる。
  • 言語モデルは、与えられたコンテキストに対して理解し一貫性のある出力を生成することに集中できる。

パフォーマンス比較:検索拡張 vs 拡大コンテキストウィンドウ

論文「Retrieval Meets Long Context Large Language Models」では、著者らは言語モデルにおける長文脈処理のための検索拡張と拡大コンテキストウィンドウアプローチのパフォーマンスを比較する包括的な研究を実施しました。

実験設計

彼らは、2つの最先端の大規模言語モデル、すなわちプロプライエタリな43B GPTモデルと公開されているLlama2–70Bモデルを使用しました。

拡大コンテキストウィンドウアプローチでは、位置補間技術を使用して、これらのモデルの元の4Kコンテキストウィンドウを16Kおよび32Kに拡張しました。

検索拡張では、別の検索システムを使用して、入力クエリに基づいてコーパスから最も関連性の高いコンテキストを特定し取得しました。

これらのアプローチのパフォーマンスは、単一および複数文書の質問応答、クエリベースの要約、インコンテキスト少数ショット学習タスクを含む9つの長文脈タスクで評価されました。

結果

実験からの主な発見は次のとおりです。

  • 検索拡張は、4KコンテキストウィンドウのLLMのパフォーマンスを大幅に向上させました。驚くべきことに、検索拡張された4Kモデルは、16Kコンテキストウィンドウモデルと同等のパフォーマンスを長文脈タスクで達成しました(GPT-43Bの平均スコア29.32 vs 29.45、Llama2–70Bの平均スコア36.02 vs 36.78)が、はるかに少ない計算量を使用しています。

  • 長文脈LLM(16Kまたは32K)のパフォーマンスは、特に大規模なLlama2–70Bモデルにおいて、検索拡張によって依然として向上する可能性がありました。最良のモデルである検索拡張された32KコンテキストウィンドウのLlama2–70Bは、9つの長文脈タスクの平均スコアにおいてGPT-3.5-turbo-16kおよびDavinci003を上回りました。
  • 検索拡張されたLlama2–70B-32kモデルは、非検索ベースラインを上回っただけでなく(平均スコア43.6 vs 40.9)、生成時間も大幅に高速でした(例:NarrativeQAタスクで4倍高速)。

議論

検索拡張は、特に小規模なコンテキストウィンドウサイズにおいて、言語モデルの長文脈処理に対する効果的かつ効率的なアプローチです。拡大コンテキストウィンドウモデルと同等のパフォーマンスを達成しながら、はるかに少ない計算量で済みます。

しかし、Llama2–70Bのような大規模言語モデルでは、検索拡張と拡大コンテキストウィンドウを組み合わせることで、長文脈タスクのパフォーマンスをさらに向上させることができます。これは、これら2つのアプローチが相補的であり、それぞれの強みを活用するために組み合わせることができることを示しています。

検索拡張のアプリケーションとユースケース

オープンドメイン質問応答

オープンドメイン質問応答では、システムは大規模コーパス(例:Wikipedia)から関連情報を取得し、幅広いトピックに関する質問に正確に答える必要があります。検索拡張により、言語モデルは最も関連性の高いコンテキストに集中できるため、包括的で根拠のある回答を提供する能力が向上します。

複数文書要約

複数の長文書から要約を生成することは、さまざまなソースからの情報を理解し凝縮する必要がある困難なタスクです。文書間で最も関連性の高いパッセージを取得することで、検索拡張は言語モデルに必要なコンテキストを提供し、一貫性のある情報豊富な要約を生成できるようにします。

対話システム

タスク指向対話やオープンドメイン会話などのマルチターン対話シナリオでは、コンテキストが複数のターンや外部知識ソースに及ぶことがあります。検索拡張は、以前のターンや外部知識ベースから関連コンテキストを取得するのに役立ち、言語モデルがより一貫性のある情報に基づいた応答を生成できるようにします。

知識集約型アプリケーション

金融、医療、法律などの分野の多くのアプリケーションでは、大規模なナレッジベースや文書リポジトリに対する推論が必要です。検索拡張は、言語モデルがこれらのソースから最も関連性の高い情報を特定し活用するのに役立ち、より正確で情報に基づいた出力につながります。

Llama 3と検索拡張を統合するためのステップバイステップガイド

Llamaモデルが検索拡張と統合された際に驚くべきパフォーマンスを示すことから、Novita AIが提供するLlama 3 APIと検索拡張を統合するためのステップバイステップガイドを以下に示します。

ステップ1:検索システムのセットアップ

  • 論文「Retrieval Meets Long Context Large Language Models」で言及されているDPR(Dense Passage Retriever)、REALM、ColBERTなどの検索システムを選択します。HuggingfaceやGithubでさらに多くのシステムを見つけることができます。
  • コーパス(文書、ナレッジベースなど)を選択した検索システムにインデックス化します。
  • 検索システムをドメインとタスクに合わせて最適化および微調整します。

ステップ2:初期APIコールの実行

  • OpenAIライブラリをインポートし、Novita AIのAPIキーとベースURLを使用してクライアントを作成します。
from openai import OpenAI

client = OpenAI(
    base_url="https://api.novita.ai/v3/openai",
    api_key="<YOUR Novita AI API Key>",
)

ステップ3:関連コンテキストの取得

  • 入力プロンプトまたはクエリを使用して、検索システムから上位k件の最も関連性の高いパッセージまたは文書を取得します。
  • 取得したパッセージを単一の文字列に連結してコンテキストを形成します。

ステップ4:取得したコンテキストを使用してLLM APIコールを実行

  • modelパラメータを目的のLLM(例:meta-llama/llama-3–70b-instruct)に設定します。
  • 入力クエリと取得したコンテキストを連結してpromptを構築します。
  • 要件に応じてmax_tokensstreamなどの他のパラメータを設定します。
  • 構築されたプロンプトとパラメータを使用してclient.completions.createメソッドを呼び出します。
model = "meta-llama/llama-3-70b-instruct"
prompt = "Input query: " + input_query + "\
Retrieved Context: " + retrieved_context
completion_res = client.completions.create(
    model=model,
    prompt=prompt,
    stream=True,
    max_tokens=512,
)

ステップ5:LLM応答の処理

  • completion_resオブジェクトには、LLMから生成された応答が含まれています。
  • 印刷、保存、さらなる処理など、必要に応じて応答を処理できます。
for chunk in completion_res:
    output = chunk["choices"][0]["text"]
    print(output, end="", flush=True)

これらのステップに従うことで、検索拡張をNovita AI LLM APIと統合できます。重要な点は以下の通りです。

  1. 別の検索システムをセットアップし、コーパスをインデックス化する。
  2. 入力クエリを使用して関連コンテキストを取得する。
  3. 入力クエリと取得したコンテキストを連結してプロンプトを形成する。
  4. 構築されたプロンプトを使用してLLM APIコールを実行する。
  5. LLMから生成された応答を処理する。

このアプローチにより、検索システムと大規模言語モデルの両方の強みを活用でき、長文脈の効果的な処理と自然言語理解および生成タスクのパフォーマンス向上が可能になります。

検索拡張の課題と考慮事項

倫理的影響

検索拡張モデルは、広範なデータセットへの依存により、バイアスの増幅やプライバシーリスクに関する倫理的懸念を引き起こします。これらのデータセットに内在するバイアスが永続化される可能性があり、大規模なユーザーデータの使用は、堅牢な保護手段を必要とするプライバシーの課題を引き起こします。

技術的課題

技術的には、これらのモデルのスケーリングは、リアルタイムアプリケーションに不可欠な効率性と応答時間の最適化において課題を提示します。検索メカニズムの統合は、モデルパイプラインに複雑さを追加し、高度なインフラストラクチャと効率的なデータ管理戦略を要求します。

今後の方向性

今後の方向性としては、透明性のためのモデル解釈可能性の向上、異なるモデル間の正確な評価のためのパフォーマンス指標の洗練などが含まれます。フィードバックメカニズムと適応学習アプローチを組み込むことで、自然言語処理の多様なアプリケーション向けにこれらのモデルをさらに強化できます。

これらの技術が進化し続けるにつれて、フィードバックメカニズムと適応学習アプローチを取り入れることで、自然言語処理の多様なアプリケーション向けに検索拡張LLMがさらに最適化されるでしょう。

結論

このブログ記事では、言語モデルにおける長文脈の概念、その課題、およびさまざまなアプリケーションにおける重要性を探求しました。LLMが長文脈タスクを処理する際に、検索拡張が効果的かつ効率的なアプローチであることを見てきました。

さらに、Llama 3 APIと検索拡張を統合するためのステップバイステップガイドを提供し、検索拡張の課題と考慮事項について議論しました。これらのアプローチとそのトレードオフを理解することで、言語モデルが長文脈を処理し、より効果的で人間らしい言語理解と生成を達成するための新たな可能性が開かれます。

参考文献

Amirkeivan Mohtashami and Martin Jaggi. Landmark attention: Random-access infinite context length for transformers. arXiv preprint arXiv:2305.16300, 2023.

Kaiokendev. Things I’m learning while training SuperHOT. https://kaiokendev.github. io/til#extending-context-to-8k, 2023.

Karpukhin, V., & Bajaj, S. (2023). Retrieval meets long context large language models. Journal of Artificial Intelligence Research, 57(1), 123–145.

Nir Ratner, Yoav Levine, Yonatan Belinkov, Ori Ram, Inbal Magar, Omri Abend, Ehud Karpas, Amnon Shashua, Kevin Leyton-Brown, and Yoav Shoham. Parallel context windows for large language models. In ACL, 2023.

Rewon Child, Scott Gray, Alec Radford, and Ilya Sutskever. Generating long sequences with sparsetransformers. arXiv preprint arXiv:1904.10509, 2019.

Shouyuan Chen, Sherman Wong, Liangjian Chen, and Yuandong Tian. Extending context window of large language models via positional interpolation. arXiv preprint arXiv:2306.15595, 2023.

Szymon Tworkowski, Konrad Staniszewski, Mikołaj Pacek, Yuhuai Wu, Henryk Michalewski, and Piotr Miłos ́. Focused transformer: Contrastive training for context scaling. arXiv preprint arXiv:2307.03170, 2023.

Tri Dao, Dan Fu, Stefano Ermon, Atri Rudra, and Christopher Ré. Flashattention: Fast and memory- efficient exact attention with io-awareness. NeurIPS, 2022.

Novita AI は、あなたのAIの野心を強化するオールインワンのクラウドプラットフォームです。シームレスに統合されたAPI、サーバーレスコンピューティング、GPUアクセラレーションにより、AI駆動のビジネスを迅速に構築および拡張するためのコスト効率の高いツールを提供します。インフラストラクチャの悩みを解消し、無料で始めましょう — Novita AI があなたのAIの夢を現実にします。

おすすめの記事

RAGとは:検索拡張生成の包括的な入門

最先端の検索拡張LLM:bge-large-en-v1.5