モデル概要
モデル特徴
モデル能力
使用事例
tags:
- sentence-transformers
- sentence-similarity
- feature-extraction
- generated_from_trainer base_model: intfloat/multilingual-e5-small pipeline_tag: sentence-similarity library_name: sentence-transformers license: apache-2.0 language:
- ko
- en

intfloat/multilingual-e5-smallを基にしたSentenceTransformer
これはintfloat/multilingual-e5-smallを韓国のクエリ-パッセージペアを含むデータセットでファインチューニングしたsentence-transformersモデルです。韓国語検索タスクの性能向上を目的としており、文章や段落を384次元の密なベクトル空間にマッピングできます。意味的テキスト類似性、意味的検索、パラフレーズマイニング、テキスト分類、クラスタリングなどに使用可能です。
このモデルは軽量な韓国語検索モデルとして設計されており、実用的な検索タスクで使いやすさと高い性能を両立しています。デモや軽量アプリケーションの実行に最適で、速度と精度のバランスが取れています。
さらに高い検索性能を求める場合、リランカーモデルとの組み合わせを推奨します。おすすめのリランカーモデル:
-
dragonkue/bge-reranker-v2-m3-ko
-
BAAI/bge-reranker-v2-m3
モデル詳細
モデル説明
- モデルタイプ: Sentence Transformer
- ベースモデル: intfloat/multilingual-e5-small
- 最大シーケンス長: 512トークン
- 出力次元数: 384次元
- 類似度関数: コサイン類似度
- トレーニングデータセット:
モデルソース
- ドキュメント: Sentence Transformers Documentation
- リポジトリ: Sentence Transformers on GitHub
- Hugging Face: Sentence Transformers on Hugging Face
完全なモデルアーキテクチャ
SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 384, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
(2): Normalize()
)
使用方法
🪶 軽量バージョンも利用可能
このモデルの軽量バージョンも提供しています:
exp-models/dragonkue-KoEn-E5-Tiny
,
韓国語と英語以外のトークンを削除してモデルサイズを縮小しながら性能を維持しています。
リポジトリにはGGUF量子化版も含まれており、効率的なローカルまたはオンデバイスでの埋め込みモデルサービスに適しています。
🔧 実用的なデプロイには、この軽量検索モデルとリランカーモデルの組み合わせを強く推奨します - 強力でリソース効率の良い検索システムを構築できます。
直接使用(Sentence Transformers)
まずSentence Transformersライブラリをインストール:
pip install -U sentence-transformers
その後、このモデルをロードして推論を実行できます。
from sentence_transformers import SentenceTransformer
# 🤗 Hubからダウンロード
model = SentenceTransformer("dragonkue/multilingual-e5-small-ko")
# 推論実行
sentences = [
'query: 북한가족법 몇 차 개정에서 이혼판결 확정 후 3개월 내에 등록시에만 유효하다는 조항을 확실히 했을까?',
'passage: 1990년에 제정된 북한 가족법은 지금까지 4차례 개정되어 현재에 이르고 있다. 1993년에 이루어진 제1차 개정은 주로 규정의 정확성을 기하기 위하여 몇몇 조문을 수정한 것이며, 실체적인 내용을 보완한 것은 상속의 승인과 포기기간을 설정한 제52조 정도라고 할 수 있다. 2004년에 이루어진 제2차에 개정에서는 제20조제3항을 신설하여 재판상 확정된 이혼판결을 3개월 내에 등록해야 이혼의 효력이 발생한다는 것을 명확하게 하였다. 2007년에 이루어진 제3차 개정에서는 부모와 자녀 관계 또한 신분등록기관에 등록한 때부터 법적 효력이 발생한다는 것을 신설(제25조제2항)하였다. 또한 미성년자, 노동능력 없는 자의 부양과 관련(제37조제2항)하여 기존에는 "부양능력이 있는 가정성원이 없을 경우에는 따로 사는 부모나 자녀, 조부모나 손자녀, 형제자매가 부양한다"고 규정하고 있었던 것을 "부양능력이 있는 가정성원이 없을 경우에는 따로 사는 부모나 자녀가 부양하며 그들이 없을 경우에는 조부모나 손자녀, 형제자매가 부양한다"로 개정하였다.',
'passage: 환경마크 제도, 인증기준 변경으로 기업부담 줄인다\n환경마크 제도 소개\n□ 개요\n○ 동일 용도의 다른 제품에 비해 '제품의 환경성*'을 개선한 제품에 로고와 설명을 표시할 수 있도록하는 인증 제도\n※ 제품의 환경성 : 재료와 제품을 제조․소비 폐기하는 전과정에서 오염물질이나 온실가스 등을 배출하는 정도 및 자원과 에너지를 소비하는 정도 등 환경에 미치는 영향력의 정도(「환경기술 및 환경산업 지원법」제2조제5호)\n□ 법적근거\n○ 「환경기술 및 환경산업 지원법」제17조(환경표지의 인증)\n□ 관련 국제표준\n○ ISO 14024(제1유형 환경라벨링)\n□ 적용대상\n○ 사무기기, 가전제품, 생활용품, 건축자재 등 156개 대상제품군\n□ 인증현황\n○ 2,737개 기업의 16,647개 제품(2015.12월말 기준)',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 384]
# 埋め込みの類似度スコアを取得
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [3, 3]
直接使用(Transformers)
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel
def average_pool(last_hidden_states: Tensor,
attention_mask: Tensor) -> Tensor:
last_hidden = last_hidden_states.masked_fill(~attention_mask[..., None].bool(), 0.0)
return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
# 各入力テキストは"query: "または"passage: "で始める必要があります(非英語テキストでも)
# 検索以外のタスクでは単に"query: "プレフィックスを使用できます
input_texts = ["query: 북한가족법 몇 차 개정에서 이혼판결 확정 후 3개월 내에 등록시에만 유효하다는 조항을 확실히 했을까?",
"passage: 1990년에 제정된 북한 가족법은 지금까지 4차례 개정되어 현재에 이르고 있다. 1993년에 이루어진 제1차 개정은 주로 규정의 정확성을 기하기 위하여 몇몇 조문을 수정한 것이며, 실체적인 내용을 보완한 것은 상속의 승인과 포기기간을 설정한 제52조 정도라고 할 수 있다. 2004년에 이루어진 제2차에 개정에서는 제20조제3항을 신설하여 재판상 확정된 이혼판결을 3개월 내에 등록해야 이혼의 효력이 발생한다는 것을 명확하게 하였다. 2007년에 이루어진 제3차 개정에서는 부모와 자녀 관계 또한 신분등록기관에 등록한 때부터 법적 효력이 발생한다는 것을 신설(제25조제2항)하였다. 또한 미성년자, 노동능력 없는 자의 부양과 관련(제37조제2항)하여 기존에는 "부양능력이 있는 가정성원이 없을 경우에는 따로 사는 부모나 자녀, 조부모나 손자녀, 형제자매가 부양한다"고 규정하고 있었던 것을 "부양능력이 있는 가정성원이 없을 경우에는 따로 사는 부모나 자녀가 부양하며 그들이 없을 경우에는 조부모나 손자녀, 형제자매가 부양한다"로 개정하였다.",
"passage: 환경마크 제도, 인증기준 변경으로 기업부담 줄인다\n환경마크 제도 소개\n□ 개요\n○ 동일 용도의 다른 제품에 비해 '제품의 환경성*'을 개선한 제품에 로고와 설명을 표시할 수 있도록하는 인증 제도\n※ 제품의 환경성 : 재료와 제품을 제조․소비 폐기하는 전과정에서 오염물질이나 온실가스 등을 배출하는 정도 및 자원과 에너지를 소비하는 정도 등 환경에 미치는 영향력의 정도(「환경기술 및 환경산업 지원법」제2조제5호)\n□ 법적근거\n○ 「환경기술 및 환경산업 지원법」제17조(환경표지의 인증)\n□ 관련 국제표준\n○ ISO 14024(제1유형 환경라벨링)\n□ 적용대상\n○ 사무기기, 가전제품, 생활용품, 건축자재 등 156개 대상제품군\n□ 인증현황\n○ 2,737개 기업의 16,647개 제품(2015.12월말 기준)"]
tokenizer = AutoTokenizer.from_pretrained('dragonkue/multilingual-e5-small-ko')
model = AutoModel.from_pretrained('dragonkue/multilingual-e5-small-ko')
# 入力テキストをトークン化
batch_dict = tokenizer(input_texts, max_length=512, padding=True, truncation=True, return_tensors='pt')
outputs = model(**batch_dict)
embeddings = average_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
# 埋め込みを正規化
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:1] @ embeddings[1:].T)
print(scores.tolist())
評価
- この評価はKURE GitHubリポジトリを参照しています (https://github.com/nlpai-lab/KURE)
- MTEBに登録されているすべての韓国語検索ベンチマークで評価を実施しました
韓国語検索ベンチマーク
- Ko-StrategyQA: StrategyQAから翻訳された韓国語ODQAマルチホップ検索データセット
- AutoRAGRetrieval: 金融、公共、医療、法律、商業の5分野のPDFを解析して構築した韓国語文書検索データセット
- MIRACLRetrieval: Wikipediaベースの韓国語文書検索データセット
- PublicHealthQA: 韓国語の医療・公衆衛生分野に特化した検索データセット
- BelebeleRetrieval: FLORES-200ベースの韓国語文書検索データセット
- MrTidyRetrieval: Wikipediaベースの韓国語文書検索データセット
- XPQARetrieval: クロスドメイン韓国語文書検索データセット
メトリクス
- 標準メトリクス : NDCG@10
情報検索
モデル | サイズ(M) | 平均 | XPQARetrieval | PublicHealthQA | MIRACLRetrieval | Ko-StrategyQA | BelebeleRetrieval | AutoRAGRetrieval | MrTidyRetrieval |
---|---|---|---|---|---|---|---|---|---|
BAAI/bge-m3 | 560 | 0.724169 | 0.36075 | 0.80412 | 0.70146 | 0.79405 | 0.93164 | 0.83008 | 0.64708 |
Snowflake/snowflake-arctic-embed-l-v2.0 | 560 | 0.724104 | 0.43018 | 0.81679 | 0.66077 | 0.80455 | 0.9271 | 0.83863 | 0.59071 |
intfloat/multilingual-e5-large | 560 | 0.721607 | 0.3571 | 0.82534 | 0.66486 | 0.80348 | 0.94499 | 0.81337 | 0.64211 |
intfloat/multilingual-e5-base | 278 | 0.689429 | 0.3607 | 0.77203 | 0.6227 | 0.76355 | 0.92868 | 0.79752 | 0.58082 |
dragonkue/multilingual-e5-small-ko | 118 | 0.688819 | 0.34871 | 0.79729 | 0.61113 | 0.76173 | 0.9297 | 0.86184 | 0.51133 |
exp-models/dragonkue-KoEn-E5-Tiny | 37 | 0.687496 | 0.34735 | 0.7925 | 0.6143 | 0.75978 | 0.93018 | 0.86503 | 0.50333 |
intfloat/multilingual-e5-small | 118 | 0.670906 | 0.33003 | 0.73668 | 0.61238 | 0.75157 | 0.90531 | 0.80068 | 0.55969 |
ibm-granite/granite-embedding-278m-multilingual | 278 | 0.616466 | 0.23058 | 0.77668 | 0.59216 | 0.71762 | 0.83231 | 0.70226 | 0.46365 |
ibm-granite/granite-embedding-107m-multilingual | 107 | 0.599759 | 0.23058 | 0.73209 | 0.58413 | 0.70531 | 0.82063 | 0.68243 | 0.44314 |
sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 | 118 | 0.409766 | 0.21345 | 0.67409 | 0.25676 | 0.45903 | 0.71491 | 0.42296 | 0.12716 |
モデルサイズ別性能比較(平均NDCG@10基準)

トレーニング詳細
トレーニングデータセット
このモデルはdragonkue/snowflake-arctic-embed-l-v2.0-koで使用されたのと同じデータセットでファインチューニングされました。韓国語のクエリ-パッセージペアで構成されています。トレーニング目的は韓国語タスクでの検索性能向上です。
トレーニング方法
dragonkue/snowflake-arctic-embed-l-v2.0-koで使用されたアプローチに従い、このモデルはクラスタ化されたパッセージに基づくin-batchネガティブを構築します。さらに、設定可能なマージンを持つGISTEmbedLossを導入しています。
📈 マージンベースのトレーニング結果
-
標準的なMNR(Multiple Negatives Ranking)損失のみを使用すると性能が低下しました。
-
元のGISTEmbedLoss(マージンなし)では約+0.8 NDCG@10の控えめな改善が見られました。
-
マージンを適用すると最大+1.5 NDCG@10の性能向上が得られました。
-
これは単にマージン値を調整するだけで最大2倍の改善が可能であり、マージンスケーリングの高い感度と有効性を示しています。
このマージンベースのアプローチは、NV-Retriever論文で提案されたアイデアを拡張したものです。元々はハードネガティブサンプリング中に偽ネガティブをフィルタリングするものでしたが、これをin-batchネガティブに適用し、マージンベースのフィルタリングによって導かれる動的サンプルとして偽ネガティブを扱います。

sentence-transformersライブラリは現在、マージン設定可能なGISTEmbedLossをサポートしており、任意のトレーニングパイプラインに簡単に統合できます。
最新版をインストール:
pip install -U sentence-transformers
トレーニングハイパーパラメータ
非デフォルトハイパーパラメータ
eval_strategy
: stepsper_device_train_batch_size
: 20000per_device_eval_batch_size
: 4096learning_rate
: 0.00025num_train_epochs
: 3warmup_ratio
: 0.05fp16
: Truedataloader_drop_last
: Truebatch_sampler
: no_duplicates
全ハイパーパラメータ
クリックで展開
overwrite_output_dir
: Falsedo_predict
: Falseeval_strategy
: stepsprediction_loss_only
: Trueper_device_train_batch_size
: 20000per_device_eval_batch_size
: 4096per_gpu_train_batch_size
: Noneper_gpu_eval_batch_size
: Nonegradient_accumulation_steps
: 1eval_accumulation_steps
: Nonetorch_empty_cache_steps
: Nonelearning_rate
: 0.00025weight_decay
: 0.0adam_beta1
: 0.9adam_beta2
: 0.999adam_epsilon
: 1e-08max_grad_norm
: 1.0num_train_epochs
: 2max_steps
: -1lr_scheduler_type
: linearlr_scheduler_kwargs
: {}warmup_ratio
: 0.05warmup_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
: 42data_seed
: Nonejit_mode_eval
: Falseuse_ipex
: Falsebf16
: Falsefp16
: Truefp16_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
: Truedataloader_num_workers
: 0dataloader_prefetch_factor
: Nonepast_index
: -1disable_tqdm
: Falseremove_unused_columns
: Truelabel_names
: Noneload_best_model_at_end
: Falseignore_data_skip
: Falsefsdp
: []fsdp_min_num_params
: 0fsdp_config
: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}tp_size
: 0fsdp_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
: 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
: no_duplicatesmulti_dataset_batch_sampler
: proportional
フレームワークバージョン
- Python: 3.11.10
- Sentence Transformers: 4.1.0
- Transformers: 4.51.3
- PyTorch: 2.7.0+cu126
- Accelerate: 1.6.0
- Datasets: 3.5.1
- Tokenizers: 0.21.1
FAQ
1. 入力テキストに"query: "や"passage: "プレフィックスを追加する必要がありますか?
はい、このモデルはそのようにトレーニングされているため、性能低下を防ぐために必要です。
基本的なルール:
非対称タスク(オープンQAでのパッセージ検索、アドホック情報検索など)には"query: "と"passage: "を対応させて使用します。
対称タスク(意味的類似性、バイテキストマイニング、パラフレーズ検索など)には"query: "プレフィックスを使用します。
線形プローブ分類、クラスタリングなど特徴量として埋め込みを使用する場合も"query: "プレフィックスを使用します。
2. なぜコサイン類似度スコアが0.7から1.0の範囲に分布するのですか?
これはInfoNCEコントラスティブ損失に低い温度0.01を使用しているためで、予期された動作です。
テキスト検索や意味的類似性などのタスクでは、スコアの絶対値ではなく相対的な順序が重要であるため、問題にはなりません。
引用
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",
}
ベースモデル
@article{wang2024multilingual,
title={Multilingual E5 Text Embeddings: A Technical Report},
author={Wang, Liang and Yang, Nan and Huang, Xiaolong and Yang, Linjun and Majumder, Rangan and Wei, Furu},
journal={arXiv preprint arXiv:2402.05672},
year={2024}
}
NV-Retriever: Improving text embedding models with effective hard-negative mining
@article{moreira2024nvretriever,
title = {NV-Retriever: Improving text embedding models with effective hard-negative mining},
author = {Moreira, Gabriel de Souza P. and Osmulski, Radek and Xu, Mengyao and Ak, Ronay and Schifferer, Benedikt and Oldridge, Even},
journal = {arXiv preprint arXiv:2407.15831},
year = {2024},
url = {https://arxiv.org/abs/2407.15831},
doi = {10.48550/arXiv.2407.15831}
}
KURE
@misc{KURE,
publisher = {Youngjoon Jang, Junyoung Son, Taemin Lee},
year = {2024},
url = {https://github.com/nlpai-lab/KURE}
}
制限事項
長いテキストは最大512トークンに切り詰められます。
謝辞
このモデルの最適化と圧縮に貢献されたlemon-mint氏に特別な感謝を申し上げます。







