2017年语义理解总结(二)

前面的博客进行了总述,这篇博客细化深入,主要结合知识图谱,KB_QA,语义表示的丰富性方面来论述,但是仍然会很宽泛,因为讲具体的技术细节,会有很多人蒙圈的,没有太大意义。

前面提到,语义理解,一方面要获取丰富,灵活的语义表示,另一方面要与知识图谱融合。要想获取精准的语义理解,比如谁是第一个为纸牌屋里的xx角色配音的人?这类问题的回答,在前面的基础上还要融合语言的逻辑,语言的逻辑一般分为五类:一元,二元,joint,intersection,aggregate,用语义解析的方式构造知识图谱的查询语法树。而中文的语义理解,80%是靠人类的对话的上下文来理解的。这个过程涉及到用户画像,日程表,用户的情绪,所处的环境等因素。所以,深度学习在语义理解中的角色是与这些场景结合,从而辅助提升语义理解。下面以一篇论文作为切入点:

■ 论文 | A Structured Self-attentive Sentence Embedding
■ 链接 | https://www.paperweekly.site/papers/1081
■ 源码 | https://github.com/ExplorerFreda/Structured-Self-Attentive-Sentence-Embedding

本文发表于 ICLR 2017,作者提出一个新的自注意力模型,能提取句子中的重要部分进行 embedding,是一篇可以直接看公式理
解作者思路的论文。

本文最大的亮点在于提出了自注意力机制,无需外部信息即可对自身进行 attention。此外,本文还提出用二维矩阵表示句子,
矩阵的不同行表示句子不同层面的信息,使句子表达信息更丰富,解决了句子被压缩成一维向量时的信息损失问题。

这篇论文具有非常高的商业应用价值!因为他解决了前篇博客中提到的siamese lstm计算语义相似度的提升问题。把他们俩个融合在一起,可以大大提升语义理解的能力。这篇论文提出的自注意力模型,用以获取句子语义的多向量维度,也就是用矩阵来表示句子的语义,然后碾平,解决了本人之前提出的语义表示的丰富性问题。因为一个句子,尤其是一个长句子,他的语义表示单纯地用一个稠密的向量来表示,确实会丢失很多语义信息。目前这个语义表示的方法,超越了之前的BiLSTM+attention,CNN等方法,应该作为以后语义表示的一个baseline。

本人之所以反复强调语义表示的问题,是因为语义理解的第一步就是要获取丰富的语义表示,否则后面的语义解析,与知识图谱融合等工作,是无法继续的。语义表示的好坏,关系着整个语义理解的准确率。

传统的KB_QA(不同于chatbot)的方法主要有:①语义解析②信息抽取③向量建模。第一种难度是最大的,目前工业界,只有微软研发出来一个融合多种方法的以语义解析为主的并在此基础之上用深度学习改进的核心推导链技术,这个系统设计的复杂程度令人惊讶,准确率也是非常高的。大多数的公司,还是青睐于向量建模的方法,因为他的门槛低一些,但是对于时序性的推理问题,比如谁是第一个等等之类的问题,是无能为力的。而向量建模这种方法,其核心:①question的语义表示②question 与 answer的语义相似度计算。当然构建loss function的时候,是必须考虑负样本的。传统的方法是抽取出question中的主题词,然后考虑答案的multi-hot(知识图谱中的entity种类数目,relation数目,是one-hot的扩展)表示,用一个矩阵抽取出稠密向量表示,注意,这个向量是把entity和relation融合在一起的,并没有分开,是不合理的,然后与question的语义进行相似度运算。深度学习改进它,方向就是quesion的丰富的语义表示,answer语义表示的分开考虑,改进score公式。可以用CNN抽取出question的三个方向的语义表示,然后答案考虑:答案类型,答案在知识图谱中的路径,答案的上下文,然后求和表示score公式。这是改进的方向,差不多能提升2个以上的百分点,word2vector的预训练改进的话,能提升更多(改进w2v也是其中一个方向,第一篇博客提到过)。

前面提到了深度学习与知识图谱融合,在考虑答案的类型时,已经考虑到了知识图谱的多hot表示,除此之外,深度学习与知识图谱融合,还可以在其上直接训练模型。(h,r,t)三元组,可以训练出这样一个数学公式:h + r =t。当然,知识图谱的异构性和不平衡性给深度学习训练带来了很大的困难。h + r = t仅仅考虑了1 to 1的情况,对于N_1 or 1_N,以及relation的多义场景,需要TransD模型。训练他的目的很简单,当遇到推理性的问题,比如:梁启超的儿子的太太的情人是谁这类的问题,可以迎刃而解。(不建议用知识图谱的图搜索这种方案!!)

接下来需要突破的就是多轮对话环境下的语义理解了。前面的问题解决了,DM和DST就是核心中的核心了。因为对于AI第一梯度的公司来说,本人前面提到的根本不算是什么核心技术,事实上本人一直认为,深度学习从来都不是语义理解的核心。DM这块儿,也就是结合上下文理解句子的语义,slot填充策略,slot槽位的优先级制定策略,曹组的关系制定,曹组构成的树的准入条件,还有槽继承或者槽记忆,状态切换,这些才是语义理解的核心。

由于每个人专注的领域不同,语义表示的丰富性,不仅体现在多维度,还体现在上下文交叉以及捕捉到词语的情感色彩,这些都是需要突破的地方。希望2018年在多轮对话以及kB_QA上,会有一些进展。

总结起来,本人认为,深度学习与语义理解的关系,深度学习是辅助提升,未来强化学习有机会,应该同时兼顾以下几点:①语义表示的丰富性,自适应性。丰富性不仅体现在语义表示的多维度(self_attention,用矩阵碾平表示,捕捉语义的多个维度),还体现在语义本身的上下文交叉(歧义表示),感情色彩,而自适应性体现在out of context,语义平滑,能够应对不同的环境②与语言逻辑的结合。微软的核心推导链儿提供了一个借鉴思路,估计普及难度有点儿大③与知识图谱的融合,这是大势所趋④与多轮对话,上下文的结合,这也是大势所趋。理解一句话,更多是依靠说话者所处环境,比如slot填充时,可以依靠用户画像或者日程表,不一定非得是上下文,说话者的情绪。深度学习只有与上述情景融合,才会发挥作用,有很多东西需要研发突破。

posted @ 2018-02-12 20:53  佟学强  阅读(...)  评论(...编辑  收藏