ONNX 模型库
返回模型

说明文档

This is a translation task, not a search task. Let me translate the README directly.


<img src="https://cdn-uploads.huggingface.co/production/uploads/642b0c2fecec03b4464a1d9b/IxcqY5qbGNuGpqDciIcOI.webp" width="600">

基于 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 <!-- at revision c007d7ef6fd86656326059b28395a7a03a7c5846 -->
  • 最大序列长度: 512 tokens
  • 输出维度: 384 维
  • 相似度函数: 余弦相似度
  • 训练数据集:

<!-- - 语言: 未知 --> <!-- - 许可证: 未知 -->

模型来源

完整模型架构

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()
)

使用方法

直接使用(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())

<!--

下游使用(Sentence Transformers)

您可以在此数据集上微调此模型。

<details><summary>点击展开</summary>

</details> -->

<!--

超出范围的使用

列出模型可能被预见滥用的方式,并说明用户不应对模型做什么。 -->

评估

  • 本评估参考了 KURE GitHub 代码库。
  • 我们在 MTEB 中注册的所有 韩语检索基准 上进行了评估。

韩语检索基准

  • Ko-StrategyQA:从 StrategyQA 翻译而来的韩语 ODQA 多跳检索数据集
  • 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)

<img src="https://cdn-uploads.huggingface.co/production/uploads/642b0c2fecec03b4464a1d9b/ZgOwD9nlgVchYBqK4iXTW.png" width="1000"/>

<!--

建议

针对可预见问题的建议有哪些?例如,过滤显式内容。 -->

训练详情

训练数据集

该模型使用与 dragonkue/snowflake-arctic-embed-l-v2.0-ko 相同的数据集进行微调,该数据集由韩语查询-段落对组成。 训练目标是专门提升韩语任务的检索性能。

训练方法

遵循 dragonkue/snowflake-arctic-embed-l-v2.0-ko 中使用的训练方法,该模型基于聚类的段落构建批次内负样本。此外,我们引入了带有可配置边距的 GISTEmbedLoss。

📈 基于边距的训练结果

  • 单独使用标准 MNR(多负样本排序)损失会导致性能下降。

  • 原始 GISTEmbedLoss(无边距)仅带来约 +0.8 NDCG@10 的 modest 改进。

  • 应用边距后,性能提升高达 +1.5 NDCG@10。

  • 这表明简单地调整边距值可以带来高达 2 倍的改进,显示出边距缩放的强敏感性和有效性。

这种基于边距的方法扩展了 NV-Retriever 论文中提出的想法,该论文最初在困难负样本采样期间过滤假负样本。 我们将此方法应用于批次内负样本,将假负样本视为由基于边距的过滤引导的动态样本。

<img src="https://cdn-uploads.huggingface.co/production/uploads/642b0c2fecec03b4464a1d9b/IpDDTshuZ5noxPOdm6gVk.png" width="800"/>

sentence-transformers 库现在支持带有边距配置的 GISTEmbedLoss,可以轻松集成到任何训练流程中。

您可以通过以下方式安装最新版本:

pip install -U sentence-transformers

训练超参数

非默认超参数

  • eval_strategy: steps
  • per_device_train_batch_size: 20000
  • per_device_eval_batch_size: 4096
  • learning_rate: 0.00025
  • num_train_epochs: 3
  • warmup_ratio: 0.05
  • fp16: True
  • dataloader_drop_last: True
  • batch_sampler: no_duplicates

所有超参数

<details><summary>点击展开</summary>

  • overwrite_output_dir: False
  • do_predict: False
  • eval_strategy: steps
  • prediction_loss_only: True
  • per_device_train_batch_size: 20000
  • per_device_eval_batch_size: 4096
  • per_gpu_train_batch_size: None
  • per_gpu_eval_batch_size: None
  • gradient_accumulation_steps: 1
  • eval_accumulation_steps: None
  • torch_empty_cache_steps: None
  • learning_rate: 0.00025
  • weight_decay: 0.0
  • adam_beta1: 0.9
  • adam_beta2: 0.999
  • adam_epsilon: 1e-08
  • max_grad_norm: 1.0
  • num_train_epochs: 2
  • max_steps: -1
  • lr_scheduler_type: linear
  • lr_scheduler_kwargs: {}
  • warmup_ratio: 0.05
  • warmup_steps: 0
  • log_level: passive
  • log_level_replica: warning
  • log_on_each_node: True
  • logging_nan_inf_filter: True
  • save_safetensors: True
  • save_on_each_node: False
  • save_only_model: False
  • restore_callback_states_from_checkpoint: False
  • no_cuda: False
  • use_cpu: False
  • use_mps_device: False
  • seed: 42
  • data_seed: None
  • jit_mode_eval: False
  • use_ipex: False
  • bf16: False
  • fp16: True
  • fp16_opt_level: O1
  • half_precision_backend: auto
  • bf16_full_eval: False
  • fp16_full_eval: False
  • tf32: None
  • local_rank: 0
  • ddp_backend: None
  • tpu_num_cores: None
  • tpu_metrics_debug: False
  • debug: []
  • dataloader_drop_last: True
  • dataloader_num_workers: 0
  • dataloader_prefetch_factor: None
  • past_index: -1
  • disable_tqdm: False
  • remove_unused_columns: True
  • label_names: None
  • load_best_model_at_end: False
  • ignore_data_skip: False
  • fsdp: []
  • fsdp_min_num_params: 0
  • fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
  • tp_size: 0
  • fsdp_transformer_layer_cls_to_wrap: None
  • accelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
  • deepspeed: None
  • label_smoothing_factor: 0.0
  • optim: adamw_torch
  • optim_args: None
  • adafactor: False
  • group_by_length: False
  • length_column_name: length
  • ddp_find_unused_parameters: None
  • ddp_bucket_cap_mb: None
  • ddp_broadcast_buffers: False
  • dataloader_pin_memory: True
  • dataloader_persistent_workers: False
  • skip_memory_metrics: True
  • use_legacy_prediction_loop: False
  • push_to_hub: False
  • resume_from_checkpoint: None
  • hub_model_id: None
  • hub_strategy: every_save
  • hub_private_repo: None
  • hub_always_push: False
  • gradient_checkpointing: False
  • gradient_checkpointing_kwargs: None
  • include_inputs_for_metrics: False
  • include_for_metrics: []
  • eval_do_concat_batches: True
  • fp16_backend: auto
  • push_to_hub_model_id: None
  • push_to_hub_organization: None
  • mp_parameters:
  • auto_find_batch_size: False
  • full_determinism: False
  • torchdynamo: None
  • ray_scope: last
  • ddp_timeout: 1800
  • torch_compile: False
  • torch_compile_backend: None
  • torch_compile_mode: None
  • include_tokens_per_second: False
  • include_num_input_tokens_seen: False
  • neftune_noise_alpha: None
  • optim_target_modules: None
  • batch_eval_metrics: False
  • eval_on_start: False
  • use_liger_kernel: False
  • eval_use_gather_object: False
  • average_tokens_across_devices: False
  • prompts: None
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: proportional

</details>

框架版本

  • 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

常见问题

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 个 token。

<!--

术语表

明确定义术语以便跨受众理解。 -->

<!--

模型卡作者

列出创建模型卡的人员,为模型卡详细工作中投入的努力提供认可和责任。 -->

<!--

模型卡联系方式

为想要更新模型卡、提出建议或有疑问的人提供联系方式。 -->

exp-models/dragonkue-KoEn-E5-Tiny-ONNX

作者 exp-models

sentence-similarity sentence-transformers
↓ 0 ♥ 1

创建时间: 2025-05-13 10:40:10+00:00

更新时间: 2025-05-13 10:55:05+00:00

在 Hugging Face 上查看

文件 (12)

.gitattributes
1_Pooling/config.json
README.md
config.json
config_sentence_transformers.json
modules.json
onnx/model.onnx ONNX
onnx/model_qint8_arm64.onnx ONNX
sentence_bert_config.json
special_tokens_map.json
tokenizer.json
tokenizer_config.json