闲聊自然语言处理NLP

原文链接
无论在工程界还是学术界自然语言处理(NLP)一直是一个比较热的话题,尤其随着近些年深度学习的发展给NLP也带来一些新思路。对于这个话题随便聊聊,想到哪写到哪。

其实自然语言理解很难

为什么说让机器真正的理解自然语言很难呢?
人类语言从出现至今经过上万年的演变,规则极其错综复杂,就连人类自己在学习一门外语的时候还经常发语法错误更不用说机器了。例如,一个句子由多个词语组成,通过各种组合能够得到更为复杂的句子并且如何理解一句话需要根据语境来判断,相同的词在不同的上下文中往往会产生不同的语义。同时,随着社会的发展不停的会有新词出现,退回5年前谁也不知道老铁还会双击666,哈哈。

NLP做哪些事情

NLP的范围很广,包括但不限于:文本匹配、分类、实体预测等。具体应用有:分词、文本分类、语义分析、机器翻译、多轮对话,问答系统等等。

特征工程

特征工程在ML中十分耗时但又十分重要,同时又不具备通用性,同样是分类问题,在文本分类上好使的特征在商品分类上就完全不靠谱。而在NLP领域的特征工程主要包括:文本预处理、文本特征提取、文本表示。

文本预处理

中文文本的预处理主要包括切词和去掉停用词。由于中文不像英文字母之间有空格分开,所以对于中文的切词需要用复杂的算法来解决,例如:最大匹配、基于统计信息的CRF及深度学习的一些方法。去停用词则是去掉文本中高频的连词介词等,这些词对于文本分析没有太多的价值,通常做法是维护一个停用词列表。

文本表示

计算机不能直接处理文字,但计算机可以处理数字。文本表示主要是将文本转换成计算机可以处理的方式。例如常用的词袋或者向量空间模型等,但最大的缺点是缺失上下文信息,词与词之间相互独立无法表征语义同时向量的维度和稀疏性都比较高。

特征提取

文本的表示依赖于特征的提取,主要包括特征选择和权重计算。特征选择一般是根据某个评价指标对文本进行评分排序选择评分较高的特征项,例如:词频、文档频率、互信息等。最经典的就是TF-IDF。

深度学习在NLP中的应用

深度学习在图像分类、语音识别的应用中取得了很大的成功。相比于传统的文本,表示图像和语音的数据是比较稠密的,而对于高度稀疏的one-hot文本向量深度学习不善于处理此类数据。所以要用深度学习解决NLP问题首先要解决的是文本表示问题。Distributed Representation,其基本思想是将每个词表达成 n 维稠密、连续的实数向量,他具有很强的特征表示能力。具有代表性的是word2vec,他有两种模式:CBOW和Skip-Gram。word2vec极大的推动了文本分析的发展,其提出的Hierarchical Softmax和Negative Sample两个方法很好的解决了耗时漫长的大规模计算问题。但word2vec通过语料中的上下文信息学习得到的词向量还不能表示真正的语义,例如通过word2vec得到的相似的词更多的是具有相似上下文的词,“好”与“坏”的相似度经常也很高。

解决了文本表示的问题,则可以通过CNN/RNN来进一步解决自动特征提取进而完成文本分类等问题。

关于文本分类及实体识别

文本分类和实体识别是NLP里一个老生常谈的话题,最早开始人们通过规则匹配的方式来做,到后来随着数据量的增长和机器性能的提升,运用统计学知识的机器学习方法开始渐渐成为处理此类问题的一个主要手段。但依旧避不开特征工程这个步骤。

例如在句子分类中,首先要把句子表示成TF-vector或者是WordCountVector进而利用LR或者SVM等分类器进行分类。而在NER中则更为复杂:当前词的前序词、后续词、是否大写、是否是Title、词的前缀和后缀,词性等等,这些都是大家在不断的摸索中发现的比较好的特征。

利用深度学习网络自动提取特征的技能可以帮助人们更好的完成之前的文本处理任务。例如:利用word2vec将词转成词向量,然后利用CNN进行卷积计算,在卷积的过程中不同size的卷积核可以自动获取n取值不同的n-gram信息,通过不同的卷积层捕捉局部相关性可以更好的来进行分类。详见:Yoon Kim发表的论文

问答系统和多轮对话系统

问答系统早期的做法是通过模板、规则匹配的方法,这种方法比较适合命令式的场景,例如家电控制、Siri等。

目前还有一种常用做法是基于检索的方法:将Q&A索引起来,新来的question在索引上做一次检索,在候选集上用匹配模型去匹配,最后做一个排序,一般把第一个答案返回给用户。例如微软小冰。多说一句,因为答案是 真正的人回复的,所以给提问者一个错觉,这个机器人很接近智能。

还有一种方法是通过神经网络来对问题和答案做卷积,判断两句话里哪些局部的词语是互相对应的,最终判断问题和答案是否相关。

多轮对话可以看做是广义上的一个问答系统,目前开放式的多轮对话还是基于检索的方式来做,但还做的不够好。尤其对于一个闲聊的、开放式的对话目前还没有一个很好的模型来描述和刻画。

最后

目前看来在广义的NLP中,从语音到文字(语音识别)做的比较成功,从文字到语义及从语义到回答还有很长的路要走。理解语义是非常难以跨越的鸿沟,不亚于人类登上月球的壮举。人工智能的发展未来可期。

你可能感兴趣的:(闲聊自然语言处理NLP)