8种优秀预训练模型大盘点,NLP应用so easy!
作者:网友投稿 时间:2019-04-01 16:50

大数据文摘出品
编译:李雷、蔡婕
如今,自然语言处理(NLP)可谓遍地开花,可以说正是我们了解它的好时机。
NLP的快速增长主要得益于通过预训练模型实现转移学习的概念。在NLP中,转移学习本质上是指在一个数据集上训练模型,然后调整该模型以便在不同数据集上实现NLP的功能。
这一突破使NLP应用变得如此简单,尤其是那些没有时间或资源从头开始构建NLP模型的人。或者,对于想要学习或者从其他领域过渡到NLP的新手来说,这简直就是完美。
一、为什么要使用预训练模型?
模型的作者已经设计出了基准模型,这样我们就可以在自己的NLP数据集上使用该预训练模型,而无需从头开始构建模型来解决类似的问题
尽管需要进行一些微调,但这为我们节省了大量的时间和计算资源
在本文中展示了那些助你开始NLP之旅的顶级预训练模型,以及该领域的最新研究成果。要查看关于计算机视觉中的顶级预训练模型的文章,请参阅:
https://www.analyticsvidhya.com/blog/2018/07/top-10-pretrained-models-get-started-deep-learning-part-1-computer-vision/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
二、本文涵盖的NLP预训练模型
我根据应用场景将预训练模型分为三类:
多用途NLP模型
ULMFiT
Transformer
谷歌的BERT
Transformer-XL
OpenAI的GPT-2
词嵌入NLP模型
ELMo
Flair
其他预训练模型
StanfordNLP
多用途NLP模型
多用途模型在NLP领域里一直为人们所关注。这些模型为提供了许多令人感兴趣的NLP应用 - 机器翻译、问答系统、聊天机器人、情感分析等。这些多用途NLP模型的核心是语言建模的理念。
简单来说,语言模型的目的是预测语句序列中的下一个单词或字符,在我们了解各模型时就会明白这一点。
如果你是NLP爱好者,那么一定会喜欢现在这部分,让我们深入研究5个最先进的多用途NLP模型框架。这里我提供了每种模型的研究论文和预训练模型的链接,来探索一下吧!
1. ULMFiT模型
ULMFiT由fast.ai(深度学习网站)的Jeremy Howard和DeepMind(一家人工智能企业)的Sebastian Ruder提出并设计。可以这么说,ULMFiT开启了转移学习的热潮。
正如我们在本文中所述,ULMFiT使用新颖的NLP技术取得了令人瞩目的成果。该方法对预训练语言模型进行微调,将其在WikiText-103数据集(维基百科的长期依赖语言建模数据集Wikitext之一)上训练,从而得到新数据集,通过这种方式使其不会忘记之前学过的内容。

ULMFiT比许多先进的文本分类模型还要好。我喜爱ULMFiT是因为它只需要很少的数据就可以来产生令人印象深刻的结果,使我们更容易理解并在机器上实现它!
也许你不知道ULMFiT其实是Universal Language Model Fine-Tuning(通用语言模型微调)的简称。“通用”一词在这里非常贴切 - 该框架几乎可以应用于任何NLP任务。
想知道有关ULMFiT的更多信息,请参阅以下文章和论文:
使用ULMFiT模型和Python 的fastai库进行文本分类(NLP)教程:https://www.analyticsvidhya.com/blog/2018/11/tutorial-text-classification-ulmfit-fastai-library/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
ULMFiT的预训练模型论文:https://www.paperswithcode.com/paper/universal-language-model-fine-tuning-for-text
其他研究论文:https://arxiv.org/abs/1801.06146
2. Transformer模型
Transformer架构是NLP近期最核心的发展,2017年由谷歌提出。当时,用于语言处理任务(如机器翻译和问答系统)的是循环神经网络(RNN)。
Transformer架构的性能比RNN和CNN(卷积神经网络)要好,训练模型所需的计算资源也更少,这对于每个使用NLP的人来说都是双赢。看看下面的比较:

各模型的英德翻译质量
根据Google的说法,Transformer模型“应用了一种自注意力机制,可直接模拟句子中所有单词之间的关系,而无需理会其各自的位置如何”。它使用固定长度上下文(也就是前面的单词)来实现。太复杂了?没事,我们举一例子简单说明。




