让神经网络理解每个词的意思很容易,但上下文、词语之间的关系,依然是自然语言处理(NLP)中的难题。 Salesforce的一群NLP研究者发现,搞图像识别的同行们有个不错的办法,值得一试。 在图像识别领域,atv,把ImageNet上预训练的CNN拿来,用在其他图像识别模型中,已经成为一种惯例。这种把训练好的模型参数迁移到新模型的方法,也就是这两年大热的迁移学习。 Learned in Translation 我们所能想到的大部分NLP任务,都有“理解上下文”的需求。 机器翻译模型需要知道英语句子中的这些词是怎样组合在一起的,才能正确地把它翻译成其他语言;自动文本摘要模型需要了解上下文,才能知道哪些词是最重要的;问答模型需要知道问题中的词如何与文档中的词关联。 既然大家都需要,那能不能选一个任务训练一个“理解上下文”的组件,然后用到其他任务中呢? △用机器学习预训练一个编码器,得到的上下文向量(CoVe)能提升其他NLP模型的表现 Saleforce的新论文Learned in Translation: Contextualized Word Vectors讲的就是这个问题。 Bryan McCann等研究员先通过英语-德语翻译任务,训练一个神经网络模型在上上文中理解词语,得到名为“上下文向量(context vectors, CoVe)”的输出。 然后,他们把CoVe用到了语义情感分析、问题分类、文本蕴含、问答等多种NLP任务上,这些模型的性能都得到了提升。 词向量 如今大部分NLP深度学习模型,都靠词向量(word vectors)来表示词义。在为特定任务训练模型之前,词向量可能是随机的数字,也可能用用word2vec、GloVe、FastText等方法进行了初始化。 word2vec和GloVe生成的词向量,直播,与在自然语言中经常与这个词共现的词相关,其中word2vec模型会根据输入词来预测周围的相关词语,而GloVe在此基础上,还会统计两个词共同出现的频率。 在一个NLP任务中使用word2vec和GloVe训练的词向量,比随机初始化的词向量效果要好,但是还有改进的空间: 模型需要知道怎样使用这些词向量,也就是如何把它们置于上下文之中。 理解上下文 要在上下文中理解词语,通常会用到循环神经网络(RNN)。RNN非常适合处理词向量序列,本文作者为了更好地处理长序列,使用了一种特殊的RNN结构:长短时记忆网络(LSTM)。 这个LSTM是一个编码器,它以词向量作为输入,输出隐藏向量。研究员们尝试预训练这个编码器,让它输出在多种NLP任务上通用的隐藏向量。 用什么任务来进行预训练呢?他们选择了机器翻译。 与其他NLP任务相比,机器翻译有着更大规模的数据集,也更适合用来训练通用隐藏向量:它比文本分类等任务更需要软件理解语言的含义。 预训练完成后,研究员们得到一个LSTM,称为MT-LSTM,可以用来为新句子输出隐藏向量。他们称这些隐藏向量为CoVe,可以作为其他NLP模型的输入。 迁移效果 Salesforce研究员探索了在文本分类和问答模型上使用CoVe的效果。 他们使用了下列数据集: 情感分类 SST-2 https://nlp.stanford.edu/sentiment/treebank.html SST-5 https://nlp.stanford.edu/sentiment/treebank.html IMDb ~amaas/data/sentiment/ 问题分类 TREC-6 TREC-50 蕴含分类 SNLI https://nlp.stanford.edu/projects/snli/ 问答 SQuAD https://rajpurkar.github.io/SQuAD-explorer/ 在每一类任务上,他们都对不同方法做了比较,也就是使用以下类型的输入序列:随机初始化词向量、用GloVe初始化的词向量、经GloVe+CoVe初始化的词向量。 GloVe和CoVe一起用时,需要用预训练的MT-LSTM来处理GloVe的输出序列,得到CoVe序列,然后将其中的每个向量加在GloVe序列中相应的向量之上。 结果显示,GloVe和CoVe一起用效果是最好的: 在这些任务上,都是机器学习训练集越大,使用CoVe的效果就越好: 结论 简单概括起来,这项研究就是说,让AI学一学翻译,能帮它更好地理解语言,在分类、问答等等其他NLP任务上都会有更好的表现。�� 相关链接 博客文章: https://einstein.ai/research/learned-in-translation-contextualized-word-vectors 论文: Bryan McCann, James Bradbury, Caiming Xiong, and Richard Socher. 2017. Learned in Translation: Contextualized Word Vectors https://einstein.ai/static/images/layouts/research/cove/McCann2017LearnedIT.pdf PyTorch代码: https://github.com/salesforce/cove word2vec: https://www.tensorflow.org/tutorials/word2vec GloVe: https://nlp.stanford.edu/projects/glove/ FastText: https://github.com/facebookresearch/fastText (责任编辑:本港台直播) |