File size: 2,159 Bytes
6313419
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b0e45e2
 
6313419
 
 
 
 
 
 
 
 
 
 
 
 
b0e45e2
6313419
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
---
language: ja
license: apache-2.0
library_name: sentence-transformers
pipeline_tag: sentence-similarity
tags: [sentence-transformers, medical, japanese, ruri, modernbert, embedding]
base_model: cl-nagoya/ruri-v3-70m
---

# med-ruri-v3-70m-v2-from-ruri

日本語**医療ドメイン**の文埋め込みモデル (ruri-v3 / ModernBERT-Ja ベース)。**学習進行中の自動アップロード**です。

## このモデルの位置づけ
**新規学習**: 素の `cl-nagoya/ruri-v3-70m`(汎用)から医療データで v2 レシピ学習(医療知識ゼロから付与)

- **現在の step**: `5500`  /  **in-domain nDCG@10**: `0.4857` 
- 各 step は `step-5500` のように **revision ブランチ**で固定取得可。`main` は常に最新。
- step ごとの指標推移: [`metrics_progress.json`](./metrics_progress.json)

## v2 学習レシピ
- **精度**: fp32 重み + **TF32 matmul**(ModernBERT は bf16 計算で grad nan 崩壊するため。TF32 で安定かつ高速)
- **NFKC 正規化**: PDF 由来の康熙部首などの tokenizer 汚染を除去
- **strip-year**: ヘッダの発行年【…(YYYY)…】を除去し、埋め込みを版非依存に
- **temporal hard-negative**: 旧版チャンクを hard-neg に(年号への過適合=「学習分布に近い版」嗜好を抑制), oversample ×10
- **loss**: MultipleNegativesRankingLoss (scale=50, temp=0.02), lr=1e-5
- **prefix (必須)**: query=`検索クエリ: ` / document=`検索文書: `(付けないと精度が大きく落ちる)

## 使い方
```python
from sentence_transformers import SentenceTransformer
m = SentenceTransformer("genshiai-daichi/med-ruri-v3-70m-v2-from-ruri", revision="step-5500")  # main で最新も可
q = m.encode(["検索クエリ: 心不全の標準治療は"], normalize_embeddings=True)
d = m.encode(["検索文書: 【…】 …本文…"], normalize_embeddings=True)
```

## 注意
- **serving 側も train と同じ前処理 (NFKC + strip-year) が必須**(train/serve skew 回避)。
- 学習中の中間 checkpoint です。最終版・各 step の nDCG@10 比較は `metrics_progress.json` を参照。