模型概述
模型特點
模型能力
使用案例
🚀 基於 intfloat/multilingual-e5-small 的句子轉換器
這是一個基於 sentence-transformers 的模型,它在包含韓語查詢 - 段落對的數據集上對 intfloat/multilingual-e5-small 進行了微調,以提高其在韓語檢索任務中的性能。該模型可以將句子和段落映射到一個 384 維的密集向量空間,可用於語義文本相似度計算、語義搜索、釋義挖掘、文本分類、聚類等任務。
這個模型是一個輕量級的韓語檢索器,設計初衷是便於使用,並在實際檢索任務中表現出色。它非常適合運行演示或輕量級應用程序,在速度和準確性之間取得了很好的平衡。
與參數數量多兩倍以上的 'intfloat/multilingual-e5-base' 大模型相比,這個小尺寸模型在韓語基準測試中表現出了 卓越的性能。這意味著你可以在使用一半計算資源的情況下,獲得優於基礎模型的性能。
為了獲得更高的檢索性能,我們建議將其與重排器結合使用。推薦的重排器模型如下:
- dragonkue/bge-reranker-v2-m3-ko
- BAAI/bge-reranker-v2-m3
🚀 快速開始
本模型可用於韓語檢索任務等多種場景,下面將詳細介紹其使用方法和相關信息。
✨ 主要特性
- 輕量級設計:適合運行演示或輕量級應用程序,在速度和準確性之間取得良好平衡。
- 性能卓越:在韓語基準測試中,小尺寸模型比大尺寸的 'intfloat/multilingual-e5-base' 模型表現更優。
- 可擴展性:可與重排器結合使用,進一步提高檢索性能。
📦 安裝指南
首先,你需要安裝 Sentence Transformers 庫:
pip install -U sentence-transformers
💻 使用示例
基礎用法
from sentence_transformers import SentenceTransformer
# 從 🤗 Hub 下載模型
model = SentenceTransformer("dragonkue/multilingual-e5-small-ko-v2")
# 運行推理
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]
高級用法
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-v2')
model = AutoModel.from_pretrained('dragonkue/multilingual-e5-small-ko-v2')
# 對輸入文本進行分詞
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())
📚 詳細文檔
模型詳情
屬性 | 詳情 |
---|---|
模型類型 | 句子轉換器 |
最大序列長度 | 512 個標記 |
輸出維度 | 384 維 |
相似度函數 | 餘弦相似度 |
模型融合
本模型使用 模型融合(Model Soup) 技術,通過加權平均合併以下兩個模型創建而成:
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 翻譯而來。
- AutoRAGRetrieval:一個通過解析五個領域(金融、公共、醫療、法律和商業)的 PDF 文件構建的 韓語文檔檢索數據集。
- MIRACLRetrieval:一個基於維基百科的 韓語文檔檢索數據集。
- PublicHealthQA:一個專注於 醫療和公共衛生領域 的韓語 檢索數據集。
- BelebeleRetrieval:一個基於 FLORES - 200 的 韓語文檔檢索數據集。
- MrTidyRetrieval:一個基於維基百科的 韓語文檔檢索數據集。
- 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 |
按模型大小的性能比較(基於平均 NDCG@10)
訓練詳情
訓練數據集
本模型在與 dragonkue/snowflake - arctic - embed - l - v2.0 - ko 相同的數據集上進行了微調,該數據集由韓語查詢 - 段落對組成。訓練目標是提高其在韓語任務中的檢索性能。
訓練方法
遵循 dragonkue/snowflake - arctic - embed - l - v2.0 - ko 的訓練方法,本模型基於聚類段落構建批內負樣本。此外,我們引入了可配置邊界的 GISTEmbedLoss。
📈 基於邊界的訓練結果
- 僅使用標準的 MNR(多負排名)損失會導致性能下降。
- 原始的 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
📄 許可證
本模型採用 Apache - 2.0 許可證。
FAQ
⚠️ 重要提示
輸入文本時,需要添加 "query: " 和 "passage: " 前綴,否則模型性能會下降。
💡 使用建議
- 對於開放問答中的段落檢索、即席信息檢索等非對稱任務,相應地使用 "query: " 和 "passage: "。
- 對於語義相似度、雙語挖掘、釋義檢索等對稱任務,使用 "query: " 前綴。
- 如果你想將嵌入向量用作特徵,如線性探測分類、聚類,使用 "query: " 前綴。
1. 是否需要在輸入文本中添加 "query: " 和 "passage: " 前綴? 是的,模型是按照這種方式進行訓練的,否則性能會下降。以下是一些使用規則:
- 對於開放問答中的段落檢索、即席信息檢索等非對稱任務,相應地使用 "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}
}
LM - Cocktail: Resilient Tuning of Language Models via Model Merging
@article{xiao2023lmcocktail,
title = {LM-Cocktail: Resilient Tuning of Language Models via Mode







