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을 사용하는 경우 방금 설치한 종속성을 활성화하려면 런타임을 다시 시작해야 할 수 있습니다. (화면 상단의 "런타임" 메뉴를 클릭하고 드롭다운 메뉴에서 "세션 다시 시작"을 선택합니다).
범용 임베딩
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])
Jina & 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
의 인수는 다음과 같습니다:
uri
를 로컬 파일(예:./milvus.db
)로 설정하는 것이 가장 편리한 방법인데, 이 파일에 모든 데이터를 저장하기 위해 Milvus Lite를 자동으로 활용하기 때문입니다.- 데이터 규모가 큰 경우, 도커나 쿠버네티스에 더 고성능의 Milvus 서버를 설정할 수 있습니다. 이 설정에서는 서버 URL(예:
http://localhost:19530
)을uri
으로 사용하세요. - 밀버스의 완전 관리형 클라우드 서비스인 질리즈 클라우드를 사용하려면, 질리즈 클라우드의 퍼블릭 엔드포인트와 API 키에 해당하는
uri
와token
을 조정하세요.
이제 밀버스 벡터 데이터베이스의 모든 데이터로 쿼리에 대한 벡터 임베딩을 생성하여 시맨틱 검색을 수행하고 벡터 검색을 수행할 수 있습니다.
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)]