理解语言有多难

7.1 自然语言处理

自然语言处理NLP是让计算机能处理语言,20世纪50年代,大家关心的是人类学习语言的认知研究上,计算机处理语言,必须先分析语句和获取语义,需要分析词的次序,句子的句法规则,就是乔姆斯基的有限状态自动机刻画语言的语法,建立了自然语言的有限状态模型,这时是基于规则的服好主意方法。人工智能兴起后,20世纪70年代开始,逐步关注基于统计的联结主义方法。并在90年代的IBM基于统计机器学习的语音识别系统和翻译系统的突破以及机器学习算法的研究,让人们看到了基于统计的联结主义的方法的优势。

这两方法谁也不能取代另一方,充分利用和融合两者的优势也许是更好的选择。由于Google等搜索引擎的巨大成功,把自然语言推辞昂高潮。包括深度学习的发展,自然语言的研究也是一个热点。

7.1.1 自然语言处理技术

理想的NLP是一个层次结构

最底层是词法分析,包括分词,词性标注、专名识别等,对词进行分析。

然后是句法分析,句法树,得到更多的词或短语之间的关系

语义分析,整个句子的逻辑关系

应用,比如知识抽取,问答系统等任务

实际应用的NLP 框架

实际中,句法分析很多项目中没有利用起来,语义也会有不同的形式,有时抽取中心词就可以满足应用

底层是资源,资源是非常重要的一部分,知识库的建立也会用到很多上层的NLP技术。

词汇级别的技术,词法层面是对词的处理,分词、词性标注、识别专名等。词之间有一定的关系,本体,很多关系包括:上下位(苹果-公司),同位(苹果-谷歌)等,这些关系可以用来推理、泛化等

句子级别的技术,语义层面的分析,很难,归纳为中心词提取,topic分析,意图识别和语义分析。变换更多用在搜索,主要是纠正句子。结构层面分析用的最多的是句法分析和组块分析,也有语义标注等,用的较少。

文本任务,搜索引擎,自动问答,人机对话是非常复杂的。

专名识别

识别句子中的专有名词,如人名,地名,机构名,时间词,数字词,影视名等。其中专名识别是一个序列标注问题,就是识别词的边界。BME的标注格式,分布是词首,词中,词尾。用法有CRF,lstm,lstm+crf。其中人名,地名,机构名结构边界都比较清楚,f1值很高。其他的类别比如音乐名、小说名等不太好识别,比如羞羞的铁拳,夏洛特烦恼等十分不好识别,因为它们没有什么规律,需要依靠模型,词表和业务trick,有的正则如时间,数字等可以用正则实现。

句法分析

关键技术之一,跟据文法规则得到一个句子的句法结构,表示为树状。确定句子中各成分之间的关系是非常困难的,精确度不高,为了降低复杂度,大多是浅层句法分析,识别相对简单的成分。

目前研究多的是依存语法,是词与词之间的依存关系,也就是词与词之间的支配与被支配的关系,有方向的,核心动词是支配其他成分的中心成分,本身不受其他的支配,比如吃是核心动词,小明和吃是主谓关系,吃和苹果是动宾关系,红和苹果是定中关系。

方法有两大类

基于图的方法:

把问题看成有向图中最大生成树的求解问题,优点是全局方法,搜索所有子树,缺点是不能利用太多历史信息。

基于决策的方法:

构建分解为一序列动作,由分类器根据当前状态来决定下一个分析动作,优点是速度快,可以较多地利用历史信息(全局性的),缺点在于使用局部贪心算法

有arc-standard和arc-eager算法

arc-standard:

定义一个,s是栈,b是待分析词的序列(buffer),A 是当前的已有的依存关系。s初始时一个ROOT,b为空时停止,这时候得到的A就是依存关系。

操作包括:

增加一个依存关系i,从stack移除

增加一个依存关系i,从stack移除

将b1从buffer移到stack中

如果有N个依存关系的话,总共的动作就有2N +1个,这其实可以抽象成分类(SVM,最大熵,深度学习等),特征为:词,词性,依存关系

近年来有基于深度学习的依存句法分析方法:

论文《A Fast and Accurate Dependency Parser using Neural Networks》

最大优点是可以方便的在input层扩展特征,然后由神经网络学习这些特征的内在信息,准确率也会提高

输入是词,词性,依存关系embedding之后的向量,是拼接而成。中间需要一些trick使得模型效果更好,比如隐藏层的激励函数用的是立方函数。

英文上已经有不错的准确度,但是中文要差。实际项目中应用不是很理想,因为真实场景和标准集数据分布有差异,真实场景下的标注句法的训练语料是由很门槛的,需要一定的语言知识的人才可以。

语义分析

终极目标,很难的问题。句法分析是得到一个句子的句法树,而语义分析是要解析成一个逻辑表达式。如小于10的最大质数,姚明的身高是多少,,表达成这样很困难,只能在特定的场景中,比如知识图谱类的问答中。深度学习中尝试用end2end方式来解决,将逻辑表达式建模成中间的隐藏状态,比如深度学习中的阅读理解

知识库的建立很重要,

因为知识一直在增加,而且很难表示成计算机能理解的形式,

结构化知识:

是以实体为中心,SPO三元组,。知识图谱,比较好表示,来源有限,百科,垂直网站,海量的网页中抽取无结构化的,需要很多的技术,指代消解或者共指消解,关系抽取等。

无结构化:

天空为什么是蓝的

7.1.2 语言的特殊

思想是逐步进化的,语言也是随着思想进化而来的,因为语言是思想传递的媒介,是人类特有的。

可以用不同的符号表示。每国有各国的表示方法。

乔姆斯基认为人组织语言遵循一定的语法规则,这是先天性的知识,叫做普通语法。

汉语常用词不到1万个,按照语法规则组成句子,句子长度不固定 ,有无穷多的可能,去掉不符合语法规则的还是有好多。

对计算机来说是很困难:

1.如何量化语义

有的是隐喻,比如樱桃小嘴,丰富了语言(理解需要人的深层推理和抽象能力),但是对计算机造成了困难

2.如何理解隐喻

语言的贫乏造成了语言的歧义,同时包含了很多粗糙的歧义的字眼(这里,那里,一些)

3.如何理解歧义

数学家的公式,无歧义语言

与人类的语言程度相比,现在的进展还是初级的,更不用说人类的其他能力(推理,感知,思考,意识等)

7.2 对话系统

异常火爆的一个方向。

人们觉得对话是最自然的交互方式,是未来的趋势等,但是技术还不成熟。

目前来说还没有一个真正意义上能解决用户某一方面问题且体验很好的对话产品,亚马逊的echo,更多的是指令型的控制。

做好对话的几个技术点:

1.语义理解

包括实体识别、句法分析和意图识别等

2.对话管理

上下文建模,指代消解和省略补全

3.知识表示

语义分析和知识建设

4.用户管理

用户画像、长时记忆和短时记忆

主要有3个类型:

问答型、任务型、闲聊型

1.问答型

解决的更多的是知识型的,目前研究最多的是一个实体的客观性知识的任务:

中国的首都在哪儿,北京,答案是一句话或者一段话,或者是主观的,个性化的更是困难。

比较复杂,涉及的知识点主要是

1.语义分析

解析用户的语义

2.知识建设

知识表示,知识抽取,知识推理等

首先是问题的各种分析,然后从海量文档中检索出可能包含答案的问档,再在证据库中找到相关的证据支撑,最后根据许多模型对结果排序找到最终的答案。

另一个应用是客服系统,使用机器人来辅助人回答高频经常被问到的问题,提高客服效率,基于检索的方法,加上英语资源做优化。

2.任务型

任务型对话系统更多的是完成一些任务,比如订机票、订餐等,有个明显的特点,就是需要和用户交互得到出发地,目的地和出发时间等槽位,然后有可能还要和用户确认等,最后帮用户完成一件事情。系统根据当前状态(state)和相应的动作(action)来决定下一步的状态和反馈,求状态转移概率,就是马尔科夫决策的过程(MDP),

流程:

先得到用户的query(语音转文字),然后是自然语言理解模块(NLU),主要是槽位识别和意图识别,意图有可能是有多个的,对应槽位也会不同,都有个置信度。然后是对话管理模块,包括Dialog state tracking 和Dialog policy,DST 就是会根据之前的信息得到它的state,就是slot的信息,得到多少个slot,还差什么slot,以及得分。Dialog policy就是根据state做出一个决策,叫action,比如还需要什么slot,是否要确认等等,最后是自然语言生成模块NLG,把相应的action生成一句话回复给用户。

DST比较关键

有以下方法:

1.产生式模型(Generative Model)

生成式模型把对话状态抽象成系统acttion和用户SLU结果的贝叶斯网络。

是要求解的新的对话状态概率,是SLU的结果,可以观察到的,s是上一轮的对话状态,是不可观察的,是上一轮用户的真实action,也是不可观察的,是系统action,可观察的,加撇的是本轮的表示。

是给定用户真实action下SLU的概率,是给定系统action和本轮对话状态下用户选择action为的概率,是给定上一轮对话状态和系统action下对话转变为的概率,是之前的对话状态概率。

2. 判别式模型

把问题抽象成一个分类问题,根据之前对话的一些特征来预测新的state

是从SLU结果和历史对话信息中抽取出来的特征

分类问题,把slot打分看出序列标注问题,只要是分类模型和序列标注问题,就可以使用深度学习。

有action的可以融入强化学习的激励惩罚机制。

3. 规则系统

可控的,两个因素:state和action,state是意图和slot,action是state的一些回复,需要询问的slot可以知道,缺哪些询问就可以,对置信度低的不确定的进行确认并影响到之后相似的情况就是强化学习的思想了。

处理slot范围限定,slot和slot之间的冲突。

规则系统有一个配置文件,写一些规则。基于模型的方法需要有label数据,数据缺失的情况下规则系统比较有效,规则系统突出了NLU的重要性,因为用到了NLU的1-best,而不是N-best结果。

3 闲聊型

没有明确限定的聊天,前两个类型是机器打智商牌,这个类型是打情商牌。

主要有规则方法,生成模型和检索方法

1.规则方法

20世纪60年代,ELIZA是纯规则的方法,写一个较泛化的模板。现在没有哪个系统是纯规则的了,规则方法是一些其他方法处理不好的情况下的补充。

2.生成模型

使用一个RNN模型把输入句子ABC表示一个向量,然后把这个向量作为另一个RNN模型的输入,最后使用语言模型生成目标句子WXYZ。优点是省去了中间模块,缺点是多是泛泛的无意义的回复、前后回复不一致,或者句子不通顺的问题。

3.检索方法

思想是如果机器给人回复一句话,如果这句话或者相似的话别人有说过,只需要把它找出来就可以。需要挖掘很多的语料。最基本首先进行NLU,然后从语料库中召回一些可能的回复,然后使用更精细和丰富的模型(语义相似度、上下文模型等)找出最合适的回复。

核心技术:

1.意图识别

语言量化,分类、聚类、语义相似度和模板等多个技术来解决

2.上下文模型

省略补全

能补全就是单轮对话了,否则就要结合topic和keyword处理

3.个性化模型

考虑用户画像,还要考虑场景(时间、地点等)

4.自学习

结合反馈来对当前的对话进行评估是否可再用

对话系统评价

问答型,回答更多是实体,好评价

任务型,可评价

闲聊型,人工评价和反馈

对话系统涉及的难点

1.自然语言难以量化

如把水拿过来,感冒好了没有,导致了意图识别和话题识别变得很难

2 语言歧义太多,如何解决

3 上下文处理和推理相对人类太初级

A:快点走

B: 30

4.领域知识难以很好的融合,知识这个很难定义,知识的建立和表示都比较初级

结论

搜索引擎是用户主动获取信息的方式,个性化推荐系统是被动的给用户呈现信息的方式。

用户画像,就是给用户打各种tag来表示用户的兴趣,但是具有同一个Tag的用户就有相同的兴趣吗,人的兴趣有时很难以自然语言表示,加上各个产品都是孤立的,获得的都是部分信息,导致捕捉用户兴趣的稀疏性。

个性化和隐私是个矛盾体。搜索引擎是产品设计的一个简化。由于技术达不到直接给用户信息。所以呈现给用户所有想要的结果,自己去筛选。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐