AIパーソナル・ラーニング
と実践的なガイダンス
讯飞绘镜

世界初の多言語ColBERT:Jina ColBERT V2とその「ロシアの入れ子人形」技術

-1

ある ラグ ドメインでは、マルチベクトルモデルColBERTを使用して、文書のそれぞれの トークン 独立ベクトルの生成は検索精度の向上をもたらす。しかし、ストレージ要件が大幅に増加し、英語しかサポートしないため、適用範囲が限定される。

これらの問題に対処するため、我々は ColBERT のアーキテクチャと学習プロセスを改善し、特に多言語処理にお いて画期的な進歩を遂げた。最新の Jina-ColBERT-v2 は、89 言語をサポートし、カスタム出力次元オプションを導入することで、 ストレージ要件を大幅に削減し、多言語検索の効率と精度を向上させている。

新リリースの主なハイライト

  1. パフォーマンス向上オリジナルのColBERT-v2と比較すると6.5%、前身のjina-colbert-v1-jaと比較すると5.4%、英語検索性能が向上している。
  2. 多言語サポート新バージョンは、アラビア語、中国語、英語、日本語、ロシア語、その他の言語、およびプログラミング言語を含む最大89言語をサポートします。
  3. 出力寸法はカスタマイズ可能新バージョンはマトリョーシカ表現学習(MRL)を採用し、128、96、64次元の出力ベクトルを提供しており、ユーザーは必要に応じて適切な次元を選択することができる。

テクニカルレポートの全文はarXiv: https://arxiv.org/abs/2408.16672 に掲載されている。


ジナコルベール-V2のパフォーマンス一覧

検索性能の面では、jina-colbert-v2は、英語検索タスクと多言語サポートの両方において、旧バージョンよりも大きな優位性を示している。このマルチベクターモデルの利点は、Jina AIが継承する8192トークンの入力長でも十分に活用できる。以下は他のバージョンとの比較であり、コアとなる改良点がはっきりと見て取れる:

jina-colbert-v2 jina-colbert-v1-en オリジナルColBERTv2
英語BEIRタスクの平均 0.521 0.494 0.489
多言語サポート 89ヶ国語 英語のみ 英語のみ
出力寸法 128、96または64 128固定 128固定
クエリの最大長 32 トークン 32トークン 32トークン
文書の最大長 8192トークン 8192トークン 512トークン
パラメータ数 5億6,000万ドル 1億3700万ドル 1億1000万ドル
モデルサイズ 1.1GB 550MB 438MB

1.パフォーマンス向上

英語検索タスクにおいて、jina-colbert-v2 は、前世代の jina-colbert-v1-ja とオリジナルの ColBERT v2 を上回り、英語専用に設計された AnswerAI-ColBERT-small モデルのレベルに近づいている。

モデル名 英語BEIRベンチマークテストの平均点 多言語サポート
jina-colbert-v2 0.521 多言語サポート
jina-colbert-v1-en 0.494 英語のみ
ColBERT v2.0 0.489 英語のみ
回答AI-ColBERT-small 0.549 英語のみ
-1英語ベースのBEIRデータセットにおけるJina ColBERT v2のパフォーマンス

2.多言語サポート

Jina-ColBERT-v2 は、多言語をサポートする唯一の ColBERT モデルである。その結果、非常にコンパクトなエンベッディング・ベクターができあがり、従来のものよりも大幅に改善された。 BM25 検索方法(MIRACLによってベンチマークされたすべての言語)。

jina-colbert-v2 学習コーパスは89言語をカバーし、4億5千万の弱教師付き意味関連文ペア、質問-回答ペア、クエリ-文書ペアを含む。その半分が英語であり、残りの部分には29の異なる非英語言語が含まれ、さらに3.0%のプログラミング言語データと4.3%の言語間データが含まれる。

我々はまた、以下を専門としてきた。 アラビア語、中国語、フランス語、ドイツ語、日本語、ロシア語、スペイン語、その他主要言語 歌で応える プログラミング言語 このモデルは、整列された対訳テキストコーパスを導入することによって、言語横断的なタスクを処理する際に優れた性能を発揮できるようになった。

-1事前学習データセットの言語分布

下図は、MIRACL ベンチマークの 16 言語における Jina-ColBERT-v2 と BM25 の性能比較結果である。

-1

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)
128 0.565
96 0.558
64 0.556

次の図は、異なる出力次元における Jina-ColBERT-v2 の性能を視覚化したものである。

-1ベクトル検索システムのように、ベクトルを比較したり距離を計算したりする必要がある場合は特にそうだ。

QdrantのCloud Cost Estimatorによると、AWSに128次元ベクトルを使って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 Marketplace: https://aws.amazon.com/marketplace/seller-profile?id=seller-stch2ludm6vgy
  • アジュール:https://azuremarketplace.microsoft.com/en-gb/marketplace/apps?search=Jina
  • ハグ顔:https://huggingface.co/jinaai/jina-colbert-v2

 

ジーナ・サーチ財団API経由

埋め込み用

jina-colbert-v2のエンベッディングを取得するためにJinaエンベッディングAPIを使用することは、最も簡単で直接的な方法です。

2つの重要なパラメーターがある:

dimensionsデフォルトは128ですが、64を選択することもできます。

input_type入力の種類を決定する。query は32トークンに制限され、自動的に切り捨てられます。 document 文書エンコーディングはオフラインで処理できるため、クエリ時にクエリ部分のみをエンコーディングすればよく、処理速度が大幅に向上する。

Jina API Keyはjina.ai/embeddingsで入手できる。

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 个标记"
    ]}'

リランカーのために

を介してJina Reranker 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.

スタンフォードColBERT経由

Stanford ColBERTライブラリを使用していた場合、Jina ColBERT 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から、Qdrantはマルチベクターとレイトインタラクションモデルをサポートしています。

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でColBERTモデルを使用する際の鍵となる。

マルチベクトル集合への文書の挿入

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 をクリックして、今すぐお試しください。

無断転載を禁じます:チーフAIシェアリングサークル " 世界初の多言語ColBERT:Jina ColBERT V2とその「ロシアの入れ子人形」技術
ja日本語