caokaifa 2018-08-20
自然语言理解(NLU)
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. [1]
从概念定义可以得出的信息
补充一句,什么是 AI-complete 或 AI-hard 问题?其实就是说解决这个问题的难度等同于让计算机和人类一样智能,或者说实现它就相当于实现了 strong AI,基本标志 AI 革命的完美结束。
语义表示(Semantic representation)
语义表示(Semantic representation) 有三种典型形式:
在智能语音交互中,普遍采用frame语义表示,比如飞机票,第一层是 domain,确定是 flight_ticket 这一领域,下一层是这一领域下的 intent,比如说 search_flight_ticket,最下面一层是 intent 下的 slots。
自然语言理解的核心过程,第一步就是对 domain/intent 分类,然后接着对 slot 进行填充。
来理解一下上面所说到的 domain 和 intent 的概念。
然后就到了本篇重点,意图分类(intent classification),意图分类是一个典型的文本分类问题,所有传统的分类方法都可以使用,比如SVM/Decision Tree/Maximum Entropy 等等,数学形式来表示就是给定一个标注数据集合,U=(u1,c1),…,(un,cn),其中,ci∈C 是具体的intent,ui 是输入的 utterance,求解目标是ck=argmaxc∈Cp(c|uk)
语言多样性
• 我要听大王叫我来巡山
• 给我播大王叫我来巡山
• 我想听歌大王叫我来巡山
• 放首大王叫我来巡山
• 给唱一首大王叫我来巡山
• 放音乐大王叫我来巡山
• 放首歌大王叫我来巡山
• 给大爷来首大王叫我来巡山
语言歧义性
• 我要去拉萨
– 火车票?
– 飞机票?
– 音乐?
– 还是查找景点?
解决语言歧义性的方法一般有下面 3 种
语言鲁棒性
• 错字
– 大王叫我来新山
• 多字
– 大王叫让我来巡山
• 少字
– 大王叫我巡山
• 别称
– 熊大熊二(指熊出没)
• 不连贯
– 我要看那个恩花千骨
• 噪音
– 全家只有大王叫我去巡山咯
• …
知识依赖
要知道语言是对现实世界的描述,很多词是有多种含义的,如果没有对现实世界的知识会难以分类。看下面的例子,大鸭梨可以是水果也可以是餐厅,七天可以是天数也可以是酒店。
– 大鸭梨
– 七天
– 总参
– 天气预报
– 晚安
上下文依赖(context)
上下文的概念包含了很多内容,比如说
如下面两段对话,上下文不同,宁夏的含义也就不同
U:买张火车票
A:请问你要去哪里?
U:宁夏
U:来首歌听
A:请问你想听什么歌?
U:宁夏
基于规则的意图分类
实际上是基于上下文无关语法(CFG),以上面提到的飞机票领域为例
FRAME: flight_ticket
NETS:
[search_flight_ticket]
[refund_flight)ticket]
[search_flight_ticket]
[flight_range][flight_ticket]
[from][to] (的 (飞机票))
(从 [city]) (去 [city])
[city]
(北京)
(上海)
...
从北京到上海的飞机票
基于统计模型的意图分类
给定输入 utterance u 和类别 c,我们要求的是 P(c|u),核心问题就是:
Text Representation
Classifier
两类模型任君选择
实现方案
一种简单的实现方案,首先用 bag of words 提取基本特征,接着人工定义规则来提取一些高质量的特征(提取意图词,过滤 stopwords 等),然后将这些特征用 one-hot 或者 tf-idf 方式表示为向量,再将特征向量喂给 svm 分类器。如下:
1. Text Representation
– Bag of Words (BOW)
>> unigram
>> bigram
>> pos
– Hand-crafted features
>> 意图词,用来表达意图的有限词集合,比如“飞机票/机票/餐厅/美食/火车…”
>> 无效词比例,定义一个有效词的集合,然后计算 utterance 中无效词的比例
>> pattern特征,比如“从[city]”,“去[city]”,…
>> …
– feature vector
>> One-hot
>> TF-IDF
2. Classifier
– svm, 比如可以采用开源的libsvm/liblinear实现
基于深度学习的意图分类
两种典型策略
一般我们把 RNN/CNN 是特征学习方法,分类器可以有多种选择。
RNN(Recurrent Neutral Network)
从 language model 理解,
其实也就是下图的
RNN 最后要加一层,一般是 softmax 分类。
由于 RNN 的训练存在梯度消失/梯度爆炸问题,实际中往往采用 LSTM/GRU 等结构,Classifier 采用 softmax 函数,和网络一起训练
CNN(Convolutional neutral network)
之前讲过啦,见实习总结之 sentence embedding,一张图简单回顾。
这里要说的是怎么将其用于意图分类。如果能够融入知识(如下图的语义标签),将 word vector 和 knowledge vector 结合起来,效果可能会有所提升。
阿里巴巴做了实验,发现在他们自己 4k+ 的测试集上能带来 3% 的效果提升,并且,越是知识依赖严重的领域,效果越是明显,比如说在音乐、地图领域的提升比天气领域的提升明显很多。
融合规则和深度学习的系统
意图分类在阿里产品中的使用,如汽车/阿里云/YunOS手机助理/支付宝/天猫魔盒/机器人等等。