这是ACL2018的一篇Best papers.
解决的是论坛提问中对posts的信息补全的问题
用到的数据是StackExchange的数据
场景
论坛求助中的一些posts并不完善,有些问题直接开问,并没有包含如 自己系统版本号,环境 等信息的说明,这种问题很难得到确切的回答。
作者通过NN的方法想办法去补全这些信息在问题中,应用场景可能就是,当作者要发布的时候,系统会自动提示作者需要补全哪些信息。
大致思路
作者受到 EVPI 的启发 (EVPI是衡量, 得到了信息X,会对我有多大的帮助的指标)
设计了这样一个函数:
来衡量:
是 post, 是候选集 中的一个问题, 是针对 的一个回答。
是对于 , , 得到答案 的概率。
是得到 , 对 有效的程度
生成候选集
作者先通过Lucene(一个文本检索系统) 找到与目标post 最相近的10个 posts, 看这些posts 下面有哪些 clarifying questions (就是发布一个post之后,被问到的需要补全信息的问题,如what is the version of your os?) 组成一个问题集
那对于一个问题, 其中有哪些是posts针对问题重新编辑了,这些编辑进去的信息也被组成一个集合 , 称为答案集。
所以问题就是,一个post 对应一个问题集 ;
同时对于每个 , 也对应一个答案集 。
以下一些数学标记,结合全文来看:
就是一个前馈神经网络,
是指对text的所有词向量平均得到的向量表示;
是对text的每个词向量输入lstm之后的隐藏状态层做平均得到的向量表示
Answer modeling
因为有候选集,所以就要衡量一下 对于 , , 得到答案 的概率。
这里用 来做一个 answer 的 representation 来和真实的answer做距离,这里其实我不太理解为什么这个函数能够表征一些答案的信息
这个的概率为:
这里的值域也感觉有待商榷,好像不是 [0,1]
优化loss函数就是:
后半部分是把所有问题和当前问题 的相似度做权重考虑所有问题。
可用性计算
这里直接用这个函数来衡量:
表示概率的意思
其实这是一个有监督的二分类问题,就是: 有帮助( ),没有帮助( ) 两个类别。
所以这部分的损失函数就用交叉熵来衡量:
总损失函数
就是综合考虑两部分损失
理解
作者把问题分解为两部分,其实模型本身很简单,也没有用到复杂的NN,也只是LSTM,由于刚刚接触,对QA这类问题也没有很深的理解,只是记录一下。