SONAR
我们推出了SONAR,这是一种新的多语言和多模态固定大小的句子嵌入空间,配备了一整套语音和文本编码器和解码器。它在xsim和xsim++多语言相似度搜索任务上的表现大大超过了现有的句子嵌入方法,如LASER3和LabSE。
语音片段可以使用特定语言的语音编码器嵌入到相同的SONAR嵌入空间中,这些编码器是在语音转录数据上以教师-学生的方式训练的。我们还提供了一个单一的文本解码器,使我们能够执行文本到文本和语音到文本的机器翻译,包括零样本语言和模态组合。
SONAR代表Sentence-level multimOdal and laNguage-Agnostic Representations(句子级多模态和语言无关表示)
支持的语言完整列表(以及下载链接)可以在下方找到。
SONAR架构:
文本结果
语音结果
安装
你可以通过pip install sonar-space
安装SONAR。注意,pip上还有另一个sonar
包,那个不是本项目,请确保在你的依赖中使用sonar-space
。
如果你想手动安装SONAR,可以在本地安装。SONAR主要依赖于Fairseq2,可以使用以下命令安装(已在python=3.8
上测试):
pip install --upgrade pip
pip install -e .
如果fairseq2没有为你的机器提供构建,请查看该项目的readme以在本地构建。
使用方法
在使用以下命令时,fairseq2会自动将模型下载到你的$TORCH_HOME/hub
目录中。
使用SONAR计算文本句子嵌入:
from sonar.inference_pipelines.text import TextToEmbeddingModelPipeline
t2vec_model = TextToEmbeddingModelPipeline(encoder="text_sonar_basic_encoder",
tokenizer="text_sonar_basic_encoder")
sentences = ['My name is SONAR.', 'I can embed the sentences into vectorial space.']
embeddings = t2vec_model.predict(sentences, source_lang="eng_Latn")
print(embeddings.shape)
# torch.Size([2, 1024])
从SONAR嵌入重构文本
from sonar.inference_pipelines.text import EmbeddingToTextModelPipeline
vec2text_model = EmbeddingToTextModelPipeline(decoder="text_sonar_basic_decoder",
tokenizer="text_sonar_basic_encoder")
reconstructed = vec2text_model.predict(embeddings, target_lang="eng_Latn", max_seq_len=512)
# max_seq_len是传递给fairseq2 BeamSearchSeq2SeqGenerator的关键字参数。
print(reconstructed)
# ['My name is SONAR.', 'I can embed the sentences into vector space.']
使用SONAR翻译文本
from sonar.inference_pipelines.text import TextToTextModelPipeline
t2t_model = TextToTextModelPipeline(encoder="text_sonar_basic_encoder",
decoder="text_sonar_basic_decoder",
tokenizer="text_sonar_basic_encoder") # tokenizer同时附加到编码器和解码器卡片上
sentences = ['My name is SONAR.', 'I can embed the sentences into vectorial space.']
t2t_model.predict(sentences, source_lang="eng_Latn", target_lang="fra_Latn")
# ['Mon nom est SONAR.', "Je peux intégrer les phrases dans l'espace vectoriel."]
使用SONAR计算语音句子嵌入
from sonar.inference_pipelines.speech import SpeechToEmbeddingModelPipeline
s2vec_model = SpeechToEmbeddingModelPipeline(encoder="sonar_speech_encoder_eng")
s2vec_model.predict(["./tests/integration_tests/data/audio_files/audio_1.wav",
"./tests/integration_tests/data/audio_files/audio_2.wav"]).shape
# torch.Size([2, 1024])
import torchaudio
inp, sr = torchaudio.load("./tests/integration_tests/data/audio_files/audio_1.wav")
assert sr == 16000, "采样率应为16kHz"
s2vec_model.predict([inp]).shape
# torch.Size([1, 1024])
使用SONAR进行语音到文本翻译
from sonar.inference_pipelines.speech import SpeechToTextModelPipeline
s2t_model = SpeechToTextModelPipeline(encoder="sonar_speech_encoder_eng",
decoder="text_sonar_basic_decoder",
tokenizer="text_sonar_basic_decoder")
import torchaudio
inp, sr = torchaudio.load("./tests/integration_tests/data/audio_files/audio_1.wav")
assert sr == 16000, "采样率应为16kHz"
# 传入加载的音频文件
s2t_model.predict([inp], target_lang="eng_Latn")
# ['Television reports show white smoke coming from the plant.']
# 传入多个wav文件
s2t_model.predict(["./tests/integration_tests/data/audio_files/audio_1.wav",
"./tests/integration_tests/data/audio_files/audio_2.wav"], target_lang="eng_Latn")
# ['Television reports show white smoke coming from the plant.',
# 'These couples may choose to make an adoption plan for their baby.']
使用BLASER 2.0模型预测句子相似度
BLASER 2.0是一系列基于SONAR嵌入的自动评估机器翻译质量的模型。它们预测翻译与源文本之间的跨语言语义相似度(可选择性地使用参考翻译)。
from sonar.inference_pipelines.text import TextToEmbeddingModelPipeline
from sonar.models.blaser.loader import load_blaser_model
blaser_ref = load_blaser_model("blaser_2_0_ref").eval()
blaser_qe = load_blaser_model("blaser_2_0_qe").eval()
text_embedder = TextToEmbeddingModelPipeline(encoder="text_sonar_basic_encoder", tokenizer="text_sonar_basic_encoder")
src_embs = text_embedder.predict(["Le chat s'assit sur le tapis."], source_lang="fra_Latn")
ref_embs = text_embedder.predict(["The cat sat on the mat."], source_lang="eng_Latn")
mt_embs = text_embedder.predict(["The cat sat down on the carpet."], source_lang="eng_Latn")
print(blaser_ref(src=src_embs, ref=ref_embs, mt=mt_embs).item()) # 4.688
print(blaser_qe(src=src_embs, mt=mt_embs).item()) # 4.708
更多示例的详细模型卡片:[facebook/blaser-2.0-ref],[facebook/blaser-2.0-qe]。
演示笔记本
查看更完整的演示笔记本:
支持的语言和下载链接
SONAR文本编码器和解码器支持200种语言。SONAR语音编码器支持37种语言。
<详情> <摘要>可用的文本编码器/解码器</摘要>
支持No Language Left Behind项目中的所有200种语言。
</详情>
<详情> <摘要>可用的语音编码器</摘要>
语言代码 | 语言 | 链接 |
---|---|---|
arb | 现代标准阿拉伯语 | 下载 |
asm | 阿萨姆语 | 下载 |
bel | 白俄罗斯语 | 下载 |
ben | 孟加拉语 | 下载 |
bos | 波斯尼亚语 | 下载 |
bul | 保加利亚语 | 下载 |
cat | 加泰罗尼亚语 | 下载 |
ces | 捷克语 | 下载 |
cmn | 汉语普通话 | 下载 |
cym | 威尔士语 | 下载 |
dan | 丹麦语 | 下载 |
deu | 德语 | 下载 |
est | 爱沙尼亚语 | 下载 |
fin | 芬兰语 | 下载 |
fra | 法语 | 下载 |
guj | 古吉拉特语 | 下载 |
heb | 希伯来语 | 下载 |
hin | 印地语 | 下载 |
hrv | 克罗地亚语 | 下载 |
ind | 印度尼西亚语 | 下载 |
ita | 意大利语 | 下载 |
jpn | 日语 | 下载 |
kan | 卡纳达语 | 下载 |
kor | 韩语 | 下载 |
lao | 老挝语 | 下载 |
lit | 立陶宛语 | 下载 |
lvs | 标准拉脱维亚语 | 下载 |
mal | 马拉雅拉姆语 | 下载 |
mar | 马拉地语 | 下载 |
mkd | 马其顿语 | 下载 |
mlt | 马耳他语 | 下载 |
npi | 尼泊尔语 | 下载 |
nld | 荷兰语 | 下载 |
ory | 奥里亚语 | 下载 |
pan | 旁遮普语 | 下载 |
pes | 西波斯语 | 下载 |
pol | 波兰语 | 下载 |
por | 葡萄牙语 | 下载 |
ron | 罗马尼亚语 | 下载 |
rus | 俄语 | 下载 |
slk | 斯洛伐克语 | 下载 |
slv | 斯洛文尼亚语 | 下载 |
snd | 信德语 | 下载 |
srp | 塞尔维亚语 | 下载 |
spa | 西班牙语 | 下载 |
swe | 瑞典语 | 下载 |
swh | 斯瓦希里语 | 下载 |
tam | 泰米尔语 | 下载 |
tel | 泰卢固语 | 下载 |
tgl | 他加禄语 | 下载 |
tha | 泰语 | 下载 |
tur | 土耳其语 | 下载 |
ukr | 乌克兰语 | 下载 |
urd | 乌尔都语 | 下载 |
uzn | 北乌兹别克语 | 下载 |
vie | 越南语 | 下载 |
yue | 粤语 | 下载 |
引用信息
在引用SONAR嵌入空间、编码器和解码器时,请引用以下论文:
@misc{Duquenne:2023:sonar_arxiv,
author = {Paul-Ambroise Duquenne and Holger Schwenk and Benoit Sagot},
title = {{SONAR:} Sentence-Level Multimodal and Language-Agnostic Representations},
publisher = {arXiv},
year = {2023},
url = {https://arxiv.org/abs/2308.11466},
}
贡献
关于如何提供帮助,请参阅CONTRIBUTING文件。
许可证
SONAR代码在MIT许可证下发布(参见CODE_LICENSE)。
一些SONAR模型也在相同的MIT许可证下发布,但请注意,有些模型是在非商业许可证下发布的(参见NC_MODEL_LICENSE)。 详情请参阅LICENSE。