milvus-logo
LFAI
フロントページへ
  • モデル

エンベッディングの概要

エンベッディングは、データを高次元空間にマッピングするための機械学習の概念であり、類似したセマンティックのデータが近くに配置される。通常、BERTまたは他のTransformerファミリーのDeep Neural Networkであるエンベッディング・モデルは、テキスト、画像、および他のデータタイプのセマンティクスを、ベクトルとして知られる一連の数値で効果的に表現することができます。これらのモデルの主な特徴は、高次元空間におけるベクトル間の数学的距離が、元のテキストや画像のセマンティクスの類似性を示すことができることです。この特性は、GoogleやBingのようなウェブ検索エンジン、eコマースサイトの商品検索やレコメンデーション、そして最近話題の生成AIにおけるRAG(Retrieval Augmented Generation)パラダイムなど、多くの情報検索アプリケーションを解き放つ。

エンベッディングには主に2つのカテゴリがあり、それぞれが異なるタイプのベクトルを生成する:

  • 高密度埋め込み:ほとんどの埋め込みモデルは、情報を数百から数千次元の浮動小数点ベクトルとして表現します。ほとんどの次元がゼロでないため、出力は「密な」ベクトルと呼ばれます。例えば、一般的なオープンソースの埋め込みモデルBAAI/bge-base-en-v1.5は、768個の浮動小数点数からなるベクトル(768次元浮動小数点ベクトル)を出力します。

  • 疎な埋め込み:これに対して、スパース埋め込みは、ほとんどの次元がゼロのベクトル(スパースベクトル)を出力します。これらのベクトルは、トークン語彙のサイズによって決定される、はるかに高い次元(数万またはそれ以上)を持つことがよくあります。スパース・ベクトルはディープ・ニューラル・ネットワークやテキスト・コーパスの統計解析によって生成される。その解釈のしやすさと、より優れた領域外汎化能力により、スパース埋め込みは密な埋め込みを補完するものとして開発者に採用されつつあります。

Milvusはベクトルデータの管理、保存、検索のために設計されたベクトルデータベースです。主流の埋め込みと再ランク付けモデルを統合することで、元のテキストを検索可能なベクトルに簡単に変換したり、強力なモデルを使用して結果を再ランク付けし、RAGのより正確な結果を達成することができます。この統合により、テキスト変換が簡素化され、エンベッディングやリランキングコンポーネントを追加する必要がなくなるため、RAGの開発と検証が効率化されます。

エンベッディングを実際に作成するには、Using PyMilvus's Model To Generate Text Embeddingsを参照してください。

埋め込み関数タイプAPIまたはオープンソース
openai密なAPI
センテントランスフォーマーオープンソース
bm25オープンソース
スプラードスパースオープンソース
bge-m3ハイブリッドオープンソース
ボヤガイ密なAPI
ジーナ密なAPI
コヒーレ濃いAPI
講師デンスオープンソース
ミストラルAIデンスAPI
ノミック密なAPI
mGTEハイブリッドオープンソース

例1: 密なベクトルを生成するためにデフォルトの埋め込み関数を使う

Milvusで埋め込み関数を使うには、まずPyMilvusクライアントライブラリを、埋め込み生成のための全てのユーティリティをラップしたmodel サブパッケージとともにインストールします。

pip install "pymilvus[model]"

model サブパッケージはOpenAI,Sentence Transformers,BGE M3,BM25,SPLADE事前学習モデルなど様々な埋め込みモデルをサポートしています。簡略化のため、この例ではDefaultEmbeddingFunction を使用します。これはすべてMiniLM-L6-v2の文変換モデルで、モデルは約70MBあり、最初の使用時にダウンロードされます:

from pymilvus import model

# This will download "all-MiniLM-L6-v2", a light weight model.
ef = model.DefaultEmbeddingFunction()

# Data from which embeddings are to be generated 
docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]

embeddings = ef.encode_documents(docs)

# Print embeddings
print("Embeddings:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)

期待される出力は以下のようなものです:

Embeddings: [array([-3.09392996e-02, -1.80662833e-02,  1.34775648e-02,  2.77156215e-02,
       -4.86349640e-03, -3.12581174e-02, -3.55921760e-02,  5.76934684e-03,
        2.80773244e-03,  1.35783911e-01,  3.59678417e-02,  6.17732145e-02,
...
       -4.61330153e-02, -4.85207550e-02,  3.13997865e-02,  7.82178566e-02,
       -4.75336798e-02,  5.21207601e-02,  9.04406682e-02, -5.36676683e-02],
      dtype=float32)]
Dim: 384 (384,)

例2: BGE M3モデルを使用して、1回の呼び出しで密なベクトルと疎なベクトルを生成する

この例では、BGE M3ハイブリッドモデルを使用して、テキストを密なベクトルと疎なベクトルの両方に埋め込み、関連文書を検索するために使用します。全体的な手順は以下の通り:

  1. BGE-M3モデルを使ってテキストを密なベクトルと疎なベクトルに埋め込む;

  2. 密なベクトルと疎なベクトルを格納するMilvusコレクションをセットアップする;

  3. Milvusにデータを挿入;

  4. 検索と結果の検査。

まず、必要な依存関係をインストールする必要がある。

from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import (
    utility,
    FieldSchema, CollectionSchema, DataType,
    Collection, AnnSearchRequest, RRFRanker, connections,
)

BGE M3を使用して、埋め込み検索のためにドキュメントとクエリをエンコードする。

# 1. prepare a small corpus to search
docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]
query = "Who started AI research?"

# BGE-M3 model can embed texts as dense and sparse vectors.
# It is included in the optional `model` module in pymilvus, to install it,
# simply run "pip install pymilvus[model]".

bge_m3_ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")

docs_embeddings = bge_m3_ef(docs)
query_embeddings = bge_m3_ef([query])

例3: BM25モデルを使ったスパースベクトルの生成

BM25は、クエリと文書間の関連性を決定するために単語の出現頻度を使用するよく知られた方法である。この例では、BM25EmbeddingFunction を使って、クエリとドキュメントの両方に対してスパース埋め込みを生成する方法を示します。

まず、BM25EmbeddingFunctionクラスをインポートします。

from pymilvus.model.sparse import BM25EmbeddingFunction

BM25では、文書のパターンを表すことができるIDF(逆文書頻度)を得るために、文書の統計量を計算することが重要です。IDFは、ある単語がどれだけの情報を提供するか、つまり、すべての文書でその単語が一般的か稀であるかを示す尺度です。

# 1. prepare a small corpus to search
docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]
query = "Where was Turing born?"
bm25_ef = BM25EmbeddingFunction()

# 2. fit the corpus to get BM25 model parameters on your documents.
bm25_ef.fit(docs)

# 3. store the fitted parameters to disk to expedite future processing.
bm25_ef.save("bm25_params.json")

# 4. load the saved params
new_bm25_ef = BM25EmbeddingFunction()
new_bm25_ef.load("bm25_params.json")

docs_embeddings = new_bm25_ef.encode_documents(docs)
query_embeddings = new_bm25_ef.encode_queries([query])
print("Dim:", new_bm25_ef.dim, list(docs_embeddings)[0].shape)

期待される出力は次のようなものです:

Dim: 21 (1, 21)

翻訳DeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?