机器不学习:NLP系列3 自然语言理解-意图分类

机器不学习 www.jqbxx.com : 深度聚合机器学习、深度学习算法及技术实战

自然语言理解(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]

从概念定义可以得出的信息

  • 属于 NLP 的一个分支
  • 属于人工智能的一个部分
  • 用来解决机器理解人类语言的问题
  • 属于人工智能的核心难题

补充一句,什么是 AI-complete 或 AI-hard 问题?其实就是说解决这个问题的难度等同于让计算机和人类一样智能,或者说实现它就相当于实现了 strong AI,基本标志 AI 革命的完美结束。

语义表示(Semantic representation)

语义表示(Semantic representation) 有三种典型形式:

  • 分布语义表示(distributional semantics representation)
  • ​ 把语义表示成一个向量,如 word2vec、LSA、LDA 及各种神经网络模型(如 LSTM)
  • ​ 基于Harris的分布假设:semantically similar words occur in similar contexts
  • ​ 对人机交互而言,这种表示方法缺少一个细节性/可解释的表示,不能说出第 n 维表示什么
  • ​ NLP 笔记 - 再谈词向量
  • 模型论语义表示(model-theoretic semantics representation)
  • ​ 把自然语言映射成逻辑表达式(logic form)
  • ​ 在计算方法上,典型的就是构建一个semantic parser
  • ​ 难度比较大,见NLP 笔记 - Meaning Representation Languages的一阶谓词演算和 lambda reduction。

机器不学习:NLP系列3 自然语言理解-意图分类


  • 框架语义表示(frame semantics representation)
  • ​ 这种表示方法对人机交互非常有帮助
  • ​ 比如说 “订一张上海飞北京的头等舱,下午5点出发,国航的”,把语义用一个frame表示出来,如图所示:

机器不学习:NLP系列3 自然语言理解-意图分类


在智能语音交互中,普遍采用frame语义表示,比如飞机票,第一层是 domain,确定是 flight_ticket 这一领域,下一层是这一领域下的 intent,比如说 search_flight_ticket,最下面一层是 intent 下的 slots。

机器不学习:NLP系列3 自然语言理解-意图分类

自然语言理解的核心过程,第一步就是对 domain/intent 分类,然后接着对 slot 进行填充。

机器不学习:NLP系列3 自然语言理解-意图分类

基本概念

来理解一下上面所说到的 domain 和 intent 的概念。

  • domain
  • 领域,同一类型的数据或者资源,以及围绕这些数据或资源提供的服务;
  • 比如“地图”,“酒店”,“飞机票”、“火车票”等;
  • 领域的目的其实是为了界定要解的 intent 范围,因为泛领域的 NLU 目前还做不到
  • intent
  • 意图,对于领域数据的操作,表示用户想要完成的任务,一般以动宾短语来命名;
  • 比如飞机票领域中,有“查询机票”、“退机票”等意图;

然后就到了本篇重点,意图分类(intent classification),意图分类是一个典型的文本分类问题,所有传统的分类方法都可以使用,比如SVM/Decision Tree/Maximum Entropy 等等,数学形式来表示就是给定一个标注数据集合,U=(u1,c1),…,(un,cn),其中,ci∈C 是具体的intent,ui 是输入的 utterance,求解目标是ck=argmaxc∈Cp(c|uk)

主要难点

语言多样性

• 我要听大王叫我来巡山

• 给我播大王叫我来巡山

• 我想听歌大王叫我来巡山

• 放首大王叫我来巡山

• 给唱一首大王叫我来巡山

• 放音乐大王叫我来巡山

• 放首歌大王叫我来巡山

• 给大爷来首大王叫我来巡山

语言歧义性

• 我要去拉萨

– 火车票?

– 飞机票?

– 音乐?

– 还是查找景点?

解决语言歧义性的方法一般有下面 3 种

  1. 选一个 top intent,通常可能就选最常见的 intent
  2. 给一个 intent list 让用户来选
  3. 综合上下文信息来确定一个最优的 intent,这是最好的方法

语言鲁棒性

• 错字

– 大王叫我来新山

• 多字

– 大王叫让我来巡山

• 少字

– 大王叫我巡山

• 别称

– 熊大熊二(指熊出没)

• 不连贯

– 我要看那个恩花千骨

• 噪音

– 全家只有大王叫我去巡山咯

• …

知识依赖

要知道语言是对现实世界的描述,很多词是有多种含义的,如果没有对现实世界的知识会难以分类。看下面的例子,大鸭梨可以是水果也可以是餐厅,七天可以是天数也可以是酒店。

– 大鸭梨

– 七天

– 总参

– 天气预报

– 晚安

上下文依赖(context)

上下文的概念包含了很多内容,比如说

  • 对话上下文
  • ​ 多轮对话
  • 设备上下文
  • ​ 指硬件设备,如手机/电视/汽车/…
  • 应用上下文
  • ​ 用户在哪个 app 里进行对话
  • 用户画像
  • ​ 用户的个性化信息,尤其是地理位置等
  • ……

如下面两段对话,上下文不同,宁夏的含义也就不同

U:买张火车票

A:请问你要去哪里?

U:宁夏

U:来首歌听

A:请问你想听什么歌?

U:宁夏

基本方法

  • 基于规则(rule-based)
  • CFG
  • JSGF
  • ……
  • 传统机器学习方法
  • SVM
  • ME
  • ……
  • 深度学习方法
  • CNN
  • RNN/LSTM
  • ……
  • 融合规则和深度学习的方法

基于规则的意图分类

实际上是基于上下文无关语法(CFG),以上面提到的飞机票领域为例

FRAME: flight_ticket

NETS:

[search_flight_ticket]

[refund_flight)ticket]

[search_flight_ticket]

[flight_range][flight_ticket]

[from][to] (的 (飞机票))

(从 [city]) (去 [city])

[city]

(北京)

(上海)

...

从北京到上海的飞机票

机器不学习:NLP系列3 自然语言理解-意图分类

基于统计模型的意图分类

给定输入 utterance u 和类别 c,我们要求的是 P(c|u),核心问题就是:

  • 如何表示 u,也就是 text representation
  • 如何学习 P(c|u),也就是 classifer

Text Representation

  • Bag of Words (BOW)
  • – 优点:简单
  • – 缺点:没有考虑语言结构,相似关系等
  • Hand-crafted features
  • – 优点:精准
  • – 缺点:领域依赖,扩展性差
  • Learned feature representation
  • – 优点:能够学到所有相关的信息
  • – 缺点:需要学习

Classifier

两类模型任君选择

  • 生成式模型Generative (joint) models,计算 P(c,u)
  • – Naive Bayes
  • – HMM
  • – …
  • 判别式模型Discriminative (conditional) models, 计算 P(c|u)
  • – logistic regression
  • – maximum entropy
  • – conditional random fields
  • – support vector machines
  • – …

实现方案

一种简单的实现方案,首先用 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(recurrent neutral network)
  • 序列化、有记忆模型
  • CNN(convolutional neutral network)
  • 非序列化、无记忆模型

一般我们把 RNN/CNN 是特征学习方法,分类器可以有多种选择。

机器不学习:NLP系列3 自然语言理解-意图分类

RNN(Recurrent Neutral Network)

从 language model 理解,

机器不学习:NLP系列3 自然语言理解-意图分类

其实也就是下图的

机器不学习:NLP系列3 自然语言理解-意图分类

RNN 最后要加一层,一般是 softmax 分类。

机器不学习:NLP系列3 自然语言理解-意图分类

由于 RNN 的训练存在梯度消失/梯度爆炸问题,实际中往往采用 LSTM/GRU 等结构,Classifier 采用 softmax 函数,和网络一起训练

CNN(Convolutional neutral network)

之前讲过啦,见实习总结之 sentence embedding,一张图简单回顾。

机器不学习:NLP系列3 自然语言理解-意图分类

这里要说的是怎么将其用于意图分类。如果能够融入知识(如下图的语义标签),将 word vector 和 knowledge vector 结合起来,效果可能会有所提升。

机器不学习:NLP系列3 自然语言理解-意图分类

机器不学习:NLP系列3 自然语言理解-意图分类

阿里巴巴做了实验,发现在他们自己 4k+ 的测试集上能带来 3% 的效果提升,并且,越是知识依赖严重的领域,效果越是明显,比如说在音乐、地图领域的提升比天气领域的提升明显很多。

融合规则和深度学习的系统

  • 规则解决哪些问题?
  • 冷启动
  • 解bug
  • 解业务特有意图
  • 模型解决哪些问题?
  • 海量数据下把问题解决的更加深入和彻底
  • 解通用的意图

产品

意图分类在阿里产品中的使用,如汽车/阿里云/YunOS手机助理/支付宝/天猫魔盒/机器人等等。

相关推荐