AIモデルとプラットフォーム
ラマインデックス:LLMアプリケーションをカスタムデータで簡単に拡張する
大規模言語モデル(LLM)であるOpenAIのGPTシリーズは、多様な公開可能なデータでトレーニングされており、テキスト生成、要約、質問回答、計画などで優れた能力を示しています。しかし、これらのモデルをカスタム、プライベート、または独自のデータと無縫に統合する方法については、よく議論されています。
企業や個人は、Notion、Slack、Salesforceなどのさまざまなアプリケーションまたは個人ファイルに格納された独自のカスタムデータで溢れています。LLMをこの特定のデータで利用するために、いくつかの方法が提案されています。
ファインチューニングは、そのようなアプローチの1つです。モデル内の重みを特定のデータセットの知識を組み込むために調整します。しかし、このプロセスは簡単ではありません。データの準備と最適化プロセスに多大な労力が必要であり、機械学習の専門知識が必要です。また、大規模なデータセットを扱う場合、コストも大きな問題となります。
コンテキスト学習は、代替手段として登場しました。入力とプロンプトを工夫して、LLMが正確な出力を生成するためのコンテキストを提供することを重視します。このアプローチは、モデルを再トレーニングする必要性を軽減し、プライベートデータを統合するためのより効率的でアクセスしやすい手段を提供します。
しかし、このアプローチには、ユーザーのスキルとプロンプトエンジニアリングの専門知識に依存するという欠点があります。また、コンテキスト学習は、特に高度に専門化されたまたは技術的なデータを扱う場合、ファインチューニングほど正確または信頼性が高くない可能性があります。モデルは、インターネットテキストの広範なトレーニングを受けていますが、特定のジャーゴンまたはコンテキストを理解することを保証するものではありません。これは、プライベートデータがニッチなドメインまたは業界から来ている場合に特に問題となります。
さらに、プロンプトで提供できるコンテキストの量は限られており、タスクの複雑性が増すと、LLMのパフォーマンスが低下する可能性があります。プライバシーとデータセキュリティも課題です。プロンプトで提供される情報は、機密または敏感な場合があります。
コミュニティがこれらのテクニックを探求するにつれて、LlamaIndexのようなツールが注目されています。
これは、元Uberの研究科学者であるJerry Liuによって始められました。GPT-3を実験していた際、プライベートデータを扱うモデルへの限界に気付き、LlamaIndexというオープンソースプロジェクトを開始しました。
このプロジェクトは、投資家の注目を集め、最近のシードラウンドで850万ドルを調達しました。
LlamaIndexは、LLMをカスタムデータで拡張することを容易にします。プレトレーニングされたモデルとカスタムデータの使用例の間のギャップを埋め、LLMを使用して知識を生成し、推論を行うことを可能にします。
ユーザーは、LLMに自分のデータを簡単に提供できます。LlamaIndexは、データの相互作用をよりユーザーフレンドリーでセキュアなプラットフォームを提供し、機械学習の専門知識がなくてもLLMの潜在能力を発揮できるようにします。
ハイレベルな概念と洞察
1. リトリーバル増強生成(RAG):
RAGは、LLMをカスタムデータで拡張するための2段階のプロセスです。このプロセスは、
- インデックス作成段階:この段階では、ノウハウの基盤を作成するための準備が行われます。
- クエリ段階:ここでは、ノウハウベースを検索して、LLMがクエリに回答するのを支援します。
LlamaIndexでのインデックス作成:
- データコネクタ:データコネクタは、LlamaIndexへのデータのパスポートと考えることができます。さまざまなソースと形式からのデータをインポートし、それらをシンプルな「ドキュメント」表現にまとめます。データコネクタは、LlamaHubというオープンソースリポジトリ内で見つけることができます。このリポジトリには、簡単な統合を可能にするデータローダーが収録されています。
- ドキュメント/ノード:ドキュメントは、PDF、API出力、データベースエントリなど、さまざまなデータタイプを保持できる汎用的なスーツケースのようなものです。一方、ノードは、ドキュメントから抽出されたスニペットまたは「チャンク」で、メタデータと他のノードとの関係で豊かになり、後でデータを正確に取得するための強力な基盤を提供します。
- データインデックス:データをインポートした後、LlamaIndexはデータを取得可能な形式にインデックスを作成します。裏では、生のドキュメントを中間表現に分解し、ベクトル埋め込みを計算し、メタデータを推測します。インデックスのうち、VectorStoreIndexがよく使われます。
LlamaIndexのインデックスの種類:整理されたデータの鍵
LlamaIndexには、さまざまなニーズとユースケースに対応するさまざまな種類のインデックスがあります。これらのインデックスの核心には、先ほど説明したノードがあります。LlamaIndexのインデックスとそのメカニズム、応用について見ていきましょう。
1. リストインデックス:
- メカニズム:リストインデックスはノードを順番に並べます。入力データをノードに分割した後、それらを線形的に並べ、順番に、またはキーワードまたは埋め込みでクエリできます。
- 利点:このインデックスタイプは、順番にクエリする必要がある場合に優れています。LlamaIndexは、LLMのトークン制限を超える場合でも、入力データのすべてを活用することで、テキストを各ノードからクエリし、回答を精査することで回答を生成します。
2. ベクトルストアインデックス:
- メカニズム:ここでは、ノードがベクトル埋め込みに変換され、ローカルまたはベクトルデータベース(例:Milvus)に保存されます。クエリされたとき、最も類似したトップ_kノードが取得され、レスポンスの合成にチャネル化されます。
- 利点:ベクトル検索を使用してテキストの意味的類似性に基づいてワークフローが依存する場合、このインデックスを使用できます。
3. ツリーインデックス:
- メカニズム:ツリーインデックスでは、入力データはボトムアップでツリー構造に変換されます。リーフノード(元のデータチャンク)から親ノードが生成され、GPTを使用してサマライズされます。クエリ時、ツリーインデックスはルートノードからリーフノードまで移動したり、選択されたリーフノードから直接回答を構築したりできます。
- 利点:ツリーインデックスは、長いテキストチャンクのクエリをより効率的に行い、さまざまなテキストセグメントから情報を抽出することを可能にします。
4. キーワードインデックス:
- メカニズム:キーワードインデックスは、キーワードとノードのマップで構成されます。クエリされたとき、キーワードはクエリから抽出され、対応するノードのみが強調表示されます。
- 利点:明確なユーザークエリがある場合、キーワードインデックスを使用できます。たとえば、ヘルスケア文書をCOVID-19に関連する文書のみに絞り込むことができます。
LlamaIndexのインストール
LlamaIndexのインストールは簡単です。Pipから直接インストールするか、ソースからインストールするか選択できます。(システムにPythonがインストールされていることを確認するか、Google (GOOGL ) Colabを使用できます。)
1. Pipからのインストール:
- 次のコマンドを実行します:
pip install llama-index
- 注意:インストール中に、LlamaIndexはNLTKやHuggingFaceなどのパッケージのローカルファイルをダウンロードして保存する場合があります。这些ファイルを保存するディレクトリを指定するには、「LLAMA_INDEX_CACHE_DIR」環境変数を使用します。
2. ソースからのインストール:
- まず、GitHubからLlamaIndexリポジトリをクローンします:
git clone https://github.com/jerryjliu/llama_index.git
- 次に、プロジェクトディレクトリに移動します。
- Poetryを使用してパッケージ依存関係を管理します。
- 次に、Poetryを使用して仮想環境を作成します:
poetry shell - 最後に、コアパッケージの要件をインストールします:
poetry install
LlamaIndexの環境設定
1. OpenAIの設定:
- デフォルトでは、LlamaIndexはOpenAIの
gpt-3.5-turboをテキスト生成に、text-embedding-ada-002を取得と埋め込みに使用します。 - これらの設定を使用するには、
OPENAI_API_KEYが必要です。OpenAIのウェブサイトに登録して新しいAPIトークンを作成します。 - プロジェクトのニーズに応じて、基礎となる大規模言語モデル(LLM)をカスタマイズする柔軟性があります。LLMプロバイダーによっては、追加の環境キーとトークンが必要になる場合があります。
2. ローカル環境の設定:
- OpenAIを使用しない場合、LlamaIndexは自動的にローカルモデルに切り替えます。テキスト生成には
LlamaCPPとllama2-chat-13B、取得と埋め込みにはBAAI/bge-small-enを使用します。 LlamaCPPを使用するには、提供されたインストールガイドに従います。GPUをサポートするllama-cpp-pythonパッケージをインストールする必要があります。このセットアップでは、CPUとGPUを合わせて約11.5GBのメモリを使用します。- ローカル埋め込みのために、
pip install sentence-transformersを実行します。このローカルセットアップでは約500MBのメモリを使用します。
これらの設定により、環境をOpenAIの力を活用するか、ローカルでモデルを実行するか、プロジェクトの要件とリソースに応じて選択できます。
ウェブページのクエリ:LlamaIndexとOpenAIの使用
ここでは、ウェブページから特定の洞察を抽出するために、LlamaIndexとOpenAIを使用する簡単なPythonスクリプトを紹介します。
!pip install llama-index html2text
<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>
<p># OpenAIキーを以下に入力してください:
os.environ["OPENAI_API_KEY"] = ""</p>
<p># ロードしたいURLを以下に入力してください:
url = "http://www.paulgraham.com/fr.html"</p>
<p># URLをドキュメント(複数可)にロードします:
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>
<p># ドキュメントからベクトルストアを作成します:
index = VectorStoreIndex.from_documents(documents)</p>
<p># クエリエンジンを作成して質問に答えることができます:
query_engine = index.as_query_engine()</p>
<p># ロードしたデータに対して何回でも質問できます:
response = query_engine.query("Paulが資金調達のために与える3つのベストアドバイスは何ですか?")
print(response)
Paulが資金調達のために与える3つのベストアドバイスは次のとおりです: 1. 最初に低い数字から始める。柔軟性が高まり、長期的には資金調達の成功率が高くなります。 2. 可能であれば利益を上げることを目指す。利益を上げる計画があると、スタートアップは投資家にとってより魅力的になります。 3. 企業価値を最適化しない。企業価値は重要ですが、最も重要な要素ではありません。必要な資金を調達し、良い投資家を見つけることに重点を置きます。
このスクリプトを使用すると、ウェブページから特定の情報を抽出するための強力なツールを作成できます。これは、LlamaIndexとOpenAIを使用してウェブデータをクエリすることのできることのほんの一例です。
LlamaIndex vs Langchain:目標に基づく選択
プロジェクトの目的によって、LlamaIndexとLangchainのどちらを選択するかが決まります。インテリジェントな検索ツールを開発したい場合は、LlamaIndexが適しています。LlamaIndexは、データの取得を効率化するスマートなストレージメカニズムです。一方、プラグイン機能を備えたChatGPTのようなシステムを作成したい場合は、Langchainが適しています。Langchainは、複数のChatGPTとLlamaIndexのインスタンスを提供し、Pythonコードの実行やGoogle検索などの機能を追加して、多機能エージェントを作成できます。簡単に言えば、LlamaIndexはデータ処理に優れていますが、Langchainはツールのオーケストレーションを提供して包括的なソリューションを実現します。

LlamaIndex Logo Artwork created using Midjourney


















