Facebook开源NLP迁移学习工具包,支持93种语言,性能最优
【新智元导读】Facebook今天开源了增强版的NLP工具包LASER,支持93种语言,用28种不同的字母表编写。这成为第一个成功探索大型多语言句子表示的开源NLP工具。
Facebook今天宣布扩展并增强了NLP工具包LASER(Language-Agnostic SEntence Representations),并将其开源。
LASER成为第一个成功探索大型多语言句子表示的开源NLP工具。该工具包现在支持90多种语言,用28种不同的字母表编写。LASER通过将所有语言联合嵌入到一个共享空间(而不是为每种语言分别建模)来实现这些结果。
Facebook还免费提供多语言编码器和PyTorch代码,以及包含100多种语言的多语言测试集。
开源地址:
https://github.com/facebookresearch/LASER
LASER打开了从一种语言(如英语)到其他语言(包括训练数据极其有限的语言)进行NLP模型零样本迁移(zero-shot transfer)打开了大门。LASER是第一个使用单一模型处理多种语言的库,包括低资源语言(如卡拜尔语和维吾尔语)以及方言(如吴语)。
未来,这项工作可以帮助Facebook和其他公司推出一些特定的NLP功能,比如用一种语言将电影评论分类为正面或负面,然后使用100多种其他语言发表。
性能和特征亮点
LASER将XNLI语料库14种语言中13种的零样本跨语言自然语言推理精度提高到新的最高水平。它还在跨文本文档分类(MLDoc语料库)得到强大的结果。我们的句子嵌入在并行语料库挖掘方面也很强大,在BUCC共享任务中为四个语言对的其中三个提供了新的最优结果(BUCC是2018年的一个关于构建和使用可比较语料库的研讨会)。
除了LASER工具包,我们还在Tatoeba语料库的基础上共享了包含100多种语言的对齐句子测试集。使用这个数据集,我们的句子嵌入在多语言相似度搜索任务中获得了强大的结果,即使是低资源语言也是如此。
LASER还提供了其他一些优势:
- 它提供非常快的性能,在GPU上每秒能处理多达2000个句子。
- 句子编码器使用PyTorch实现,只有最小的外部依赖性。
- 低资源语言可以从多种语言的联合训练中获益。
- 模型支持在一个句子中使用多种语言。
- 随着添加更多新语言,系统会学习识别语系的特征,性能也会提高。
通用的语言无关(language-agnostic)句子嵌入
LASER的句子向量表示对于输入语言和NLP任务都是通用的。该工具将任何语言中的一个句子映射到高维空间中的一个点,目标是使任何语言中的相同语句最终位于同一个域。该表示可以看作是语义向量空间中的一种通用语言。我们已经观察到,空间中的距离与句子的语义紧密程度密切相关。
左边的图像显示了单语嵌入空间。右边是LASER方法的图示,它将所有语言嵌入到一个共享空间中。
我们的方法基于与神经机器翻译相同的基础技术:编码器/解码器方法,也称为序列到序列处理(sequence-to-sequence processing)。我们为所有输入语言使用一个共享编码器,并使用一个共享解码器生成输出语言。编码器是一个5层的双向LSTM网络。与神经机器翻译不同的是,我们不使用注意力机制,而是使用1024维固定大小的向量来表示输入的句子。它是通过对BiLSTM的最后状态进行max-pooling得到的。这使我们能够比较句子的表示形式,并将它们直接输入分类器。
我们的方法的架构
这些句子嵌入用于通过线性转换初始化 decoder LSTM,并在每个时间步上将其连接到输入嵌入。编码器和解码器之间没有其他的连接,因为我们希望输入序列的所有相关信息都被句子嵌入所捕获。
解码器必须要知道应该生成哪种语言。它采用一种语言标识嵌入,该标识在每个时间步中连接到输入和句子嵌入。我们使用带有50000个操作的联合字节对编码(byte-pair encoding, BPE)词汇表,在所有训练语料库的连接上进行训练。由于编码器没有指示输入语言的显式信号,因此该方法鼓励编码器学习与语言无关的表示。
我们基于公共并行数据的2.23亿个句子(这些句子与英语或西班牙语对齐)对系统进行训练。对于每一个mini-batch,我们随机选择一种输入语言,并训练系统将句子翻译成英语或西班牙语。大多数语言都与这两种目标语言对齐,但这不是必需的。
这项工作的开始阶段,我们训练了不到10种欧洲语言,这些语言都使用同一个拉丁字母系统。后来,我们逐渐增加到Europarl语料库中提供的21种语言,结果表明,随着语言的增加,多语言迁移的性能也得到了提高。该系统学习了语言系属(language families)的一般特征。通过这种方式,低资源语言可以从同语系高资源语言的资源中获益。
这可以通过使用在所有语言的连接上进行训练的共享BPE词汇表来实现。我们对每种语言的BPE词汇表分布之间的Kullback-Leiber距离进行了对称聚类分析,结果表明,Kullback-Leiber距离与语言学上定义的语系几乎完全相关。
上图显示了LASER自动发现的各种语言之间的关系。它们非常符合语言学家人工定义的语系。
然后,我们意识到,一个共享的BiLSTM编码器可以处理多个脚本,我们逐渐扩展到所有可用并行文本的语言。纳入LASER的93种语言包括主语-谓语-宾语(SVO)顺序的语言(如英语)、主语-宾语-谓语(SOV)顺序的语言(如孟加拉语和突厥语)、谓语-主语-宾语(VSO)顺序的语言(如他加禄语和柏柏尔语),甚至谓语-主语-宾语(VOS)顺序的语言(如马达加斯加语)。
我们的编码器能够推广到训练期间没有使用的语言(甚至是单语文本)。我们发现,它在一些区域语言上表现很好,如阿斯图里亚语、法罗语、弗里斯兰语、卡舒比语、北摩鹿加语、皮埃蒙特语、斯瓦比亚语和索布语。所有这些语言都在不同程度上与其他主要语言有一些相似之处,但它们的语法或特定词汇有所不同。
这张表显示了LASER在XNLI语料库上的zero-shot迁移性能 (Conneau et al., Evaluating Cross-lingual Sentence Representations, EMNLP’18)。BERT的结果来自它的GitHub README。(注:这些结果是用PyTorch 1.0实现得到的,与本文使用PyTorch 0.4得到的结果略有不同。)
零样本、跨语言的自然语言推理
我们的模型在跨语言自然语言推理(cross-lingual natural language inference, NLI)中取得了良好的效果。在这个任务上的表现是一个强有力的指标,它能很好地说明这个模型是如何表达一个句子的意思的。我们考虑了zero-shot设置,换句话说,是针对英语训练NLI分类器,然后将其应用到所有目标语言,而不需要进行微调或使用目标语言资源。
在14种语言中,有8种语言的zero-shot 性能与英语的性能相比差距不超过5%,包括俄语、汉语和越南语等较远的语言。我们在斯瓦希里语和乌尔都语这样的低资源语言上也取得了不错的成绩。最后,LASER在14种语言中的测试中,有13种语言的表现优于之前所有的zero-shot transfer方法。
我们的系统是完全多语言的,支持不同语言的任意前提和假设组合,这与以前的方法不同,以前的方法需要一个英语句子。
上表显示了LASER如何在不同语言的XNLI语料库中确定句子之间的关系。以前的方法只考虑相同语言的前提和假设。
同样的句子编码器也被用于在大量单语文本中挖掘并行数据。我们只需要计算所有句子对之间的距离并选择最接近的句子对。通过考虑最近的句子和其他最近句子之间的距离,这种方法得到了进一步的改进。这个搜索是使用Facebook的FAISS library高效执行的。
我们在共享BUCC任务上的表现远远超过了当前最高的技术水平。最优的系统是为这项任务专门开发的。我们将德语/英语的 F1得分从 85.5 提高到 96.2,法语/英语的得分从 81.5 提高到 93.9,俄语/英语从 81.3 提高到 93.3,汉语/英语从 77.5 提高到 92.3。 所有这些示例都表明,我们的结果在所有语言中都是高度同质的。
该方法的详细描述可以阅读与Mikel Artetxe合著的研究论文 Massively Multilingual Sentence Embeddings for Zero-Shot Cross-Lingual Transfer and Beyond
地址:https://arxiv.org/abs/1812.10464
使用任意语言对,同样的方法也可以用来挖掘90多种语言的并行数据。这将显著改善许多依赖于并行训练数据的NLP应用,包括低资源语言的神经机器翻译。
未来的应用
LASER库还可以用于其他相关任务。例如,多语言语义空间的属性可以用于解释句子或搜索具有相似含义的句子——可以使用同一种语言,也可以使用LASER目前支持的93种语言中的任何一种。我们将继续改进模型,在现有的93种语言基础上增加更多的语言。