Guide de migration de Jina Embeddings v2 à v3

Jina Embeddings v2 到 v3 的迁移指南

 

Jina Embeddings v3 Notre dernier modèle de vecteur de texte de haut niveau de 570 millions de paramètres permet d'obtenir la meilleure SOTA de sa catégorie pour les tâches de recherche de textes longs et multilingues.

La v3 n'est pas seulement plus puissante, mais elle offre également un grand nombre de nouvelles fonctionnalités intéressantes. Si vous utilisez encore Jina Embeddings v2, qui a été publié en octobre 2023, nous vous recommandons vivement de migrer vers la v3 dès que possible.

Commençons par un bref aperçu des points forts de Jina Embeddings v3 :

  • Prise en charge de 89 langues La version 2 du logiciel permet de traiter quelques langues bilingues seulement et de réaliser un véritable traitement de texte multilingue.
  • Adaptateur Lora intégréLa v2 est un modèle d'intégration générique, tandis que la v3 intègre un adaptateur Lora qui génère des vecteurs optimisés spécifiquement pour vos tâches de recherche, de classification, de regroupement et autres, afin d'améliorer les performances.
  • La recherche de texte long est plus précise : : v3 utilisation de 8192 jeton La technique de regroupement tardif, qui génère des vecteurs de blocs contenant des informations contextuelles plus riches, peut améliorer de manière significative la précision de l'extraction de textes longs.
  • Les dimensions du vecteur sont flexibles et contrôlables Les dimensions des vecteurs de : v3 peuvent être ajustées de manière flexible afin de trouver un équilibre entre les performances et l'espace de stockage, en évitant les frais généraux de stockage élevés associés aux vecteurs de haute dimension. Cela est possible grâce à l'apprentissage par représentation de Matryoshka (MRL).

Lien vers le modèle open source : https://huggingface.co/jinaai/jina-embeddings-v3

Lien API du modèle : https://jina.ai/?sui=apikey

Lien vers le document modèle : https://arxiv.org/abs/2409.10173

 

Guide de migration rapide

  • v3 est un tout nouveau modèle, les vecteurs et les index de v2 ne peuvent donc pas être réutilisés directement, et vous devez réindexer les données à nouveau.
  • Dans la plupart des scénarios (96%), la v3 est nettement plus performante que la v2, tandis que la v2 n'est qu'occasionnellement à égalité avec la v3, voire légèrement plus performante, dans la tâche de résumé en anglais. Toutefois, compte tenu de la prise en charge multilingue et des fonctionnalités avancées de la v3, cette dernière devrait être préférée dans la plupart des scénarios.
  • L'API v3 comprend désormais task,dimensions répondre en chantant late_chunking Trois paramètres, dont l'utilisation exacte peut être trouvée dans notre article de blog.

Ajustement dimensionnel

  • Par défaut, v3 produit un vecteur à 1024 dimensions, alors que v2 n'en a que 768. Grâce à l'apprentissage de la représentation Matryoshka, v3 peut théoriquement produire n'importe quelle dimension. Les développeurs peuvent définir la valeur dimensions Les paramètres permettent de contrôler de manière flexible la dimensionnalité des vecteurs de sortie afin de trouver le meilleur équilibre entre le coût de stockage et la performance.
  • Si votre projet précédent a été développé sur la base de l'API v2, changez le nom du modèle directement en jina-embeddings-v3 n'est pas possible car les dimensions par défaut ont changé. Si vous souhaitez que la structure ou la taille des données soit cohérente avec la v2, vous pouvez définir la valeur de l'attribut dimensions=768Même si les dimensions sont les mêmes. Même si les dimensions sont les mêmes, les vecteurs de v3 et v2 ont des distributions complètement différentes sur l'espace sémantique et ne peuvent donc pas être utilisés directement de manière interchangeable.

Remplacement du modèle

  • Le support multilingue de la v3 a remplacé le modèle bilingue de la v2 (v2-base-de, v2-base-es, v2-base-zh).
  • Pour les tâches de codage pur, jina-embeddings-v2-based-code reste le meilleur choix. Les tests montrent qu'il obtient un score de 0,7753, contre 0,7537 pour les vecteurs génériques v3 (pas d'ensemble de tâches) et 0,7564 pour l'adaptateur LoRA, ce qui donne à l'encodage v2 une avance de performance d'environ 2,81 TP3T par rapport à la v3.

Paramètres de la mission

  • L'API v3 génère des vecteurs génériques de bonne qualité lorsque le paramètre de tâche n'est pas spécifié, mais il est fortement recommandé de définir le paramètre de tâche en fonction du type de tâche spécifique pour obtenir une meilleure représentation vectorielle.
  • Pour que la v3 émule le comportement de la v2, utilisez l'option task="text-matching"Nous recommandons d'essayer différentes options de tâches pour trouver la meilleure solution, mais pas de remplacer la text-matching En tant que programme universel.
  • Si votre projet utilise la v2 pour la recherche d'informations, il est recommandé de passer à la v3 pour le type de tâche de recherche (retrieval.passage répondre en chantant retrieval.query), il est possible d'obtenir de meilleurs résultats en matière de recherche.

Autres considérations

  • Pour les nouveaux types de tâches (qui sont rares), essayez de définir le paramètre de la tâche sur None comme point de départ.
  • Si vous avez utilisé la technique de réécriture des étiquettes dans la version 2 pour les tâches de classification à zéro échantillon, vous pouvez, dans la version 3, définir simplement l'attribut task="classification" Des résultats similaires sont obtenus parce que la v3 a optimisé la représentation vectorielle pour la tâche de classification.
  • Les versions 2 et 3 prennent toutes deux en charge des contextes allant jusqu'à 8192 jetons, mais la version 3 est plus efficace, grâce à la technologie FlashAttention2, et prépare le terrain pour la fonction de notation tardive de la version 3.
Jina Embeddings v2 到 v3 的迁移指南

 

Chunking tardif

  • La v3 introduit une fonction de découpage tardif, qui utilise 8192 tokens pour former un long contexte, puis le divise en vecteurs, de sorte que chaque petit morceau contienne des informations contextuelles, ce qui rend la recherche naturellement plus précise.
  • late_chunking Elle n'est actuellement disponible que dans l'API, donc si vous exécutez des modèles localement, vous ne pourrez pas utiliser cette fonctionnalité avant un certain temps.
  • commencer à utiliser late_chunking La longueur du texte de chaque demande ne peut excéder 8192 tokens, car la v3 ne peut traiter qu'une quantité limitée de contenu à la fois.

Performance et rapidité

  • En termes de rapidité, même si la v3 comporte trois fois plus de paramètres que la v2, l'inférence est plus rapide que la v2 ou au moins égale, principalement grâce à la technologie FlashAttention2.
  • Tous les GPU ne supportent pas FlashAttention2. La v3 fonctionnera toujours si vous utilisez un GPU qui ne le supporte pas, mais elle peut être légèrement plus lente que la v2.
  • Lors de l'utilisation de l'API, des facteurs tels que la latence du réseau, les limitations de débit et les zones de disponibilité affectent également la latence, de sorte que la latence de l'API ne reflète pas entièrement les performances réelles du modèle v3.

Contrairement à la version 2, Jina Embeddings v3 est sous licence CC BY-NC 4.0. La v3 peut être utilisée commercialement via notre API, AWS ou Azure. La recherche et l'utilisation non commerciale ne posent aucun problème. Pour un déploiement commercial local, veuillez contacter notre équipe commerciale pour obtenir une licence :

https://jina.ai/contact-sales

 

Prise en charge multilingue

v3 est actuellement le premier modèle vectoriel multilingue de l'industrie** et est classé deuxième dans les tableaux M****TEB pour les modèles ayant moins d'un milliard de paramètres. **Il prend en charge 89 langues, couvrant la plupart des langues principales du monde.

Il s'agit des langues suivantes : chinois, anglais, japonais, coréen, allemand, espagnol, français, arabe, bengali, danois, néerlandais, finnois, géorgien, grec, hindi, indonésien, italien, letton, norvégien, polonais, portugais, roumain, russe, slovaque, suédois, thaïlandais, turc, ukrainien, ourdou et vietnamien. Turc, ukrainien, ourdou et vietnamien.

Si vous utilisiez auparavant les modèles anglais, anglais/allemand, anglais/espagnol ou anglais/chinois de la v2, il vous suffit désormais de modifier le fichier model et sélectionner les paramètres appropriés. task vous pouvez facilement passer à la v3.

# v2 英语-德语

data = {
    "model": "jina-embeddings-v2-base-de",
    "input": [
        "The Force will be with you. Always.",
        "Die Macht wird mit dir sein. Immer.",
        "The ability to destroy a planet is insignificant next to the power of the Force.",
        "Die Fähigkeit, einen Planeten zu zerstören, ist nichts im Vergleich zur Macht der Macht."
    ]
}
# v3 多语言

data = {
    "model": "jina-embeddings-v3",
    "task": "retrieval.passage",
    "input": [
        "The Force will be with you. Always.",
        "Die Macht wird mit dir sein. Immer.",
        "力量与你同在。永远。",
        "La Forza sarà con te. Sempre.",
        "フォースと共にあらんことを。いつも。"
    ]
}

response = requests.post(url, headers=headers, json=data)

 

Représentation vectorielle spécifique à une tâche

v2 utilise une représentation vectorielle générique, c'est-à-dire que toutes les tâches partagent le même modèle. v3 fournit des représentations vectorielles spécialement optimisées pour différentes tâches (recherche, classification, regroupement, etc.) afin d'améliorer les performances dans des scénarios spécifiques.

Sélectionnez différents task ce qui revient à indiquer au modèle les caractéristiques pertinentes pour cette tâche à extraire, générant ainsi une représentation vectorielle mieux adaptée aux exigences de la tâche.

Voici un exemple de la base de connaissances Lightsaber Repair, qui montre comment migrer le code v2 vers la v3 et bénéficier des gains de performance offerts par les représentations vectorielles spécifiques aux tâches :

# 实际项目中我们会使用更大的数据集,这个只是示例
knowledge_base = [
    "为什么我的光剑刀锋在闪烁?刀锋闪烁可能表示电池电量不足或不稳定的水晶。请为电池充电并检查水晶的稳定性。如果闪烁持续,可能需要重新校准或更换水晶。",
    "为什么我的刀锋比以前暗淡?刀锋变暗可能意味着电池电量低或电源分配有问题。首先,请为电池充电。如果问题仍然存在,可能需要更换LED。",
    "我可以更换我的光剑刀锋颜色吗?许多光剑允许通过更换水晶或使用剑柄上的控制面板更改颜色设置来自定义刀锋颜色。请参阅您的型号手册以获得详细说明。",
    "如果我的光剑过热,我该怎么办?过热可能是由于长时间使用导致的。关闭光剑并让其冷却至少10分钟。如果频繁过热,可能表明内部问题,需由技术人员检查。",
    "如何为我的光剑充电?通过剑柄附近的端口,将光剑连接到提供的充电线,确保使用官方充电器以避免损坏电池和电子设备。",
    "为什么我的光剑发出奇怪的声音?奇怪的声音可能表示音响板或扬声器有问题。尝试关闭光剑并重新开启。如果问题仍然存在,请联系我们的支持团队以更换音响板。"
]
query = "光剑太暗了"

Pour la v2, il n'y a qu'une seule tâche (correspondance de texte), nous n'avons donc besoin que d'un seul exemple de bloc de code :

# v2 代码:使用文本匹配任务对知识库和查询进行编码
data = {
    "model": "jina-embeddings-v2-base-en",
    "normalized": True,  # 注意:v3 中不再需要此参数
    "input": knowledge_base
}

docs_response = requests.post(url, headers=headers, json=data)

data = {
    "model": "jina-embeddings-v2-base-en",
    "task": "text-matching",
    "input": [query]
}

query_response = requests.post(url, headers=headers, json=data)

v3 fournit des représentations vectorielles optimisées pour des tâches spécifiques, notamment la recherche, la séparation, la classification et la mise en correspondance de textes.

Représentation vectorielle de la tâche de recherche

Nous utilisons une base de connaissances simple de réparation de sabres laser comme exemple pour démontrer la différence entre v2 et v3 dans le cadre de tâches de recherche de texte.

Pour les tâches de recherche sémantique, la v3 introduit un encodage asymétrique utilisant, respectivement, le retrieval.passage répondre en chantant retrieval.query Codage des documents et des requêtes pour améliorer les performances et la précision de la recherche.

Codage des documents : retrieval.passage

data = {
    "model": "jina-embeddings-v3",
    "task": "retrieval.passage", # "task" 参数是 v3 中的新功能
    "late_chunking": True,
    "input": knowledge_base
}

response = requests.post(url, headers=headers, json=data)

Code d'interrogation : retrieval.query

data = {
    "model": "jina-embeddings-v3",
    "task": "retrieval.query",
    "late_chunking": True,
    "input": [query]
}

response = requests.post(url, headers=headers, json=data)

Note : Le code ci-dessus active la fonctionlate_chunkingqui peut améliorer l'encodage de textes longs, nous la présenterons en détail plus loin.

 

Comparons les performances de v2 et v3 pour la requête "les sabres laser sont trop sombres". v2 renvoie un ensemble de résultats moins pertinents sur la base de la similarité cosinusoïdale, comme indiqué ci-dessous :

Jina Embeddings v2 到 v3 的迁移指南

 

En revanche, la version 3 comprend mieux l'intention de la requête et renvoie des résultats plus précis concernant l'apparence des lames de sabre laser, comme le montre l'illustration ci-dessous.

Jina Embeddings v2 到 v3 的迁移指南

v3 ne se contente pas de faire de la recherche, mais fournit également plusieurs autres représentations vectorielles spécifiques à certaines tâches :

Représentation vectorielle des tâches de séparation

v3 separation Les tâches sont optimisées pour les tâches de séparation telles que le regroupement, le reclassement, etc., par exemple la séparation de différents types d'entités, ce qui est utile pour l'organisation et la visualisation de grands corpus.

Exemple : Distinguer les personnages de Star Wars et de Disney

data = {
    "model": "jina-embeddings-v3",
    "task": "separation",  # 使用 separation 任务
    "late_chunking": True,
    "input": [
        "Darth Vader",
        "Luke Skywalker",
        "Mickey Mouse",
        "Donald Duck"
    ]
}

response = requests.post(url, headers=headers, json=data)

Représentation vectorielle des tâches de classification

v3 classification La tâche est optimisée pour les tâches de catégorisation de texte telles que l'analyse des sentiments et la classification des documents, par exemple la classification des textes en commentaires positifs et négatifs.

Exemple : analyse des tendances émotionnelles des critiques de films Star Wars

data = {
    "model": "jina-embeddings-v3",
    "task": "classification",
    "late_chunking": True,
    "input": [
        "《星球大战》是一部划时代的杰作,彻底改变了电影业,并永远重新定义了科幻电影!",
        "《星球大战》拥有令人惊叹的视觉效果、令人难忘的角色和传奇的叙事,是一部无与伦比的文化现象。",
        "《星球大战》是一场过度炒作的灾难,充满了浅薄的角色,毫无有意义的情节!",

}

response = requests.post(url, headers=headers, json=data)

Représentation vectorielle de la concordance des textes

v3 text-matching Se concentrer sur des tâches de similarité sémantique telles que la similarité des phrases ou la désaccentuation, par exemple en excluant les phrases ou les paragraphes répétés.

Exemple : Identifier les répétitions dans les répliques de Star Wars

data = {
    "model": "jina-embeddings-v3",
    "task": "text-matching",
    "late_chunking": True,
    "input": [
        "Luke, I am your father.",
        "No, I am your father.",
        "Fear leads to anger, anger leads to hate, hate leads to the dark side.",
        "Fear leads to anger. Anger leads to hate. Hate leads to suffering."
    ]
}

response = requests.post(url, headers=headers, json=data)

 

Chunking tardif : amélioration de l'encodage des textes longs

v3 introduit la late_chunking lorsque le paramètre late_chunking=True Lorsque le modèle traite l'ensemble du document et le divise ensuite en plusieurs blocs afin de générer des vecteurs de blocs contenant des informations contextuelles complètes ; lorsque le modèle de l late_chunking=False Lorsque le modèle traite chaque bloc indépendamment, les vecteurs de bloc générés ne contiennent pas d'informations contextuelles entre les blocs.

prendre note

  • commencer à utiliser late_chunking=True Le nombre total de jetons par demande d'API ne peut dépasser 8192, ce qui correspond à la longueur maximale du contexte prise en charge par la v3.
  • late_chunking=FalseLe nombre total de jetons n'est pas limité, mais il est soumis à la limite de taux de l'API Embeddings.

Pour le traitement de textes longs, activez la fonction late_chunkingpeut améliorer de manière significative les résultats du codage, car il préserve les informations contextuelles entre les morceaux et rend la représentation vectorielle générée plus complète et plus précise.

Nous avons utilisé la transcription d'un chat pour évaluer late_chunking Impact sur l'efficacité de la recherche de textes longs.

history = [
    "Sita,你决定好周六生日晚餐要去哪儿了吗?",
    "我不确定,对这里的餐厅不太熟悉。",
    "我们可以上网看看推荐。",
    "那听起来不错,我们就这么办吧!",
    "你生日那天想吃什么类型的菜?",
    "我特别喜欢墨西哥菜或者意大利菜。",
    "这个地方怎么样,Bella Italia?看起来不错。",
    "哦,我听说过那个地方!大家都说那儿很好!",
    "那我们订张桌子吧?",
    "好,我觉得这会是个完美的选择!我们打电话预定吧。"
]

 

En utilisant la v2 pour la requête "Quels sont les bons restaurants recommandés ?" les résultats obtenus ne sont pas particulièrement pertinents.

Jina Embeddings v2 到 v3 的迁移指南

 

Avec la v3 et sans activation du découpage tardif, les résultats sont tout aussi insatisfaisants.

Jina Embeddings v2 到 v3 的迁移指南

 

Cependant, lorsque l'on utilise la v3 et que l'on active la fonction late chunking Lorsque le résultat le plus pertinent (une bonne recommandation de restaurant) était classé exactement en première position.

Jina Embeddings v2 到 v3 的迁移指南

 

Résultats de la recherche :

Jina Embeddings v2 到 v3 的迁移指南

 

Les résultats de la recherche montrent clairement que l'habilitation late_chunking Ensuite, v3 est en mesure d'identifier plus précisément les chats correspondant à la requête, en classant les résultats les plus pertinents en premier.

Elle montre également que late_chunking<span> </span>La précision de la recherche de textes longs peut être améliorée de manière efficace et efficiente, en particulier dans les scénarios qui nécessitent une compréhension approfondie de la sémantique contextuelle.

Représentation de l'efficacité de l'équilibrage et de la performance à l'aide de vecteurs russes imbriqués

v3 Adopté dimensions Le paramètre prend en charge le contrôle flexible de la dimension du vecteur, vous pouvez ajuster la dimension du vecteur de sortie en fonction de la demande réelle et trouver un équilibre entre la performance et l'espace de stockage.

Des dimensions vectorielles plus petites peuvent réduire la charge de stockage des bases de données vectorielles et améliorer la vitesse de recherche, mais certaines informations peuvent être perdues, ce qui entraîne une dégradation des performances.

data = {
    "model": "jina-embeddings-v3",
    "task": "text-matching",
    "dimensions": 768,  # 设置向量维度为 768,默认值为 1024
    "input": [
        "The Force will be with you. Always.",
        "力量与你同在。永远。",
        "La Forza sarà con te. Sempre.",
        "フォースと共にあらんことを。いつも。"
    ]
}

response = requests.post(url, headers=headers, json=data)

problèmes courants

Q1 : Quels sont les avantages de l'utilisation du Late Chunking si j'ai déjà découpé le document en morceaux avant la vectorisation ?

A1 : L'avantage du fractionnement tardif par rapport au fractionnement préalable est la possibilité de Traite l'ensemble du document avant le découpage, ce qui permet de conserver des informations contextuelles plus complètes. . La segmentation tardive est importante pour le traitement de documents complexes ou longs ; elle peut contribuer à fournir une réponse plus pertinente lors de la recherche, car le modèle a une compréhension globale du document avant la segmentation. En revanche, les blocs de pré-segmentation sont traités indépendamment des blocs sans contexte complet.

Q2 : Pourquoi la v2 a-t-elle un score de référence plus élevé que la v3 pour la tâche de classification par paire ? Dois-je m'inquiéter ?

A2 : les scores apparemment plus élevés de v2 pour la tâche de classification par paire sont principalement dus au fait que les scores moyens sont calculés différemment. L'ensemble de test de v3 contient plus de langues, de sorte que ses scores moyens sont susceptibles d'être inférieurs à ceux de v2. En fait, v3 obtient des résultats aussi bons, voire meilleurs, que les modèles de pointe tels que multilingual-e5 pour la tâche de classification par paire dans toutes les langues.

Q3 : La v3 est-elle plus performante dans les langues spécifiques prises en charge par le modèle bilingue v2 ?

A3 : Comparaison des performances des modèles bilingues v3 et v2 dans des langues spécifiques Dépend de la langue spécifique et du type de tâche Le modèle bilingue de la v2 est fortement optimisé pour des langues spécifiques et peut donc être plus performant pour certaines tâches spécifiques. Cependant, la v3 est conçue pour prendre en charge un plus large éventail de scénarios multilingues, avec une généralisation interlinguistique plus forte et optimisée pour une variété de tâches en aval grâce à des adaptateurs LoRA spécifiques à certaines tâches. Par conséquent, la v3 obtient généralement de meilleures performances globales dans plusieurs langues ou dans des scénarios plus complexes spécifiques à une tâche, tels que la recherche sémantique et la catégorisation de textes.

Si vous ne devez traiter qu'une seule langue spécifique prise en charge par le modèle bilingue v2 (chinois-anglais, anglais-allemand, espagnol-anglais) et que votre tâche est relativement simple, la v2 reste un bon choix et peut même s'avérer plus performante dans certains cas.

Cependant, si vous devez traiter plusieurs langues ou si votre tâche est plus complexe (par exemple, si vous devez effectuer une recherche sémantique ou une classification de texte), la v3, avec ses fortes capacités de généralisation inter-langues et ses stratégies d'optimisation basées sur les tâches en aval, est un meilleur choix.

Q4 : Pourquoi la v2 est-elle plus performante que la v3 dans les tâches sommaires et dois-je m'inquiéter ?

A4 : la v2 obtient de meilleurs résultats pour la tâche de résumé, principalement parce que l'architecture de son modèle est spécifiquement optimisée pour des tâches telles que la similarité sémantique, qui est étroitement liée à la tâche de résumé. la v3 a été conçue dans le but de fournir un soutien plus large, en particulier pour les tâches de recherche et de classification, et n'est donc pas aussi bien optimisée que la v2 en ce qui concerne la tâche de résumé.

Cependant, il ne faut pas s'inquiéter outre mesure, car l'évaluation de la tâche de résumé repose actuellement sur SummEval, un test qui mesure la similarité sémantique et ne représente pas entièrement la capacité globale du modèle pour la tâche de résumé. Étant donné que la v3 est performante dans d'autres tâches essentielles telles que la recherche, de légères différences de performance dans la tâche de résumé n'ont généralement pas d'impact significatif sur les applications réelles.

résumés

Jina Embeddings v3 est une mise à jour majeure de notre modèle SOTA, le meilleur de sa catégorie, pour les tâches de recherche de textes longs et multilingues. Il est livré avec une variété d'adaptateurs LoRA intégrés qui peuvent être personnalisés pour différents scénarios de recherche, de regroupement, de classification et de correspondance, en fonction de vos besoins pour des résultats de vectorisation plus précis. Nous vous recommandons vivement de migrer vers la v3 dès que possible.

Ce ne sont là que quelques-unes de nos présentations de Jina Embeddings v3. Nous espérons qu'elles vous seront utiles. Si vous avez des questions, n'hésitez pas à laisser un commentaire pour en discuter !

© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...