スタブ LlamaIndex: カスタム データで LLM アプリケーションを簡単に拡張 - Unite.AI
私達と接続

Artificial Intelligence

LlamaIndex: カスタム データで LLM アプリケーションを簡単に拡張

mm
更新中 on
ラマインデックス

OpenAI の GPT シリーズのような大規模言語モデル (LLM) は、公的にアクセス可能なさまざまなデータでトレーニングされており、テキストの生成、要約、質問応答、および計画において優れた機能を実証しています。 その多用途性にもかかわらず、頻繁に提起される質問は、これらのモデルとカスタム データ、プライベート データ、または独自データとのシームレスな統合を中心に展開されています。

企業や個人には、Notion、Slack、Salesforce などのさまざまなアプリケーションに格納されたり、個人ファイルに保存されたりする独自のカスタム データが溢れています。 この特定のデータに LLM を活用するために、いくつかの方法論が提案され、実験されています。

微調整 はそのようなアプローチの 1 つを表しており、特定のデータセットからの知識を組み込むためにモデルの重みを調整することで構成されます。ただし、このプロセスには課題がないわけではありません。データの準備には多大な労力が必要であり、さらに難しい最適化手順が必要となるため、一定レベルの機械学習の専門知識が必要です。さらに、特に大規模なデータセットを扱う場合、財務上の影響が重大になる可能性があります。

代替手段としてインコンテキスト学習が登場し、入力とプロンプトの作成を優先して、正確な出力を生成するために必要なコンテキストを LLM に提供します。 このアプローチにより、大規模なモデルの再トレーニングの必要性が軽減され、プライベート データを統合するためのより効率的でアクセスしやすい手段が提供されます。

しかし、この欠点は、ユーザーのスキルと専門知識に依存していることです。 迅速なエンジニアリング。 さらに、コンテキスト内学習は、特に高度に専門化されたデータや技術的なデータを扱う場合、常に微調整ほど正確または信頼できるとは限りません。 広範囲のインターネット テキストに対するモデルの事前トレーニングでは、特定の専門用語やコンテキストの理解を保証するものではなく、不正確または無関係な出力につながる可能性があります。 これは、プライベート データがニッチな分野や業界からのものである場合に特に問題になります。

さらに、単一のプロンプトで提供できるコンテキストの量は限られており、タスクの複雑さが増すにつれて LLM のパフォーマンスが低下する可能性があります。 また、プロンプトで提供される情報は機密情報である可能性があるため、プライバシーとデータのセキュリティという課題もあります。

コミュニティがこれらの手法を検討するにつれて、次のようなツールが登場します。 ラマインデックス が今注目を集めています。

ラマインデックス

ラマインデックス

それを始めたのは、 ジェリー・リュー、元ウーバーの研究科学者。 昨年の秋に GPT-3 を試していたときに、Liu 氏は個人ファイルなどのプライベート データの処理に関するモデルの限界に気づきました。 この観察が、オープンソース プロジェクト LlamaIndex の開始につながりました。

この取り組みは投資家を惹きつけ、安全性を確保しています。 8.5万ドル 最近のシード資金調達ラウンドで。

LlamaIndex は、カスタム データによる LLM の拡張を容易にし、事前トレーニングされたモデルとカスタム データのユースケースの間のギャップを橋渡しします。 LlamaIndex を通じて、ユーザーは LLM で自分のデータを活用し、パーソナライズされた洞察による知識の生成と推論を可能にすることができます。

ユーザーは、LLM に独自のデータをシームレスに提供でき、知識の生成と推論が深くパーソナライズされ、洞察力に富む環境を促進できます。 LlamaIndex は、データ対話のためのよりユーザーフレンドリーで安全なプラットフォームを提供することで、インコンテキスト学習の制限に対処し、機械学習の専門知識が限られている人でも、プライベート データを使用して LLM の可能性を最大限に活用できるようにします。

高レベルの概念といくつかの洞察

1. 検索拡張生成 (RAG):

ラマインデックス RAG

ラマインデックス RAG

RAG は、LLM とカスタム データを結合するように設計された XNUMX つのプロセスであり、それによってモデルの能力が強化され、より正確で情報に基づいた応答を提供できます。 プロセスには以下が含まれます。

  • インデックス作成段階: これは、ナレッジ ベース作成の基礎を築く準備段階です。
LlamaIndex インデックス

LlamaIndex インデックス作成

  • クエリ段階: ここでは、LLM がクエリに答えるのを支援するために、関連するコンテキストがナレッジ ベースで検索されます。
LlamaIndex クエリステージ

LlamaIndex クエリ ステージ

LlamaIndex によるインデックス作成の旅:

  • データコネクタ: データ コネクタは、LlamaIndex へのデータのパスポートだと考えてください。 これらは、さまざまなソースや形式からデータをインポートし、それらを単純な「ドキュメント」表現にカプセル化するのに役立ちます。 データ コネクタは、データ ローダーが満載されたオープンソース リポジトリである LlamaHub 内にあります。 これらのローダーは簡単に統合できるように作成されており、任意の LlamaIndex アプリケーションとのプラグ アンド プレイ エクスペリエンスを可能にします。
ラマハブ

LlamaIndex ハブ (https://llamahub.ai/)

  • ドキュメント/ノード: ドキュメントは、PDF、API 出力、データベース エントリなど、さまざまなデータ型を保持できる一般的なスーツケースのようなものです。 一方、ノードはドキュメントのスニペットまたは「チャンク」であり、メタデータと他のノードとの関係が強化され、後で正確なデータを取得するための堅牢な基盤が確保されます。
  • データインデックス: データの取り込み後、LlamaIndex はこのデータを取得可能な形式にインデックス付けするのに役立ちます。 バックグラウンドでは、生のドキュメントを中間表現に分析し、ベクトルの埋め込みを計算し、メタデータを推定します。 インデックスの中で、「VectorStoreIndex」がよく選ばれます。

LlamaIndex のインデックスの種類: 整理されたデータの鍵

LlamaIndex は、さまざまなニーズやユースケースに応じて、さまざまなタイプのインデックスを提供します。 これらのインデックスの中核には、上で説明したように「ノード」があります。 LlamaIndex インデックスをその仕組みとアプリケーションで理解してみましょう。

1. リストインデックス:

  • メカニズム: リスト インデックスはノードをリストのように順番に配置します。 入力データをノードにチャンクした後、それらは線形に配置され、順番に、またはキーワードや埋め込みを介してクエリできるようになります。
  • 利点: このインデックス タイプは、順次クエリが必要な場合に威力を発揮します。 LlamaIndex は、各ノードからテキストをスマートにクエリし、リストを下に移動しながら回答を絞り込むことで、LLM のトークン制限を超えた場合でも、入力データ全体の利用を保証します。

2. ベクトルストアインデックス:

  • メカニズム: ここで、ノードはベクトル埋め込みに変換され、ローカルまたは次のような特殊なベクトル データベースに保存されます。 トビ。 クエリが実行されると、top_k 個の最も類似したノードがフェッチされ、それらが応答シンセサイザーに送られます。
  • 利点: ワークフローがベクトル検索による意味的類似性のテキスト比較に依存している場合は、このインデックスを使用できます。

3. ツリーインデックス:

  • メカニズム: ツリー インデックスでは、入力データはツリー構造に進化し、リーフ ノード (元のデータ チャンク) からボトムアップで構築されます。 親ノードは、GPT を使用して作成されたリーフ ノードの要約として表示されます。 クエリ中に、ツリー インデックスはルート ノードからリーフ ノードに移動したり、選択したリーフ ノードから直接応答を構築したりできます。
  • 利点: ツリー インデックスを使用すると、長いテキスト チャンクのクエリがより効率的になり、さまざまなテキスト セグメントからの情報の抽出が簡素化されます。

4. キーワードインデックス:

  • メカニズム: キーワードとノードのマップは、キーワード インデックスのコアを形成します。クエリが実行されると、キーワードがクエリから抽出され、マップされたノードのみが注目されます。
  • 利点: ユーザーのクエリが明確な場合は、キーワード インデックスを使用できます。 たとえば、医療関連文書の選別は、新型コロナウイルス感染症 (COVID-19) に関連する文書のみに焦点を当てると、より効率的になります。

LlamaIndex のインストール

LlamaIndex のインストールは簡単なプロセスです。 Pip から直接インストールするか、ソースからインストールするかを選択できます。 (システムに Python がインストールされていることを確認してください。そうでない場合は、Google Colab を使用できます)

1. Pip からのインストール:

  • 次のコマンドを実行します。
    pip install llama-index
  • Note: インストール中に、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 の Web サイトに登録し、新しい API トークンを作成して取得します。
  • プロジェクトのニーズに応じて、基礎となるラージ言語モデル (LLM) を柔軟にカスタマイズできます。 LLM プロバイダーによっては、追加の環境キーとトークンが必要になる場合があります。

2. ローカル環境のセットアップ:

  • OpenAI を使用したくない場合は、LlamaIndex が自動的にローカル モデルに切り替わります。 LlamaCPP および llama2-chat-13B テキスト生成用、および BAAI/bge-small-en 検索と埋め込み用。
  • 使用するには LlamaCPP、付属のインストールガイドに従ってください。 必ずインストールしてください llama-cpp-python パッケージ。GPU をサポートするために理想的にコンパイルされています。 このセットアップでは、CPU と GPU で約 11.5 GB のメモリが使用されます。
  • ローカル埋め込みの場合は、次を実行します。 pip install sentence-transformers。 このローカル セットアップでは約 500MB のメモリが使用されます。

これらのセットアップを使用すると、OpenAI の機能を活用したり、プロジェクトの要件やリソースに合わせてモデルをローカルで実行したりするように環境を調整できます。

単純な使用例: LlamaIndex と OpenAI を使用した Web ページのクエリ

Web ページにクエリを実行して特定の情報を取得する方法を示す簡単な Python スクリプトを次に示します。

!pip install llama-index html2text
import os
from llama_index import VectorStoreIndex, SimpleWebPageReader
# Enter your OpenAI key below:
os.environ["OPENAI_API_KEY"] = ""
# URL you want to load into your vector store here:
url = "http://www.paulgraham.com/fr.html"
# Load the URL into documents (multiple documents possible)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])
# Create vector store from documents
index = VectorStoreIndex.from_documents(documents)
# Create query engine so we can ask it questions:
query_engine = index.as_query_engine()
# Ask as many questions as you want against the loaded data:
response = query_engine.query("What are the 3 best advise by Paul to raise money?")
print(response)
The three best pieces of advice by Paul to raise money are:
1. Start with a low number when initially raising money. This allows for flexibility and increases the chances of raising more funds in the long run.
2. Aim to be profitable if possible. Having a plan to reach profitability without relying on additional funding makes the startup more attractive to investors.
3. Don't optimize for valuation. While valuation is important, it is not the most crucial factor in fundraising. Focus on getting the necessary funds and finding good investors instead.
Google Colab ラマ インデックス ノートブック

Google Colab ラマ インデックス ノートブック

このスクリプトを使用すると、質問するだけで Web ページから特定の情報を抽出する強力なツールが作成されました。 これは、Web データをクエリするときに LlamaIndex と OpenAI を使用して実現できることのほんの一部です。

LlamaIndex と Langchain: 目標に基づいた選択

LlamaIndex と ラングチェーン プロジェクトの目的によって異なります。 インテリジェントな検索ツールを開発したい場合は、データ検索用のスマートなストレージ メカニズムとして優れた LlamaIndex が最適です。 逆に、プラグイン機能を備えた ChatGPT のようなシステムを作成したい場合は、Langchain が最適です。 ChatGPT と LlamaIndex の複数のインスタンスを容易にするだけでなく、マルチタスク エージェントの構築を可能にすることで機能も拡張します。 たとえば、Langchain を使用すると、Google 検索を実行しながら Python コードを実行できるエージェントを作成できます。 つまり、LlamaIndex はデータ処理に優れていますが、Langchain は複数のツールを調整して総合的なソリューションを提供します。

Midjourney を使用して作成された LlamaIndex ロゴ アートワーク

LlamaIndex ロゴ アートワークを使用して作成されました ミッドジャーニー

私は過去 50 年間、機械学習と深層学習の魅力的な世界に没頭してきました。 私の情熱と専門知識により、特に AI/ML に重点を置いた XNUMX を超える多様なソフトウェア エンジニアリング プロジェクトに貢献してきました。 私の継続的な好奇心は、私がさらに探求したいと思っている分野である自然言語処理にも引き寄せられました。