Jina AI
Jina AI의 임베딩 모델은 텍스트 입력을 숫자 표현으로 변환하여 텍스트의 의미를 파악할 수 있는 고성능 텍스트 임베딩 모델입니다. 이러한 모델은 고밀도 검색, 의미론적 텍스트 유사성, 다국어 이해와 같은 애플리케이션에서 탁월한 성능을 발휘합니다.
Milvus는 JinaEmbeddingFunction
클래스를 통해 Jina AI의 임베딩 모델과 통합됩니다. 이 클래스는 Jina AI 임베딩 모델을 사용하여 문서와 쿼리를 인코딩하고 임베딩을 Milvus 인덱싱과 호환되는 고밀도 벡터로 반환하는 메서드를 제공합니다. 이 기능을 활용하려면 Jina AI에서 API 키를 받으세요.
이 기능을 사용하려면 필요한 종속성을 설치하세요:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
그런 다음 JinaEmbeddingFunction
을 인스턴스화합니다:
from pymilvus.model.dense import JinaEmbeddingFunction
jina_ef = JinaEmbeddingFunction(
model_name="jina-embeddings-v3", # Defaults to `jina-embeddings-v3`
api_key=JINAAI_API_KEY, # Provide your Jina AI API key
task="retrieval.passage", # Specify the task
dimensions=1024, # Defaults to 1024
)
매개변수
model_name
(문자열)인코딩에 사용할 Jina AI 임베딩 모델의 이름입니다. 예를 들어
jina-embeddings-v3
,jina-embeddings-v2-base-en
등과 같이 사용 가능한 Jina AI 임베딩 모델 이름 중 하나를 지정할 수 있습니다. 이 파라미터를 지정하지 않으면jina-embeddings-v3
이 사용됩니다. 사용 가능한 모델 목록은 Jina 임베딩을 참조하세요.api_key
(문자열)Jina AI API에 액세스하기 위한 API 키입니다.
task
(문자열)모델에 전달된 입력 유형입니다. 임베딩 모델 v3 이상에 필요합니다.
"retrieval.passage"
: 인덱싱 시 검색 작업에서 대용량 문서를 인코딩하는 데 사용됩니다."retrieval.query"
: 검색 작업에서 사용자 쿼리 또는 질문을 인코딩하는 데 사용됩니다."classification"
: 텍스트 분류 작업에서 텍스트를 인코딩하는 데 사용됩니다."text-matching"
: 두 문장 간의 유사도 측정과 같은 유사도 매칭을 위해 텍스트를 인코딩하는 데 사용됩니다."clustering"
: 클러스터링 또는 재순위 지정 작업에 사용됩니다.
dimensions
(int)결과 출력 임베딩이 가져야 하는 차원 수입니다. 기본값은 1024입니다. 임베딩 모델 v3 이상에서만 지원됩니다.
late_chunking
(bool)이 매개변수는 지난 달에 도입된 새로운 청킹 방법인 Jina AI를 문장 일괄 인코딩에 사용할지 여부를 제어합니다. 기본값은
False
입니다.True
으로 설정하면 Jina AI API가 입력 필드에 있는 모든 문장을 연결하여 단일 문자열로 모델에 공급합니다. 내부적으로 모델은 이 긴 연결 문자열을 임베딩한 다음 후기 청킹을 수행하여 입력 목록의 크기와 일치하는 임베딩 목록을 반환합니다.
문서에 대한 임베딩을 만들려면 encode_documents()
메서드를 사용합니다. 이 방법은 검색 또는 추천 작업을 위한 문서 색인화와 같은 비대칭 검색 작업에서 문서 임베딩을 위해 설계되었습니다. 이 방법은 retrieval.passage
을 작업으로 사용합니다.
```python
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.",
]
docs_embeddings = jina_ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", docs_embeddings)
# Print dimension and shape of embeddings
print("Dim:", jina_ef.dim, docs_embeddings[0].shape)
예상 출력은 다음과 비슷합니다:
Embeddings: [array([9.80641991e-02, -8.51697400e-02, 7.36531913e-02, 1.42558888e-02,
-2.23589484e-02, 1.68494112e-03, -3.50753777e-02, -3.11530549e-02,
-3.26012149e-02, 5.04568312e-03, 3.69836427e-02, 3.48948985e-02,
8.19722563e-03, 5.88679723e-02, -6.71099266e-03, -1.82369724e-02,
...
2.48654783e-02, 3.43279652e-02, -1.66154150e-02, -9.90478322e-03,
-2.96043139e-03, -8.57473817e-03, -7.39028037e-04, 6.25024503e-03,
-1.08831357e-02, -4.00776342e-02, 3.25369164e-02, -1.42691191e-03])]
Dim: 1024 (1024,)
쿼리용 임베딩을 만들려면 encode_queries()
메서드를 사용합니다. 이 방법은 검색 쿼리 또는 질문과 같은 비대칭 검색 작업의 쿼리 임베딩을 위해 설계되었습니다. 이 방법은 retrieval.query
을 작업으로 사용합니다.
queries = ["When was artificial intelligence founded",
"Where was Alan Turing born?"]
query_embeddings = jina_ef.encode_queries(queries)
print("Embeddings:", query_embeddings)
print("Dim", jina_ef.dim, query_embeddings[0].shape)
예상 출력은 다음과 유사합니다:
Embeddings: [array([8.79201014e-03, 1.47551354e-02, 4.02722731e-02, -2.52991207e-02,
1.12719582e-02, 3.75947170e-02, 3.97946090e-02, -7.36681819e-02,
-2.17952449e-02, -1.16298944e-02, -6.83426252e-03, -5.12507409e-02,
5.26071340e-02, 6.75181448e-02, 3.92445624e-02, -1.40817231e-02,
...
8.81703943e-03, 4.24629413e-02, -2.32944116e-02, -2.05193572e-02,
-3.22035812e-02, 2.81896023e-03, 3.85326855e-02, 3.64372656e-02,
-1.65050142e-02, -4.26847413e-02, 2.02664156e-02, -1.72684863e-02])]
Dim 1024 (1024,)
유사도 매칭(예: STS 또는 대칭 검색 작업), 텍스트 분류, 클러스터링 또는 순위 재조정 작업에 대한 입력의 임베딩을 만들려면 JinaEmbeddingFunction
클래스를 인스턴스화할 때 적절한 task
매개 변수 값을 사용하세요.
from pymilvus.model.dense import JinaEmbeddingFunction
jina_ef = JinaEmbeddingFunction(
model_name="jina-embeddings-v3", # Defaults to `jina-embeddings-v3`
api_key=JINA_API_KEY, # Provide your Jina AI API key
task="text-matching",
dimensions=1024, # Defaults to 1024
)
texts = [
"Follow the white rabbit.", # English
"Sigue al conejo blanco.", # Spanish
"Suis le lapin blanc.", # French
"跟着白兔走。", # Chinese
"اتبع الأرنب الأبيض.", # Arabic
"Folge dem weißen Kaninchen.", # German
]
embeddings = jina_ef(texts)
# Compute similarities
print(embeddings[0] @ embeddings[1].T)