モデル概要
モデル特徴
モデル能力
使用事例
🚀 intfloat/multilingual-e5-smallベースのSentenceTransformer
このモデルは、sentence-transformersをベースに、intfloat/multilingual-e5-smallを韓国語のクエリとパッセージのペアを含むデータセットでファインチューニングしたものです。韓国語の検索タスクでの性能向上を目指しており、文章や段落を384次元の密ベクトル空間にマッピングし、意味的な文章の類似度、意味的な検索、言い換えのマイニング、テキスト分類、クラスタリングなどに利用できます。
このモデルは軽量な韓国語検索モデルで、使いやすさと実用的な検索タスクでの高い性能を兼ね備えています。デモや軽量なアプリケーションの実行に最適で、速度と精度のバランスが良いです。
この小型モデルは、パラメータ数が2倍以上ある' intfloat/multilingual-e5-base 'モデルよりも、韓国語のベンチマークで優れた性能を発揮します。つまり、半分の計算リソースでベースモデル以上の性能を享受できます。
さらに高い検索性能を得るためには、リランカーと組み合わせることをおすすめします。推奨されるリランカーモデルは以下の通りです。
- dragonkue/bge-reranker-v2-m3-ko
- BAAI/bge-reranker-v2-m3
🚀 クイックスタート
このモデルは、韓国語の検索タスクに特化したSentence Transformerモデルです。以下のセクションでは、モデルの詳細、使用方法、評価結果、学習の詳細、FAQ、引用情報などを説明します。
✨ 主な機能
- 韓国語のクエリとパッセージのペアを含むデータセットでファインチューニングされたSentence Transformerモデル。
- 文章や段落を384次元の密ベクトル空間にマッピングし、意味的な文章の類似度、意味的な検索、言い換えのマイニング、テキスト分類、クラスタリングなどに利用できます。
- 小型モデルでありながら、韓国語のベンチマークで高い性能を発揮します。
- リランカーと組み合わせることで、さらに高い検索性能を得ることができます。
📦 インストール
まず、Sentence Transformersライブラリをインストールします。
pip install -U sentence-transformers
💻 使用例
基本的な使用法 (Sentence Transformers)
from sentence_transformers import SentenceTransformer
# Download from the 🤗 Hub
model = SentenceTransformer("dragonkue/multilingual-e5-small-ko-v2")
# Run inference
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]
# Get the similarity scores for the embeddings
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]
# Each input text should start with "query: " or "passage: ", even for non-English texts.
# For tasks other than retrieval, you can simply use the "query: " prefix.
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-v2')
model = AutoModel.from_pretrained('dragonkue/multilingual-e5-small-ko-v2')
# Tokenize the input texts
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'])
# normalize embeddings
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:1] @ embeddings[1:].T)
print(scores.tolist())
📚 ドキュメント
モデルの詳細
属性 | 详情 |
---|---|
モデルタイプ | Sentence Transformer |
最大シーケンス長 | 512トークン |
出力次元数 | 384次元 |
類似度関数 | コサイン類似度 |
このモデルは、Model Soup技術を使用して、以下の2つのモデルを重み付き平均でマージすることで作成されています。
dragonkue/multilingual-e5-small-ko
(韓国語特化, 60%の重み)intfloat/multilingual-e5-small
(ベースの多言語モデル, 40%の重み)
6:4の重み比は、実験的な評価によって最適と判断されました。
関連リソース
- 実装コード: FlagEmbedding/LM_Cocktail
- 研究論文: LM-Cocktail: Resilient Tuning of Language Models via Model Merging
- 技術ブログ: JinaAI's "Model Soups: Recipe for Embeddings"
完全なモデルアーキテクチャ
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()
)
評価
- この評価は、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 |
dragonkue/multilingual-e5-small-ko-v2 | 118 | 0.692511 | 0.34739 | 0.77234 | 0.63262 | 0.76849 | 0.92962 | 0.85623 | 0.54089 |
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 |
学習の詳細
学習データセット
このモデルは、dragonkue/snowflake-arctic-embed-l-v2.0-koで使用されたのと同じデータセットでファインチューニングされています。このデータセットは韓国語のクエリとパッセージのペアで構成されており、学習の目的は韓国語のタスクに特化した検索性能の向上です。
学習方法
dragonkue/snowflake-arctic-embed-l-v2.0-koで使用された学習アプローチに従い、このモデルはクラスタリングされたパッセージに基づいてバッチ内のネガティブサンプルを構築しています。さらに、設定可能なマージンを持つGISTEmbedLossを導入しています。
📈 マージンベースの学習結果
- 標準のMNR (Multiple Negatives Ranking)損失のみを使用すると、性能が低下しました。
- 元のGISTEmbedLoss (マージンなし)では、NDCG@10で約+0.8の小幅な改善が見られました。
- マージンを適用すると、NDCG@10で最大+1.5の性能向上が見られました。
- これは、マージン値を調整するだけで最大2倍の改善が得られることを示しており、マージンスケーリングの高い感度と有効性を示しています。
このマージンベースのアプローチは、NV-Retriever論文で提案されたアイデアを拡張したもので、元々はハードネガティブサンプリング時に誤ったネガティブサンプルをフィルタリングしていました。これをバッチ内のネガティブサンプルに適用し、誤ったネガティブサンプルをマージンベースのフィルタリングによってガイドされる動的なサンプルとして扱っています。
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
⚠️ 重要提示
入力テキストに"query: "と"passage: "の接頭辞を付ける必要があります。これはモデルの学習方法であり、付けない場合は性能が低下します。
💡 使用建议
- オープンQAやアドホックな情報検索などの非対称タスクでは、それぞれ"query: "と"passage: "を使用します。
- 意味的な類似度、バイテキストマイニング、言い換え検索などの対称タスクでは、"query: "接頭辞を使用します。
- 埋め込みを特徴量として使用する場合(線形プロービング分類、クラスタリングなど)も、"query: "接頭辞を使用します。
Q1. 入力テキストに"query: "と"passage: "の接頭辞を付ける必要がありますか? A. はい、これはモデルの学習方法であり、付けない場合は性能が低下します。以下は目安となるルールです。
- オープンQAやアドホックな情報検索などの非対称タスクでは、それぞれ"query: "と"passage: "を使用します。
- 意味的な類似度、バイテキストマイニング、言い換え検索などの対称タスクでは、"query: "接頭辞を使用します。
- 埋め込みを特徴量として使用する場合(線形プロービング分類、クラスタリングなど)も、"query: "接頭辞を使用します。
Q2. コサイン類似度のスコアが0.7から1.0の間に分布するのはなぜですか? A. これは、InfoNCE対照損失に低温0.01を使用しているため、予想される既知の動作です。テキスト検索や意味的な類似度などのテキスト埋め込みタスクでは、絶対値ではなくスコアの相対的な順序が重要であるため、これは問題にはなりません。
📄 ライセンス
このモデルは、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",
}
ベースモデル
@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}
}
LM-Cocktail: Resilient Tuning of Language Models via Model Merging
@article{xiao2023lmcocktail,
title = {LM-Cocktail: Resilient Tuning of Language Models via Model Merging},
author = {Xiao, Jin and Zhang, Fuzheng and Zheng, Zilong and others},
journal = {arXiv preprint arXiv:2311.13534},
year = {2023},
url = {https://arxiv.org/abs/2311.13534}
}







