🚀 upskyy/bge-m3-korean
upskyy/bge-m3-korean
模型是基于 BAAI/bge-m3 进行 korsts 和 kornli 微调得到的。它能将句子和段落映射到 1024 维的密集向量空间,可用于语义文本相似度计算、语义搜索、释义挖掘、文本分类、聚类等任务。
🚀 快速开始
本模型可通过 sentence-transformers
库或 HuggingFace Transformers
库使用,下面会分别介绍使用方法。
✨ 主要特性
- 多语言支持:支持多种语言,包括韩语、英语等。
- 高维度输出:输出维度为 1024 维,能更好地表示句子语义。
- 长序列处理:最大序列长度可达 8192 个词元,可处理较长的文本。
- 多种相似度指标:支持余弦相似度、曼哈顿相似度、欧几里得相似度等多种相似度计算方法。
📦 安装指南
安装 Sentence Transformers 库
pip install -U sentence-transformers
💻 使用示例
基础用法(Sentence-Transformers)
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("upskyy/bge-m3-korean")
sentences = [
'아이를 가진 엄마가 해변을 걷는다.',
'두 사람이 해변을 걷는다.',
'한 남자가 해변에서 개를 산책시킨다.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
print(similarities)
高级用法(HuggingFace Transformers)
from transformers import AutoTokenizer, AutoModel
import torch
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0]
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
sentences = ["안녕하세요?", "한국어 문장 임베딩을 위한 버트 모델입니다."]
tokenizer = AutoTokenizer.from_pretrained("upskyy/bge-m3-korean")
model = AutoModel.from_pretrained("upskyy/bge-m3-korean")
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")
with torch.no_grad():
model_output = model(**encoded_input)
sentence_embeddings = mean_pooling(model_output, encoded_input["attention_mask"])
print("Sentence embeddings:")
print(sentence_embeddings)
📚 详细文档
模型详情
属性 |
详情 |
模型类型 |
Sentence Transformer |
基础模型 |
BAAI/bge-m3 |
最大序列长度 |
8192 个词元 |
输出维度 |
1024 个词元 |
相似度函数 |
余弦相似度 |
完整模型架构
SentenceTransformer(
(0): Transformer({'max_seq_length': 8192, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
(1): Pooling({'word_embedding_dimension': 1024, '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})
)
评估指标
语义相似度
指标 |
值 |
pearson_cosine |
0.874 |
spearman_cosine |
0.8724 |
pearson_manhattan |
0.8593 |
spearman_manhattan |
0.8688 |
pearson_euclidean |
0.8598 |
spearman_euclidean |
0.8694 |
pearson_dot |
0.8684 |
spearman_dot |
0.8666 |
pearson_max |
0.874 |
spearman_max |
0.8724 |
框架版本
- Python: 3.10.13
- Sentence Transformers: 3.0.1
- Transformers: 4.42.4
- PyTorch: 2.3.0+cu121
- Accelerate: 0.30.1
- Datasets: 2.16.1
- Tokenizers: 0.19.1
🔧 技术细节
本模型基于 BAAI/bge-m3
进行微调,通过自知识蒸馏技术实现多语言、多功能、多粒度的文本嵌入。在微调过程中,使用了 korsts
和 kornli
数据集,以提高模型在韩语语义相似度任务上的性能。
📄 许可证
文档未提及相关信息。
📚 引用
BibTeX
@misc{bge-m3,
title={BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation},
author={Jianlv Chen and Shitao Xiao and Peitian Zhang and Kun Luo and Defu Lian and Zheng Liu},
year={2024},
eprint={2402.03216},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@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",
}