深度学习nlp即插即用的模块 (深度学习cnn常用模块)

自然语言是人类知识的抽象浓缩表示,而自然语言理解是人工智能研究领域中极具挑战的一个分支。上次,自然语言处理在2017 年有哪些值得期待的发展?中,我们已经讲到,2016年是深度学习大潮冲击 NLP 的一年,通过去年一年的努力,深度学习在 NLP 领域已经站稳了脚跟。其中,对话交互系统已经成为一个重要的应用研究领域,2017年的自然语言对话系统,将开创一个新的人机交互时代。

通过深度学习和其他机器学习技术的模型组合,竹间智能也已初步实现了自然语言对话中的意图识别、上下文理解和多轮对话。本文将基于竹间智能的一些经验和探索,从分词、词性等基础模块,到机器翻译、知识问答等领域,列举并分析一些深度学习在 NLP 领域的具体运用,希望对大家研究深度学习和 NLP 有所帮助。

撰稿:竹间智能 自然语言与深度学习小组

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)

nlp是否用到深度学习,nlp中文分词工具的使用常识

图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。

nlp是否用到深度学习,nlp中文分词工具的使用常识

图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 NeuralNetworks)。

文本分类是各种场景在自然语言处理领域中经常使用到的技术,例如判断文本内容的情感分类(即对文本表达的情感进行分析,如正面、负面的情感,开心、愤怒等情绪等)。深度学习在文本分类中的表现优于其他一些传统线性模型,例如 https://arxiv.org/abs/1508.04112。Github上的https://github.com/harvardnlp/sent-conv-torch 是用于文本分类的CNN,这个代码用GPU在Torch中实现了Kim(2014)的句子卷积代码。它复制了现有数据库中的结果,并允许在任意其它的文本数据库上训练模型。

信息抽取,从句子中抽取特定的片段(比如命名实体识别、摘要总结等)。AbstractiveSummarization 摘要总结 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 forCoreference 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 withAttentional 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等限定领域中已经实现了比较好的可控人机对话。未来,竹间希望在更多垂直领域取得突破。

封面图片来源于网络。

竹间智能Emotibot以类脑对话系统和情感计算为核心,希望以人工智能技术助力更多行业、机构及个人拥抱AI时代,分享AI发展的红利。

如需转载,请联系竹间智能Emotibot,并注明出处。

相关阅读:

自然语言处理在 2017 年有哪些值得期待的发展?

AI深度|机器人要读懂文字中的情感有多难?