论文发表在AAAI-2017
作者团队多数来自微软研究院或者微软小冰团队
一作和通讯作者来自北航软国重实验室(惭愧啊,手动捂脸三次,哈哈哈),完成于作者在微软亚洲研究院实习期间
DS:对话系统,包括四部分(可以理解为四个过程,也可以理解为四个函数 ):
QU:查询理解,把自然语言描述的问题映射到其含义M表示上。(语义表示?还是向量嵌入表示?)
ST:状态追踪,H是个不断更新的状态变量,ST会根据上一步的H_(t-1)以及用户QU对应的问题含义表示M,输出一个新的状态H_(t)
DM:对话管理,就是把上一步的状态翻译(解码?)成自然语言。与此同时,还要选择一个合适的动作
PKB:产品知识库,以三元组的形式表示。只不过以<p,n,v>的方式表示
QU解析出的M,看来应该是某种语义表示,而不是向量表示。
花体I:用户的意图,决定了DM应采用的动作
花体C:标签,分类。决定了DM所考虑的商品范围
花体A:用户关注的属性。
例如用户输入“给我推荐一个5.2寸屏的华为手机吧”,那么用户的意图就是推荐;产品分类就是手机,关注的属性为品牌和屏幕大小,对应的值分别是华为和5.2英寸。
接下来说怎么搞定这个花体I
了解用户的意图还是有难度的
例如如果一个用户说“我想买个华为P9”,那他的意图应该是需要推荐
如果他说“华为P9怎么样”,那可能得回答问题
如果他说“华为P9很漂亮”,我们就不能确定他的意图们只能触发闲聊模块跟他聊会儿
算法1解释了如何实现意图相关的短语的挖掘
第一步是从类似于百度知道这样的网站把包含知识库中的商品名的问题都爬出来,构成集合Q_(D)
第二步把问题切成很多的短语
第三步用LDA做话题聚类
第四步用众包的方法给每一类的短语定义一个意图
第五步再反过来,对每个意图去挑选对应的术语(使用众包的思想)
第六步把标记好的映射搞成一个意图的集合花体I
(吐槽:感觉什么东西扯到众包就感觉不靠谱了)
特别地,论文考虑了三个跟阶段相关的意图
- 增加过滤条件,这个阶段用户在视图增加过滤条件
- 再看看,用户想再看看别的类似的商品
-
拒绝,用户不满当前推荐。这一类的indent从百度知道那里爬不到,只能从聊天日志中提取
经过上述意图抽取,会得到一个意图的集合,然后再反过来从问题集中为每种意图选取2000个问题。对于意图不明显的问题(需要出发闲聊系统),我们也给他挑选了2000个问题。这样就可以构建一个分类器来预测一个自然语言描述的问题所包含的意图,或者仅仅是闲聊。
下一步解释怎么搞定这个花体C
整体而言,整个过程被描述成一个分类过程,然后还改了个卷积神经网络
输入层:把每个中文词(应该是经过分词了吧)映射到一个词向量上,然后一个句子就是把每个词的词向量拼在一起。
卷积层:搞点卷积,然后用tanh激活一下(说实话,从公式上好像看不出卷积的意思)
池化层:表示看不懂,估计瞎写的吧,主要是她那个i没写清楚
语义层:先线性再激活一下
最后把用户的句子的语义跟每个产品对应的句子的语义求最接近(所以并没有按照经典的分类问题来处理,例如数字识别那种的)
属性抽取
这段公式很乱啊,看起来好费劲
这个公式的意思是:T帽子是个集合?然后里面有t帽子1到t帽子K一共K个元素?
m是问题的向量表示。t是不同的属性。
P(t|m)表示m可以用t表示的概率
整个意思大概是说找K个t使得第三行那个连乘的式子达到最大值
一个单词既不表示属性也不表示值的时候,P([word]|m)被直接赋上一个特别小的值。
下面介绍P这玩意儿怎么获得
如果对于属性是产品名字的情况,要从搜索日志中去搜索P值。假如一个用户输入了检索条件q,然后出来了一排url让他选,他最后选了个商品p的url,这个东西就可以从日志里拿出来。然后好多的记录放在一起,就可以计算link啦
#(p,q)是输入了q,然后选择了p的次数,两个分母没解释,猜测的话应该是:第一分母是输入了q没有选p的次数,第二个分母的话,选了p,但搜索条件不是q
然后,就可以计算P了,比较容易理解,不在多余解释。
计算其余属性名及属性值:
用了个动态规划算法。这个,以后再研究吧。
状态追踪:
ST用于维护状态变量H,H是一个状态的形式化表示。ST的话,工作原理是这样的:
1)首先对M_t.I进行更新
如果M_t.I不是阶段相关的,那么M_t.I维持不变。
如果M_t.I是阶段相关的,而且上个阶段的H_t-1.I是Recommendation,就让M_t.I也被赋值为Recommendation
否则的话,就让M_t.I设置成闲聊。
2)如果一句话被检测到是闲聊,H不做更新
3)如果当前对话的商品分类存放在上一阶段的H,则H_t完全继承H_t-1否则它会完全按照M_t来更新
如果闲聊的次数超过一定数量,或者对话被中断的时间超过一个阈值,H会被重置,以此作为一种忘记机制。
对话管理模块会根据当前的H来做出动作或者回复。这些动作包括:
推荐:把链接发给用户
对比:对多个产品进行比较
总结:对产品情况进行总结
回答问题:使用KB-QA的方式来回答问题
问更多的问题:产品类目已经确定了,还需要一些属性上的约束,系统就会去问用户这些东西
闲聊:用基于信息检索的方法跟用户进行闲聊