세계 최초의 다국어 콜버트: 지나 콜버트 V2와 '러시아 중첩 인형' 기술

AI 뉴스11개월 전 업데이트 AI 공유 서클
3K 00

全球首个多语言 ColBERT:Jina ColBERT V2 和它的‘俄罗斯套娃’技术

존재 RAG 도메인의 경우, 다중 벡터 모델인 ColBERT를 사용하여 문서의 각 토큰 독립적인 벡터를 생성하면 검색 정확도가 향상됩니다. 하지만 스토리지 요구 사항이 크게 증가하고 영어만 지원하므로 적용 범위가 제한됩니다.

이러한 문제를 해결하기 위해 콜버트 아키텍처와 훈련 프로세스를 개선했으며, 특히 다국어 처리에서 획기적인 발전을 이루었습니다. 최신 Jina-ColBERT-v2는 89개 언어를 지원하고 사용자 지정 출력 차원 옵션을 도입하여 스토리지 요구 사항을 크게 줄이고 다국어 검색의 효율성과 정확성을 향상시켰습니다.

새 릴리스의 주요 특징

  1. 성능 향상기존 콜버트-v2에 비해 영어 검색 성능이 6.51 TP3T, 이전 버전인 jina-colbert-v1-en에 비해 5.41 TP3T 향상되었습니다.
  2. 다국어 지원새 버전은 아랍어, 중국어, 영어, 일본어, 러시아어 및 기타 언어와 프로그래밍 언어를 포함하여 최대 89개 언어를 지원합니다.
  3. 출력 치수를 사용자 지정할 수 있습니다.새 버전은 마트료시카 표현 학습(MRL)을 사용하며 128, 96, 64 차원 출력 벡터를 제공하여 사용자가 필요에 따라 적절한 차원을 선택할 수 있습니다.

기술 보고서 전문은 arXiv(https://arxiv.org/abs/2408.16672)에서 확인할 수 있습니다.

JINA-COLBERT-V2 성능 한눈에 보기

검색 성능 측면에서 jina-colbert-v2는 영어 검색 작업과 다국어 지원 모두에서 이전 버전에 비해 상당한 이점을 보여줍니다. 이 멀티 벡터 모델의 장점은 Jina AI에서 상속받은 8192 토큰 입력 길이에서도 충분히 활용될 수 있습니다. 아래에서 다른 버전과의 비교를 통해 핵심 개선 사항을 명확하게 확인할 수 있습니다:

jina-colbert-v2jina-colbert-v1-en오리지널 ColBERTv2
영어 BEIR 작업의 평균0.5210.4940.489
다국어 지원89개 언어영어 전용영어 전용
출력 차원128, 96 또는 64수정 128수정 128
최대 쿼리 길이32 토큰32 토큰32 토큰
최대 문서 길이8192 토큰8192 토큰512 토큰
매개변수 수5억 6천만137백만1억 1천만
모델 크기1.1GB550MB438MB

1. 성능 향상

영어 검색 작업에서 jina-colbert-v2는 이전 세대인 jina-colbert-v1-en과 오리지널 ColBERT v2의 성능을 능가하며 영어용으로 특별히 설계된 AnswerAI-ColBERT-small 모델 수준에 근접했습니다.

모델 이름영어 BEIR 벤치마크 테스트의 평균 점수다국어 지원
jina-colbert-v20.521다국어 지원
jina-colbert-v1-en0.494영어 전용
콜버트 v2.00.489영어 전용
AnswerAI-ColBERT-small0.549영어 전용
全球首个多语言 ColBERT:Jina ColBERT V2 和它的‘俄罗斯套娃’技术영어 기반 BEIR 데이터 세트에 대한 Jina ColBERT v2의 성능

2. 다국어 지원

Jina-ColBERT-v2는 여러 언어를 지원하는 유일한 ColBERT 모델입니다.그 결과 기존 임베딩 벡터보다 훨씬 더 컴팩트한 임베딩 벡터가 탄생했습니다. BM25 검색 방법(미라클에서 벤치마킹한 모든 언어).

jina-colbert-v2 훈련 말뭉치에는 89개 언어가 포함되며 의미적으로 관련성이 약한 4억 5천만 개의 문장 쌍, 질문-답변 쌍, 쿼리-문서 쌍이 포함되어 있습니다. 그 중 절반은 영어로 되어 있으며, 나머지 부분에는 3.0%의 프로그래밍 언어 데이터와 4.3%의 언어 간 데이터 외에도 29개의 다른 비영어권 언어가 포함되어 있습니다.

또한 다음과 같은 전문 분야도 보유하고 있습니다. 아랍어, 중국어, 프랑스어, 독일어, 일본어, 러시아어, 스페인어 및 기타 주요 언어 노래로 응답 프로그래밍 언어 추가 훈련을 수행하여 모델이 이중 언어 텍스트 말뭉치를 도입함으로써 다국어 작업을 잘 처리할 수 있도록 했습니다.

全球首个多语言 ColBERT:Jina ColBERT V2 和它的‘俄罗斯套娃’技术사전 학습 데이터 세트의 언어 배포

다음 그림은 16개 언어에 대한 Jina-ColBERT-v2와 BM25의 성능 비교 결과를 MIRACL 벤치마크에서 보여줍니다.

全球首个多语言 ColBERT:Jina ColBERT V2 和它的‘俄罗斯套娃’技术

3. 러시아어 중첩 인형 표현 학습

마트료시카 표현 학습(MRL) 은 다양한 출력 벡터 차원을 지원하면서 정확도 손실을 최소화하는 유연하고 효율적인 훈련 방법입니다. 이 방법은 모델의 숨겨진 레이어에 여러 개의 선형 레이어를 도입하여 구현되며, 각 레이어는 서로 다른 차원을 처리합니다. 이 기법에 대한 자세한 내용은 https://arxiv.org/abs/2205.13147 을 참조하세요.

기본적으로Jina-ColBERT-v2는 128차원 임베딩을 생성하지만 96차원 또는 64차원과 같이 더 짧은 벡터를 선택할 수 있습니다.. 벡터가 25% 또는 50% 짧아지더라도 성능에 미치는 영향은 거의 무시할 수 있습니다(1.5% 미만). 즉, 벡터의 길이가 아무리 길어도 모델은 효율적이고 정확한 성능을 유지합니다.

아래 표는 이 6가지 BEIR 벤치마크의 상위 10개 결과(nDGC@10)에 대한 Jina-ColBERT-v2의 성능을 보여줍니다. 이를 통해128차원과 96차원의 성능 차이는 1% 미만인 반면 128차원과 64차원의 차이는 1.5% 미만입니다.

출력 차원평균 점수(6개 벤치마크의 경우 nDGC@10)
1280.565
960.558
640.556

다음 그림은 다양한 출력 크기에서 Jina-ColBERT-v2의 성능을 시각화한 것입니다.

全球首个多语言 ColBERT:Jina ColBERT V2 和它的‘俄罗斯套娃’技术더 작은 출력 벡터를 선택하면 저장 공간을 절약할 수 있을 뿐만 아니라 특히 벡터 검색 시스템과 같이 벡터를 비교하거나 거리를 계산해야 하는 시나리오에서 계산 속도도 향상됩니다.

비용도 매우 눈에 띄게 감소합니다. Qdrant의 클라우드 비용 추정기에 따르면 128차원 벡터를 사용하여 AWS에 1억 개의 문서를 저장하는 데 드는 비용은 월 1,319.24달러인 반면, 64차원 벡터를 사용하면 비용을 절반으로 줄여 월 659.62달러로 낮출 수 있습니다. 이는 속도 향상뿐만 아니라 비용도 크게 절감할 수 있습니다.

Jina ColBERT v2를 시작하는 방법

Jina ColBERT v2는 현재 Jina Search Foundation API, AWS Marketplace 및 Azure 플랫폼에서 사용할 수 있습니다. 또한 다음 사이트에서 CC BY-NC-4.0 라이선스에 따라 사용할 수 있습니다. 포옹하는 얼굴 비상업적 용도의 오픈 소스입니다.

  • AWS 마켓플레이스: https://aws.amazon.com/marketplace/seller-profile?id=seller-stch2ludm6vgy
  • Azure: https://azuremarketplace.microsoft.com/en-gb/marketplace/apps?search=Jina
  • 포옹하는 얼굴: https://huggingface.co/jinaai/jina-colbert-v2

 

Jina 검색 재단 API를 통해

임베딩용

Jina 임베딩 API를 사용하여 jina-colbert-v2의 임베딩을 얻는 것이 가장 쉽고 직접적인 방법입니다.

두 가지 주요 매개변수입니다:

dimensions임베딩의 출력 크기를 나타내며, 기본값은 128이며 64를 선택할 수도 있습니다.

input_type입력 유형을 결정합니다.query 는 32개 토큰으로 제한되며, 자동으로 잘리고 document 문서 인코딩을 오프라인으로 처리할 수 있으므로 쿼리 시 쿼리 부분만 인코딩하면 되므로 처리 속도를 크게 향상시킬 수 있습니다.

Jina API 키는 jina.ai/embedings에서 확인할 수 있습니다.

curl https://api.jina.ai/v1/multi-vector \\
     -H "Content-Type: application/json" \\
     -H "Authorization: Bearer <YOUR JINA API KEY>" \\
     -d '{
     "model": "jina-colbert-v2",
     "dimensions": 128, # 或 64
     "input_type": "document", # 这里需要注意input_type 是 document 还是 query
     "embedding_type": "float",
     "input": [
         "在此输入你的文档文本",
         "你可以发送多个文本",
         "每个文本最长可达 8192 个标记"
    ]}'

리랭커의 경우

지나 리랭커 API를 사용하려면 다음 링크를 통해 jina-colbert-v2이렇게 하려면 쿼리와 여러 문서를 전달하고 재랭크 가능한 매치 점수를 반환하는 다음 요청을 작성하세요:

curl https://api.jina.ai/v1/rerank \\
     -H "Content-Type: application/json" \\
     -H "Authorization: Bearer <YOUR JINA API KEY>" \\
     -d '{
      "model": "jina-colbert-v2",
      "query": "柏林的人口是多少?",
      "top_n": 3,
      "documents": [
        "2023年柏林的人口比去年增长了0.7%。因此,到去年年底,柏林的居民人数比2022年增加了约27300人。30岁到40岁的人群是数量最多的年龄组。柏林拥有约88.1万外国居民,来自约170个国家,平均年龄为42.5岁。",
        "柏林山是南极洲玛丽·伯德地的一个冰川覆盖的火山,距离阿蒙森海约100公里(62英里)。它是一个宽约20公里(12英里)的山峰,有寄生火山口,由两座合并的火山组成:柏林火山,其火山口宽2公里(1.2英里),以及距离柏林火山约3.5公里(2.2英里)的Merrem峰,火山口宽2.5×1公里(1.55英里×0.62英里)。",
        "截至2023年12月31日,各联邦州按国籍和州统计的人口数据",
        "柏林的都市区人口超过450万,是德国人口最多的都市区。柏林-勃兰登堡首都地区约有620万人口,是德国第二大都市区,仅次于莱茵-鲁尔区,并且是欧盟第六大都市区(按GDP计算)。",
        "欧文·柏林(原名以色列·贝林)是一位美国作曲家和词曲作者。他的音乐是《伟大的美国歌本》的一部分。柏林获得了许多荣誉,包括奥斯卡奖、格莱美奖和托尼奖。",
        "柏林是美国康涅狄格州首都规划区的一个城镇。2020年人口普查时人口为20,175。",
        "柏林是德国的首都和最大城市,无论是面积还是人口。其超过385万居民使其成为欧盟人口最多的城市(按城市限界内人口计算)。",
        "《柏林,柏林》是一部为ARD制作的电视剧,于2002年至2005年在德国第一电视台的晚间节目中播出。导演包括弗朗茨斯卡·迈耶·普莱斯、克里斯托夫·施内、斯文·温特瓦尔特和蒂图斯·塞尔格。"
        ]
    }'

또한 참고하세요. top_n 매개변수를 사용하여 검색에서 반환할 문서 수를 지정할 수 있습니다. 최적의 일치 항목만 필요한 경우에는 top_n 1로 설정합니다.

Python 또는 다른 언어로 된 더 많은 샘플 코드를 보려면 https://jina.ai/embeddings 페이지로 이동하거나 https://jina.ai/reranker/ 의 드롭다운 메뉴에서 선택하세요. jina-colbert-v2.

스탠포드 콜버트를 통해

스탠포드 콜버트 라이브러리를 사용했다면 이제 Jina 콜버트 v2 버전으로 원활하게 교체할 수 있습니다. 간단히 jinaai/jina-colbert-v2 를 모델 소스로 사용합니다.

from colbert.infra import ColBERTConfig
from colbert.modeling.checkpoint import Checkpoint

ckpt = Checkpoint("jinaai/jina-colbert-v2", colbert_config=ColBERTConfig())
docs = ["你的文本列表"]
query_vectors = ckpt.queryFromText(docs)

라가투유를 통해

Jina ColBERT v2는 또한 다음을 통해 RAGatouille 시스템에 통합됩니다. RAGPretrainedModel.from_pretrained() 이 방법은 쉽게 다운로드하여 사용할 수 있습니다.

from ragatouille import RAGPretrainedModel

RAG = RAGPretrainedModel.from_pretrained("jinaai/jina-colbert-v2")
docs = ["你的文本列表"]
RAG.index(docs, index_name="your_index_name")
query = "你的查询"
results = RAG.search(query)

Qdrant를 통해

Qdrant 버전 1.10부터는 jina-colbert-v2와 함께 직접 사용할 수 있는 멀티벡터 및 후기 상호작용 모델을 지원합니다. 로컬로 배포하든 클라우드 호스팅 Qdrant를 배포하든 클라이언트에서 multivector_config 매개 변수를 올바르게 구성하기만 하면 멀티벡터 컬렉션에 문서를 삽입할 수 있습니다.

MAX_SIM 작업을 사용하여 새 컬렉션 만들기

from qdrant_client import QdrantClient, models

qdrant_client = QdrantClient(
    url="<YOUR_ENDPOINT>",
    api_key="<YOUR_API_KEY>",
)

qdrant_client.create_collection(
    collection_name="{collection_name}",
    vectors_config={
        "colbert": models.VectorParams(
            size=128,
            distance=models.Distance.COSINE,
            multivector_config=models.MultiVectorConfig(
                comparator=models.MultiVectorComparator.MAX_SIM
            ),
        )
    }
)

⚠️ 올바른 설정 multivector_config 매개변수는 Qdrant에서 콜버트 모델을 사용하기 위한 핵심 요소입니다.

멀티벡터 집합에 문서 삽입하기

import requests
from qdrant_client import QdrantClient, models

url = 'https://api.jina.ai/v1/multi-vector'

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <YOUR BEARER>'
}

data = {
    'model': 'jina-colbert-v2',
    'input_type': 'query',
    'embedding_type': 'float',
    'input': [
        '在此输入你的文本',
        '你可以发送多个文本',
        '每个文本最长可达 8192 个标记'
    ]
}

response = requests.post(url, headers=headers, json=data)
rows = response.json()["data"]

qdrant_client = QdrantClient(
    url="<YOUR_ENDPOINT>",
    api_key="<YOUR API_KEY>",
)

for i, row in enumerate(rows):
    qdrant_client.upsert(
        collection_name="{collection_name}",
        points=[
            models.PointStruct(
                id=i,
                vector=row["embeddings"],
                payload={"text": data["input"][i]}
            )
        ],
    )

(컴퓨팅) 쿼리 집합

from qdrant_client import QdrantClient, models
import requests

url = 'https://api.jina.ai/v1/multi-vector'

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <YOUR BEARER>'
}

data = {
    'model': 'jina-colbert-v2',
    "input_type": "query",
    "embedding_type": "float",
    "input": [
        "Jina AI 的Embedding模型支持多少个标记的输入?"
    ]
}

response = requests.post(url, headers=headers, json=data)
vector = response.json()["data"][0]["embeddings"]

qdrant_client = QdrantClient(
    url="<YOUR_ENDPOINT>",
    api_key="<YOUR API_KEY>",
)

results = qdrant_client.query_points(
    collection_name="{collection_name}",
    query=vector,
)

print(results)

요약

이전 버전에 기반한 jina-colbert-v2는 89개 글로벌 언어와 다양한 임베딩 출력 차원을 지원하여 사용자가 정확성과 효율성 사이에서 유연하게 균형을 맞추고 계산 및 시간 비용을 절감할 수 있습니다. https://jina.ai 을 클릭하여 지금 체험하고 100만 토큰을 무료로 받으세요.

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...