モデル概要
モデル特徴
モデル能力
使用事例
🚀 GooAQで訓練されたModernBERT-largeモデル
このモデルは、answerdotai/ModernBERT-largeをベースに、sentence-transformersライブラリを使って微調整されたクロスエンコーダモデルです。テキストペアのスコアを計算し、テキストの再ランキングや意味検索に利用できます。
訓練スクリプトについては、training_gooaq_bce.pyを参照してください。このスクリプトでは、ベースモデルをanswerdotai/ModernBERT-baseからanswerdotai/ModernBERT-largeに更新しています。このスクリプトは、クロスエンコーダ>訓練の概要のドキュメントや、Sentence Transformers v4を使った再ランキングモデルの訓練と微調整のブログ記事でも説明されています。
🚀 クイックスタート
Sentence Transformersを使った直接利用
まず、Sentence Transformersライブラリをインストールします。
pip install -U sentence-transformers
次に、このモデルをロードして推論を行います。
from sentence_transformers import CrossEncoder
# 🤗 Hubからダウンロード
model = CrossEncoder("tomaarsen/reranker-ModernBERT-large-gooaq-bce")
# テキストペアのスコアを取得
pairs = [
['what are the characteristics and elements of poetry?', 'The elements of poetry include meter, rhyme, form, sound, and rhythm (timing). Different poets use these elements in many different ways.'],
['what are the characteristics and elements of poetry?', "What's the first rule of writing poetry? That there are no rules — it's all up to you! Of course there are different poetic forms and devices, and free verse poems are one of the many poetic styles; they have no structure when it comes to format or even rhyming."],
['what are the characteristics and elements of poetry?', "['Blank verse. Blank verse is poetry written with a precise meter—almost always iambic pentameter—that does not rhyme. ... ', 'Rhymed poetry. In contrast to blank verse, rhymed poems rhyme by definition, although their scheme varies. ... ', 'Free verse. ... ', 'Epics. ... ', 'Narrative poetry. ... ', 'Haiku. ... ', 'Pastoral poetry. ... ', 'Sonnet.']"],
['what are the characteristics and elements of poetry?', 'The main component of poetry is its meter (the regular pattern of strong and weak stress). When a poem has a recognizable but varying pattern of stressed and unstressed syllables, the poetry is written in verse. ... There are many possible patterns of verse, and the basic pattern of each unit is called a foot.'],
['what are the characteristics and elements of poetry?', "Some poetry may not make sense to you. But that's because poets don't write to be understood by others. They write because they must. The feelings and emotions that reside within them need to be expressed."],
]
scores = model.predict(pairs)
print(scores.shape)
# (5,)
# または、単一のテキストとの類似度に基づいて異なるテキストをランク付けする
ranks = model.rank(
'what are the characteristics and elements of poetry?',
[
'The elements of poetry include meter, rhyme, form, sound, and rhythm (timing). Different poets use these elements in many different ways.',
"What's the first rule of writing poetry? That there are no rules — it's all up to you! Of course there are different poetic forms and devices, and free verse poems are one of the many poetic styles; they have no structure when it comes to format or even rhyming.",
"['Blank verse. Blank verse is poetry written with a precise meter—almost always iambic pentameter—that does not rhyme. ... ', 'Rhymed poetry. In contrast to blank verse, rhymed poems rhyme by definition, although their scheme varies. ... ', 'Free verse. ... ', 'Epics. ... ', 'Narrative poetry. ... ', 'Haiku. ... ', 'Pastoral poetry. ... ', 'Sonnet.']",
'The main component of poetry is its meter (the regular pattern of strong and weak stress). When a poem has a recognizable but varying pattern of stressed and unstressed syllables, the poetry is written in verse. ... There are many possible patterns of verse, and the basic pattern of each unit is called a foot.',
"Some poetry may not make sense to you. But that's because poets don't write to be understood by others. They write because they must. The feelings and emotions that reside within them need to be expressed.",
]
)
# [{'corpus_id': ..., 'score': ...}, {'corpus_id': ..., 'score': ...}, ...]
✨ 主な機能
answerdotai/ModernBERT-large
モデルをベースに微調整されており、強力なテキスト理解能力を備えています。- クロスエンコーダとして機能し、テキストペアのスコアを計算できるため、テキストの再ランキングや意味検索タスクに適しています。
- 最大8192トークンの長いシーケンス入力をサポートしています。
📦 インストール
Sentence Transformersライブラリをインストールします。
pip install -U sentence-transformers
💻 使用例
基本的な使用法
from sentence_transformers import CrossEncoder
# 🤗 Hubからダウンロード
model = CrossEncoder("tomaarsen/reranker-ModernBERT-large-gooaq-bce")
# テキストペアのスコアを取得
pairs = [
['what are the characteristics and elements of poetry?', 'The elements of poetry include meter, rhyme, form, sound, and rhythm (timing). Different poets use these elements in many different ways.'],
['what are the characteristics and elements of poetry?', "What's the first rule of writing poetry? That there are no rules — it's all up to you! Of course there are different poetic forms and devices, and free verse poems are one of the many poetic styles; they have no structure when it comes to format or even rhyming."],
['what are the characteristics and elements of poetry?', "['Blank verse. Blank verse is poetry written with a precise meter—almost always iambic pentameter—that does not rhyme. ... ', 'Rhymed poetry. In contrast to blank verse, rhymed poems rhyme by definition, although their scheme varies. ... ', 'Free verse. ... ', 'Epics. ... ', 'Narrative poetry. ... ', 'Haiku. ... ', 'Pastoral poetry. ... ', 'Sonnet.']"],
['what are the characteristics and elements of poetry?', 'The main component of poetry is its meter (the regular pattern of strong and weak stress). When a poem has a recognizable but varying pattern of stressed and unstressed syllables, the poetry is written in verse. ... There are many possible patterns of verse, and the basic pattern of each unit is called a foot.'],
['what are the characteristics and elements of poetry?', "Some poetry may not make sense to you. But that's because poets don't write to be understood by others. They write because they must. The feelings and emotions that reside within them need to be expressed."],
]
scores = model.predict(pairs)
print(scores.shape)
# (5,)
高度な使用法
# 単一のテキストとの類似度に基づいて異なるテキストをランク付けする
ranks = model.rank(
'what are the characteristics and elements of poetry?',
[
'The elements of poetry include meter, rhyme, form, sound, and rhythm (timing). Different poets use these elements in many different ways.',
"What's the first rule of writing poetry? That there are no rules — it's all up to you! Of course there are different poetic forms and devices, and free verse poems are one of the many poetic styles; they have no structure when it comes to format or even rhyming.",
"['Blank verse. Blank verse is poetry written with a precise meter—almost always iambic pentameter—that does not rhyme. ... ', 'Rhymed poetry. In contrast to blank verse, rhymed poems rhyme by definition, although their scheme varies. ... ', 'Free verse. ... ', 'Epics. ... ', 'Narrative poetry. ... ', 'Haiku. ... ', 'Pastoral poetry. ... ', 'Sonnet.']",
'The main component of poetry is its meter (the regular pattern of strong and weak stress). When a poem has a recognizable but varying pattern of stressed and unstressed syllables, the poetry is written in verse. ... There are many possible patterns of verse, and the basic pattern of each unit is called a foot.',
"Some poetry may not make sense to you. But that's because poets don't write to be understood by others. They write because they must. The feelings and emotions that reside within them need to be expressed.",
]
)
# [{'corpus_id': ..., 'score': ...}, {'corpus_id': ..., 'score': ...}, ...]
📚 ドキュメント
モデルの詳細
モデルの説明
属性 | 詳細 |
---|---|
モデルタイプ | クロスエンコーダ |
ベースモデル | answerdotai/ModernBERT-large |
最大シーケンス長 | 8192トークン |
出力ラベル数 | 1つのラベル |
言語 | 英語 |
ライセンス | Apache-2.0 |
モデルの出所
- ドキュメント:Sentence Transformersドキュメント
- ドキュメント:クロスエンコーダドキュメント
- リポジトリ:GitHub上のSentence Transformers
- Hugging Face:Hugging Face上のクロスエンコーダ
評価
指標
クロスエンコーダの再ランキング(gooaq-dev
データセット、always_rerank_positives=False
)
CrossEncoderRerankingEvaluator
を使って評価します。パラメータは以下の通りです。
{
"at_k": 10,
"always_rerank_positives": false
}
指標 | 値 |
---|---|
map | 0.7586 (+0.2275) |
mrr@10 | 0.7576 (+0.2336) |
ndcg@10 | 0.7946 (+0.2034) |
クロスエンコーダの再ランキング(gooaq-dev
データセット、always_rerank_positives=True
)
CrossEncoderRerankingEvaluator
を使って評価します。パラメータは以下の通りです。
{
"at_k": 10,
"always_rerank_positives": true
}
指標 | 値 |
---|---|
map | 0.8176 (+0.2865) |
mrr@10 | 0.8166 (+0.2926) |
ndcg@10 | 0.8581 (+0.2669) |
クロスエンコーダの再ランキング(NanoMSMARCO_R100
、NanoNFCorpus_R100
、NanoNQ_R100
データセット、always_rerank_positives=True
)
CrossEncoderRerankingEvaluator
を使って評価します。パラメータは以下の通りです。
{
"at_k": 10,
"always_rerank_positives": true
}
指標 | NanoMSMARCO_R100 | NanoNFCorpus_R100 | NanoNQ_R100 |
---|---|---|---|
map | 0.5488 (+0.0592) | 0.3682 (+0.1072) | 0.6103 (+0.1907) |
mrr@10 | 0.5443 (+0.0668) | 0.5677 (+0.0678) | 0.6108 (+0.1841) |
ndcg@10 | 0.6323 (+0.0918) | 0.4136 (+0.0886) | 0.6570 (+0.1564) |
クロスエンコーダのNano BEIR(NanoBEIR_R100_mean
データセット)
CrossEncoderNanoBEIREvaluator
を使って評価します。パラメータは以下の通りです。
{
"dataset_names": [
"msmarco",
"nfcorpus",
"nq"
],
"rerank_k": 100,
"at_k": 10,
"always_rerank_positives": true
}
指標 | 値 |
---|---|
map | 0.5091 (+0.1190) |
mrr@10 | 0.5743 (+0.1063) |
ndcg@10 | 0.5676 (+0.1123) |
訓練の詳細
訓練データセット
未命名データセット
- サイズ:578,402個の訓練サンプル
- 列:
question
、answer
、label
- 最初の1000個のサンプルに基づく近似統計情報:
| | 質問 | 回答 | ラベル |
|------|------|------|------|
| タイプ | 文字列 | 文字列 | 整数 |
| 詳細 |
- 最小:22文字
- 平均:43.99文字
- 最大:93文字
- 最小:51文字
- 平均:252.75文字
- 最大:378文字
- 0:約82.30%
- 1:約17.70%
- サンプル:
| 質問 | 回答 | ラベル |
|------|------|------|
|
what are the characteristics and elements of poetry?
|The elements of poetry include meter, rhyme, form, sound, and rhythm (timing). Different poets use these elements in many different ways.
|1
| |what are the characteristics and elements of poetry?
|What's the first rule of writing poetry? That there are no rules — it's all up to you! Of course there are different poetic forms and devices, and free verse poems are one of the many poetic styles; they have no structure when it comes to format or even rhyming.
|0
| |what are the characteristics and elements of poetry?
|['Blank verse. Blank verse is poetry written with a precise meter—almost always iambic pentameter—that does not rhyme. ... ', 'Rhymed poetry. In contrast to blank verse, rhymed poems rhyme by definition, although their scheme varies. ... ', 'Free verse. ... ', 'Epics. ... ', 'Narrative poetry. ... ', 'Haiku. ... ', 'Pastoral poetry. ... ', 'Sonnet.']
|0
| - 損失関数:
BinaryCrossEntropyLoss
。パラメータは以下の通りです。
{
"activation_fn": "torch.nn.modules.linear.Identity",
"pos_weight": 5
}
訓練のハイパーパラメータ
デフォルトではないハイパーパラメータ
eval_strategy
:stepsper_device_train_batch_size
:64per_device_eval_batch_size
:64learning_rate
:2e-05num_train_epochs
:1warmup_ratio
:0.1seed
:12bf16
:Truedataloader_num_workers
:4load_best_model_at_end
:True
すべてのハイパーパラメータ
クリックして展開
overwrite_output_dir
: Falsedo_predict
: Falseeval_strategy
: stepsprediction_loss_only
: Trueper_device_train_batch_size
: 64per_device_eval_batch_size
: 64per_gpu_train_batch_size
: Noneper_gpu_eval_batch_size
: Nonegradient_accumulation_steps
: 1eval_accumulation_steps
: Nonetorch_empty_cache_steps
: Nonelearning_rate
: 2e-05weight_decay
: 0.0adam_beta1
: 0.9adam_beta2
: 0.999adam_epsilon
: 1e-08max_grad_norm
: 1.0num_train_epochs
: 1max_steps
: -1lr_scheduler_type
: linearlr_scheduler_kwargs
: {}warmup_ratio
: 0.1warmup_steps
: 0log_level
: passivelog_level_replica
: warninglog_on_each_node
: Truelogging_nan_inf_filter
: Truesave_safetensors
: Truesave_on_each_node
: Falsesave_only_model
: Falserestore_callback_states_from_checkpoint
: Falseno_cuda
: Falseuse_cpu
: Falseuse_mps_device
: Falseseed
: 12data_seed
: Nonejit_mode_eval
: Falseuse_ipex
: Falsebf16
: Truefp16
: Falsefp16_opt_level
: O1half_precision_backend
: autobf16_full_eval
: Falsefp16_full_eval
: Falsetf32
: Nonelocal_rank
: 0ddp_backend
: Nonetpu_num_cores
: Nonetpu_metrics_debug
: Falsedebug
: []dataloader_drop_last
: Falsedataloader_num_workers
: 4dataloader_prefetch_factor
: Nonepast_index
: -1disable_tqdm
: Falseremove_unused_columns
: Truelabel_names
: Noneload_best_model_at_end
: Trueignore_data_skip
: Falsefsdp
: []fsdp_min_num_params
: 0fsdp_config
: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}fsdp_transformer_layer_cls_to_wrap
: Noneaccelerator_config
: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}deepspeed
: Nonelabel_smoothing_factor
: 0.0optim
: adamw_torchoptim_args
: Noneadafactor
: Falsegroup_by_length
: Falselength_column_name
: lengthddp_find_unused_parameters
: Noneddp_bucket_cap_mb
: Noneddp_broadcast_buffers
: Falsedataloader_pin_memory
: Truedataloader_persistent_workers
: Falseskip_memory_metrics
: Trueuse_legacy_prediction_loop
: Falsepush_to_hub
: Falseresume_from_checkpoint
: Nonehub_model_id
: Nonehub_strategy
: every_savehub_private_repo
: Nonehub_always_push
: Falsegradient_checkpointing
: Falsegradient_checkpointing_kwargs
: Noneinclude_inputs_for_metrics
: Falseinclude_for_metrics
: []eval_do_concat_batches
: Truefp16_backend
: autopush_to_hub_model_id
: Nonepush_to_hub_organization
: Nonemp_parameters
:auto_find_batch_size
: Falsefull_determinism
: Falsetorchdynamo
: Noneray_scope
: lastddp_timeout
: 1800torch_compile
: Falsetorch_compile_backend
: Nonetorch_compile_mode
: Nonedispatch_batches
: Nonesplit_batches
: Noneinclude_tokens_per_second
: Falseinclude_num_input_tokens_seen
: Falseneftune_noise_alpha
: Noneoptim_target_modules
: Nonebatch_eval_metrics
: Falseeval_on_start
: Falseuse_liger_kernel
: Falseeval_use_gather_object
: Falseaverage_tokens_across_devices
: Falseprompts
: Nonebatch_sampler
: batch_samplermulti_dataset_batch_sampler
: proportional
訓練ログ
エポック | ステップ | 訓練損失 | gooaq-dev_ndcg@10 | NanoMSMARCO_R100_ndcg@10 | NanoNFCorpus_R100_ndcg@10 | NanoNQ_R100_ndcg@10 | NanoBEIR_R100_mean_ndcg@10 |
---|---|---|---|---|---|---|---|
-1 | -1 | - | 0.1279 (-0.4633) | 0.0555 (-0.4849) | 0.1735 (-0.1516) | 0.0686 (-0.4320) | 0.0992 (-0.3562) |
0.0001 | 1 | 1.2592 | - | - | - | - | - |
0.0221 | 200 | 1.1826 | - | - | - | - | - |
0.0443 | 400 | 0.7653 | - | - | - | - | - |
0.0664 | 600 | 0.6423 | - | - | - | - | - |
0.0885 | 800 | 0.6 | - | - | - | - | - |
0.1106 | 1000 | 0.5753 | 0.7444 (+0.1531) | 0.5365 (-0.0039) | 0.4249 (+0.0998) | 0.6111 (+0.1105) | 0.5242 (+0.0688) |
0.1328 | 1200 | 0.5313 | - | - | - | - | - |
0.1549 | 1400 | 0.5315 | - | - | - | - | - |
0.1770 | 1600 | 0.5195 | - | - | - | - | - |
0.1992 | 1800 | 0.5136 | - | - | - | - | - |
0.2213 | 2000 | 0.4782 | 0.7774 (+0.1862) | 0.6080 (+0.0676) | 0.4371 (+0.1120) | 0.6520 (+0.1513) | 0.5657 (+0.1103) |
0.2434 | 2200 | 0.5026 | - | - | - | - | - |
0.2655 | 2400 | 0.5011 | - | - | - | - | - |
0.2877 | 2600 | 0.4893 | - | - | - | - | - |
0.3098 | 2800 | 0.4855 | - | - | - | - | - |
0.3319 | 3000 | 0.4687 | 0.7692 (+0.1779) | 0.6181 (+0.0777) | 0.4273 (+0.1023) | 0.6686 (+0.1679) | 0.5713 (+0.1160) |
0.3541 | 3200 | 0.4619 | - | - | - | - | - |
0.3762 | 3400 | 0.4626 | - | - | - | - | - |
0.3983 | 3600 | 0.4504 | - | - | - | - | - |
0.4204 | 3800 | 0.4435 | - | - | - | - | - |
0.4426 | 4000 | 0.4573 | 0.7776 (+0.1864) | 0.6589 (+0.1184) | 0.4262 (+0.1012) | 0.6634 (+0.1628) | 0.5828 (+0.1275) |
0.4647 | 4200 | 0.4608 | - | - | - | - | - |
0.4868 | 4400 | 0.4275 | - | - | - | - | - |
0.5090 | 4600 | 0.4317 | - | - | - | - | - |
0.5311 | 4800 | 0.4427 | - | - | - | - | - |
0.5532 | 5000 | 0.4245 | 0.7795 (+0.1883) | 0.6021 (+0.0617) | 0.4387 (+0.1137) | 0.6560 (+0.1553) | 0.5656 (+0.1102) |
0.5753 | 5200 | 0.4243 | - | - | - | - | - |
0.5975 | 5400 | 0.4295 | - | - | - | - | - |
0.6196 | 5600 | 0.422 | - | - | - | - | - |
0.6417 | 5800 | 0.4165 | - | - | - | - | - |
0.6639 | 6000 | 0.4281 | 0.7859 (+0.1946) | 0.6404 (+0.1000) | 0.4449 (+0.1199) | 0.6458 (+0.1451) | 0.5770 (+0.1217) |
0.6860 | 6200 | 0.4155 | - | - | - | - | - |
0.7081 | 6400 | 0.4189 | - | - | - | - | - |
0.7303 | 6600 | 0.4066 | - | - | - | - | - |
0.7524 | 6800 | 0.4114 | - | - | - | - | - |
0.7745 | 7000 | 0.4111 | 0.7875 (+0.1963) | 0.6358 (+0.0954) | 0.4289 (+0.1038) | 0.6358 (+0.1351) | 0.5668 (+0.1114) |
0.7966 | 7200 | 0.3949 | - | - | - | - | - |
0.8188 | 7400 | 0.4019 | - | - | - | - | - |
0.8409 | 7600 | 0.395 | - | - | - | - | - |
0.8630 | 7800 | 0.3885 | - | - | - | - | - |
0.8852 | 8000 | 0.3991 | 0.7946 (+0.2034) | 0.6323 (+0.0918) | 0.4136 (+0.0886) | 0.6570 (+0.1564) | 0.5676 (+0.1123) |
0.9073 | 8200 | 0.3894 | - | - | - | - | - |
0.9294 | 8400 | 0.392 | - | - | - | - | - |
0.9515 | 8600 | 0.3853 | - | - | - | - | - |
0.9737 | 8800 | 0.3691 | - | - | - | - | - |
0.9958 | 9000 | 0.3784 | 0.7936 (+0.2024) | 0.6481 (+0.1077) | 0.4211 (+0.0961) | 0.6439 (+0.1433) | 0.5711 (+0.1157) |
-1 | -1 | - | 0.7946 (+0.2034) | 0.6323 (+0.0918) | 0.4136 (+0.0886) | 0.6570 (+0.1564) | 0.5676 (+0.1123) |
太字の行は保存されたチェックポイントを表します。
フレームワークのバージョン
- Python:3.11.10
- Sentence Transformers:3.5.0.dev0
- Transformers:4.49.0
- PyTorch:2.5.1+cu124
- Accelerate:1.5.2
- Datasets:2.21.0
- Tokenizers:0.21.0
🔧 技術詳細
このモデルは、answerdotai/ModernBERT-large
をベースに微調整されており、損失関数としてBinaryCrossEntropyLoss
を使用しています。訓練中は、学習率、バッチサイズ、エポック数などの一連のハイパーパラメータを最適化しています。特定のデータセットでの訓練により、モデルはテキストペア間の意味関係を学習し、テキストの再ランキングや意味検索機能を実現します。
📄 ライセンス
このモデルはApache-2.0ライセンスで提供されています。
📖 引用
BibTeX
Sentence Transformers
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}







