BAAI / bge-m3
Milvus Integrated
タスク: 埋め込み
モダリティ: テキスト
類似性メトリック: コサイン、ドット積
ライセンス: ミット
次元: 1024
最大入力トークン: 8192
価格: 無料
#BGE-M3入門
BGE-M3はBAAIによって開発されたテキスト埋め込みモデルで、様々な言語やタスクに対応できるように調整されています。BGE-M3は100以上の言語をサポートし、最大8192トークンまでの入力に対応します。この能力により、BGE-M3は密な、疎な、多ベクタの検索タスクに優れており、文書検索や質問応答において非常に効果的です。このモデルの最先端の性能は、MKQAやMLDRなどのベンチマークで実証されている。そのアーキテクチャには自己知識蒸留が含まれており、様々なデータセットに対する適応性と精度を高め、多言語情報検索の強力なツールとして位置づけている。
BGE-M3での埋め込み作成方法
ベクトル埋め込みを生成するには2つの方法があります:
- PyMilvus](https://github.com/milvus-io/pymilvus): MilvusのPython SDKで、
bge-m3
モデルをシームレスに統合している。 - FlagEmbedding ライブラリ: Python のライブラリ
FlagEmbedding
.
ベクトル埋め込みが作成されると、Zilliz Cloud (Milvusによるフルマネージドベクトルデータベースサービス)に保存され、意味的類似性検索に利用できる。ここでは4つの重要なステップを紹介する:
- Zilliz Cloudアカウントに無料でサインアップ](https://cloud.zilliz.com/signup)。
- サーバーレスクラスターをセットアップ](https://docs.zilliz.com/docs/create-cluster#set-up-a-free-cluster)し、パブリックエンドポイントとAPIキーを取得する。
- ベクトルコレクションを作成し、ベクトル埋め込みを挿入する。
- 保存された埋め込みに対してセマンティック検索を実行する。
PyMilvus経由で埋め込みを作成する。
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
ef = BGEM3EmbeddingFunction()
ドキュメント
「人工知能は1956年に学問分野として設立された、
"アラン・チューリングは、AIの実質的な研究を行った最初の人物である。"、
「チューリングはロンドンのマイダベールで生まれ、イングランド南部で育った。
]
# ドキュメントの埋め込みを生成する
docs_embeddings = ef.encode_documents(docs)
queries = ["人工知能はいつ創設されたか"、
「アラン・チューリングはどこで生まれましたか?]
# クエリの埋め込みを生成
query_embeddings = ef.encode_queries(queries)
client = MilvusClient(
uri=ZILLIZ_PUBLIC_ENDPOINT、
token=ZILLIZ_API_KEY)
スキーマ = client.create_schema(
auto_id=True、
enable_dynamic_field=True、
)
schema.add_field(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
フィールド名="dense_vector"、
datatype=DataType.FLOAT_VECTOR、
dim=ef.dim["dense"]、
)
schema.add_field(
フィールド名="sparse_vector", データ型=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
フィールド名="dense_vector", index_type="FLAT", metric_type="IP"
)
index_params.add_index(
フィールド名="sparse_vector"、
index_type="SPARSE_INVERTED_INDEX"、
metric_type="IP"、
)
COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
client.drop_collection(collection_name=COLLECTION)
client.create_collection(
コレクション名=COLLECTION、
schema=schema、
index_params=index_params、
enable_dynamic_field=True、
)
for i in range(len(docs)):
doc, dense_embedding, sparse_embedding = docs[i], docs_embeddings["dense"][i], docs_embeddings["sparse"][[i]].
client.insert(COLLECTION, {"text": doc, "dense_vector": dense_embedding, "sparse_vector": sparse_embedding})
k = 1
req_list = []をクリックする。
dense_embedding = query_embeddings["dense"][0].
sparse_embedding = query_embeddings["スパース"][[0]]。
dense_search_param = { 以下のようになる。
"data":[dense_embedding]、
"anns_field":"dense_vector"、
「param":param": {"metric_type":"IP"}、
"limit": k * 2、
}
dense_req = AnnSearchRequest(**dense_search_param)
req_list.append(dense_req)
sparse_search_param = { {検索データ: **dense_search_param
"data":[sparse_embedding]、
"anns_field":"sparse_vector"、
「param":param": {"metric_type":"IP"}、
"limit": k * 2、
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
results = client.hybrid_search(
COLLECTION、
req_list、
WeightedRanker(1.0, 1.0)、
k,
consistency_level="Strong"、
output_fields=["text"])
)
詳細なステップバイステップのガイドはPyMilvus Documentationを参照してください。
FlagEmbedding ライブラリを用いたベクトルの埋め込み生成
from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=False)
ドキュメント = [
「人工知能は1956年に学問分野として設立された、
「アラン・チューリングは、人工知能の実質的な研究を行った最初の人物である、
「チューリングはロンドンのマイダ・ベイルで生まれ、イングランド南部で育った。
]
# ドキュメントの埋め込みを生成する
docs_embeddings = model.encode(docs, return_dense=True, return_sparse=True)
queries = ["人工知能はいつ作られたか"、
「アラン・チューリングはどこで生まれましたか?]
# クエリの埋め込みを生成する
query_embeddings = model.encode(queries, return_dense=True, return_sparse=True)
client = MilvusClient(
uri=ZILLIZ_PUBLIC_ENDPOINT、
token=ZILLIZ_API_KEY)
スキーマ = client.create_schema(
auto_id=True、
enable_dynamic_field=True、
)
schema.add_field(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
フィールド名="dense_vector"、
datatype=DataType.FLOAT_VECTOR、
dim=1024、
)
schema.add_field(
フィールド名="sparse_vector", データ型=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
フィールド名="dense_vector", index_type="FLAT", metric_type="IP"
)
index_params.add_index(
フィールド名="sparse_vector"、
index_type="SPARSE_INVERTED_INDEX"、
metric_type="IP"、
)
COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
client.drop_collection(collection_name=COLLECTION)
client.create_collection(
コレクション名=COLLECTION、
schema=schema、
index_params=index_params、
enable_dynamic_field=True、
)
for i in range(len(docs)):
doc, dense_embedding, sparse_embedding = docs[i], docs_embeddings["dense_vecs"][i], docs_embeddings["lexical_weights"][i].
client.insert(COLLECTION, {"text": doc, "dense_vector": dense_embedding, "sparse_vector":{int(k): sparse_embedding[k] for k in sparse_embedding}})
k = 1
req_list = []を選択する。
dense_embedding = query_embeddings["dense_vecs"][0].
sparse_embedding = {int(k): query_embeddings["lexical_weights"][0][k] for k in query_embeddings["lexical_weights"][0]}.
dense_search_paramは、次のようになります。
"data":[dense_embedding]、
"anns_field":"dense_vector"、
「param":param": {"metric_type":"IP"}、
"limit": k * 2、
}
dense_req = AnnSearchRequest(**dense_search_param)
req_list.append(dense_req)
sparse_search_param = { {検索結果のデータ: **dense_search_param
"data":[sparse_embedding]、
"anns_field":"sparse_vector"、
「param":param": {"metric_type":"IP"}、
"limit": k * 2、
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
results = client.hybrid_search(
COLLECTION、
req_list、
WeightedRanker(1.0, 1.0)、
k,
consistency_level="Strong"、
output_fields=["text"])
)
さらなる読み物
- データに適した埋め込みモデルの選択](https://zilliz.com/blog/choosing-the-right-embedding-model-for-your-data)
- 埋め込みモデルの評価
- 独自のテキスト埋め込みモデルをトレーニングする
- RAGアプリケーションのためのウェブサイトのチャンキングと埋め込みへの初心者ガイド
- RAGとは](https://zilliz.com/learn/Retrieval-Augmented-Generation)_
シームレス AI ワークフロー
埋め込みからスケーラブルな AI 検索まで、 Zilliz Cloud は、埋め込みを比類のないスピードと効率で保存、インデックス、検索できます。
Zilliz Cloudを無料で試す