SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking
Paper • 2107.05720 • Published • 1
ModernBERT-Ja-310M をベースにとして、日本語 SPLADE (Learned Sparse Retrieval) モデルとしてトレーニングした Learned Sparse Retrieval モデルです。
| 項目 | 内容 |
|---|---|
| ベースモデル | ModernBERT-Ja-310M (315M params) |
| アーキテクチャ | SPLADE |
| パラメータ数 | 約 315M |
| ベクトル次元 | 102,400 |
| 最大入力長 | 8,192 tokens |
| 学習スクリプト | sentence-transformers SparseEncoder 5.4+ |
| metric | value |
|---|---|
| dot_recall@1 | 0.3070 |
| dot_recall@3 | 0.5215 |
| dot_recall@5 | 0.6090 |
| dot_recall@10 | 0.7639 |
| dot_ndcg@10 | 0.6301 |
| dot_mrr@10 | 0.6692 |
| dot_map@100 | 0.5569 |
| query_active_dims | 51.4 |
| corpus_active_dims | 170.2 |
| avg_flops | 5.7 |
from sentence_transformers import SparseEncoder
model = SparseEncoder("mahiyama/splade-modernbert-ja-310m")
queries = [
"母子手帳を受け取りたいのですが、手続きを教えてください。",
]
documents = [
"Question: 母子手帳の受け取り方を教えてください。\nAnswer: 窓口で妊娠届をご記入いただき、母子手帳をお渡しします。住民票の世帯が別の方が代理で窓口に来られる場合は、委任状が必要になります。",
"Question: 住民票の写しはどこで取得できますか?\nAnswer: 市民課窓口で取得できます。手数料がかかります。",
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
# どちらの documents の方がクエリに近いか
sim = model.similarity(query_embeddings, document_embeddings)
print(sim) # tensor([[..., ...]])
# 疎ベクトルから語彙拡張結果を確認
for token, weight in model.decode(query_embeddings[0], top_k=10):
print(f" {token:>10} {weight:.3f}")
クエリ「母子手帳を受け取りたいのですが、手続きを教えてください。」に対する語彙拡張 (上位 20 トークン):
母子=2.407, 手続き=2.350, 手帳=2.341, たいのですが=1.481, 健康=1.479, 受け取り=1.464, わからない=1.396, 母=1.392, 手続=1.339, 質問=1.188, 受け取る=1.160, 、=1.110, したいのですが=1.053, を受け取り=1.047, 入会=1.034, 子ども=1.011, 手順=1.005, 母乳=0.994, 母親=0.947, 方法=0.875
短い具体的なクエリでは ~20-50 トークンで簡潔な拡張、抽象的な短語 ("情報検索" など) では数百トークン拡張、というメリハリのある挙動になります。
MIT
Base model
sbintuitions/modernbert-ja-310m