模型概述
模型特點
模型能力
使用案例
🚀 基於intfloat/multilingual-e5-small的句子轉換器
這是一個基於 sentence-transformers 的模型,它在包含韓語查詢 - 段落對的數據集上,對 intfloat/multilingual-e5-small 進行了微調,以提升在韓語檢索任務中的性能。該模型能將句子和段落映射到一個384維的密集向量空間,可用於語義文本相似度計算、語義搜索、釋義挖掘、文本分類、聚類等任務。
這個模型是一個輕量級的韓語檢索器,設計初衷是便於使用,並在實際檢索任務中表現出色。它非常適合運行演示或輕量級應用程序,在速度和準確性之間取得了良好的平衡。
若要獲得更高的檢索性能,建議將其與重排器結合使用。推薦的重排器模型如下:
- dragonkue/bge-reranker-v2-m3-ko
- BAAI/bge-reranker-v2-m3
🚀 快速開始
本模型可用於多種自然語言處理任務,如語義文本相似度計算、語義搜索等。以下將詳細介紹模型的使用方法。
✨ 主要特性
- 微調優化:在包含韓語查詢 - 段落對的數據集上對
intfloat/multilingual-e5-small
進行微調,顯著提升韓語檢索任務的性能。 - 輕量級設計:作為輕量級的韓語檢索器,在速度和準確性之間取得良好平衡,適合運行演示或輕量級應用程序。
- 多任務支持:能夠將句子和段落映射到384維的密集向量空間,可用於語義文本相似度計算、語義搜索、釋義挖掘、文本分類、聚類等多種任務。
- 可擴展性:建議與重排器結合使用,如
dragonkue/bge-reranker-v2-m3-ko
和BAAI/bge-reranker-v2-m3
,以獲得更高的檢索性能。
📦 安裝指南
若要使用本模型,需安裝 sentence-transformers
庫。可以使用以下命令進行安裝:
pip install -U sentence-transformers
💻 使用示例
基礎用法
以下是使用 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())
📚 詳細文檔
模型詳情
模型描述
屬性 | 詳情 |
---|---|
模型類型 | 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()
)
評估
- 本次評估參考了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 |
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 |
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(Multiple Negatives Ranking)損失會導致性能下降。
- 原始的GISTEmbedLoss(無邊界)可帶來約+0.8 NDCG@10的適度提升。
- 應用邊界可使性能提升高達+1.5 NDCG@10。
- 這表明,簡單調整邊界值可實現高達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
🔧 技術細節
微調策略
本模型在包含韓語查詢 - 段落對的數據集上對 intfloat/multilingual-e5-small
進行微調,以提升韓語檢索任務的性能。微調過程中,採用了基於聚類段落構建批量內負樣本的方法,並引入了可配置邊界的GISTEmbedLoss,有效提升了模型的性能。
損失函數
引入了可配置邊界的GISTEmbedLoss,通過調整邊界值,可實現高達+1.5 NDCG@10的性能提升。這種基於邊界的方法擴展了NV-Retriever論文中提出的思想,將假負樣本視為由基於邊界的過濾引導的動態樣本。
訓練優化
sentence-transformers
庫現在支持帶有邊界配置的GISTEmbedLoss,便於集成到任何訓練管道中。通過安裝最新版本的 sentence-transformers
庫,可以輕鬆使用該損失函數進行訓練。
📄 許可證
本模型採用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}
}
侷限性
長文本將被截斷為最多512個標記。







