Embedchainの紹介- LLM向けのデータプラットフォーム

Embedchainの紹介- LLM専用のデータプラットフォーム

イントロダクション

LangChainやLangFlowのようなツールを紹介することで、Large Language Modelsを使ったアプリケーションの構築が容易になりました。さまざまなLarge Language Modelsを選択してアプリケーションを構築することが容易になった一方で、データのアップロード部分では、データがさまざまなソースから取得されるため、開発者にはデータをプレーンテキストに変換してベクトルストアに注入する必要があるため、依然として時間がかかることがあります。このような場合には、Embedchainが登場します。Embedchainを使用すると、さまざまなデータタイプのデータを簡単にアップロードしてLLMを瞬時にクエリできます。この記事では、embedchainの使い方について探っていきます。

学習目標

  • Large Language Models(LLMs)のデータの管理とクエリに関して、embedchainの重要性を理解する。
  • 非構造化データを効果的に統合し、embedchainにアップロードする方法を学ぶ。これにより、さまざまなデータソースでシームレスに作業を行うことができる。
  • embedchainがサポートしているさまざまなLarge Language Modelsとベクトルストアについて知る。
  • ウェブページやビデオなどのさまざまなデータソースをベクトルストアに追加し、データの取り込み方法を理解する。

この記事はData Science Blogathonの一部として公開されました。

Embedchainとは何ですか?

EmbedchainはPython/JavaScriptライブラリであり、開発者はこれを使ってLarge Language Modelsと多くのデータソースをシームレスに接続することができます。Embedchainを使用すると、非構造化データをアップロード、インデックス化、検索することができます。非構造化データには、テキスト、ウェブサイト/YouTube動画へのURL、画像など、いかなるタイプのデータも含まれます。

Emdechainを使ってこれらの非構造化データをアップロードする場合、単一のコマンドでデータをアップロードし、それらに対してベクトル埋め込みを作成し、接続されたLLMと即座にクエリを開始することができます。内部では、embedchainがデータをソースからロードし、チャンキングし、ベクトル埋め込みを作成し、最終的にベクトルストアに格納する処理を行います。

Embedchainを使った最初のアプリの作成

このセクションでは、embedchainパッケージをインストールし、それを使用してアプリを作成します。最初のステップは、以下に示すようにpipコマンドを使用してパッケージをインストールすることです:

!pip install embedchain!pip install embedchain[huggingface-hub]
  • 最初のステートメントはembedchainパッケージをインストールします
  • 次の行はhuggingface-hubをインストールします。このPythonパッケージは、hugging-faceが提供するモデルを使用する場合に必要です

次に、以下のようにHugging Face Inference APIトークンを保存するための環境変数を作成します。Hugging Faceのウェブサイトにサインインし、トークンを生成することで、Inference APIトークンを取得できます。

import osos.environ["HUGGINGFACE_ACCESS_TOKEN"] = "Hugging Face Inferenece API Token"

上記で提供されたトークンをembedchainライブラリが使用して、hugging faceモデルを推論します。次に、ハグングフェースから使用するモデルを定義するためのYAMLファイルを作成する必要があります。YAMLファイルは、LMMアプリケーションの構成を定義するためのシンプルなキーバリューストアと考えることができます。これらの構成には、使用するLLMモデルや使用する埋め込みモデルなどを含めることができます(YAMLファイルについての詳細はこちらをクリックしてください)。以下はYAMLファイルの例です

config = """llm:  provider: huggingface  config:    model: 'google/flan-t5-xxl'    temperature: 0.7    max_tokens: 1000    top_p: 0.8embedder:  provider: huggingface  config:    model: 'sentence-transformers/all-mpnet-base-v2'"""with open('huggingface_model.yaml', 'w') as file:    file.write(config)
  • 私たちはPython自体からYAMLファイルを作成し、huggingface_model.yamlという名前のファイルに保存しています。
  • このYAMLファイルでは、モデルのパラメータや使用されている埋め込みモデルなどを定義しています。
  • 上記の例では、プロバイダーをハグングフェースとし、flan-t5モデルを異なる構成/パラメータで指定しています。構成/パラメータには、モデルのtemperaturemax_tokens(出力の長さ)、さらにはtop_pの値も含まれます。
  • 埋め込みモデルでは、ハグングフェースから提供される人気のある埋め込みモデルall-mpnet-base-v2を使用しています。このモデルは、モデルのための埋め込みベクトルを作成する責任があります。

YAML設定

次に、上記のYAML設定ファイルを使用してアプリを作成します。

from embedchain import Pipeline as Appapp = App.from_config(yaml_path="huggingface_model.yaml")
  • ここでは、embedchainからパイプラインオブジェクトをAppとしてインポートしています。パイプラインオブジェクトは、上記で定義したさまざまな構成を受け入れてLLMアプリを作成する責任があります。
  • アプリは、YAMLファイルで指定されたモデルでLLMを作成します。このappに、さまざまなデータソースからデータをフィードし、同じAppに対して、クエリメソッドを呼び出して提供されたデータに対してLLMをクエリすることができます。
  • さて、いくつかのデータを追加しましょう。
app.add("https://en.wikipedia.org/wiki/Alphabet_Inc.")
  • app.add()メソッドはデータを受け取り、ベクトルストアに追加します。
  • Embedchainは、ウェブページからデータを収集し、データをチャンクに分割し、データの埋め込みを作成することを担当します。
  • そのデータは、ベクトルデータベースに保存されます。Embedchainでデフォルトに使用されるデータベースはchromadbです。
  • この例では、Googleの親会社であるAlphabetのウィキペディアページをアプリに追加しています。

アップロードされたデータに基づいてAppをクエリしましょう:

上記の画像では、query() メソッドを使用して、追加されたデータに関連するApp、つまりflan-t5モデルに2つの質問をしました。モデルはそれらに正しく答えることができました。このように、add()メソッドに渡してモデルに複数のデータソースを追加し、それらを処理し、埋め込みを作成し、最終的にベクトルストアに追加することができます。その後、query()メソッドでデータをクエリできます。

異なるモデルとベクトルストアでAppを設定する

前の例では、ウェブサイトをデータとして追加し、Hugging FaceモデルをAppの基にしたアプリケーションを準備する方法を見てきました。このセクションでは、他のモデルと他のベクトルデータベースを使用して、embedchainがどれだけ柔軟であるかを確認します。この例では、Zilliz Cloudをベクトルデータベースとして使用するため、以下のように対応するPythonクライアントをダウンロードする必要があります:

!pip install --upgrade embedchain[milvus]!pip install pytube
  • 上記のコマンドは、Pymilvus Pythonパッケージをダウンロードし、Zilliz Cloudと対話できるようにします。
  • pytubeライブラリを使用すると、YouTubeのビデオをテキストに変換してベクトルストアに保存できます。
  • 次に、Zilliz Cloudで無料のアカウントを作成します。無料のアカウントを作成した後、Zilliz Cloudダッシュボードに移動し、クラスタを作成します。

クラスタを作成した後、以下のように接続するための認証情報を取得できます:

OpenAI APIキー

パブリックエンドポイントとトークンをコピーし、これらを他の場所に保存しておきます。これらはZilliz Cloud Vector Storeに接続するために必要です。そして、Large Language Modelでは、今回はOpenAI GPTモデルを使用します。したがって、前に進むにはOpenAI APIキーも必要です。すべてのキーを取得した後、以下のように環境変数を作成します:

os.environ["OPENAI_API_KEY"]="Your OpenAI API Key"os.environ["ZILLIZ_CLOUD_TOKEN"]= "Your Zilliz Cloud Token"os.environ["ZILLIZ_CLOUD_URI"]= "Your Zilliz Cloud Public Endpoint"

上記のコードは、すべての必要な認証情報をZilliz CloudとOpenAIに環境変数として保存します。さあ、次はアプリを定義する時が来ました。次のように行います:

from embedchain.vectordb.zilliz import ZillizVectorDB
app = App(db=ZillizVectorDB())
app.add("https://www.youtube.com/watch?v=ZnEgvGPMRXA")
  • まず、embedchainが提供するZillizVectorDBクラスをインポートします。
  • 次に、新しいアプリを作成する際に、ZillizVectorDB()をApp()関数のdb変数に渡します。
  • LLMを指定していないため、デフォルトのLLMとしてOpenAI GPT 3.5が選択されます。
  • これで、アプリがOpenAIをLLMとし、Zillizをベクトルストアとして定義されました。
  • 次に、add()メソッドを使用してYouTubeの動画をアプリに追加します。
  • YouTubeの動画を追加するには、add()関数にURLを渡すだけで、動画からテキストへの変換はembedchainによって抽象化され、シンプルになります。

Zilliz Cloud

動画はまずテキストに変換され、次にチャンクに分割され、OpenAIの埋め込みモデルによってベクトルエンベディングに変換されます。これらのエンベディングはZilliz Cloud内に保存されます。Zilliz Cloudに移動して、クラスター内を確認すると、「embedchain_store」という新しい収集データが見つかります。

上記のように、「embedchain_store」という名前の新しい収集が作成され、この収集には前のステップで追加したデータが含まれています。次に、アプリにクエリを行います。

アプリに追加された動画は、新しいWindows 11のアップデートについてです。上の画像では、動画で言及された質問をアプリに尋ねています。そしてアプリは正しく質問に答えています。これらの2つの例では、embedchainで異なるLarge Language Modelsと異なるデータベースを使用する方法、つまりウェブページとYouTubeの動画のデータをアップロードする方法を示しました。

EmbedchainでサポートされているLLMsとベクトルストア

Embedchainは、多様なLarge Language ModelsとVector Databasesのサポートを取り入れることで、多くの成長を遂げてきました。サポートされているLarge Language Modelsは以下の通りです:

  • Hugging Face Models
  • OpenAI
  • Azure OpenAI
  • Anthropic
  • Llama2
  • Cohere
  • JinaChat
  • Vertex AI
  • GPT4All

多種多様なLarge Language Modelsをサポートするだけでなく、embedchainは多くのベクトルデータベースにも対応しています。以下に、サポートされているベクトルデータベースの一部を示します:

  • ChromaDB
  • ElasticSearch
  • OpenSearch
  • Zilliz
  • Pinecone
  • Weaviate
  • Qdrant
  • LanceDB

これらに加えて、将来的にはembedchainはさらに多くのLarge Language Modelsとベクトルデータベースをサポートする予定です。

結論

大規模な言語モデルでアプリケーションを構築する際の主な課題は、異なるデータソースからのデータ処理です。すべてのデータソースは、一貫したタイプに変換されてから埋め込みに変換される必要があります。また、データソースごとに異なるハンドリング方法があります。例えば、ビデオ用のライブラリが別途存在し、ウェブサイト用のライブラリも存在します。なので、私たちはEmbedchain Pythonパッケージを使用したこの課題の解決策を見てきました。これにより、データの変換に悩むことなく、任意のデータソースからデータを統合することができます。

要点

この記事の要点は以下の通りです:

  • Embedchainは多くの大規模言語モデルをサポートしており、それによってどのモデルでも使用できます。
  • また、Embedchainは多くの人気のあるベクトルストアと統合されています。
  • 単純なadd()メソッドを使用することで、任意のデータをベクトルストアに保存することができます。
  • EmbedchainはLLMとベクトルDBの切り替えを容易にし、データの追加とクエリのための簡単なメソッドを提供します。

よくある質問

参考文献

embedchainおよびそのアーキテクチャについて詳しくは、公式ドキュメントページとGithubリポジトリを参照してください。

  • https://docs.embedchain.ai
  • https://github.com/embedchain/embedchain

この記事に表示されているメディアはAnalytics Vidhyaが所有しておらず、著者の裁量によって使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more