ある ラグ ドメインでは、マルチベクトルモデルColBERTを使用して、文書のそれぞれの トークン 独立ベクトルの生成は検索精度の向上をもたらす。しかし、ストレージ要件が大幅に増加し、英語しかサポートしないため、適用範囲が限定される。
これらの問題に対処するため、我々は ColBERT のアーキテクチャと学習プロセスを改善し、特に多言語処理にお いて画期的な進歩を遂げた。最新の Jina-ColBERT-v2 は、89 言語をサポートし、カスタム出力次元オプションを導入することで、 ストレージ要件を大幅に削減し、多言語検索の効率と精度を向上させている。
新リリースの主なハイライト
-
パフォーマンス向上オリジナルのColBERT-v2と比較すると6.5%、前身のjina-colbert-v1-jaと比較すると5.4%、英語検索性能が向上している。 -
多言語サポート新バージョンは、アラビア語、中国語、英語、日本語、ロシア語、その他の言語、およびプログラミング言語を含む最大89言語をサポートします。 -
出力寸法はカスタマイズ可能新バージョンはマトリョーシカ表現学習(MRL)を採用し、128、96、64次元の出力ベクトルを提供しており、ユーザーは必要に応じて適切な次元を選択することができる。
テクニカルレポートの全文はarXiv: https://arxiv.org/abs/2408.16672 に掲載されている。
ジナコルベール-V2のパフォーマンス一覧
検索性能の面では、jina-colbert-v2は、英語検索タスクと多言語サポートの両方において、旧バージョンよりも大きな優位性を示している。このマルチベクターモデルの利点は、Jina AIが継承する8192トークンの入力長でも十分に活用できる。以下は他のバージョンとの比較であり、コアとなる改良点がはっきりと見て取れる:
ジーナ・コルベール-V2 |
ジーナ・コルベール-V1-エン |
オリジナル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ベンチマークテストの平均点 | 多言語サポート |
---|---|---|
ジーナ・コルベール-V2 |
0.521 | 多言語サポート |
ジーナ・コルベール-V1-エン |
0.494 | 英語のみ |
ColBERT v2.0 | 0.489 | 英語のみ |
回答AI-ColBERT-small | 0.549 | 英語のみ |
2.多言語サポート
Jina-ColBERT-v2 は、多言語をサポートする唯一の ColBERT モデルである。その結果、非常にコンパクトなエンベッディング・ベクターができあがり、従来のものよりも大幅に改善された。 BM25 検索方法(MIRACLによってベンチマークされたすべての言語)。
ジーナ・コルベール-V2
学習コーパスは89言語をカバーし、4億5千万の弱教師付き意味関連文ペア、質問-回答ペア、クエリ-文書ペアを含む。その半分が英語であり、残りの部分には29の異なる非英語言語が含まれ、さらに3.0%のプログラミング言語データと4.3%の言語間データが含まれる。
我々はまた、以下を専門としてきた。 アラビア語、中国語、フランス語、ドイツ語、日本語、ロシア語、スペイン語、その他主要言語 歌で応える プログラミング言語 このモデルは、整列された対訳テキストコーパスを導入することによって、言語横断的なタスクを処理する際に優れた性能を発揮できるようになった。
下図は、MIRACL ベンチマークの 16 言語における Jina-ColBERT-v2 と BM25 の性能比較結果である。
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 の性能を視覚化したものである。
ベクトル検索システムのように、ベクトルを比較したり距離を計算したりする必要がある場合は特にそうだ。
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つの重要なパラメーターがある:
寸法
デフォルトは128ですが、64を選択することもできます。
入力タイプ
入力の種類を決定する。クエリー
は32トークンに制限され、自動的に切り捨てられます。 ドキュメント
文書エンコーディングはオフラインで処理できるため、クエリ時にクエリ部分のみをエンコーディングすればよく、処理速度が大幅に向上する。
Jina API Keyはjina.ai/embeddingsで入手できる。
curl https://api.jina.ai/v1/multi-vector
H "Content-Type: application/json" ╱Content-Type: application/json
-H "Authorization: Bearer "
-d '{
"model": "jina-colbert-v2", "dimensions": 128, 1.0, 1.0, 1.0
「dimensions": 128, # or 64
"input_type": "document", # input_typeがdocumentであるかqueryであるかに注意。
"embedding_type": "float", "input": [ "float", #
"input": [ "入力
"ここにドキュメントのテキストを入力してください。", "input_type": "float", "input": [ ]。
"複数のテキストを送信することができます。", "text_type": "float", "input": [ "ここに文書のテキストを入力してください。
「各テキストは最大8192トークンです。
]}'
リランカーのために
を介してJina Reranker APIを使用するには、次の手順に従います。 ジーナ・コルベール-V2
これを行うには、クエリーと複数のドキュメントを渡し、再ランク可能なマッチ・スコアを返すには、次のようなリクエストを作成する:
curl https://api.jina.ai/v1/rerank
-H "Content-Type: application/json" ╱Content-Type: application/json
-H "Authorization: Bearer "
-d '{
"model": "jina-colbert-v2"、
"query": "What is the population of Berlin?" , '{ "model": "jina-colbert-v2".,
"top_n": 3、
「ドキュメント": [
"2023年のベルリンの人口は昨年と比較して0.7%増加した。したがって、昨年末までに、ベルリンは2022年よりも約27,300人多くの住民を持っていた。住民の数が最も多い年齢層は30歳から40歳である。ベルリンの外国人居住者は約170カ国から約88万1000人で、平均年齢は42.5歳である。",
「ベルリン山は南極大陸のマリー・バード・ランドにある氷河に覆われた火山で、アムンゼン海から約100キロ(62マイル)離れている。寄生火口を持つ幅約20キロ(12マイル)のピークであり、2つの火山が合体したものである。"ベルリン火山はクレーターの幅が2キロ(1.2マイル)、メレム峰は約3.5キロ(2.2マイル)離れており、クレーターの幅は2.5×1キロ(1.55×0.62マイル)である。",
2023年12月31日現在の連邦州の国籍別、カントン別人口データ" 、"4.5㎢を超える人口を擁する、
「人口450万人以上のベルリン都市圏は、ドイツで最も人口の多い都市圏である。約620万人の人口を擁するベルリン・ブランデンブルク都市圏は、ドイツではライン・ルール地方に次いで2番目に大きな都市圏であり、欧州連合(EU)では6番目に大きな都市圏である(GDP比)。",
「アーヴィング・バーリン(旧名イスラエル・ベーリング)はアメリカの作曲家、作詞家。彼の音楽は『グレート・アメリカン・ソングブック』の一部である。アカデミー賞、グラミー賞、トニー賞など多くの栄誉に輝いた。,
「ベルリンはアメリカ合衆国コネティカット州首都計画地区の町である。
「ベルリンはドイツの首都であり、面積、人口ともに最大の都市である。人口は385万人を超え、欧州連合(EU)域内で最も人口の多い都市である。", .,
「ベルリン、ベルリン』はARDのために制作されたテレビシリーズで、2002年から2005年までドイツTV1のイブニング番組で放送された。監督はフランツィスカ・マイヤープライス、クリストフ・シュネー、スヴェン・ヴィンターヴァルト、ティトゥス・ゼルガーなど。
]
}'
また、注意も必要だ。 トップ
パラメータで、検索で返されるドキュメントの数を指定します。最適なマッチのみが必要な場合は トップ
1に設定する。
Pythonや他の言語でのサンプルコードについては、https://jina.ai/embeddings のページにアクセスするか、https://jina.ai/reranker/ のドロップダウンメニューから選択してください。 ジーナ・コルベール-V2
.
スタンフォードColBERT経由
Stanford ColBERTライブラリを使用していた場合、Jina ColBERT v2バージョンにシームレスに置き換えることができます。単に ジナアイ/ジナコルベルト-v2
をモデルソースとして使用する。
from colbert.infra import ColBERTConfig
from colbert.modelling.checkpoint import チェックポイント
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)
RAG.index(docs, index_name="あなたのインデックス名")
query = "あなたのクエリー"
結果 = RAG.search(クエリー)
Qdrant経由
Qdrantバージョン1.10から、Qdrantはマルチベクターとレイトインタラクションモデルをサポートしています。
MAX_SIMオペレーションを使用した新しいコレクションの作成
from qdrant_client import QdrantClient, models
qdrant_client = QdrantClient(
api_key=""、
)
qdrant_client.create_collection(
コレクション名="{コレクション名}"、
vectors_config={
"colbert": models.VectorParams(
size=128、
distance=models.Distance.COSINE、
multivector_config=models.MultiVectorConfig(
comparator=models.MultiVectorComparator.MAX_SIM
),
)
}
)
⚠️ 正しい設定 マルチベクター設定
パラメータは、QdrantでColBERTモデルを使用する際の鍵となる。
マルチベクトル集合への文書の挿入
インポートリクエスト
from qdrant_client import QdrantClient, models
url = 'https://api.jina.ai/v1/multi-vector'
ヘッダ = {
'Authorization': 'ベアラ '
}
データ = {
'input': [
'ここにテキストを入力してください', 'input_type'.
'各テキストは最大8192トークンです。
]
}
response = requests.post(url, headers=headers, json=data)
行 = response.json()["データ"].
qdrant_client = QdrantClient(
url=""、
api_key=""、
)
for i, row in enumerate(rows):
qdrant_client.upsert(
コレクション名="{コレクション名}"、
points=[
models.PointStruct(
id=i.
vector=row["embeddings"]、
payload={"text": data["input"][i]}
)
]
)
(クエリーセット
from qdrant_client import QdrantClient, models
インポートリクエスト
url = 'https://api.jina.ai/v1/multi-vector'
headers = {
'Content-Type': 'application/json', 'Authorisation': 'ベアラ '
'Authorization': 'ベアラ '
}
data = {
'model': 'jina-colbert-v2', 'input_type'.
'input_type': 'query', 'embedding_type': 'float', 'query', '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=""、
api_key=""、
)
results = qdrant_client.query_points(
コレクション名="{コレクション名}"、
query=vector, )
)
print(results)
概要
その前身に基づき、jina-colbert-v2は89の世界的な言語とエンベッディング出力寸法の幅広い選択をカバーし、ユーザーが精度と効率のニーズを柔軟にバランスさせ、計算と時間のコストを節約することができます。https://jina.ai をクリックして、今すぐお試しください。