🩵 SSE: Stable Static Embedding for Retrieval MRL 日本語バージョン 🩵
軽量、高速かつ強力な埋め込みモデル
パフォーマンスの簡易解説
このモデルは NanoBEIR_ja(日本語文書検索タスク) において NDCG@10 = 0.4507 を達成しました。
このスコアは他の静的埋め込みモデル( static-embedding-japanese (0.4487)など )を上回るパフォーマンスです。
さらに、次元数を半分(512 vs 1024)に抑えています。
次元数の削減と、Separable Dynamic Tanh により、環境によっては検索速度は 約2倍高速 になっています。
| モデル | NanoBEIR NDCG@10 | 次元数 | パラメータ数 | 速度の優位性 | ライセンス |
|---|---|---|---|---|---|
| SSE Retrieval MRL Japanese | 0.4507 ✨ | 512 | ~17M 🪽 | 検索が約2倍高速 (超効率的) | Apache 2.0 |
static-embedding-japanese |
0.4487 | 1024 | ~34M | ベースライン | MIT |
🩵 SSE Retrieval MRL を選ぶ理由 🩵
✅ パラメータ数の小さなモデル (<35M パラメータ) の中では高い性能(NDCG@10)
✅ 約17M のパラメータのみ :軽量モデルであるruri-v3-30m より約43% 小さい。
✅ 次元数512の出力 — 次元数1024のモデルよりも豊かな表現力を持ち、static-embedding-japanese の 半分サイズ
✅ Matryoshka 対応 — 256/128/64/32 に簡単に切り替えられ、性能の緩やかな低下を実現
✅ Apache 2.0 ライセンス — 商用・個人利用ともに可能
✅ CPU 最適化 — エッジデバイスや限られたハードウェアでも高速に動作
🩵 モデル詳細 🩵
| プロパティ | 値 |
|---|---|
| モデルタイプ | Sentence Transformer (SSE アーキテクチャ) |
| 最大シーケンス長 | 無制限 |
| 出力次元 | 512 (Matryoshka により 次元数32 まで削減可能!) |
| 類似度関数 | コサイン類似度 |
| 言語 | 日本語 |
| ライセンス | Apache 2.0 |
tokenizerは下記を使用させていただきました。
hotchpotch/xlm-roberta-japanese-tokenizer
SentenceTransformer(
(0): SSE(
(embedding): EmbeddingBag(32768, 512, mode='mean')
(dyt): SeparableDyT()
)
)
🩵 数学的背景 🩵
このモデルは静的埋め込みモデルの汎化性能を向上させるために、オリジナルのアーキテクチャである、SSE: Stable Static Embeddingを採用しています。 SSEは、EmbeddingBagとSeparable Tanh Normalizationから構成されます。 Dynamic Tanh Normalization (DyT) は、静的埋め込みにおいて、強度適応型勾配流を可能にします。入力次元 x に対して、DyT は以下のように計算されます。
ここで、a, b, c は学習可能なパラメータです。 すると、x の勾配は以下の通りになります。
飽和した次元 |x| > 1 の場合
は指数関数的な減衰をもたらします。
これにより勾配が抑制され、
となります。
対して、非飽和の次元 |x| << 1 の場合、
ほぼ一定の勾配を維持します。
この強度依存型のゲートは、ノイズが多く大きな成分を持つ次元からの学習信号を減衰させつつ、安定した情報を有する次元については勾配流を維持します。これは明示的なハイパーパラメータなしで、表現空間の汎化性能を高める暗黙的な正則化を可能にします。
🩵 評価結果 (NanoBEIR_ja) 🩵
| データセット | NDCG@10 | MRR@10 | MAP@100 |
|---|---|---|---|
| NanoBEIR Mean | 0.4507✨ | 0.5090 | 0.3695 |
| NanoClimateFEVER | 0.3110 | 0.4208 | 0.2347 |
| NanoDBPedia | 0.5596 | 0.7652 | 0.4000 |
| NanoFEVER | 0.5611 | 0.5003 | 0.4923 |
| NanoFiQA2018 | 0.3247 | 0.3731 | 0.2692 |
| NanoHotpotQA | 0.4795 | 0.5758 | 0.4182 |
| NanoMSMARCO | 0.3845 | 0.3191 | 0.3335 |
| NanoNFCorpus | 0.2736 | 0.4544 | 0.1014 |
| NanoNQ | 0.4218 | 0.3658 | 0.3572 |
| NanoQuoraRetrieval | 0.7786✨ | 0.7750 | 0.7428 |
| NanoSCIDOCS | 0.3026 | 0.4850 | 0.2192 |
| NanoArguAna | 0.3521 | 0.2686 | 0.2793 |
| NanoSciFact | 0.6372 | 0.6100 | 0.5990 |
| NanoTouche2020 | 0.4731 | 0.7036 | 0.3572 |
🩵 使い方 🩵
import torch
from sentence_transformers import SentenceTransformer
# モデルのロード(リモートコードは有効化)
model = SentenceTransformer(
"RikkaBotan/stable-static-embedding-fast-retrieval-mrl-ja",
trust_remote_code=True,
device="cuda" if torch.cuda.is_available() else "cpu",
)
# 対象の文章
sentences = [
"大規模言語モデルは学習により、高い推論能力を獲得することが可能である。",
"静的埋め込みモデルは、簡素なアーキテクチャにより、表現空間を高速に生成可能である。"
]
with torch.no_grad():
embeddings = model.encode(
sentences,
convert_to_tensor=True,
normalize_embeddings=True,
batch_size=32
)
# コサイン類似度
# cosine_sim = embeddings[0] @ embeddings[1].T
cosine_sim = model.similarity(embeddings, embeddings)
print("embeddings shape:", embeddings.shape)
print("cosine similarity matrix:")
print(cosine_sim)
🩵 検索用使用例 🩵
import torch
from sentence_transformers import SentenceTransformer
# モデルのロード(リモートコードは有効化)
model = SentenceTransformer(
"RikkaBotan/stable-static-embedding-fast-retrieval-mrl-ja",
trust_remote_code=True,
device="cuda" if torch.cuda.is_available() else "cpu",
)
# 推論
query = "安定性静的埋め込みモデルとは何ですか?"
sentences = [
"安定性静的埋め込みモデルは自己注意機構を必要としません。",
"安定性静的埋め込みモデルは高速に高精度な埋め込み表現を生成するためのモデルです。",
"自己注意機構はトークン間の関係性をスコア化する仕組みのことです",
"昨夜はアイドルの曲を聴きながらお菓子作りをしていました。",
"言語モデルは一般的に、次時刻のトークンを予測するという学習が行われます。",
"お気に入りのヘアアクセサリーを身に着けると、とてもテンションが上がるよね。",
]
with torch.no_grad():
embeddings = model.encode(
[query] + sentences,
convert_to_tensor=True,
normalize_embeddings=True,
batch_size=32
)
print("embeddings shape:", embeddings.shape)
# コサイン類似度
similarities = model.similarity(embeddings[0], embeddings[1:])
for i, similarity in enumerate(similarities[0].tolist()):
print(f"{similarity:.05f}: {sentences[i]}")
🩵 学習時のハイパーパラメータ 🩵
デフォルトと異なる設定
eval_strategy: stepsper_device_train_batch_size: 3072gradient_accumulation_steps: 10learning_rate: 0.1adam_epsilon: 1e-10num_train_epochs: 2lr_scheduler_type: cosinewarmup_ratio: 0.02bf16: Truedataloader_num_workers: 4batch_sampler: no_duplicates
🩵 学習データセット 🩵
下記の14個のデータセットを使用しました。
| Dataset |
|---|
hpprc_emb__auto-wiki-nli-triplet |
hpprc_emb__jqara |
hpprc_emb__jagovfaqs |
hpprc_emb__jsquad |
hpprc_emb__jaquad |
hpprc_emb__mkqa-triplet |
hpprc_llmjp-kaken |
hpprc_msmarco_ja |
hpprc_emb__auto-wiki-qa-nemotron |
mldr_ja |
mrtydi_ja |
miracl_ja |
mmarco_ja |
mmarco_ja_hard |
MatryoshkaLossを用いて学習を行っています。
🩵 学習結果 🩵
🩵 作成者:六花牡丹(りっかぼたん) 🩵
おっとりで甘えん坊な研究者見習い。 言語モデルに関するものが主な研究分野です。 お仕事のご依頼・登壇依頼・執筆依頼に関しては、下記までご連絡ください。
X(Twitter): https://twitter.com/peony__snow
🩵 謝辞 🩵
このモデルの学習のための計算リソースの一部は、Saldraさん、Witnessさん、Lumina Logic Minds社から提供いただきました。貴重なサポートに感謝いたします。
sentence-transformers、python、pytorchを使用させていただきました。 作成・メンテンナンスしてくださっている皆様に感謝いたします。
何よりも、このモデルにご興味を持ってくださりありがとうございます。
🩵 引用 🩵
BibTeX
Sentence Transformers
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
MatryoshkaLoss
@misc{kusupati2024matryoshka,
title={Matryoshka Representation Learning},
author={Aditya Kusupati and Gantavya Bhatt and Aniket Rege and Matthew Wallingford and Aditya Sinha and Vivek Ramanujan and William Howard-Snyder and Kaifeng Chen and Sham Kakade and Prateek Jain and Ali Farhadi},
year={2024},
eprint={2205.13147},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
MultipleNegativesRankingLoss
@misc{henderson2017efficient,
title={Efficient Natural Language Response Suggestion for Smart Reply},
author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
year={2017},
eprint={1705.00652},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
Model tree for RikkaBotan/stable-static-embedding-fast-retrieval-mrl-ja
Datasets used to train RikkaBotan/stable-static-embedding-fast-retrieval-mrl-ja
Space using RikkaBotan/stable-static-embedding-fast-retrieval-mrl-ja 1
Collection including RikkaBotan/stable-static-embedding-fast-retrieval-mrl-ja
Papers for RikkaBotan/stable-static-embedding-fast-retrieval-mrl-ja
Matryoshka Representation Learning
Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Efficient Natural Language Response Suggestion for Smart Reply
Evaluation results
- Cosine Accuracy@1 on NanoClimateFEVERself-reported0.280
- Cosine Accuracy@3 on NanoClimateFEVERself-reported0.500
- Cosine Accuracy@5 on NanoClimateFEVERself-reported0.600
- Cosine Accuracy@10 on NanoClimateFEVERself-reported0.720
- Cosine Precision@1 on NanoClimateFEVERself-reported0.280
- Cosine Precision@3 on NanoClimateFEVERself-reported0.180
- Cosine Precision@5 on NanoClimateFEVERself-reported0.140
- Cosine Precision@10 on NanoClimateFEVERself-reported0.096
- Cosine Recall@1 on NanoClimateFEVERself-reported0.116
- Cosine Recall@3 on NanoClimateFEVERself-reported0.259
- Cosine Recall@5 on NanoClimateFEVERself-reported0.309
- Cosine Recall@10 on NanoClimateFEVERself-reported0.384
- Cosine Ndcg@10 on NanoClimateFEVERself-reported0.311
- Cosine Mrr@10 on NanoClimateFEVERself-reported0.421
- Cosine Map@100 on NanoClimateFEVERself-reported0.235
- Cosine Accuracy@1 on NanoDBPediaself-reported0.640
- Cosine Accuracy@3 on NanoDBPediaself-reported0.900
- Cosine Accuracy@5 on NanoDBPediaself-reported0.920
- Cosine Accuracy@10 on NanoDBPediaself-reported0.980
- Cosine Precision@1 on NanoDBPediaself-reported0.640




