摘要:天然语言理解是人工智能的核心难题之一,也是目前智能语音交互和人机对话的核心难题。以前写过一篇文章天然语言理解,介绍了当时NLU的系统方案,感兴趣的能够再翻一番,里面介绍过的一些内容再也不赘述。本文详细讨论了天然语言理解的难点,并进一步针对天然语言理解的两个核心问题,详细介绍了规则方法和深度学习的应用。
天然语言理解是人工智能的核心难题之一,也是目前智能语音交互和人机对话的核心难题。维基百科有以下描述[1]:算法
Natural language understanding (NLU) is a subtopic of natural language
processing in artificial intelligence that deals with machine reading
comprehension. NLU is considered an AI-hard problem.
对于AI-hard的解释以下:网络
In the field of artificial intelligence, the most difficult problems
are informally known as AI-complete or AI-hard, implying that the
difficulty of these computational problems is equivalent to that of
solving the central artificial intelligence problem—making computers
as intelligent as people, or strong AI.
简言之,何时天然语言能被机器很好的理解了,strong AI也就实现了~~机器学习
以前写过一篇文章天然语言理解,介绍了当时NLU的系统实现方案,感兴趣的能够再翻一番,里面介绍过的一些内容再也不赘述。那篇文章写于2015年末,过去一年多,技术进展很是快,咱们的算法也进行了大量升级,核心模块所有升级到深度学习方案。本文主要结合NUI平台中天然语言理解的具体实现,详细的、系统的介绍意图分类和属性抽取两个核心算法。以下图所示,第一个框中是意图分类,第二个框中是属性抽取。ide
对于整个NUI平台的介绍能够参考孙健/千诀写的从“链接”到“交互”—阿里巴巴智能对话交互实践及思考。学习
为何天然语言理解很难?本质缘由是语言自己的复杂性。天然语言尤为是智能语音交互中的天然语言,有以下的5个难点:ui
一方面,天然语言不彻底是有规律的,有必定规律,也有不少例外;另外一方面,天然语言是能够组合的,字到词,词到短语,短语到从句、句子,句子到篇章,这种组合性使得语言能够表达复杂的意思。以上两方面共同致使了语言的多样性,即同一个意思能够有多种不一样的表达方式,好比:人工智能
在缺乏语境约束的状况下,语言有很大的歧义性,好比:spa
(1)火车票?orm
(2)飞机票?视频
(3)音乐?
(4)仍是查找景点?
语言在输入的过程当中,尤为是经过语音识别转录过来的文本,会存在多字、少字、错字、噪音等等问题,好比:
(1)大王叫我来新山
(2)大王叫让我来巡山
(3)大王叫我巡山
(4)熊大熊二(指熊出没)
(5)我要看那个恩花千骨
(6)全家只有大王叫我去巡山咯
语言是对世界的符号化描述,语言自然链接着世界知识,好比:
(1)除了表示水果,还能够表示餐厅名
(2)除了表示时间,还能够表示酒店名
(3)除了表示总参谋部,还能够表示餐厅名
(4)仍是一首歌名
(5)这也是一首歌名
上下文的概念包括不少内容,好比:
U:买张火车票
A:请问你要去哪里?
U:宁夏
这里的宁夏是指地理上的宁夏自治区
U:来首歌听
A:请问你想听什么歌?
U:宁夏
这里的宁夏是指歌曲宁夏
意图分类是一种文本分类。主要的方法有:
(1)CFG
(2)JSGF
(3)……
(1)SVM
(2)ME
(3)……
(1)CNN
(2)RNN/LSTM
(3)……
这里重点介绍基于CFG的方法[2],该方法最先出现于CMU Phoenix System中,如下是一个飞机票领域的示例:
按照上面的文法,对于“从北京去杭州的飞机票”,能够展成以下的树:
咱们在初版的系统中,采用的基于SVM的方法,在特征工程上作了不少工做。第二版中切换到深度学习模型后,效果有很大提高,此处略过,直接介绍深度学习方法。
深度学习有两种典型的网络结构:
基于这两种基本的网络结构,又能够衍生出多种变形。咱们实验了如下几种典型的网络结构:
从实验结果来看,简单的CNN的效果最好,其网络结构以下:
单纯的CNN分类效果没法超越复杂特征工程的SVM分类器,尤为是在像音乐、视频等大量依赖世界知识的领域中。好比怎么把以下的世界知识融入到网络中去:
这背后更大的背景是,深度学习在取得巨大成功后,慢慢开始显露出瓶颈,好比如何表示知识、存储知识,如何推理等。其中一个探索方向就是试图把联结主义和符号主义进行融合。纯粹的基于联结主义的神经网络的输入是distributed representation,把基于符号主义的symbolic representation融合到网络中,能够大大提升效果,好比:
属性抽取问题能够抽象为一个序列标注问题,以下例:
(1)Lexicon-based
(2)CFG
(3)JSGF
(4)……
(1)HMM
(2)CRF
(3)……
(1)RNN/LSTM
(2)……
这里主要介绍基于JSGF(JSpeech Grammar Format)的方法:
JSGF is a BNF-style, platform-independent, and vendor-independent textual representation of grammars for use in speech recognition.
其基本的符号及其含义以下:
好比对于以下的示例:
能够展开成图:
对于“帮我打开空调”,其在图中的匹配路径以下:
匹配到这条路径后,能够根据标签,把“空调”抽取到device这个属性槽上。
经典算法为CRF,略过。
用于序列标注的深度学习模型主要有[7]:
也有一些多任务联合训练的模型,好比[8]、[9]。
在咱们的系统中,采用的是Bi-LSTM-CRF模型:
一样的,在input上,将distributed representation和symbolic representation作了融合。
在实际的系统中,基于规则的方法和基于深度学习的方法并存。基于规则的方法主要用来快速解决问题,好比一些须要快速干预的BUG;基于深度学习的方法是系统的核心。