Jina Embeddings v3 最新の5億7000万パラメータを持つトップレベル・テキスト・ベクトル・モデルは、多言語・長文検索タスクにおいて現在クラス最高のSOTAを達成。
v3はより強力になっただけでなく、新しくエキサイティングな機能をたくさん備えています。2023年10月にリリースされたJina Embeddings v2をまだお使いの方は、できるだけ早くv3に移行されることを強くお勧めします。
まずは、Jina Embeddings v3のハイライトを簡単に紹介しよう:
- 89言語をサポート v2が数カ国語しか扱えないという制約を打破し、真の多言語テキスト処理を実現。
- ローラ・アダプター内蔵v2は一般的なEmbeddingモデルで、v3は検索、分類、クラスタリング、その他のタスクに最適化されたベクトルを生成するLora Adapterを内蔵しています。
- 長文検索はより正確 :: 8192のV3利用 トークン より豊富な文脈情報を持つブロックベクトルを生成するレイトチャンキング技術は、長文検索の精度を大幅に向上させることができる。
- ベクトル寸法は柔軟で制御可能 v3のベクトル次元は、パフォーマンスと記憶容量のバランスを取るために柔軟に調整することができ、高次元ベクトルに伴う高い記憶容量のオーバーヘッドを回避することができる。これはマトリョーシカ表現学習(MRL)によって実現されています。
オープンソースモデルへのリンク:https://huggingface.co/jinaai/jina-embeddings-v3
モデル API リンク:https://jina.ai/?sui=apikey
モデルペーパーへのリンク:https://arxiv.org/abs/2409.10173
クイック移行ガイド
- v3は全く新しいモデルなので、v2のベクトルやインデックスをそのまま再利用することはできず、再度データのインデックスを作成する必要があります。
- ほとんどのシナリオ(96%)において、v3はv2を大きく上回るが、v2は英語の要約タスクにおいてv3と同点、あるいはわずかに上回る程度である。しかし、v3の多言語サポートと高度な機能を考えると、ほとんどのシナリオでv3が好まれるはずである。
- v3 API には以下が含まれるようになりました。
タスク
そして寸法
歌で応えるレイト・チャンキング
3つのパラメータがあり、正確な使い方はブログ記事を参照されたい。
寸法調整
- v3はデフォルトで1024次元のベクトルを出力するが、v2は768次元しかない。マトリョーシカ表現学習により、v3は理論的にはどの次元でも出力できるようになった。開発者は
寸法
パラメータで出力ベクトルの次元数を柔軟に制御し、ストレージ・コストとパフォーマンスの最適なバランスを見つける。 - 以前のプロジェクトがv2 APIに基づいて開発されていた場合は、モデル名を直接次のように変更してください。
ジーナ・エンベディングス-V3
は、デフォルトの寸法が変更されたため不可能です。データ構造やサイズをv2と同じにしたい場合は寸法=768
同じ次元であっても、v3とv2のベクトルの分布は全く異なる。たとえ次元が同じであっても、v3とv2のベクトルは意味空間上で全く異なる分布を持つため、直接互換性を持って使用することはできない。
モデル交換
- v3の強力な多言語サポートは、v2(v2-base-de、v2-base-es、v2-base-zh)のバイリンガルモデルに完全に取って代わりました。
- 純粋なコーディングタスクでは、jina-embeddings-v2-based-codeが依然として最良の選択である。テストによると、v3ジェネリックベクター(タスクセットなし)の0.7537、LoRAアダプターの0.7564と比較して、0.7753という高いスコアを出しており、v2エンコーディングはv3に対して約2.8%の性能リードを与えている。
ミッション・パラメーター
- v3 APIは、タスク・パラメータが指定されていない場合、良質なジェネリック・ベクトルを生成しますが、より良いベクトル表現を得るためには、特定のタスク・タイプに応じてタスク・パラメータを設定することを強く推奨します。
- v3がv2の動作をエミュレートするには
task="テキストマッチング"
最適な解決策を見つけるために、さまざまなタスクオプションを試してみることをお勧めします。テキストマッチング
普遍的なプログラムとして。 - プロジェクトで情報検索にv2を使用している場合、検索タスク・タイプをv3に切り替えることを推奨する(
検索パス
歌で応える検索クエリー
)であれば、より良い検索結果を得ることができる。
その他の考慮事項
- 全く新しいタスクタイプ(これはまれである)の場合、出発点としてタスクパラメーターをNoneに設定してみてください。
- もしv2でゼロサンプル分類タスクにラベル書き換えテクニックを使ったなら、v3では単に
task="分類"
v3が分類タスクのためにベクトル表現を最適化したため、同様の効果が得られる。 - v2もv3も最大8192トークンのコンテキスト長をサポートするが、v3はFlashAttention2テクノロジーのおかげでより効率的であり、v3のレイトスコア機能の基礎を築く。
レイト・チャンキング
- v3では、8192個のトークンを使って長い文脈を形成し、それをベクトルに分割するレイトスプリッティング機能を導入している。
レイト・チャンキング
現在のところAPIでのみ利用可能なので、ローカルでモデルを走らせている場合は、しばらくこの機能を使うことはできない。- 使い始める
レイト・チャンキング
v3は一度に処理できるコンテンツの量が限られているため、各リクエストのテキスト長は8192トークンを超えてはならない。
パフォーマンスとスピード
- スピードの面では、v3はv2の3倍のパラメータを持っているにもかかわらず、推論はv2より速いか、少なくとも同等である。これは主にFlashAttention2テクノロジーによるものである。
- すべてのGPUがFlashAttention2に対応しているわけではありません。対応していないGPUを使用している場合でもv3は動作しますが、v2より若干遅くなる可能性があります。
- APIを使用する場合、ネットワークのレイテンシー、レート制限、アベイラビリティゾーンなどの要因もレイテンシーに影響するため、APIのレイテンシーはv3モデルの真のパフォーマンスを完全に反映するものではない。
v2と異なり、Jina Embeddings v3はCC BY-NC 4.0でライセンスされています。v3は、私たちのAPI、AWS、またはAzureを介して商業的に使用することができます。研究や非商業的な使用は問題ありません。ローカルの商業的な展開については、ライセンスについて私たちの営業チームに連絡してください:
https://jina.ai/contact-sales
多言語サポート
v3は現在、業界をリードする多言語ベクトルモデル**であり、M*****TEBチャートでは、10億以下のパラメータを持つモデルで2位にランクされています。**世界の主要言語のほとんどをカバーする89言語をサポートしています。
中国語、英語、日本語、韓国語、ドイツ語、スペイン語、フランス語、アラビア語、ベンガル語、デンマーク語、オランダ語、フィンランド語、グルジア語、ギリシャ語、ヒンディー語、インドネシア語、イタリア語、ラトビア語、ノルウェー語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、スロバキア語、スウェーデン語、タイ語、トルコ語、ウクライナ語、ウルドゥー語、ベトナム語。トルコ語、ウクライナ語、ウルドゥー語、ベトナム語。
v2の英語モデル、英語/ドイツ語モデル、英語/スペイン語モデル、英語/中国語モデルを使用していた場合は、次のように変更するだけです。 モデル
パラメータを選択し、適切な タスク
タイプであれば、簡単にv3に切り替えることができる。
# v2 英語-ドイツ語
データ = {
"モデル": "ジーナ-埋め込み-v2-ベース-デ",
"入力": [
"について フォース 意志 であります と あなた. 常に.",
"死ぬ マッハ 変 ミット 監督 じしん. イマー.",
"について 能力 への 破壊する a プラネット は 軽微 次のページ への その パワー の その フォース.",
"死ぬ Fäヒガイト, イーネン プラネテン ズー ゼルストöレン, イスト 何も イム 比較 ズア マッハ デア マッハ."
]
}
# v3 マルチリンガル
データ = {
"モデル": "ジーナ-埋め込み-v3",
"タスク": "回収.通路",
"入力": [
"について フォース 意志 であります と あなた. 常に.",
"死ぬ マッハ 変 ミット 監督 じしん. イマー.",
「フォースはあなたとともにある。永遠に。,
"ラ フォルツァ サルà コン ティー. センプレ.",
"フォースと共にあらんこと。いい考えだ。"
]
}
応答 = requests.post(url, headers=headers, json=)データ)
タスク固有のベクトル表現
v2は一般的なベクトル表現を使用し、すべてのタスクが同じモデルを共有する。v3は、特定のシナリオでパフォーマンスを向上させるために、タスク(検索、分類、クラスタリングなど)ごとに最適化されたベクトル表現を提供する。
異なるものを選択する タスク
これは、そのタスクに関連する特徴を抽出するようモデルに指示することと同じで、タスクの要件により適したベクトル表現を生成する。
以下はLightsaber Repair Knowledge Baseの例で、v2のコードをv3に移行し、タスク固有のベクトル表現によるパフォーマンス向上を体験する方法を示している:
# 実際のプロジェクトでは、もっと大きなデータセットを使うことになる。
ナレッジベース = [
「ライトセーバーの刃が点滅するのはなぜですか?ブレードが点滅している場合、バッテリー残量が少ないか、クリスタルが不安定である可能性があります。バッテリーを充電し、クリスタルの安定性を確認してください。点滅が続く場合は、クリスタルの再校正または交換が必要な場合があります。",
「ブレードが以前より暗くなったのはなぜですか?ブレードが薄暗いのは、バッテリー残量が少ないか、配電に問題がある可能性があります。まず、バッテリーを充電してください。それでも問題が解決しない場合は、LEDの交換が必要かもしれません。",
「ライトセーバーのブレードの色は変えられますか?多くのライトセーバーでは、クリスタルを交換したり、ヒルトのコントロールパネルを使って色の設定を変更することで、ブレードの色をカスタマイズすることができます。詳しい手順については、お手持ちのモデルのマニュアルをご参照ください。",
「ライトセーバーがオーバーヒートしたら?オーバーヒートは長時間の使用によって起こります。ライトセーバーのスイッチを切り、少なくとも10分間は冷ましてください。頻繁にオーバーヒートする場合は、技術者による点検が必要な内部問題の可能性があります。",
「ライトセーバーの充電方法は?ライトセーバーを付属の充電ケーブルに接続し、ライトセーバーの柄の近くにあるポートから充電してください。",
「ライトセーバーから変な音がするのはなぜですか?奇妙な音は、サウンドボードまたはスピーカーに問題がある可能性があります。ライトセーバーの電源を切り、再度入れてみてください。それでも問題が解決しない場合は、サウンドボードの交換についてサポートチームまでお問い合わせください。"
]
クエリー = "ライトセーバーは暗すぎる"
v2では、タスクは1つ(テキスト・マッチング)だけなので、コード・ブロックの例は1つだけでよい:
# v2コード:テキストマッチングタスクを用いた知識ベースとクエリの符号化
データ = {
「モデル: "jina-embeddings-v2-base-ja"。,
「ノーマライズド本当です。 # 注:このパラメータはv3では不要となった。
"入力"知識ベース
}
docs_response = requests.post(url, headers=headers, json=data)
データ = {
「モデル: "jina-embeddings-v2-base-ja"。,
「タスク: 「テキストマッチング,
"入力"クエリー
}
query_response = requests.post(url, headers=headers, json=data)
v3は、検索、分離、分類、テキストマッチングなど、特定のタスクに最適化されたベクトル表現を提供する。
検索タスクのベクトル表現
単純なライトセーバー修理知識ベースを例として、テキスト検索タスクを扱う際のv2とv3の違いを示す。
意味検索タスクでは、v3はそれぞれ 検索パス
歌で応える 検索クエリー
検索性能と精度を向上させるために、文書とクエリをコーディングする。
ドキュメントのコーディング: 検索パス
データ = {
「モデル: "jina-embeddings-v3",
「タスク: "検索.通過", # 「タスク パラメータはv3の新機能
"レイト・チャンキング"本当です。
"入力"知識ベース
}
response = requests.post(url, headers=headers, json=)データ)
クエリーコード 検索クエリー
データ = {
「モデル: "jina-embeddings-v3",
「タスク: "検索.クエリー",
"レイト・チャンキング"本当です。
"入力"クエリー
}
レスポンス = requests.post(url、ヘッダー=ヘッダー、json=データ)
注:上記のコードはレイト・チャンキング
関数は、長いテキストのエンコーディングを強化するもので、後で詳しく紹介する。
ライトセーバーは暗すぎる」というクエリに対するv2とv3のパフォーマンスを比較してみましょう。v2は、コサイン類似度に基づき、以下のように関連性の低いマッチのセットを返します:
対照的に、v3はクエリの意図をよりよく理解し、以下に示すように、「ライトセーバーの刃の外観」に関連するより正確な結果を返す。
v3は検索だけでなく、いくつかのタスクに特化したベクトル表現も提供している:
分離タスクのベクトル表現
v3 分離
タスクは、クラスタリング、再ランク付けなどの分離タスクに最適化されており、例えば、異なるタイプのエンティティを分離することで、大規模なコーパスの整理や視覚化に役立つ。
例:スター・ウォーズとディズニーのキャラクターの区別
データ = {
"モデル": "ジーナ-埋め込み-v3",
"タスク": "分離「#使用 分離 ミッション
"レイト・チャンキング": 真,
"入力": [
"ダース ベイダー",
"ルーク スカイウォーカー",
"ミッキー マウス",
"ドナルド 鴨"
]
}
応答 = requests.post(url, headers=headers, json=)データ)
分類タスクのベクトル表現
v3 分類
このタスクは、例えばテキストを肯定的なコメントと否定的なコメントに分類するような、感情分析や文書分類のようなテキスト分類タスクに最適化されている。
例:スター・ウォーズの映画評の感情的傾向の分析
データ = {
「モデル: "jina-embeddings-v3",
「タスク: 分類,
"レイト・チャンキング"本当です。
"入力": [
スター・ウォーズ』は映画界に革命をもたらし、SF映画を永遠に再定義した画期的な傑作だ!」。,
「圧倒的なビジュアル、忘れがたいキャラクター、伝説的な物語を持つスター・ウォーズは、他の追随を許さない文化的現象である。,
「スター・ウォーズは、浅薄な登場人物ばかりで、何の意味もない筋書きのない、大げさな大失敗作だ!」。,
}
応答 = requests.post(url、ヘッダー=ヘッダー、json=データ)
テキストマッチングのベクトル表現
v3 テキストマッチング
文の類似性や、繰り返される文や段落を除外するなどの強調除去など、意味的類似性のタスクに焦点を当てる。
例:スター・ウォーズのセリフの繰り返しを識別する
データ = {
「モデル: "jina-embeddings-v3",
「タスク: 「テキストマッチング,
"レイト・チャンキング"本当です。
"入力": [
"ルーク、私はお前の父親だ",
「いや、私は君の父親だ,
「恐怖は怒りに、怒りは憎しみに、憎しみはダークサイドにつながる。,
「恐怖は怒りに、怒りは憎しみに、憎しみは苦しみにつながる。
]
}
レスポンス = requests.post(url、ヘッダー=ヘッダー、json=データ)
後期チャンキング:長文エンコーディングの強化
v3では レイト・チャンキング
パラメータが late_chunking=真
モデルが文書全体を処理した後、それを複数のブロックに分割し、完全な文脈情報を含むブロックベクトルを生成する場合。 late_chunking=偽
モデルが各ブロックを独立して処理する場合、生成されるブロックベクトルにはブロック間の文脈情報が含まれない。
銘記する
- 使い始める
late_chunking=真
APIリクエストごとのトークンの総数は、v3でサポートされるコンテキストの最大長である8192を超えることはできない。 late_chunking=偽
トークンの総数に制限はありませんが、Embeddings APIのレート制限に従います。
長いテキストを処理するには レイト・チャンキング
チャンク全体の文脈情報を保持し、生成されるベクトル表現をより完全で正確なものにするためである。
チャットの記録を用いて評価した。 レイト・チャンキング
長文検索の有効性への影響。
歴史 = [
「シータ、土曜日の誕生日ディナーの行き先は決まった?,
「ここのレストランにはあまり詳しくないので、よくわかりません」。,
"ネットでおすすめを見ることができる",
"いいね、やろう!",
「誕生日にはどんな料理が欲しい?,
「特にメキシコ料理かイタリア料理が好きです」。,
"ベラ・イタリア "はどう?,
"ああ、あそこは聞いたことがある!みんな、あそこは最高だって言ってるよ!",
「テーブルを予約しようか?,
「よし、完璧だ!電話して予約しよう"
]
v2を使って、"お勧めのレストランを教えてください "というクエリを実行した。というクエリにv2を使用したところ、得られた結果は特に関連性のあるものではありませんでした。
v3でレイトチャンキングを有効にしていない場合、結果は同様に満足のいくものではなかった。
ただし、v3を使用し レイトチャンキング
最も関連性の高い結果(おいしいレストランの推薦)がまさに1位になったとき。
検索結果
検索結果から明らかなように レイト・チャンキング
その後、v3はクエリに関連するチャットをより正確に識別し、最も関連性の高い結果を最初にランク付けすることができる。
また、次のことも示している。 レイト・チャンキング<span> </span>
長文検索の精度は、特に文脈的な意味を深く理解する必要があるシナリオにおいて、効果的かつ効率的に向上させることができる。
ロシア語のネストされたベクトルを使って、バランシングの効率とパフォーマンスを表す
v3採用 寸法
パラメータは柔軟なベクトル次元制御をサポートし、実際の需要に応じて出力ベクトルの次元を調整し、パフォーマンスとストレージスペースのバランスを取ることができます。
ベクトル次元を小さくすることで、ベクトルデータベースのストレージオーバーヘッドを削減し、検索速度を向上させることができるが、一部の情報が失われ、パフォーマンスが低下する可能性がある。
データ = {
「モデル: "jina-embeddings-v3",
「タスク: 「テキストマッチング,
寸法: 768, #はベクトル次元を768に設定、デフォルトは1024
"入力": [
"フォースはあなたとともにある いつでも",
「フォースはあなたとともにある。永遠に。,
"フォルツァはあなたと共にある、永遠に",
「フォースと共にあらんこと。Itumo."
]
}
response = requests.post(url, headers=headers, json=data)
一般的な問題
Q1: ベクトル化する前にすでにチャンク化されている場合、レイト・チャンキングを使う利点は何ですか?
A1: プレ・スプリットに対するレイト・スプリットの利点は、次のようなことである。 チャンキングの前に文書全体を処理することで、より完全な文脈情報を保持します。 .チャンキングを遅らせることは、複雑な文書や長い文書を処理する際に重要である。チャンキングを行う前に、モデルが文書を全体的に理解しているため、検索時に関連性の高い応答を提供することができる。一方、セグメンテーション前のブロックは、完全な文脈のないブロックとは独立して処理される。
Q2: ペアワイズ分類タスクでv2がv3よりベンチマークスコアが高いのはなぜですか?心配する必要はありますか?
A2:v2のペアワイズ分類タスクのスコアが高いように見えるのは、主に平均スコアの計算方法が異なるためです。v3のテストセットにはより多くの言語が含まれているため、平均スコアはv2よりも低くなる可能性があります。
Q3: v2バイリンガルモデルでサポートされている特定の言語では、v3の方が優れていますか?
A3:特定の言語に対するv3とv2のバイリンガルモデルのパフォーマンス比較 特定の言語とタスクの種類による v2のバイリンガルモデルは、特定の言語に対して高度に最適化されているため、特定のタスクにおいてより優れたパフォーマンスを発揮する可能性があります。しかしv3は、より広範な多言語シナリオをサポートするように設計されており、より強力な言語横断的汎化機能を持ち、タスク固有のLoRAアダプタによって様々な下流タスクに最適化されている。その結果、v3は通常、多言語にわたって、あるいは意味検索やテキスト分類などのより複雑なタスク固有のシナリオにおいて、より優れた総合性能を達成する。
v2バイリンガルモデルがサポートする特定の言語(中国語-英語、英語-ドイツ語、スペイン語-英語)のみを扱う必要があり、タスクが比較的単純な場合、v2は依然として良い選択であり、場合によってはより良いパフォーマンスを発揮する可能性さえあります。
しかし、複数の言語を扱う必要がある場合や、タスクがより複雑な場合(例えば、意味検索やテキスト分類を実行する必要がある場合)には、強力な言語横断的汎化機能と下流タスクに基づく最適化ストラテジーを備えたv3がより良い選択となる。
Q4: なぜv2がv3よりもサマリータスクで優れているのですか?
A4: v2は要約タスクでより良い結果を出しているが、その主な理由は、そのモデル・アーキテクチャが、要約タスクと密接に関連する意味類似性などのタスクに特に最適化されているためである。
しかし、要約タスクの評価は現在、意味的類似性を測定するテストであるSummEvalに依存しており、要約タスクにおけるモデルの総合的な能力を完全に表しているわけではないので、あまり心配する必要はない。v3が検索などの他の重要なタスクで優れた性能を発揮していることを考えると、要約タスクにおけるわずかな性能差は、通常、実世界のアプリケーションに大きな影響を与えない。
概要
Jina Embeddings v3は、多言語・長文検索タスクのためのクラス最高のSOTAを大幅にアップグレードしたモデルであり、より正確なベクトル化結果のニーズに応じて、検索、クラスタリング、分類、マッチングといった様々なシナリオ用にカスタマイズ可能な様々なLoRAアダプターが組み込まれています。できるだけ早くv3に移行されることを強くお勧めします。
以上、Jina Embeddings v3についてご紹介しましたが、ご参考になれば幸いです。ご質問があれば、お気軽にコメントを残してください!