前面的博客进行了总述,这篇博客细化深刻,主要结合知识图谱,KB_QA,语义表示的丰富性方面来论述,可是仍然会很宽泛,由于讲具体的技术细节,会有不少人蒙圈的,没有太大意义。git
前面提到,语义理解,一方面要获取丰富,灵活的语义表示,另外一方面要与知识图谱融合。要想获取精准的语义理解,好比谁是第一个为纸牌屋里的xx角色配音的人?这类问题的回答,在前面的基础上还要融合语言的逻辑,语言的逻辑通常分为五类:一元,二元,joint,intersection,aggregate,用语义解析的方式构造知识图谱的查询语法树。而中文的语义理解,80%是靠人类的对话的上下文来理解的。这个过程涉及到用户画像,日程表,用户的情绪,所处的环境等因素。因此,深度学习在语义理解中的角色是与这些场景结合,从而辅助提高语义理解。下面以一篇论文做为切入点:github
■ 论文 | 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填充时,能够依靠用户画像或者日程表,不必定非得是上下文,说话者的情绪。深度学习只有与上述情景融合,才会发挥做用,有不少东西须要研发突破。it