0.53
社内ベンチのnDCG@10(v1は0.42)
+0.11
v1からの改善幅(+0.1104)
7
公開している系統(サイズ×学習元)
310M
最大サイズ。70Mの軽量版も
What
これは何か
ふつうのキーワード検索は、文字が一致しないと引けません。医療の文書では、同じことを違う言葉で書くことが多い。「抗凝固」と「血をサラサラにする薬」のような差を、意味の近さで拾いたい。そのための道具が埋め込みモデルです。土台にはModernBERT-Jaを使い、そこに医療のテキストを足して、専門用語やガイドライン特有の言い回しに寄せました。
このモデル単体では派手さはありません。ただ、上に載る検索の質は、ほぼこの部品の質で決まります。だからいちばん手をかけています。
Metric
学習とともに上がった精度
社内ベンチマークの nDCG@10
上位10件にどれだけ正解が入るか。高いほど良い。
学習の途中経過は metrics_progress.json に全ステップぶん残していて、特定ステップのチェックポイントも revision から取り出せます。数字は社内ベンチでの相対比較であり、他モデルとの横並びの絶対評価ではありません。
Recipe
v2でやったこと
v2は、実運用でつまずいた点を1つずつ潰した版です。
- 表記のゆれを揃える。PDFから抜いた文書には崩れた文字が混じるので、NFKCで正規化してトークナイザのゴミを消しました。
- 版に依存しない検索にする。ガイドラインは改訂のたびに年号が変わります。見出しから年号を落とし、古い版でも新しい版でも同じ質問で引けるようにしました。
- 新しさだけで選ばせない。古い版のテキストをわざと「引っかけの不正解」として混ぜ、10倍の重みで学習。新しい文書ばかり上位に来る偏りを抑えます。
- 数値を安定させる。重みはFP32で持ち、行列積だけTF32で回しました。
Usage
使い方(接頭辞に注意)
1つだけ約束事があります。クエリには 「検索クエリ: 」、文書には 「検索文書: 」 を必ず付けてください。これを外すと、精度がはっきり落ちます。
from sentence_transformers import SentenceTransformer
m = SentenceTransformer("genshiai-daichi/med-ruri-v3-310m-v2-from-med")
q = m.encode("検索クエリ: 心房細動の抗凝固はいつ始める?")
d = m.encode("検索文書: 弁膜症を伴わない心房細動では…")
# cos類似度で近い文書を引く
Variants
公開している系統
サイズは70Mから310Mまで。それぞれに、医療版から続けて学習したもの(from-med)と、素のRuriから学習したもの(from-ruri)を用意しました。速さ優先なら70M、精度優先なら310Mを選べます。
| モデル | サイズ | 学習元 | DL/月 |
|---|---|---|---|
| med-ruri-v3-310m-v2-from-med | 310M | from-med | 678 |
| med-ruri-v3-310m-v2-from-ruri | 310M | from-ruri | 130 |
| med-ruri-v3-130m-v2-from-ruri | 130M | from-ruri | — |
| med-ruri-v3-70m-v2-from-med | 70M | from-med | 105 |
| med-ruri-v3-70m-v2-from-ruri | 70M | from-ruri | 92 |
| med-ruri-v3-310m (v1) | 310M | v1 | 145 |
| med-ruri-v3-70m (v1) | 70M | v1 | 110 |
Related