Pinecone+LangChainでPDFを"学習"し、gpt-4の出力精度をchunkサイズ別に検証

はじめに

株式会社cross-Xの古嶋です。DX戦略の立案やデータ・AI活用の支援をしています。

今回は、PineconeLangChainを用いたベクトル検索+コンテキスト内学習(ILC: In Context Learning)の手法に基づく、簡単な検証結果をご紹介します。

今回の検証ポイントは、検索対象とするchunkの長さと、ICLで用いるchunkの数によって出力内容がどのように変わるかを検証しました。この文脈で言うchunkとは何かについては後ほど簡単に解説します。

それぞれ、以下の観点でパターンを分けています。

  • chunk-size: 300または500の場合で比較
  • chunk数: 6個または10個の場合で比較

また、chunkに分割してベクトルデータベース化し、検索対象とするPDFファイルは、LLMに関する下記の3つのファイルを対象としました。

ここで、単純計算で考えると、chunk-sizeが300のchunkが10個の場合(300×10=3,000)と、chunk-sizeが500のchunkが6個の場合(500×6=3,000)では、gpt-4に入力される情報量としては、ほぼ同じになるはずです。

この2パターン、つまり、

  • パターン①:chunk-size 300 × chunk数 10
  • パターン②:chunk-size 500 × chunk数 6

両者で、出力内容にどのような変化が生まれるかを検証します。

結論から言うと、以下のような示唆が得られました。

  • パターン①(chunk-size 300 × chunk数 10)では、具体的な評価手法(MMLU、BIG-bench、HELMなど)や具体的なパフォーマンス指標(模擬司法試験でのスコアなど)など、より具体性の高い情報が含まれる出力が得られた。この点はパターン②(chunk-size 500 × chunk数 6)ではあまり見られなかった。
  • 逆に、パターン②(chunk-size 500 × chunk数 6)では評価の観点をより広く、倫理的な側面や実用的な側面から取り上げており、また、研究視点や人間にとっての利用価値の観点からLLMの意義を広く捉えた要旨を提示するなど、情報を広く汲み取った回答が提示された。この点はパターン①(chunk-size 300 × chunk数 10)ではあまり見られなかった。

検証方法

コードを書くと冗長になるので、検証実施時の条件だけ下記に簡単に記載します。

  • Google Colabでコード作成+実行
  • OpenAI API Keyを用いてgpt-4を使用 
  • 単語埋め込み(ベクトル化)はOpenAIEmbeddingsを利用
  • PineconeのAPI keyを取得し、Embeddingsをindex化
  • chunk_overlapは0に設定
  • Document Question AnsweringにはLangChainのload_qa_chainを利用

出力内容の比較

出力を得るまでの概観は、おおよそ下図の通りです。詳しくはこちらの記事を御覧ください。

chunkとは、簡単に言えば図の左側で示している「文書を分割する単位」だと考えれば良いと思います。そのchunkのサイズによって文書をどのくらいの長さ(文字数)で分割するかが決まるので、chunkのsizeを決める必要があります。また、このchunkごとにEmbedding(埋め込み)つまりベクトル化してベクトルデータベースを作ります。この検証ではIndexにPineconeを採用しています。

パターン①、②に共通して以下の質問文を入力しました。

"What is LLMs? Answer within 300 words."

(LLMsとは何ですか?300文字以内で回答しなさい。)

それでは、検証結果を見ていきましょう。

chunk_size =300, chunk数=10

出力結果は下記の通りです。また、出力文は英語で取得し、DeepLで日本語訳したものを記載しています。

LLM(大規模言語モデル)は、人間のようなテキストを理解し生成するように設計された人工知能モデルの一種です。大量のデータで学習され、テキスト生成、翻訳、要約、質問応答など、さまざまな自然言語処理タスクで高い性能を発揮しています。

法律分野では、LLMは法律文書分析、法律判断予測、法律文書作成など、様々な法律タスクの解決に応用されています。LLMは、法的解釈や推論において強力な能力を発揮しています。例えば、最新のGPT-4モデルは、模擬司法試験において、人間の受験者と比較して上位10%のスコアを達成しています。

しかし、LLMの法律分野での活用は、著作権問題、個人情報の漏洩、あるいは偏見や差別など、法的な課題も懸念されます。LLMは汎用性が高いため、注釈付きデータが限られている場合には幅広いタスクに適用でき、注釈付きデータが豊富にある場合には、微調整されたモデルを考慮することができる。

LLMの性能と能力を評価するために、研究者はMMLU、BIG-bench、HELMなどのベンチマークを開発しました。これらのベンチマークは、人間の価値観や好みへの適合(ヒューマンアライメント)、実世界での適切な行動(外部環境との相互作用)、能力範囲の拡大(ツール操作)など、モデルの実用的なパフォーマンスや能力を測定することを目的としています。

LLMが発展するにつれて現れる新しい能力を発見し、測定し、評価することで、様々なタスクやアプリケーションにLLMをより良く活用・改善することが、重要なオープンリサーチの方向性である。

chunk_size =500, chunk数=6

出力結果は下記の通りです。また、出力文は英語で取得し、DeepLで日本語訳したものを記載しています。

大規模言語モデル(LLM)は、事前学習済み言語モデル(PLM)の一種で、その巨大さと驚くべき能力を特徴としています。小型のPLMとは異なり、LLMは創発的な能力を発揮することができ、複雑なタスクを解決するために非常に効果的かつ強力なものとなっています。これらの能力は、主にプロンプト・インターフェースを通じてアクセスされるため、人間がAIアルゴリズムを開発・使用する方法に革命をもたらしました。

LLMと小規模なPLMの主な違いの一つは、LLMは大規模なデータ処理と分散並列トレーニングに関する豊富な実務経験を必要とすることです。LLMの開発には、複雑な工学的問題の解決が必要であり、研究者はしばしば技術者と密接に協力し、あるいは自ら技術者になる必要があります。

LLMは、法律など様々な専門領域で活用されており、法律文書分析、法律判断予測、法律文書作成などのタスクに適用されています。また、LLMの人間らしい特性(自己認識、心の理論など)、公平性、評価設定の正確さなどの観点からも研究されています。

LLMが発揮する高度な能力のうち、特に評価上考慮が必要なものとして、人間の位置合わせ、外部環境との相互作用、道具の操作などがある。このように、LLMは様々な領域の研究者や技術者にとって非常に有用なリソースです。しかし、その一方で、法的な問題、プライバシー問題、LLMの偏見や差別の可能性などが懸念されています。このような課題にもかかわらず、LLMはその前例のない能力と潜在的な応用力により、AIコミュニティや様々な分野に大きな影響を与え続けています。

検証

この両者の相違点について、ChatGPTに以下のプロンプトで質問しました。

以下の2つの文章の共通点と相違点をそれぞれ列挙してください。

  • パターン① chunksize300&10chunks:
    (上記の文章を入力)
  • パターン② chunksize500&6chunks:
    (上記の文章を入力)

すると、以下の回答が得られました。

共通点

  • 両方の文章は大規模言語モデル(LLM)について述べています。
  • LLMがさまざまな自然言語処理タスクで高い性能を発揮することを両方が指摘しています。
  • LLMの法律分野での利用(法律文書分析、法律判断予測、法律文書作成など)について両方が述べています。
  • LLMの評価において、人間の価値観や好みへの適合(ヒューマンアライメント)、実世界での適切な行動(外部環境との相互作用)、能力範囲の拡大(ツール操作)などを考慮すべきと両方が指摘しています。
  • LLMの活用には法的問題、プライバシー問題、偏見や差別の可能性などの懸念事項があると両方が述べています。
  • 両方の文章はLLMが多様なタスクとアプリケーションに適用可能であると述べています。
  • 両文書はLLMの発展が新しい能力を引き出すこと、そしてその発見、評価が重要であると指摘しています。

以上のように、共通点としては、出力の文字数に300字という制限がありながらも、両者ともに要点を押さえた内容となっているように見受けられます。

相違点

  • パターン①はLLMの評価と改善に焦点を当てており、MMLU、BIG-bench、HELMなどのベンチマークについて述べていますが、パターン②はそのような詳細な評価ツールについては触れていません。
  • パターン①では、LLMが模擬司法試験において人間の受験者と比較して上位10%のスコアを達成したことを具体的な例として挙げていますが、パターン②ではこのような具体的な成果については触れていません。
  • パターン①では、LLMが汎用性が高く、注釈付きデータが限られている場合や豊富にある場合でも広範なタスクに適用可能であると述べています。しかし、パターン②ではこの点については触れていません。
  • パターン②では、LLMと小規模なPLMの違い、特にLLM開発における大規模なデータ処理と分散並列トレーニングに関する実務経験の必要性について述べていますが、パターン①ではこの点について触れていません。
  • パターン②では、LLMの人間らしい特性(自己認識、心の理論など)、公平性、評価設定の正確さなどの観点からの研究について言及していますが、パターン①ではこれらの観点については触れていません。
  • パターン②では、LLMがAIアルゴリズムの開発と使用方法に革命をもたらしたと強調しています。一方、パターン①ではこの観点からのLLMの影響については触れていません。
  • パターン②では、LLMが研究者や技術者にとって有用なリソースであり、その前例のない能力と潜在的な応用力によりAIコミュニティや様々な分野に大きな影響を与え続けていると述べています。しかし、パターン①ではこの視点からのLLMの評価や影響については言及していません。

この点を踏まえると、冒頭で提示した結論のように、

  • パターン①(chunk-size 300 × chunk数 10)では、より具体性の高い情報が含まれる出力が得られた
  • 逆に、パターン②(chunk-size 500 × chunk数 6)では情報を広く汲み取った回答が提示された。

と言えそうです。

おわりに

あくまでこの検証に限った結論ですが、以下の2点は期待通りの結果だったと言えます。

  • 情報を細かく分割した方が詳細な回答を得られること
  • 文章を大まかに分割した方が概論的な回答を得られること

この点を踏まえると、実際の実務では、chunkのsizeや数を1つのパターンに絞ってしまうのではなく、複数のパターンを併用して出力を得ることが重要かもしれません。

他にも、そもそもデータの前処理を工夫したり、chunkのoverlapを変えたりなど、変更できるポイントは多岐にわたります。この点、ベストプラクティスを探求することは、それ自体も面白いテーマですし、実務においても重要な検証プロセスだと思います。

最後までお読み頂き、ありがとうございました。皆さまの実務において、何かしらのヒントになれば幸いです。