自然语言是人类知识的抽象浓缩表示,而自然语言理解是人工智能研究领域中极具挑战的一个分支。上次,《自然语言处理在 2017 年有哪些值得期待的发展?》中,我们已经讲到,2016 年是深度学习大潮冲击 NLP 的一年,通过去年一年的努力,深度学习在 NLP 领域已经站稳了脚跟。其中,对话交互系统已经成为一个重要的应用研究领域,2017 年的自然语言对话系统,将开创一个新的人机交互时代。
通过深度学习和其他机器学习技术的模型组合,竹间智能也已初步实现了自然语言对话中的意图识别、上下文理解和多轮对话。本文将基于竹间智能的一些经验和探索,从分词、词性等基础模块,到机器翻译、知识问答等领域,列举并分析一些深度学习在 NLP 领域的具体运用,希望对大家研究深度学习和 NLP 有所帮助。
事实上,从分词、词性、语法解析、信息抽取等基础模块,到自然语言生成、机器翻译、对话管理、知识问答等高层的 NLP 领域,几乎都可以应用以 CNN、RNN 为代表的深度学习模型,且确实能够取得不错的效果。深度学习模型有效降低了语言模型输入特征的维度,降低了输入层的复杂性。另外,深度学习模型具有其他浅层模型不能比拟的灵活性。深度学习模型更复杂,能够对数据进行更精准的建模,从而增强实验效果。
深度学习模型可以将文本中的词高效地表示为分布式连续向量(word2vec),将词语、文本由词空间映射到语义空间,这样的语义表示可以捕获重要的句法和语义信息,一定程度上缓解了词面不匹配、数据稀疏、语义鸿沟等问题。Word2vec 的应用可以使许多自然语言处理任务取得突出的表现。Word2vec 虽然可以通过神经网络训练大规模的语料实现,但仍面临着 out of vocabulary 的现实。Bahdanau 等人利用 LSTM 模型结合定义知识语料,解决传统 word embedding 模型中的 out of vocabulary 问题。(框架流程见图 1,具体见 https://arxiv.org/abs/1706.00286)
图 1:利用 RNN 解决 Word2Vec 中 out of vocabulary 问题实例
中文不同于英文自然分词,中文分词是文本处理的一个基础步骤,也是自然语言处理的基础模块。分词性能的好坏直接影响比如词性、句法树等其他模块的性能。利用深度学习实现的字嵌入+Bi-LSTM+CRF 中文分词器,不需要构造额外手工特征。使用人民日报的 80 万语料训练实现,按照字符正确率评估标准能达到 98% 的准确率。其本质上是一个序列标注模型,模型参考的论文是:http://www.aclweb.org/anthology/N16-1030,整个神经网络的主要框架如图 2 所示。有感兴趣的朋友可以去看看,具体实现已在 github 开源 https://github.com/koth/kcws。
图 2:Word Embedding+Bi-LSTM+CRF 主要框架示意图
语法解析可以获得句子的语法结构,例如,哪些单词组合在一起(形成「短语」),哪些单词是动词的主题或对象。Syntactic Parsing 明确标出了词与词之间的短语结构,隐含了词与词之间的关系。而 Dependency Parser 则明确表示出了词与词之间的关系。利用神经网络模型解析句子的语法结构的实现可以参考 http://www.petrovi.de/data/acl15.pdf 以及斯坦福的 http://cs.stanford.edu/~danqi/papers/emnlp2014.pdf。除解析文本之外,Richard Socher 等人利用 CNN 模型实现了解析图片的功能(Parsing Natural Scenes and Natural Language with Recursive Neural Networks)。
文本分类是各种场景在自然语言处理领域中经常使用到的技术,例如判断文本内容的情感分类(即对文本表达的情感进行分析,如正面、负面的情感,开心、愤怒等情绪等)。深度学习在文本分类中的表现优于其他一些传统线性模型,例如 https://arxiv.org/abs/1508.04112。Github 上的 https://github.com/harvardnlp/sent-conv-torch 是用于文本分类的 CNN,这个代码用 GPU 在 Torch 中实现了 Kim(2014)的句子卷积代码。它复制了现有数据库中的结果,并允许在任意其它的文本数据库上训练模型。
信息抽取,从句子中抽取特定的片段(比如命名实体识别、摘要总结等)。Abstractive Summarization 摘要总结 https://github.com/harvardnlp/NAMAS,该项目包含了来自论文 A Neural Attention Model for Abstractive Summarization(Alexander M. Rush, Sumit Chopra, Jason Weston. https://arxiv.org/pdf/1509.00685.pdf)的摘要抽象总结系统。该项目里发布的代码可以:提取摘要数据、训练摘要神经网络模型、用 ROUGE 构建评估集、调试提取的特征等。
神经指代消解(Neural Coref Models),在论文 Learning Global Features for Coreference Resolution(Sam Wiseman, Alexander M. Rush, and Stuart M. Shieber, NAACL 2015)和 Learning Anaphoricity and Antecedent Ranking Features for Coreference Resolution(Sam Wiseman, Alexander M. Rush, Stuart M. Shieber, and Jason Weston. ACL 2015)中有所描述。Github 中开源的指代消解项目有 https://github.com/swiseman/nn_coref。
自然语言生成,能够根据一些关键信息及其在机器内部的表达形式,经过一个规划过程,来自动生成一段高质量的自然语言文本。目前关于自然语言生成有一些比较有趣的研究,比如 https://github.com/karpathy/char-rnn 是一个基于 RNN 的文本生成器,可以自动生成莎士比亚的剧本或者 shell 代码;https://link.zhihu.com/?target=https%3A//github.com/phunterlau/wangfeng-rnn 基于 char-rnn 的汪峰歌词生成器等。
知识问答,可以用深度学习模型,从语料中学习获得一些问题的答案,比如 https://github.com/facebook/MemNN,是 memmnn 的一个官方实现,可以从诸如「小明在操场;小王在办公室;小明捡起了足球;小王走进了厨房」的语境中,获得问题「小王在去厨房前在哪里?」这样涉及推理和理解的问题;例如斯坦福的 http://cs.stanford.edu/~danqi/papers/nips2013.pdf 利用深度学习实现的知识问答系统。
神经机器翻译(NMT)在翻译中提供了统计方式之外的另一种方式,同时也更加简便。Github 上基于 Sequence-to-Sequence Learning with Attentional Neural Networks 的开源项目: http://github.com/harvardnlp/seq2seq-attn,以及基于上述项目和 http://www.people.fas.harvard.edu/~yoonkim/data/emnlp_2016.pdf 的安卓系统中的神经机器翻译。该项目考虑了将知识提炼(knowledge distillation)方式加入机器神经翻译中,以解决其体量问题,这种方式已在其他领域中被证明能够成功减小神经模型的尺寸。
在 Github 上还有一些有趣的关于深度学习与自然语言处理的项目。比如:Google Brain 团队的一组研究人员发布了一个项目 Project Magenta,其主要目标是利用机器学习创作艺术和谱写曲子 https://github.com/tensorflow/magenta;https://github.com/ryankiros/neural-storyteller 是一个自然语言生成项目,实现了看图讲故事的功能。
以上是对深度学习在 NLP 领域运用的一些总结和说明。最后,再讲回竹间全力打造的自然语言对话系统。之前提到 2017 年的对话系统一定是在限定的场景下发挥作用的,而竹间智能基于深度学习打造的人机交互系统,在金融、电商及 IoT 等限定领域中已经实现了比较好的可控人机对话。未来,竹间希望在更多垂直领域形成突破。
文章来源:竹间智能专栏
《机器读心术之文本挖掘与自然语言处理》在全国的独有性,以及将艰难知识通俗化讲授的能力,学完将熟悉文本挖掘与自然语言处理技术,懂得怎样运用到自己的实际工作,将数据挖掘能力从有限的结构化数据延伸到非结构化的海量文字材料。点击下方二维码报名课程