一个小任务:给出一个问题和诺干个候选句子,从候选句子中选出答案,有没有好的实现方案?
一个小任务:类似于:“中国最大的内陆湖是哪个?”给出候选句子1.”中国最大的内陆湖,就是青海湖”2.“青海湖在中国内陆湖中最大的”等等 这种句子 然后根据句子找出答案 请问有什么实现的方案吗?
写了个答案,算是个科普向的,搬运到专栏
1 从“是什么”说起
这个问答属于传统的question-answer问题,比如例子上的
中国最大的淡水湖是___(转义,并不一定存在填空,但性质相同)
需要的结果,是补全出,青海湖这个结果
在英文中,我们称这种,给予一个query,回答一个词,作为“填空”,来回答的问题,称为“cloze style”的问题,来源于英语中的填字游戏
我们的input是一个query,一篇context,然后从文章中选取一个 存在于文章中的(point) 词,来做一个 填空 问题,将这个词作为output
现在,问题明确了,我们的任务,就是构建这个"端对端"的,input-output系统
2 从“为什么”谈谈
首先想说一说attention这个概念,以此导入后面的介绍
准确的描述请看
我们现在已经确定了两点
第一,我们所要找的"填空"词,必然是context中的一个
第二,判定这个词我们需不需要,主要取决与我们的query,也就是问题
那么很自然的就会想到,如果我们能够对context中的每个词,和这个query都构建一个函数,假设context = {word1,word2......},我们希望有一个量化的函数f(query,word_i) = value,然后我们只需要选择出max的那个词来进行"填空",就完成了
放到题目中,我们假设存在那么一个f
query:中国最大的淡水湖是哪一个?
f(query,青海湖) = 10
f(query,doge) = 1
f(query,野鸭湖) = 5
然后我们就max(),直接获得了青海湖这个答案
3 往"怎么做"说说
现在的问题变成了:
(1) 如何把这些离散的变量纳入函数去计算?
写过相关代码的,说一句embedding足够了,本质上就是用词向量去表达
简单解释一下,词向量就是用向量来把离散化的词来进行另一个形式的表达,比较好的词向量可以model到语义,具体来说就是,v1如果表达"青海湖",v2 表达 "抚仙湖",v3表达"青海".v4表达"云南",我们甚至可以直接做到v3 -v1 = v4-v2的神奇效果
但这显然不够
如果只是model到单个词,很大程度上浪费了文章信息,我们需要尽可能的涵盖上下文的意思,英文capture
我们希望,model出青海湖这个词的向量的时候,能包含"淡水湖,最大"之类的描述信息,这又如何做到呢
LSTM,时序神经网络RNN,一个经典的解决方案,embedding日常
看个热闹的话,这里,我们已经用一个向量表达了青海湖,还包含了一些它的属性信息,当然这个表达,只有计算机看得懂
(2) 如何构建合理的函数f?
第一篇开山的是这个
Teaching Machines to Read and Comprehend (Hermann et al., 2015)
Y. Cui, Z. Chen, S. Wei, S. Wang, T. Liu, G. Hu
蓝红部分做的就是所谓的capture的工作,也就是对词做了一个抽象,也对问题进行了一个抽象,在这个时候,训练了一个权重向量s,也就是attention
计算的思路也是非常清晰的,g就是我们之前试图寻找的那个f,表达的东西是一样的
秉承这个attention的思路,IBM搞出了一个更清晰的完全体,大概是1.0版本和1.1版本的关系,并且github上有完整的实现,能给一个比较好的参考
Text Understanding with the Attention Sum Reader Network (Kadlec et al., 2016)
Y. Cui, Z. Chen, S. Wei, S. Wang, T. Liu, G. Hu
网络的结构和计算非常简单,但是人家就有soa的效果
今年的Squad,stanford的全球性评测当中,科大讯飞andHIT和MSRA的两篇论文我记得第一第二,其中Aoa reader的论文和上两篇可以说是一脉相承的思路,只不过在对attention的利用上更近一层,MSRA的r-net有所不同,都是值得一读的文章,我在此贴一下paper的链接,这算是目前我知道的,这类问题的最好解决方案了
MSRA
http://aka.ms/rnet
Joint Laboratory of HIT and iFLYTEK Research
[1607.04423] Attention-over-Attention Neural Networks for Reading Comprehension
前一个复杂一些,后一个实现一下不难就是了,不过嘛,谁知道炼丹过程中有什么佐料呢
感谢观看