pipeline_tag: 句子相似度
license: cc-by-4.0
tags:
- 句子转换器
- 特征提取
- 句子相似度
- 转换器
language:
- 多语言
- 英语
- 印地语
- 马拉地语
- 卡纳达语
- 泰米尔语
- 泰卢固语
- 马拉雅拉姆语
- 古吉拉特语
- 奥里亚语
- 旁遮普语
- 孟加拉语
widget:
- source_sentence: "我们满怀热情地庆祝排灯节"
sentences:
- "我们快乐地庆祝排灯节"
- "排灯节是灯光的节日"
example_title: "单语言-马拉地语"
- source_sentence: "我们热情洋溢地庆祝排灯节"
sentences:
- "我们欢乐地庆祝排灯节"
- "排灯节是光明的节日"
example_title: "单语言-印地语"
- source_sentence: "我们兴高采烈地庆祝排灯节"
sentences:
- "我们愉快地庆祝排灯节"
- "排灯节是光明的庆典"
example_title: "单语言-古吉拉特语"
- source_sentence: "我们为身为印度人而自豪"
sentences:
- "我们以印度人的身份为傲"
- "我们为是印度人感到骄傲"
- "我们因印度血统而自豪"
example_title: "跨语言示例1"
- source_sentence: "雨后花园显得格外美丽"
sentences:
- "雨后的花园看起来非常迷人"
- "雨后的花园景色优美"
- "雨后的花园分外美丽"
example_title: "跨语言示例2"
印度语言SBERT模型
这是一个基于MuRIL模型(google/muril-base-cased)训练的模型,针对十种主要印度语言的NLI数据集进行了优化。
该单一模型适用于英语、印地语、马拉地语、卡纳达语、泰米尔语、泰卢固语、古吉拉特语、奥里亚语、旁遮普语、马拉雅拉姆语和孟加拉语。
该模型还具有跨语言能力。
作为MahaNLP项目的一部分发布:https://github.com/l3cube-pune/MarathiNLP
这里分享了一个更好的句子相似度模型(本模型的微调版本):https://huggingface.co/l3cube-pune/indic-sentence-similarity-sbert
关于数据集、模型和基准结果的更多细节可以在我们的论文中找到
@article{deode2023l3cube,
title={L3Cube-IndicSBERT: 使用多语言BERT学习跨语言句子表示的简单方法},
author={Deode, Samruddhi and Gadre, Janhavi and Kajale, Aditi and Joshi, Ananya and Joshi, Raviraj},
journal={arXiv预印本 arXiv:2304.11434},
year={2023}
}
单语言印度SBERT论文
多语言印度SBERT论文
其他单语言印度句子BERT模型如下:
马拉地语SBERT
印地语SBERT
卡纳达语SBERT
泰卢固语SBERT
马拉雅拉姆语SBERT
泰米尔语SBERT
古吉拉特语SBERT
奥里亚语SBERT
孟加拉语SBERT
旁遮普语SBERT
印度语言SBERT(多语言)
其他单语言相似度模型如下:
马拉地语相似度
印地语相似度
卡纳达语相似度
泰卢固语相似度
马拉雅拉姆语相似度
泰米尔语相似度
古吉拉特语相似度
奥里亚语相似度
孟加拉语相似度
旁遮普语相似度
印度语言相似度(多语言)
使用方法(Sentence-Transformers)
安装sentence-transformers后,可以轻松使用本模型:
pip install -U sentence-transformers
然后可以这样使用模型:
from sentence_transformers import SentenceTransformer
sentences = ["这是一个示例句子", "每个句子都会被转换"]
model = SentenceTransformer('{MODEL_NAME}')
embeddings = model.encode(sentences)
print(embeddings)
使用方法(HuggingFace Transformers)
如果不使用sentence-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('{MODEL_NAME}')
model = AutoModel.from_pretrained('{MODEL_NAME}')
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("句子嵌入:")
print(sentence_embeddings)