MilvusとJina AIを統合する
このガイドでは、Jina AIエンベッディングとMilvusを使って、類似検索タスクを実行する方法を説明します。
Jina AIとは
2020年にベルリンで設立されたJina AIは、検索基盤を通じて人工知能の未来に革命を起こすことに焦点を当てた先駆的なAI企業です。マルチモーダルAIに特化したJina AIは、エンベッディング、リランカー、プロンプト操作、コアインフラを含む統合コンポーネント群を通じて、企業や開発者がマルチモーダルデータのパワーを価値創造とコスト削減のために活用できるようにすることを目指しています。 Jina AIの最先端エンベッディングは、包括的なデータ表現に理想的な8192トークン長モデルを特徴とし、トップクラスのパフォーマンスを誇ります。多言語サポートとOpenAIのような主要プラットフォームとのシームレスな統合を提供するこれらのエンベッディングは、クロスリンガルアプリケーションを容易にします。
MilvusとJina AIのエンベッディング
これらのエンベッディングをスピードとスケールのために効率的に保存し検索するためには、この目的のために設計された特定のインフラストラクチャが必要です。Milvusは、大規模なベクトルデータを扱うことができる先進的なオープンソースのベクトルデータベースとして広く知られています。Milvusは、多くのメトリクスに従った高速かつ正確なベクトル(埋め込み)検索を可能にします。そのスケーラビリティは、大量の画像データをシームレスに扱うことを可能にし、データセットが大きくなっても高性能な検索オペレーションを保証します。
例
JinaエンベッディングはPyMilvusモデルライブラリに統合されています。では、実際にJinaエンベッディングをどのように使うか、コード例を示します。
始める前に、PyMilvus用のモデルライブラリをインストールする必要があります。
$ pip install -U pymilvus
$ pip install "pymilvus[model]"
Google Colabを使用している場合、インストールした依存関係を有効にするために、ランタイムを再起動する必要があるかもしれません。(画面上部の "Runtime "メニューをクリックし、ドロップダウンメニューから "Restart session "を選択してください)。
汎用エンベッディング
Jina AIのコアとなるエンベッディングモデルは、詳細なテキストの理解に優れており、セマンティック検索、コンテンツ分類、高度な感情分析、テキスト要約、パーソナライズされた推薦システムに最適です。
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction(
"jina-embeddings-v3",
jina_api_key,
task="retrieval.passage",
dimensions=1024
)
query = "what is information retrieval?"
doc = "Information retrieval is the process of finding relevant information from a large collection of data or documents."
qvecs = ef.encode_queries([query]) # This method uses `retrieval.query` as the task
dvecs = ef.encode_documents([doc]) # This method uses `retrieval.passage` as the task
バイリンガル埋め込み
Jina AIのバイリンガルモデルは、多言語プラットフォーム、グローバルサポート、クロスリンガルコンテンツディスカバリーを強化します。ドイツ語-英語、中国語-英語の翻訳のために設計されたこのモデルは、多様な言語グループ間の理解を促進し、言語間の相互作用を簡素化します。
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction("jina-embeddings-v2-base-de", jina_api_key)
query = "what is information retrieval?"
doc = "Information Retrieval ist der Prozess, relevante Informationen aus einer großen Sammlung von Daten oder Dokumenten zu finden."
qvecs = ef.encode_queries([query])
dvecs = ef.encode_documents([doc])
コード埋め込み
Jina AIのコード埋め込みモデルは、コードとドキュメントを通じた検索能力を提供します。英語と30の一般的なプログラミング言語をサポートしており、コードナビゲーションの強化、コードレビューの合理化、ドキュメンテーションの自動化に利用できます。
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction("jina-embeddings-v2-base-code", jina_api_key)
# Case1: Enhanced Code Navigation
# query: text description of the functionality
# document: relevant code snippet
query = "function to calculate average in Python."
doc = """
def calculate_average(numbers):
total = sum(numbers)
count = len(numbers)
return total / count
"""
# Case2: Streamlined Code Review
# query: text description of the programming concept
# document: relevante code snippet or PR
query = "pull quest related to Collection"
doc = "fix:[restful v2] parameters of create collection ..."
# Case3: Automatic Documentation Assistance
# query: code snippet you need explanation
# document: relevante document or DocsString
query = "What is Collection in Milvus"
doc = """
In Milvus, you store your vector embeddings in collections. All vector embeddings within a collection share the same dimensionality and distance metric for measuring similarity.
Milvus collections support dynamic fields (i.e., fields not pre-defined in the schema) and automatic incrementation of primary keys.
"""
qvecs = ef.encode_queries([query])
dvecs = ef.encode_documents([doc])
ジーナとmilvusのセマンティック検索
強力なベクトル埋め込み機能により、JinaのAIモデルとMilvus Liteのベクトルデータベースを組み合わせて意味検索を行うことができます。
from pymilvus.model.dense import JinaEmbeddingFunction
from pymilvus import MilvusClient
jina_api_key = "<YOUR_JINA_API_KEY>"
DIMENSION = 1024 # `jina-embeddings-v3` supports flexible embedding sizes (32, 64, 128, 256, 512, 768, 1024), allowing for truncating embeddings to fit your application.
ef = JinaEmbeddingFunction(
"jina-embeddings-v3",
jina_api_key,
task="retrieval.passage",
dimensions=DIMENSION,
)
doc = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.",
]
dvecs = ef.encode_documents(doc) # This method uses `retrieval.passage` as the task
data = [
{"id": i, "vector": dvecs[i], "text": doc[i], "subject": "history"}
for i in range(len(dvecs))
]
milvus_client = MilvusClient("./milvus_jina_demo.db")
COLLECTION_NAME = "demo_collection" # Milvus collection name
if milvus_client.has_collection(collection_name=COLLECTION_NAME):
milvus_client.drop_collection(collection_name=COLLECTION_NAME)
milvus_client.create_collection(collection_name=COLLECTION_NAME, dimension=DIMENSION)
res = milvus_client.insert(collection_name=COLLECTION_NAME, data=data)
print(res["insert_count"])
引数のMilvusClient
:
./milvus.db
のように、uri
をローカルファイルとして設定する方法が、Milvus Lite を自動的に利用して全てのデータをこのファイルに格納することができるため、最も便利な方法である。- データ規模が大きい場合は、dockerやkubernetes上に、よりパフォーマンスの高いMilvusサーバを構築することができます。このセットアップでは、サーバの uri、例えば
http://localhost:19530
をuri
として使用してください。 - MilvusのフルマネージドクラウドサービスであるZilliz Cloudを使用する場合は、Zilliz CloudのPublic EndpointとApi keyに対応する
uri
とtoken
を調整してください。
Milvusのベクトル・データベースにすべてのデータが登録されたので、クエリに対するベクトル埋め込みを生成してベクトル検索を行うことで、セマンティック検索を行うことができる。
queries = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
qvecs = ef.encode_queries([queries]) # This method uses `retrieval.query` as the task
res = milvus_client.search(
collection_name=COLLECTION_NAME, # target collection
data=[qvecs[0]], # query vectors
limit=3, # number of returned entities
output_fields=["text", "subject"], # specifies fields to be returned
)[0]
for result in res:
print(result)
{'id': 1, 'distance': 0.8802614808082581, 'entity': {'text': "The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.", 'subject': 'history'}}
ジーナ再ランカー
Jina Aiは、埋め込み検索後の検索品質をさらに向上させるためのリランカーも提供しています。
from pymilvus.model.reranker import JinaRerankFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)
query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
documents = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.",
]
rf(query, documents)
[RerankResult(text="The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.", score=0.9370958209037781, index=1),
RerankResult(text='The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.', score=0.35420963168144226, index=3),
RerankResult(text="In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.", score=0.3498658835887909, index=0),
RerankResult(text='In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.', score=0.2728956639766693, index=2)]