Sazanami-Embed-310m

sbintuitions/modernbert-ja-310m を初期値に学習した、日本語の単一ベクトル検索モデル (Bi-Encoder) です。質問と文書をそれぞれ 768 次元のベクトル 1 本に変換し、コサイン類似度で比較します。最大 8,192 トークンまで読めます。

このモデルは、同じ初期値・学習データ・損失で作った Late Interaction モデル Sazanami-ColBERT-310m と対になっています。違うのは「文書を何本のベクトルで表すか」だけなので、多ベクトルと単一ベクトルの差を、ほかの条件を動かさずに比べられます。

1. モデルの概要

項目 内容
ベースモデル sbintuitions/modernbert-ja-310m
アーキテクチャ Transformer → 平均プーリング (接頭辞のトークンを含む)
パラメータ数 約 315M
ベクトルの次元 768
文書あたりのベクトル本数 1 本
最大入力長 8,192 トークン (モデルに保存された既定値。学習は 512 トークンで実施)
スコア関数 コサイン類似度
接頭辞 質問に 検索クエリ: 、文書に 検索文書:
トークナイザ SentencePiece (ModernBERT-Ja の語彙をそのまま使用)
主要フレームワーク sentence-transformers (SentenceTransformer)
学習時の混合精度 bf16

関連モデル

4 モデルはすべて sbintuitions/modernbert-ja-310m を初期値に、同じ学習データで学習しています。違うのは、文書 1 件を何本のベクトルで表すかです。本モデルは単一ベクトルで、多ベクトルの 3 モデルと比べるために同じ条件で学習しました。

モデル 文書あたりのベクトル 選ぶ目安
Sazanami-ColBERT-310m 本文の有効トークン数と同数 長い文書を多数の候補から探す用途で最も精度が高い
Sazanami-AGC-310m 最大 32 本 データ量を抑えたいとき
Sazanami-MetaEmbed-310m 最大 64 本 (使う本数を減らせる) 類似度計算を速くしたいとき
Sazanami-Embed-310m (本モデル) 1 本 (768 次元) データ量と計算量を最小にしたいとき

2. 使い方

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("mahiyama/Sazanami-Embed-310m")

queries = [
    "住民票はどこで取れますか",
    "国民健康保険の加入手続きを知りたい",
]
documents = [
    "住民票の写しは、市区町村の窓口またはコンビニ交付サービスで取得できます。",
    "国民健康保険の加入手続きは、転入や退職から 14 日以内に市区町村の窓口で行ってください。",
    "粗大ごみの収集は、事前の申し込みが必要です。",
]

# 接頭辞はモデルに保存されているので、本文に自分で付けない
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)

# 保存された設定によりコサイン類似度で採点される
scores = model.similarity(query_embeddings, document_embeddings)
print(scores)

3. トレーニング方法

ベースモデル

sbintuitions/modernbert-ja-310m を初期値にしています。穴埋めの事前学習だけを済ませたモデルで、検索向けの学習は入っていません。この Transformer に平均プーリングを足しただけの構成で、追加の射影層はありません。

学習データ

質問 1 件に正例 1 件と負例 5 件を並べた n-tuples と、正例だけを並べた pairs の 2 種類を使いました。

出典 形式 件数
mahiyama/auto-wiki-qa n-tuples 100,000
mahiyama/mqa-ja n-tuples 100,000
mahiyama/mmarco-ja n-tuples 50,000
mahiyama/civicqa-ja (非公開) n-tuples 43,382
mahiyama/quiz-no-mori n-tuples 13,422
mahiyama/quiz-works n-tuples 12,502
mahiyama/amagasaki-qna n-tuples 11,069
mahiyama/miracl-retrieval n-tuples 4,603
mahiyama/mrtydi n-tuples 3,602
mahiyama/anlp-meeting-retrieval (title-abs) n-tuples 1,926
mahiyama/anlp-meeting-retrieval (title-intro) n-tuples 1,952
mahiyama/civicqa-ja (非公開) pairs 28,653
mahiyama/amagasaki-qna pairs 7,323
mahiyama/kosodate-faq-pairs-ja pairs 595
合計 379,029

mahiyama/civicqa-ja は、日本の国の機関と自治体が公開している FAQ から収集した質問と回答です。現在は非公開です。

評価に使うデータは学習から外しています。JaGovFaqs-22k は学習に一切使っていません。NFKC 正規化して空白を除いた質問が JaGovFaqs-22k の評価分割の質問と一致する行、または同じ処理をした正例がその評価分割の文書と一致する行を、各段階で除外しています。

訓練方法

n-tuples には、対照損失と蒸留損失を足したものを使います。両方を 1 回のスコア計算から求めます。

  • 対照損失 — バッチ内のすべての文書 (自分の候補 6 件と、同じバッチの他の行の文書) を選択肢とする交差エントロピー。コサイン類似度を 20 倍してから使います。
  • 蒸留損失 — 自分の候補 6 件に対するコサイン類似度の確率分布と、教師スコアの確率分布の KL ダイバージェンス。教師の温度は 2.0 です。

pairs には、バッチ内の他の行の文書を負例とする対照損失を使います。

項目 値
learning_rate 2e-5
num_train_epochs 1
per_device_train_batch_size 64
scale (コサイン類似度の倍率) 20.0
warmup_steps 全体の 5%
weight_decay 0.01
学習時の最大入力長 512 トークン
保存した推論時の最大入力長 8,192 トークン
混合精度 bf16
batch_sampler NO_DUPLICATES
勾配チェックポイント 有効
教師の温度 2.0
乱数シード 42

訓練時間は NVIDIA RTX PRO 6000 Blackwell Server Edition (96 GB) 1 枚で約 4 時間 27 分 (5,923 ステップ)、GPU メモリの最大使用量は 22.1 GB でした。

4. ライセンスと学習データの制約

本モデルの重みは MIT License で提供します。ベースモデルの sbintuitions/modernbert-ja-310m も MIT License です。

学習データに MS MARCO の日本語訳 (mahiyama/mmarco-ja) を含みます。MS MARCO は非商用の研究目的での利用を前提に公開されており、商用利用のライセンスは明確ではありません。本モデルを商用で利用する場合は、利用者ご自身の責任で MS MARCO の利用規約を確認してください。

学習データの一部に、日本の国の機関と自治体が公開している FAQ から収集した質問と回答を含みます。各出典の利用条件に従うデータで、本モデルのリポジトリでは再配布していません。本モデルを利用する場合は、利用者ご自身の責任で用途を判断してください。

Downloads last month
50
Safetensors
Model size
0.3B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for mahiyama/Sazanami-Embed-310m

Finetuned
(25)
this model

Datasets used to train mahiyama/Sazanami-Embed-310m

Collection including mahiyama/Sazanami-Embed-310m