免费的NLP学习资源,了解一下
摘要: 本文列出了一些适用于初学者和从业者学习自然语言处理的相关资源。
自然语言处理表示计算机系统理解人类语言的能力,它是人工智能的一部分。网上有很多种资源可以帮助你从零开始学习NLP。本文列出了适用于初学者和从业者的一些相关资源。
给初学者的自然语言资源
对于初学者,可以采用两种传统的方法—机器学习和深度学习来开始自然语言处理。这两种方法是不同的,你可以点击这里来查看它们之间的区别。
传统机器学习
传统的机器学习算法比较复杂,不太容易理解。个人建议使用深度学习来做NLP更快捷。
深度学习(Deep Learning)
深度学习是机器学习的一个分支领域,由于人工神经网络的引入,深度学习比传统机器学习的表现要好得多。可以通过深度学习来学习NLP,对于初学者可以查看以下的资源:
· CS224n:这是从零开始通过深度学习来学习NLP的最佳课程。本课程由斯坦福大学主办,可以点击这里访问;
· YoavGolberg的免费和付费的书,是在NLP中开始深度学习的好资源。免费书籍可以在这里访问;
· 在Jacob Einsenstein的关于GATECH的NLP类的笔记中,覆盖了所有NLP的算法,而NLP类几乎能处理所有的NLP方法,点击这里可以访问他的笔记;
给从业者的自然语言处理的学习资源
如果你是一个数据专家,可能需要如下三种类型的资源:
1、快速入门指南
2、特定问题的检查方法
3、时常阅读文章
快速入门指南
· 对于NLP的概述,可以从Daniel W. Otter等人的深度学习报告开始,点击这里访问。
· Tom Young等人的一篇调查报告总结了基于深度学习的NLP中的所有最新内容,建议从业者开始使用NLP,点击这里查看报告。
· 这有一篇不错的论文,让我们了解了如何隐藏循环神经网络(Recurrent Neural Networks,RNNs)的状态。我还推荐如下两篇博文:
o 了解LSTM(Long Short-Term Memory)网络
o 扩展的递归神经网络
· 卷积神经网络(Convolutional Neural Networks,CNNs/ConvNets)也可以被用来理解自然语言处理。通过阅读这篇论文,你可以想象CNNs如何在NLP中进行应用;
· ShaojieBai等人在一篇论文中强调了如何将CNNs和RNNs进行比较。PyTorch张量库所有的代码是开放的,点击这里可以查看。
特定问题的处理方法
从业者需要的另一种类型的资源是,如果要选择一个算法来执行任务,那么能够应用的最好的方法有哪些呢?
文本分类
文本分类方面的种类居多,可以是将文本分成不同的类别或检测文本中的观点/情感的形式。
我想介绍一个容易理解的我们前些时候在ParallelDots博客上做的情感分析技术的调查报告。虽然这项调查是关于情感分析技术的,但是它包含了大多数的文本分类问题。
我们的调查技术性没有那么强,但很有趣,并且能够指导你利用更好的资源来理解概念。有一些Arxiv调查报告技术性非常强,这就需要你阅读其它的一些论文来深入理解主题。我建议的方法是使用本文中的链接来熟悉,并享受其中的乐趣,但之后建议阅读我提供的指南。记住,虽然兴趣很重要,但技巧有时也很重要,否则很难在新的环境中应用概念。另一个情感分析算法的调查报告可以在这里访问。
如果你还没听说过迁移学习,其实它正在快速地深入到深度学习领域之中。就像在图片里利用ImageNet分类来训练模型,还可以针对任何分类任务进行微调,在Wikipedia网站上训练NLP模型,用于语言建模,目前可以在相对较少的数据量上传输学习文本分类。现在我们还没有关于这个问题的调查报告,但是我可以告诉你在OpenAI上Reuder和Howard的两篇论文,它们涉及下面所提到的技术:
· 面向文本分类的通用语言模型的微调
· 生成性预训练提高语言理解能力
在Fast.ai上有详细的方法使用文档。
如果你正在进行两个不同任务的迁移学习,这里将介绍使用Convnets的技巧。恕我直言,这些技术将逐渐地采用其它的分类方法。我们还发布了Zero Shot文本分类上的工作成果,并得到了不错的准确性,没有任何数据集上的训练,而且正在致力于后面深入的工作。我们已经建了一个通常称为自定义分类器的文本分类API,你可以在其中定义自己的类别,可以点击查看demo。
序列标注
序列标注是一个给字词加属性的工作,其中包括词性标注、命名的实体识别、关键词标注等。我们写了一个有趣的任务检验方法,请点击查看这里。
关于这些问题,你可以查看今年COLING大会上的一篇论文,它给出了训练序列标注算法的最优准则,可以点击这里查看。
机器翻译
· 近来NLP最大的进步是提供了将文本从一种语言翻译成另一种语言的算法。Google的系统是一个16层的LSTM,并给出了最优翻译结果;
· 关于机器翻译的更多教程,你可以参考Philip Koehn的论文。点击这里可以查看有关利用深度学习来进行机器翻译的详细资料。
这里有两篇我非常喜欢的论文:
· 当你有足够多的数据时,Google论文会告诉你如何全面完整地解决问题;
· Facebook的卷积机器翻译系统和相关代码作为一个库发布在这里;
· https://marian-nmt.github.io/,这是一个关于快速翻译的C++语言框架,http://www.aclweb.org/anthology/P18-4020;
· http://opennmt.net/,使每个人都能训练自己的机器翻译系统;
常见问题
· SQuAD数据集是一个问答数据集,它用来测试算法阅读理解和回答问题的能力。微软今年早些时候发布了一篇论文,声称他们在这一领域的NLP成果已经达到了相当于人类水平的准确性,可以在这里查看论文。另一个重要的算法是Allen AI的BiDAF(Bi-Directional Attention Flow);
· 另一个重要算法是关于视觉问答的,给出了关于图像问题的答案。在2017年的VQA挑战赛上,Teney等人发表的论文是一个很好的基础入门资料,可以在GITHUB上找到相关的实现代码。
· 在现实生活中,对大型文档的提取式问答可以利用迁移学习来实现,点击这里可以查到相关论文。这里有一篇非常好的论文驳斥了问答算法的“理解”,如果你正从事相关的工作,强烈建议阅读。
释义、语句相似度或推理
语句对比的工作,NLP有三个不同的任务: 语句相似度, 释义检测和自然语言推理(Natural Language Inference,NLI),为此,每一个任务都需要有比以前更多的语义理解。MultiNLI及其子集Stanford NLI是最著名的基准数据集,并且在最近成为了研究的热点。还有用于释义检测的MS Paraphrase Corpus和Quora Corpus以及用于STS(语义文本相似性)的SemEval数据集。在这个领域关于高级模型的调查报告点击这里可以访问到。
在这个领域中,我非常喜欢的论文有以下几篇:
· Omar Levy小组的一篇论文表明了即使是简单的算法也能够执行操作,这是因为算法没有学习“推理”。
· BiMPM(双边多角度句子匹配)是一个预测释义的好模型,可以点击这里查看。
· 还有一项用于释义检测的新工作,它把关系网络应用到语句表示上面了,并在今年的AINL会议上得到了认可,可以点击这里阅读相关信息。
其它领域
· 语言建模(LM)—语言建模是关于学习一种语言的无监督表示的过程,这是通过给出一个语句中前n个词来预测第(n+1)个词完成的。这些模型有两个重要的实际环境应用,一个是自动完成建模,另外一个是作为上文中提到的用于文本分类的迁移学习基础模型。点击这里可以查看一个比较长的调查报告。如果你对如何在手机或者搜索引擎中根据搜索历史记录自动完成LSTMs感兴趣,这里推荐一篇很好的论文。
· 关系提取—关系提取是指在一个句子中抽取实体之间关系的行为。因此,所给句子中“A是作为r到B的关联”,你会得到三重关系(A,r,B)。在该领域中研究工作的调查报告可以点击这里查看。我还发现了一篇论文非常不错,是使用BiDAF进行Zero Shot关系提取的。
· 对话系统—随着聊天机器人的出现,对话系统现在非常流行。许多人将对话系统作为意图检测、关键词检测、问题回答等模型的实现,而一些人则试着进行全面建模。我也顺便提一下Parl.ai,这是Facebook AI的一个人工智能对话技术框架。
· 文本摘要—文本摘要是从文档中获取浓缩的文本。有两种方法可以完成这个工作:提取摘要和抽象概括。提取摘要是从文章中抽取出最具信息含量的句子,而抽象概括的目的是像人一样写摘要。这个来自Eintein AI的demo将抽象概括带进了主流研究。
· 自然语言生成(NLG)—自然语言生成是关于计算机旨在像人类一样写作的研究,这可以是写故事、诗歌、图片的标题等等。其中,目前的研究已经能够在图片标题上做的很好,LSTM和注意机制的结合已经给出了可以用在实际生活中的成果。这里是相关技术的调查报告。
阿里云云栖社区组织翻译。
文章原标题《List of free resources to learn Natural Language Processing
》
作者:Shashank Gupta
译者:奥特曼,审校:袁虎。