Sentence Transformers:使用BERT及其他模型的多语言句子、段落和图像嵌入
这个框架提供了一种简单的方法来计算句子、段落和图像的密集向量表示。这些模型基于BERT、RoBERTa、XLM-RoBERTa等transformer网络,在各种任务中达到了最先进的性能。文本被嵌入到向量空间中,使得相似的文本更接近,可以使用余弦相似度进行高效查找。
我们为100多种语言提供了越来越多的**最先进的预训练模型**,这些模型针对各种用例进行了微调。
此外,该框架还允许轻松**微调自定义嵌入模型**,以在特定任务上达到最佳性能。
有关完整文档,请参阅**www.SBERT.net**。
安装
我们推荐使用Python 3.8+、PyTorch 1.11.0+和transformers v4.34.0+。
使用pip安装
pip install -U sentence-transformers
使用conda安装
conda install -c conda-forge sentence-transformers
从源代码安装
或者,您也可以克隆仓库中的最新版本,并直接从源代码安装:
pip install -e .
带CUDA的PyTorch
如果您想使用GPU/CUDA,必须安装与CUDA版本匹配的PyTorch。有关如何安装PyTorch的更多详细信息,请参阅PyTorch - 入门。
入门
请参阅我们文档中的快速入门。
首先下载一个预训练模型。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
然后向模型提供一些句子。
sentences = [
"今天天气很好。",
"外面阳光明媚!",
"他开车去了体育场。",
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# => (3, 384)
就这么简单。现在我们得到了一个numpy数组,其中包含每个文本的嵌入。我们可以使用这些嵌入来计算相似度。
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 0.6660, 0.1046],
# [0.6660, 1.0000, 0.1411],
# [0.1046, 0.1411, 1.0000]])
预训练模型
我们提供了一个包含100多种语言的预训练模型大列表。有些模型是通用目的模型,而其他模型则为特定用例生成嵌入。预训练模型可以通过简单传递模型名称来加载:SentenceTransformer('model_name')
。
训练
这个框架允许你微调自己的句子嵌入方法,以获得特定任务的句子嵌入。你有多种选择来为你的特定任务获得完美的句子嵌入。
查看训练概述以了解如何训练你自己的嵌入模型。我们提供了各种示例,展示如何在各种数据集上训练模型。
一些亮点包括:
- 支持各种transformer网络,包括BERT、RoBERTa、XLM-R、DistilBERT、Electra、BART等
- 多语言和多任务学习
- 训练期间的评估,以找到最佳模型
- 20多种损失函数,允许专门为语义搜索、释义挖掘、语义相似度比较、聚类、三元组损失、对比损失等调整模型
应用示例
你可以使用这个框架进行:
以及更多用例。
所有示例请参见examples/applications。
开发设置
克隆仓库(或fork)到你的机器后,在虚拟环境中运行:
python -m pip install -e ".[dev]"
pre-commit install
要测试你的更改,运行:
pytest
引用与作者
如果你觉得这个仓库有帮助,欢迎引用我们的论文Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks:
@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",
}
如果你使用了多语言模型之一,欢迎引用我们的论文Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation:
@inproceedings{reimers-2020-multilingual-sentence-bert,
title = "Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2020",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/2004.09813",
}
请查看出版物以了解我们集成到SentenceTransformers中的不同出版物。
维护者:Tom Aarsen,🤗 Hugging Face
https://www.ukp.tu-darmstadt.de/
如果有什么问题(不应该出现的问题)或者你有进一步的疑问,请不要犹豫,直接提出问题。 本仓库包含实验性软件,发布的唯一目的是为相关出版物提供额外的背景细节。