five

mahiyama/mqa-ja

收藏
Hugging Face2026-05-21 更新2026-05-31 收录
下载链接:
https://hf-mirror.com/datasets/mahiyama/mqa-ja
下载链接
链接失效反馈
官方服务:
资源简介:
--- language: - ja license: cc0-1.0 size_categories: - 1M<n<10M task_categories: - sentence-similarity - text-retrieval task_ids: - document-retrieval pretty_name: MQA-JP (Pairs / Triplets / N-tuples + distillation top-K) source_datasets: - hpprc/mqa-ja tags: - text - japanese - question-answering - retrieval - embedding - triplet - hard-negative-mining - contrastive-learning - knowledge-distillation - cross-encoder - ruri-v3 configs: - config_name: pairs data_files: - split: train path: pairs/train-* - config_name: triplets data_files: - split: train path: triplets/train-* - config_name: n-tuples data_files: - split: train path: n-tuples/train-* - config_name: n-tuples-100k data_files: - split: train path: n-tuples-100k/train-* - config_name: n-tuples-250k data_files: - split: train path: n-tuples-250k/train-* - config_name: n-tuples-500k data_files: - split: train path: n-tuples-500k/train-* - config_name: n-tuples-1m data_files: - split: train path: n-tuples-1m/train-* default_config: triplets --- # mqa-ja 日本語 QA データセット hpprc/mqa-ja を元に、Hard Negative Mining と Cross-Encoder 蒸留スコア付与を施した日本語 retrieval 学習用データセットです。 pairs / triplets / n-tuples の 3 形式と、n-tuples に蒸留スコアを付けて学習価値でソートした top-K サブセット (100k / 250k / 500k / 1m) を提供します。 Dense Retriever / Cross-Encoder / SPLADE などの日本語検索モデル学習および KL Divergence 蒸留に利用できます。 ## Configs | config | rows | columns | 説明 | |---|---:|---|---| | pairs | 5,823,586 | query, answer | 元の (query, positive) ペア (anc → query, pos_ids[0] → answer)。HNM の結果に関わらず全行収録。 | | triplets | 5,823,586 | query, positive, negative | クエリごとに 1 件の hard negative を付けた triplet (HNM 結果に関わらず全行収録)。 | | n-tuples | 2,284,797 | query, positive, negative_1〜negative_5, label | クエリごとに 5 件の hard negative + Cross-Encoder の生 logit を label に付与。HNM v3 を通過した行を quality_score 降順で配置。 | | n-tuples-100k | 100,000 | query, positive, negative_1〜negative_5, label | n-tuples を quality_score 降順で並べた上位 100k (有効行が少ない場合は通過行全量)。 | | n-tuples-250k | 250,000 | query, positive, negative_1〜negative_5, label | n-tuples を quality_score 降順で並べた上位 250k (有効行が少ない場合は通過行全量)。 | | n-tuples-500k | 500,000 | query, positive, negative_1〜negative_5, label | n-tuples を quality_score 降順で並べた上位 500k (有効行が少ない場合は通過行全量)。 | | n-tuples-1m | 1,000,000 | query, positive, negative_1〜negative_5, label | n-tuples を quality_score 降順で並べた上位 1m (有効行が少ない場合は通過行全量)。 | すべての config の split は train。n-tuples-* の top-K サブセットは quality_score 降順で並んでおり、行順序は元の n-tuples と一致しません。 ### label カラムの形式 (n-tuples / n-tuples-* 共通) List[float] x 6 で [score(query, positive), score(query, neg_1), ..., score(query, neg_5)]。label[0] が positive、label[1:] が negative_1〜negative_5 に 1:1 で順序通り対応します。スコアは Cross-Encoder の生 logit (sigmoid 適用前)。 ## Hard Negative Mining の方法 各クエリに対して以下を実施しました。 1. クエリ埋め込み — cl-nagoya/ruri-v3-310m で 検索クエリ: プレフィックスを付与して 768 次元にエンコード、L2 正規化。 2. Collection 埋め込み — 同じく cl-nagoya/ruri-v3-310m で 検索文書: プレフィックスを付与して全 collection (約 1185 万件) を 768 次元にエンコード。 3. kNN 検索 — GPU matmul + chunked top-K (RTX PRO 6000 Blackwell, 96GB) で各クエリの top-100 候補を取得。faiss などの ANN を使わず精確な内積 top-K。 4. Positive 除外 — 各行の pos_ids 全集合 (1 行平均 16.8 件) を kNN 候補から除外し、残りの上位 10 件を negative 候補とする。 5. リランカーで蒸留スコア付与 — cl-nagoya/ruri-v3-reranker-310m で (query, positive) と (query, neg_i) x 10 = 11 ペアに生 logit を付与。 6. Hard Negative 選定 (v3 single MIN_DIFF filter) - pos_score < 2.0 の行は DROP (positive が弱く救済不可) - 各候補に対し pos - neg >= 4.0 を要求 (sigmoid 空間で >=0.98 の確実な分離) - 通過候補が 5 件未満の場合、kNN top-30 まで拡張採点で救済 - それでも 5 件未満の行は DROP - 通過候補をリランカースコア降順で並べ、上位 5 件を negative_1..5 とする ### 統計 | 指標 | 値 | |---|---:| | 入力 dataset 行数 (hpprc/mqa-ja) | 5,826,275 | | Collection サイズ | 11,852,254 | | 1 行 1 positive で展開後 (pairs/triplets 行数) | 5,823,586 | | pos_score 観測レンジ | -11.38 〜 13.38 (mean 3.35) | | pos_score >= 2.0 通過 | 3,339,440 | | HNM v3 通過 (n-tuples 採用) | 2,284,797 | | 救済後も 5 件不足で DROP | 1,054,643 | ## 蒸留スコア付けの方法 教師モデル cl-nagoya/ruri-v3-reranker-310m (ModernBERT ベース日本語 Cross-Encoder) の生 logit を Cross-Encoder スコアとして各 (query, doc) ペア (positive 1 件 + negative 5 件) に付与しました。 ### スコア付けの設定 | 項目 | 値 | |---|---| | Teacher | cl-nagoya/ruri-v3-reranker-310m | | Max length | 384 | | 推論精度 | BF16 | | Batch size | 256 | | 入力フォーマット | 単一文ペア (query, document) | | 出力 | 生 logit (sigmoid 適用前)。観測レンジ 概ね ±15 | KL 蒸留損失 (SparseDistillKLDivLoss / DistillKLDivLoss 等) は softmax(label / T) を target distribution として使うため、sigmoid 後の [0, 1] 値だと softmax target が一様分布に潰れて ranking 情報が失われます。これを防ぐため、教師の最終活性化を Identity に置き換えてスコアを出力しています。 logit のスケール感: | logit | sigmoid(logit) | 解釈 | | ----: | --------------: | ---- | | +8 | 0.9997 | 確信度高く relevant | | +5 | 0.993 | 強く relevant | | +2 | 0.881 | relevant 寄り | | 0 | 0.5 | 不確か | | -2 | 0.119 | irrelevant 寄り | | -5 | 0.007 | 強く irrelevant | | -8 | 0.0003 | 確信度高く irrelevant | ### quality_score: top-K サブセットのソート指標 n-tuples-100k / -250k / -500k / -1m は、label から計算した学習価値ランキング quality_score の降順で上位 K 行を抽出したものです。 学習価値が高い行を以下の 3 軸で定義しています。 1. positive が信頼できる — 教師が positive を高 logit に置く 2. 偽 negative がない — max(neg) が positive を超えない 3. negative が硬い — negative の logit がそこそこ高く、margin が中程度 #### 定義 (実装通り) ```python import numpy as np POS_MIN = 2.0 MARGIN_MIN = 0.5 MARGIN_PENALTY = 0.1 def quality_score_vec(labels: np.ndarray) -> np.ndarray: p = labels[:, 0] neg = labels[:, 1:] max_n = neg.max(axis=1) mean_n = neg.mean(axis=1) margin = p - max_n fn_mask = margin <= 0 weak_mask = (~fn_mask) & (p < POS_MIN) border_mask = (~fn_mask) & (~weak_mask) & (margin < MARGIN_MIN) valid_mask = (~fn_mask) & (~weak_mask) & (~border_mask) raw = mean_n - MARGIN_PENALTY * margin return np.where(valid_mask, raw, -np.inf) ``` HNM v3 が pos>=2.0 と全 neg について pos-neg>=4.0 を保証するため、valid マスクの 3 条件 (pos>=2.0, margin>0, margin>=0.5) は全て自動的に成立し、valid 通過率は実質 100%。それでもチェックを入れているのは透明性とアルゴリズムの形式的整合性のためです。 ### KL 蒸留損失への組み込み (PyTorch 例) ```python import torch.nn.functional as F def kl_distill_loss(student_logits, teacher_label, T=2.0): log_p_student = F.log_softmax(student_logits / T, dim=-1) p_teacher = F.softmax(teacher_label / T, dim=-1) return F.kl_div(log_p_student, p_teacher, reduction='batchmean') * (T * T) ``` 教師の生 logit レンジが ±15 程度なので、T = 2.0〜3.0 が扱いやすいです。 ## License CC0-1.0 - query / answer 本文は hpprc/mqa-ja 由来で、その元データ clips/mqa (Common Crawl から収集した FAQ / CQA) は CC0-1.0 (パブリックドメイン) で公開されている。本データセットもこれを継承し CC0-1.0 とする。 - HNM 結果と蒸留スコアは本リポで cl-nagoya/ruri-v3-reranker-310m を用いて算出した派生物。 - 利用・再配布時は元データセット (hpprc/mqa-ja / clips/mqa) の条件にも従うこと。 ## Citation 元データセットを引用してください。 ```bibtex @misc{hpprc_mqa_ja, author = {Hayato Tsukagoshi}, title = {hpprc/mqa-ja: Japanese MQA dataset}, year = {2024}, url = {https://huggingface.co/datasets/hpprc/mqa-ja}, } ``` ## Acknowledgements - 元データ: hpprc/mqa-ja (https://huggingface.co/datasets/hpprc/mqa-ja) - HNM 用 retriever: cl-nagoya/ruri-v3-310m (https://huggingface.co/cl-nagoya/ruri-v3-310m) - 蒸留教師: cl-nagoya/ruri-v3-reranker-310m (https://huggingface.co/cl-nagoya/ruri-v3-reranker-310m)
提供机构:
mahiyama
二维码
社区交流群
二维码
科研交流群
商业服务