existieren RAG Domäne wird das Multivektormodell ColBERT verwendet, um das Dokument zu modellieren, indem ein einziger Vektor für jede der Dokumentenelemente Token Die Generierung unabhängiger Vektoren bringt eine Verbesserung der Abrufgenauigkeit. Sie führt jedoch auch zu einem drastischen Anstieg des Speicherbedarfs und unterstützt nur die englische Sprache, was ihren Anwendungsbereich einschränkt.
Um diese Probleme anzugehen, haben wir die Architektur und den Trainingsprozess von ColBERT verbessert und insbesondere einen Durchbruch bei der mehrsprachigen Verarbeitung erzielt. Das neueste Jina-ColBERT-v2 unterstützt 89 Sprachen und führt eine Option für benutzerdefinierte Ausgabedimensionen ein, die den Speicherbedarf erheblich reduziert und die Effizienz und Genauigkeit des mehrsprachigen Abrufs verbessert.
Die wichtigsten Highlights der neuen Version
-
Leistungsverbesserung6,51 TP3T Verbesserung der englischen Suchleistung im Vergleich zum ursprünglichen ColBERT-v2 und 5,41 TP3T im Vergleich zu seinem Vorgänger jina-colbert-v1-de. -
Unterstützung mehrerer SprachenDie neue Version unterstützt bis zu 89 Sprachen, darunter Arabisch, Chinesisch, Englisch, Japanisch, Russisch und andere Sprachen, sowie Programmiersprachen. -
Abmessungen der Ausgabe können individuell angepasst werdenDie neue Version verwendet Matryoshka Representation Learning (MRL) mit 128, 96 und 64 dimensionalen Ausgangsvektoren, so dass der Benutzer die geeignete Dimensionalität entsprechend seinen Bedürfnissen wählen kann.
Der vollständige technische Bericht ist auf arXiv zu finden: https://arxiv.org/abs/2408.16672
jina-colbert-v2 leistung auf einen blick
In Bezug auf die Retrievalleistung zeigt jina-colbert-v2 einen deutlichen Vorteil gegenüber der Vorgängerversion, sowohl in Bezug auf englische Retrievalaufgaben als auch auf die Unterstützung mehrerer Sprachen. Die Vorteile dieses Multi-Vektor-Modells können auch mit der von Jina AI übernommenen Eingabelänge von 8192 Token voll ausgeschöpft werden. Unten finden Sie einen Vergleich mit anderen Versionen, bei dem die wichtigsten Verbesserungen deutlich zu erkennen sind:
jina-colbert-v2 |
jina-colbert-v1-en |
Original ColBERTv2 | |
---|---|---|---|
Durchschnitt der englischen BEIR-Aufgaben | 0.521 | 0.494 | 0.489 |
Unterstützung mehrerer Sprachen | 89 Sprachen | Nur Englisch | Nur Englisch |
Ausgangsmaß | 128, 96 oder 64 | Festgelegt 128 | Festgelegt 128 |
Maximale Abfragelänge | 32 Token | 32 Spielsteine | 32 Spielsteine |
Maximale Dokumentlänge | 8192 Wertmarken | 8192 Wertmarken | 512 Spielsteine |
Anzahl der Parameter | 560 Millionen | 137 Millionen | 110 Millionen |
Modellgröße | 1,1 GB | 550MB | 438MB |
1. die Leistungsverbesserung
In der englischen Retrievalaufgabe übertrifft jina-colbert-v2 die vorherige Generation von jina-colbert-v1-de und das ursprüngliche ColBERT v2 und nähert sich dem Niveau des AnswerAI-ColBERT-small Modells, das speziell für Englisch entwickelt wurde.
Name des Modells | Durchschnittliche Punktzahl im BEIR-Benchmark-Test für Englisch | Unterstützung mehrerer Sprachen |
---|---|---|
jina-colbert-v2 |
0.521 | Unterstützung mehrerer Sprachen |
jina-colbert-v1-en |
0.494 | Nur Englisch |
ColBERT v2.0 | 0.489 | Nur Englisch |
AntwortAI-ColBERT-klein | 0.549 | Nur Englisch |
2. mehrsprachige Unterstützung
Jina-ColBERT-v2 ist das einzige ColBERT-Modell, das mehrere Sprachen unterstützt.Das Ergebnis ist ein sehr kompakter Einbettungsvektor, der deutlich besser ist als der herkömmliche. BM25 Retrieval-Methoden (in allen von MIRACL bewerteten Sprachen).
jina-colbert-v2
Der Trainingskorpus deckt 89 Sprachen ab und umfasst 450 Millionen schwach überwachte semantisch verwandte Satzpaare, Frage-Antwort-Paare und Anfrage-Dokument-Paare. Die Hälfte davon ist in englischer Sprache, und der verbleibende Teil umfasst 29 verschiedene nicht-englische Sprachen, zusätzlich zu 3,0% an Programmiersprachdaten und 4,3% an sprachübergreifenden Daten.
Wir haben uns auch spezialisiert auf Arabisch, Chinesisch, Französisch, Deutsch, Japanisch, Russisch, Spanisch und andere gängige Sprachen im Gesang antworten Programmiersprache Es wurde ein zusätzliches Training durchgeführt, das das Modell in die Lage versetzte, sprachübergreifende Aufgaben gut zu bewältigen, indem ein zweisprachiger Textkorpus eingeführt wurde.
Die folgende Abbildung zeigt die Ergebnisse des Leistungsvergleichs zwischen Jina-ColBERT-v2 und BM25 auf 16 Sprachen im MIRACL-Benchmark.
3. russische Schachtelpuppen-Darstellung lernen
Matrjoschka-Repräsentationslernen (MRL) ist eine flexible und effiziente Trainingsmethode, die den Genauigkeitsverlust minimiert und gleichzeitig verschiedene Dimensionen des Ausgabevektors unterstützt. Sie wird durch die Einführung mehrerer linearer Schichten in der verborgenen Schicht des Modells implementiert, wobei jede Schicht eine andere Dimension verarbeitet. Weitere Einzelheiten zu dieser Technik finden Sie unter: https://arxiv.org/abs/2205.13147
Standardmäßig wird dieJina-ColBERT-v2 generiert 128-dimensionale Einbettungen, aber Sie können auch kürzere Vektoren wählen, z. B. 96 oder 64 Dimensionen.. Selbst wenn der Vektor um 25% oder 50% gekürzt wird, ist die Auswirkung auf die Leistung fast vernachlässigbar (der Rückgang beträgt weniger als 1,5%). Mit anderen Worten: Egal, wie lang die Vektoren sein müssen, das Modell behält seine effiziente und genaue Leistung bei.
Die folgende Tabelle zeigt die Leistung von Jina-ColBERT-v2 bei den zehn besten Ergebnissen (nDGC@10) dieser sechs BEIR-Benchmarks. Es ist zu erkennen, dass dieDer Leistungsunterschied zwischen 128 und 96 Dimensionen beträgt weniger als 11 TP3T, während der Unterschied zwischen 128 und 64 Dimensionen weniger als 1,51 TP3T beträgt.
Ausgangsmaß | Durchschnittliche Punktzahl (nDGC@10 für 6 Benchmarks) |
---|---|
128 | 0.565 |
96 | 0.558 |
64 | 0.556 |
Die folgende Abbildung veranschaulicht die Leistung von Jina-ColBERT-v2 bei unterschiedlichen Ausgangsgrößen.
Die Wahl kleinerer Ausgangsvektoren spart nicht nur Speicherplatz, sondern verbessert auch die Rechengeschwindigkeit, insbesondere in Szenarien, in denen Vektoren verglichen oder Abstände berechnet werden müssen, wie z. B. bei Vektorabrufsystemen.
Laut dem Cloud Cost Estimator von Qdrant belaufen sich die Kosten für die Speicherung von 100 Millionen Dokumenten auf AWS unter Verwendung von 128-dimensionalen Vektoren auf 1.319,24 US-Dollar pro Monat, während sich die Kosten mit 64-dimensionalen Vektoren auf 659,62 US-Dollar pro Monat halbieren lassen. Das ist nicht nur ein Geschwindigkeitsschub, sondern auch eine erhebliche Kostenreduzierung.
Wie man mit Jina ColBERT v2 anfängt
Jina ColBERT v2 ist jetzt auf der Jina Search Foundation API, dem AWS Marketplace und den Azure-Plattformen verfügbar. Es ist auch unter der CC BY-NC-4.0-Lizenz auf der Gesicht umarmen Auf der offenen Quelle für nicht-kommerzielle Nutzung.
-
AWS-Marktplatz: https://aws.amazon.com/marketplace/seller-profile?id=seller-stch2ludm6vgy -
Azurblau: https://azuremarketplace.microsoft.com/en-gb/marketplace/apps?search=Jina -
Gesicht umarmen: https://huggingface.co/jinaai/jina-colbert-v2
über Jina Search Foundation API
zum Einbetten
Die Verwendung der Jina Embedding API für die Einbettung von jina-colbert-v2 ist der einfachste und direkteste Weg.
Zwei Schlüsselparameter:
dimensions
Gibt die Ausgabedimension der Einbettung an. Die Standardeinstellung ist 128, Sie können auch 64 wählen.
input_type
: bestimmt die Art der Eingabe.query
ist auf 32 Token begrenzt, die automatisch abgeschnitten werden, und die document
Die Dokumentenkodierung kann offline verarbeitet werden, so dass zum Zeitpunkt der Abfrage nur der Abfrageteil der Abfrage kodiert werden muss, was die Verarbeitungsgeschwindigkeit erheblich verbessern kann.
Der Jina API Key ist unter jina.ai/embeddings verfügbar.
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 个标记"
]}'
Für Reranker
So verwenden Sie die Jina Reranker API über die jina-colbert-v2
Um dies zu tun, eine Abfrage und mehrere Dokumente zu übergeben und einen Rerankable Match Score zurückzugeben, konstruieren Sie die folgende Anfrage:
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年在德国第一电视台的晚间节目中播出。导演包括弗朗茨斯卡·迈耶·普莱斯、克里斯托夫·施内、斯文·温特瓦尔特和蒂图斯·塞尔格。"
]
}'
Beachten Sie auch. top_n
der die Anzahl der Dokumente angibt, die bei der Suche zurückgegeben werden sollen. Wenn Sie nur die optimalen Treffer benötigen, können Sie den Parameter top_n
Auf 1 setzen.
Weitere Codebeispiele in Python oder anderen Sprachen finden Sie auf der Seite https://jina.ai/embeddings, oder wählen Sie aus dem Dropdown-Menü unter https://jina.ai/reranker/ jina-colbert-v2
.
Über Stanford ColBERT
Wenn Sie die Stanford-ColBERT-Bibliothek verwendet haben, können Sie sie jetzt nahtlos durch die Jina-ColBERT-v2-Version ersetzen. Geben Sie einfach die jinaai/jina-colbert-v2
als Modellquelle.
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)
Über RAGatouille
Jina ColBERT v2 ist auch in das RAGatouille-System integriert, und zwar über die RAGPretrainedModel.from_pretrained()
Die Methode ist einfach herunterzuladen und anzuwenden.
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)
über Qdrant
Ab Qdrant Version 1.10 unterstützt Qdrant Multivektoren und das Late-Interaction-Modell, das Sie direkt mit jina-colbert-v2 verwenden können. Unabhängig davon, ob Sie Qdrant lokal oder in der Cloud gehostet einsetzen, können Sie Dokumente in eine Multivektor-Sammlung einfügen, indem Sie den Parameter multivector_config im Client korrekt konfigurieren.
Erstellen einer neuen Sammlung mit der Operation 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
),
)
}
)
⚠️ Richtige Einstellung multivector_config
Die Parameter sind der Schlüssel zur Verwendung des ColBERT-Modells in Qdrant.
Einfügen eines Dokuments in einen Multivektorsatz
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]}
)
],
)
(Berechnungs-)Abfragemenge
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)
Zusammenfassungen
Basierend auf seinem Vorgänger deckt jina-colbert-v2 89 globale Sprachen und eine große Auswahl an Einbettungsausgabedimensionen ab, die es dem Benutzer ermöglichen, die Anforderungen an Genauigkeit und Effizienz flexibel auszugleichen und Berechnungs- und Zeitkosten zu sparen. Klicken Sie auf https://jina.ai, um es jetzt auszuprobieren und 1 Million Token gratis zu erhalten.