モデル概要
モデル特徴
モデル能力
使用事例
🚀 USER-bge-m3
Universal Sentence Encoder for Russian (USER) は、ロシア語専用の埋め込みを抽出するための sentence-transformer モデルです。 このモデルは、文章や段落を1024次元の密ベクトル空間にマッピングし、クラスタリングや意味検索などのタスクに使用できます。
このモデルは、TatonkaHF/bge-m3_en_ru
から初期化されています。これは、baai/bge-m3
モデルの縮小版で、主にロシア語で動作するようにトレーニングされています。他の言語での品質は評価されていません。
🚀 クイックスタート
このモデルを使用するには、まず sentence-transformers
をインストールする必要があります。
pip install -U sentence-transformers
その後、以下のようにモデルを使用できます。
from sentence_transformers import SentenceTransformer
input_texts = [
"Когда был спущен на воду первый миноносец «Спокойный»?",
"Есть ли нефть в Удмуртии?",
"Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года.",
"Нефтепоисковые работы в Удмуртии были начаты сразу после Второй мировой войны в 1945 году и продолжаются по сей день. Добыча нефти началась в 1967 году."
]
model = SentenceTransformer("deepvk/USER-bge-m3")
embeddings = model.encode(input_texts, normalize_embeddings=True)
また、transformers
を直接使用することもできます。
import torch.nn.functional as F
from torch import Tensor, inference_mode
from transformers import AutoTokenizer, AutoModel
input_texts = [
"Когда был спущен на воду первый миноносец «Спокойный»?",
"Есть ли нефть в Удмуртии?",
"Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года.",
"Нефтепоисковые работы в Удмуртии были начаты сразу после Второй мировой войны в 1945 году и продолжаются по сей день. Добыча нефти началась в 1967 году."
]
tokenizer = AutoTokenizer.from_pretrained("deepvk/USER-bge-m3")
model = AutoModel.from_pretrained("deepvk/USER-bge-m3")
model.eval()
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
# Perform pooling. In this case, cls pooling.
sentence_embeddings = model_output[0][:, 0]
# normalize embeddings
sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)
# [[0.5567, 0.3014],
# [0.1701, 0.7122]]
scores = (sentence_embeddings[:2] @ sentence_embeddings[2:].T)
さらに、評価にはネイティブの FlagEmbedding ライブラリを使用することもできます。使用方法は、bge-m3
モデルカード に記載されています。
✨ 主な機能
- ロシア語専用の文章埋め込みを抽出します。
- 文章や段落を1024次元の密ベクトル空間にマッピングします。
- クラスタリングや意味検索などのタスクに使用できます。
📦 インストール
このモデルを使用するには、まず sentence-transformers
をインストールする必要があります。
pip install -U sentence-transformers
💻 使用例
基本的な使用法
from sentence_transformers import SentenceTransformer
input_texts = [
"Когда был спущен на воду первый миноносец «Спокойный»?",
"Есть ли нефть в Удмуртии?",
"Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года.",
"Нефтепоисковые работы в Удмуртии были начаты сразу после Второй мировой войны в 1945 году и продолжаются по сей день. Добыча нефти началась в 1967 году."
]
model = SentenceTransformer("deepvk/USER-bge-m3")
embeddings = model.encode(input_texts, normalize_embeddings=True)
高度な使用法
import torch.nn.functional as F
from torch import Tensor, inference_mode
from transformers import AutoTokenizer, AutoModel
input_texts = [
"Когда был спущен на воду первый миноносец «Спокойный»?",
"Есть ли нефть в Удмуртии?",
"Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года.",
"Нефтепоисковые работы в Удмуртии были начаты сразу после Второй мировой войны в 1945 году и продолжаются по сей день. Добыча нефти началась в 1967 году."
]
tokenizer = AutoTokenizer.from_pretrained("deepvk/USER-bge-m3")
model = AutoModel.from_pretrained("deepvk/USER-bge-m3")
model.eval()
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
# Perform pooling. In this case, cls pooling.
sentence_embeddings = model_output[0][:, 0]
# normalize embeddings
sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)
# [[0.5567, 0.3014],
# [0.1701, 0.7122]]
scores = (sentence_embeddings[:2] @ sentence_embeddings[2:].T)
📚 ドキュメント
トレーニングの詳細
USER-base
モデルのトレーニングアルゴリズムに従い、バックボーンが異なるためいくつかの変更を加えています。
初期化: TatonkaHF/bge-m3_en_ru
– baai/bge-m3
の縮小版で、ロシア語と英語のトークンのみをサポートします。
ファインチューニング: データの対称性に基づいて2つの異なるモデルを教師ありファインチューニングし、その後 LM-Cocktail
を介してマージします。
- データを分割したため、対称モデルに AnglE 損失 を追加で適用することができます。これにより、対称タスクでのパフォーマンスが向上します。
- 最後に、元の
bge-m3
モデルを取得した2つのモデルに追加して、災害的忘却を防ぎ、LM-Cocktail
を使用してマージの重みを調整して、最終的なモデル USER-bge-m3 を生成します。
データセット
モデル開発中に、2つのデータセットを追加で収集しました。
deepvk/ru-HNP
と
deepvk/ru-WANLI
。
対称データセット | サイズ | 非対称データセット | サイズ |
---|---|---|---|
AllNLI | 282 644 | MIRACL | 10 000 |
MedNLI | 3 699 | MLDR | 1 864 |
RCB | 392 | Lenta | 185 972 |
Terra | 1 359 | Mlsum | 51 112 |
Tapaco | 91 240 | Mr-TyDi | 536 600 |
deepvk/ru-WANLI | 35 455 | Panorama | 11 024 |
deepvk/ru-HNP | 500 000 | PravoIsrael | 26 364 |
Xlsum | 124 486 | ||
Fialka-v1 | 130 000 | ||
RussianKeywords | 16 461 | ||
Gazeta | 121 928 | ||
Gsm8k-ru | 7 470 | ||
DSumRu | 27 191 | ||
SummDialogNews | 75 700 |
総ポジティブペア: 2,240,961 総ネガティブペア: 792,644 (AIINLI、MIRACL、deepvk/ru-WANLI、deepvk/ru-HNP のネガティブペア)
すべてのラベル付きデータセットについて、ファインチューニングにはトレーニングセットのみを使用します。 Gazeta、Mlsum、Xlsum のデータセットについては、ペア (タイトル/テキスト) と (タイトル/要約) を結合して非対称データとして使用します。
AllNLI
は、SNLI、MNLI、ANLI をロシア語に翻訳したものです。
実験
encodechka
ベンチマークで、基本的な baai/bge-m3
とモデルを比較します。
さらに、MTEB
のロシア語サブセットで、分類、再ランキング、マルチラベル分類、STS、検索、ペア分類のタスクについてモデルを評価します。
各タスクについて、公式リポジトリの検証スクリプトを使用します。
encodechka での結果:
モデル | 平均 S | 平均 S+W | STS | PI | NLI | SA | TI | IA | IC | ICX | NE1 | NE2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
baai/bge-m3 |
0.787 | 0.696 | 0.86 | 0.75 | 0.51 | 0.82 | 0.97 | 0.79 | 0.81 | 0.78 | 0.24 | 0.42 |
USER-bge-m3 |
0.799 | 0.709 | 0.87 | 0.76 | 0.58 | 0.82 | 0.97 | 0.79 | 0.81 | 0.78 | 0.28 | 0.43 |
MTEB での結果:
タイプ | baai/bge-m3 |
USER-bge-m3 |
---|---|---|
平均 (30 データセット) | 0.689 | 0.706 |
分類平均 (12 データセット) | 0.571 | 0.594 |
再ランキング平均 (2 データセット) | 0.698 | 0.688 |
マルチラベル分類 (2 データセット) | 0.343 | 0.359 |
STS 平均 (4 データセット) | 0.735 | 0.753 |
検索平均 (6 データセット) | 0.945 | 0.934 |
ペア分類平均 (4 データセット) | 0.784 | 0.833 |
制限事項
モデルの疎なエンコーディングとマルチベクトルエンコーディングの能力は十分に評価されていません。
引用
@misc{deepvk2024user,
title={USER: Universal Sentence Encoder for Russian},
author={Malashenko, Boris and Zemerov, Anton and Spirin, Egor},
url={https://huggingface.co/datasets/deepvk/USER-base},
publisher={Hugging Face}
year={2024},
}
📄 ライセンス
このモデルは、Apache 2.0 ライセンスの下で提供されています。







