pipeline_tag: 句子相似度
language:
- 南非荷兰语
- 阿姆哈拉语
- 阿拉伯语
- 阿萨姆语
- 阿塞拜疆语
- 白俄罗斯语
- 保加利亚语
- 孟加拉语
- 藏语
- 波斯尼亚语
- 加泰罗尼亚语
- 宿务语
- 科西嘉语
- 捷克语
- 威尔士语
- 丹麦语
- 德语
- 希腊语
- 英语
- 世界语
- 西班牙语
- 爱沙尼亚语
- 巴斯克语
- 波斯语
- 芬兰语
- 法语
- 弗里西语
- 爱尔兰语
- 苏格兰盖尔语
- 加利西亚语
- 古吉拉特语
- 豪萨语
- 夏威夷语
- 希伯来语
- 印地语
- 苗语
- 克罗地亚语
- 海地克里奥尔语
- 匈牙利语
- 亚美尼亚语
- 印尼语
- 伊博语
- 冰岛语
- 意大利语
- 日语
- 爪哇语
- 格鲁吉亚语
- 哈萨克语
- 高棉语
- 卡纳达语
- 韩语
- 库尔德语
- 吉尔吉斯语
- 拉丁语
- 卢森堡语
- 老挝语
- 立陶宛语
- 拉脱维亚语
- 马尔加什语
- 毛利语
- 马其顿语
- 马拉雅拉姆语
- 蒙古语
- 马拉地语
- 马来语
- 马耳他语
- 缅甸语
- 尼泊尔语
- 荷兰语
- 挪威语
- 齐切瓦语
- 奥里亚语
- 旁遮普语
- 波兰语
- 葡萄牙语
- 罗马尼亚语
- 俄语
- 卢旺达语
- 僧伽罗语
- 斯洛伐克语
- 斯洛文尼亚语
- 萨摩亚语
- 修纳语
- 索马里语
- 阿尔巴尼亚语
- 塞尔维亚语
- 塞索托语
- 巽他语
- 瑞典语
- 斯瓦希里语
- 泰米尔语
- 泰卢固语
- 塔吉克语
- 泰语
- 土库曼语
- 他加禄语
- 土耳其语
- 鞑靼语
- 维吾尔语
- 乌克兰语
- 乌尔都语
- 乌兹别克语
- 越南语
- 沃洛夫语
- 科萨语
- 意第绪语
- 约鲁巴语
- 中文
- 祖鲁语
tags:
- BERT
- 句子嵌入
- 多语言
- 谷歌
- 句子相似度
- LEALLA
- LaBSE
license: apache-2.0
datasets:
- CommonCrawl
- 维基百科
LEALLA-base 模型
模型描述
LEALLA 是一套轻量级语言无关的句子嵌入模型集合,支持109种语言,由LaBSE蒸馏而来。该模型适用于获取多语言句子嵌入和双语文本检索。
本模型是从TF Hub上的v1版本迁移而来。两个版本模型生成的嵌入向量是等效的。不过对于某些语言(如日语),LEALLA模型在比较嵌入向量和相似度时需要更高的容忍度。
使用方式
基础使用方法:
import torch
from transformers import BertModel, BertTokenizerFast
tokenizer = BertTokenizerFast.from_pretrained("setu4993/LEALLA-base")
model = BertModel.from_pretrained("setu4993/LEALLA-base")
model = model.eval()
english_sentences = [
"dog",
"Puppies are nice.",
"I enjoy taking long walks along the beach with my dog.",
]
english_inputs = tokenizer(english_sentences, return_tensors="pt", padding=True)
with torch.no_grad():
english_outputs = model(**english_inputs)
获取句子嵌入向量(使用pooler输出):
english_embeddings = english_outputs.pooler_output
其他语言输出示例:
italian_sentences = [
"cane",
"I cuccioli sono carini.",
"Mi piace fare lunghe passeggiate lungo la spiaggia con il mio cane.",
]
japanese_sentences = ["犬", "子犬はいいです", "私は犬と一緒にビーチを散歩するのが好きです"]
italian_inputs = tokenizer(italian_sentences, return_tensors="pt", padding=True)
japanese_inputs = tokenizer(japanese_sentences, return_tensors="pt", padding=True)
with torch.no_grad():
italian_outputs = model(**italian_inputs)
japanese_outputs = model(**japanese_inputs)
italian_embeddings = italian_outputs.pooler_output
japanese_embeddings = japanese_outputs.pooler_output
计算句子相似度时,建议先进行L2归一化:
import torch.nn.functional as F
def similarity(embeddings_1, embeddings_2):
normalized_embeddings_1 = F.normalize(embeddings_1, p=2)
normalized_embeddings_2 = F.normalize(embeddings_2, p=2)
return torch.matmul(
normalized_embeddings_1, normalized_embeddings_2.transpose(0, 1)
)
print(similarity(english_embeddings, italian_embeddings))
print(similarity(english_embeddings, japanese_embeddings))
print(similarity(italian_embeddings, japanese_embeddings))
技术细节
关于训练数据、评估方法和性能指标的详细信息请参考原始论文。
BibTeX引用格式
@inproceedings{mao-nakagawa-2023-lealla,
title = "{LEALLA}: 基于知识蒸馏的轻量级语言无关句子嵌入学习",
author = "毛卓远 和
中川哲司",
booktitle = "第17届欧洲计算语言学协会会议论文集",
month = 5月,
year = "2023",
address = "克罗地亚杜布罗夫尼克",
publisher = "计算语言学协会",
url = "https://aclanthology.org/2023.eacl-main.138",
doi = "10.18653/v1/2023.eacl-main.138",
pages = "1886--1894",
abstract = "大规模语言无关的句子嵌入模型(如LaBSE)在平行句对齐任务中取得了最先进的性能。然而,这些大规模模型存在推理速度和计算开销的问题。本研究系统性地探索了使用轻量级模型学习语言无关句子嵌入的方法。我们证明,通过瘦深编码器可以为109种语言构建鲁棒的低维句子嵌入。结合我们提出的蒸馏方法,通过融入教师模型的知识实现了进一步改进。在Tatoeba、联合国和BUCC数据集上的实证结果验证了我们轻量级模型的有效性。我们在TensorFlow Hub上发布了轻量级语言无关句子嵌入模型LEALLA。",
}