©PaperWeekly 原创 · 作者|HTLiu

学校|天津大学

研究方向|推荐系统

论文标题:Recurrent Memory Reasoning Network for Expert Finding in Community Question Answering

论文来源:WSDM 2020

论文链接:http://jkx.fudan.edu.cn/~qzhang/paper/wsdm500-fuA.pdf

问题简介

本文拟解决的问题为社区问答(Community Question Answering),或者叫 Expert Finding。虽然名字中带有 QA,但是跟 NLP 中的问答系统不一样,CQA 是在一些问答社区网站上比如 Stackoverflow、知乎等上面,把用户提出的问题推荐给潜在熟悉该问题的回答者(answerer),从而能够使得用户快速地获得更专业的答案。

拿知乎举个例子,如下图:

知乎会给用户推荐一些相关问题去回答,逛知乎的同学应该很了解。因此 CQA 问题本质上就是一个 question 与 answerer 的匹配问题,为问题寻找回答者。

挑战与动机

之前大多数 CQA 的工作均基于文本内容相关性,即将问题与回答者回答过的历史问题集合进行相似度进行简单匹配,但是这样的方法存在一个弊端,即当一个回答者的回答过的问题与提问的问题没有直接显式联系,却包含隐式相关性,那么当前已有的模型就无法做出很好的推荐

比如下图中 Yahoo! Answer 的例子:

提问者的问题是关于如何写一篇学术论文,下面的一个候选用户并没有直接回答过类似写论文的问题。然而从该用户的历史回答问题集合中可以看出该用户其实在撰写学术论文方面还是有足够的专业知识的,因此是有能力回答该问题的。

因此已有的 CQA 的工作仅仅从单纯文本的表层相似度匹配上来看,很难将该问题推送给上面的用户,这里面需要模型有一定的 Reasoning 能力,能够挖掘问题与用户历史记录之间的深度关联。

方法

为了解决上面的挑战,本文受到 MAC(Memory, Attention, Control)门控机制的启发, 设计了一种推理记忆单元 RMC(Reasoning Memory Cells)来从建模问题文本,进而与候选用户的历史回答进行多方面推理,能够挖掘问题与用户的深度联系。

首先给出 CQA 的形式化表示:

  • 提问的问题 q,即:包含多个单词的句子































    ,其中







    是问题的长度。

  • 候选用户的历史回答记录集合






























    ,其中每个回答也是一个包含多个单词的句子:

  • 根据问题 q 和候选用户的历史回答记录 H,判断该用户是否适合回答当前问题。

整体流程如下:

  • 使用 BiGRU 建模 question 文本 Q 以及用户的历史回答问题的文本集 H,其中 word embedding 部分还是结合了 subword-level 和 character-level 的 emebdding。

  • 利用 RMC(Reasoning Memory Cell)来计算 Q 与 H 的各种交互,选出 H 中与 Q 更相关的部分

    • 控制单元(Control Unit):这部分主要是挖掘 question 的不同方面,用来与回答者的问题集合在读入单元与写入单元中进行交互。

    • 读入单元(Read Unit):主要是提取 H 的相关信息,这里使用 Gumbel-softmax 对集合进行了离散化,获得 one-hot 向量,能够 point 重要的相关回答。

    • 写入单元(Write Unit):更新 memory,可以理解为交互层(问题与用户回答的问题集合中重要的部分)。

  • 预测模块:作为二分类问题, 根据学到的问题表示以及用户候选集合表示进行 01 预测,类似 CTR。

下面具体展开介绍,原文框架图如下:

3.1 编码层

word embedding:对 q 与 H 中的所有的词,均使用多粒度的 word embedding 技术来缓解 OOV 的问题,毕竟社区问答语料口语化比较严重。将每个词的word-level, subword-levelcharacter-level进行 concatenate 作为 word 最终的特征表示:



























,其中 subword 使用 BPE 进行编码,character-level 直接使用 ELMo 的预训练词向量。

使用 Bi-GRU 对问题 q 进行编码:






























,其中




















,需要说明的这里面的







是一维向量,表示问题中第 i 个词的特征,





















,其中 d 为 BiGRU 的输出维度。

使用 Bi-GRU 对候选用户的问题集合H进行编码:

其中







表示第 j 条回答记录的表示,这里需要注意的是,此处做了 pooling 操作,保留的是 sentence-level 的特征,因此







是一个向量,而不是词特征矩阵,因此


























为候选用户的历史回答问题数目。

后续的 RMCs 的输入就是









,学习二者的交互。

3.2 RMCs推理记忆单元

类似 RNN/GRU/LSTM 等,包含基本 cell,然后进行多步循环。其中每个基本单元 RMC 包含三个 unit,分别是 control unit,read unit 与 write unit,三个变量分别是控制向量




,记忆向量




,以及状态输出向量




3.2.1 Control Unit

从图中可以看出来,输入是 Q 和上一时刻的控制向量











,使用多个 MLP 层,选出 Q 中当前重要的词,进一步更新下一时刻的控制向量







(这部分的符号的下标均指的是第时刻,或者迭代)。

首先将 Q 中最后一个词的隐状态向量












作为句子的初始表示,之后通过一个 MLP 层进行线性转化,然后串联











后面开始计算词分布:

其中










表示向量与矩阵的列进行 element-wise product,得到一个新的矩阵。


































表示问题中







个词的权重系数, 最后与 Q 中对应词的特征加权求和,得到第




时刻的控制向量














其实本质上就是一个 Attention 的过程,其中











是查询向量,计算 Q 中词的 important weight 分布,只是文中计算方法相对复杂一些,按说可以直接用 dot-product 能达到类似效果,这样







中就可以捕获到当前时刻应该关注问题中哪些词。

3.2.2 Read Unit

这部分主要是来衡量候选用户的历史记录中, 哪些记录与当前问题更加相关,其实类似从 H 中 retrieve 有用的信息。输入就是根据控制向量







,上一时刻的记忆向量







与历史记录集合




首先使用 MLP 计算 H 与



















的交互特征矩阵:

得到的

















均是与 H 同维度的矩阵,之后在使用 Attention 机制,来计算 H 中历史回答的 weight,直接使用 MLP 的计算方法:


































,其中

















,因此最终得到候选用户的历史回答问题记录的 score:























这里需要注意的是后面并没有使用 softmax 来 score 求归一化后的 weight,而是使用Gumbel-softmax来得到 one-hot 的离散化的 weight。这样做的目的是为了能够找出在当前时刻,某一个历史记录与当前问题最相关,直接将该历史记录拿出来进行后续计算。

但是一次 Gumbel-softmax 只能 point 一个相关的历史记录,因此一般情况,都会执行多次 Gumbel-Softmax(应该是多组计算 weight 的 MLP 参数),这样可以得到多个历史记录,如下:

其中,k 表示执行次数,













表示在当前 i 时刻, 第 j 次 Gumbel-softmax 所挑出的那个历史记录的表示向量。这里类似 self-attention 中的 multi-head。

之后再利用一个 Attention 机制,利用



















作为 query vectors, 来对这 k 个选出的历史记录做一个 re-weight 如下:

这样得到的向量







包含了在当前控制向量与记忆向量参与下,候选用户的历史记录信息最相关的部分,为了将前面时刻的信息包含进来,这里又做了一种类似残差的操作,经过 p 个 step 之后,最后的信息将所有的 r 聚合起来:


































。这里的




就可以作为候选用户的表示了。

3.2.3 Write Unit

这部分自然就是更新记忆向量







了,利用





















各自几个 MLP 进行融合,最后利用一个简单的 gate 门控,来判断保留多少旧信息,和新加入多少新信息:  


































这样整个 RMC 就完成了一次更新。很多细节的内容,不过回头看,本质上,control unit 与 read unit 就是两个 Attention 模块,其中 control unit 的 attention 为了选出当前应该关注问题中的哪些词,read unit 中的 attention 则是为了找出候选用户的历史记录中哪些与问题更相关。

而 memory 则代表一种全局信息,可以连接















。这是本文计算 Attention 的方法比较复杂,使用了非常多的 MLP。

3.3 预测模块

这部分额就是预测候选用户是否会回答这个问题,作为二分类问题,最后的特征向量,包含memory信息







,问题向量












和RMC的输出用户向量

















,直接将所有step的r取平均作为最终的候选用户的特征。

继续使用 MLP 计算预测 logits:





































。模型使用 cross-entropy 来训练。

实验

本文使用两个 CQA 数据集如下:

在 CQA 中模型可以给出一个候选用户 list,因此实验使用 S@N(Successfule@N)也就是 recall@N 作为评价指标,即预测出的 TopN 中出现了 best answerer 即可。

首先看与 baselines 的对比实验结果,前面提到文中使用了多种的 word embedding,因此根据使用的 Embedding 类型,设置了四种模型,其中基本模型为 RMRN,表示仅仅使用了 word embedding。

从实验结果可以看出来:

  • 标准的 RMRN 在一些数据集上无法取得最优结果,或者与 baseline 差距非常小。

  • 加上多粒度的 word embedding 的 RMRN+sub/ELMo/Enhanced 效果就明显提高, 这个说明了模型的基本输入很重要,原因应该是在 CQA 语料中,非常多的口语化用语或者专业用语,导致 OOV 现象严重。另一方面也说明模型本身效果或许不是十分优越。

另外一个有意思的消融实验结果如下:

主要对 control unit, read unit 和 write unit 以及 predict 部分进行了 ablation study

从实验中可以看出:

  • 每个模块对模型的性能都有一定影响。

  • 对模型影响最大的还是预测层使用特征,三类特征都对模型有用。

  • read unit 中的 Gumbel-softmax 的作用也很明显,换成 softmax attention 效果下降较多。

总结

这篇文章使用的 RMC 模块能够在一定程度上刻画问题与候选用户的深度联系。RMC 的每个 Step 中,control unit 可以学习到问题中的一个词重要性分布,read unit 可以根据当前的词重要分布,学习(Reasoning)出候选用户的哪些历史回答更相关。write unit 更新全局信息。

这样多个 step 进行 recurrent,模型就可以学到更多的关联信息。本文的模型描述非常详细,完全可以根据模型复现。

此外,本文使用多粒度的词特征,缓解 OOV 的问题,实验证明效果得到了显著提升。不过稍显不足的是,作为核心的 RMC 带来的效果提升并没有那么明显,另一方面就是缺少 Case Study,来直观的表明 RMC 的几个地方,是否匹配到了真正相关的词和历史记录,不同 step 是否有递进的 reasoning 能力。

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

WSDM 2020 | RMRN:社区问答中的深度关联推理模型相关推荐

  1. 知识库问答中的关系识别研究回顾

    ©PaperWeekly 原创 · 作者|舒意恒 学校|南京大学硕士生 研究方向|知识图谱 知识库是用于知识管理的特殊数据库,通常由大量三元组构成,三元组形如(奥巴马,出生于,火奴鲁鲁),三者分别是三 ...

  2. 论文阅读:(2020版)A Survey on Deep Learning for Named Entity Recognition 命名实体识别中的深度学习方法

    A Survey on Deep Learning for Named Entity Recognition 命名实体识别中的深度学习方法 目录 A Survey on Deep Learning f ...

  3. 【推荐实践】腾讯-推荐系统中的深度匹配模型

    导读:推荐系统和搜索应该是机器学习乃至深度学习在工业界落地应用最多也最容易变现的场景.而无论是搜索还是推荐,本质其实都是匹配,搜索的本质是给定 query,匹配 doc:推荐的本质是给定 user,推 ...

  4. 不只是相关:基于真理共识论的社区问答可信答案选择新方法

    ©PaperWeekly 原创 · 作者|张琨 学校|中国科学技术大学博士生 研究方向|自然语言处理 论文标题: Beyond Relevance: Trustworthy Answer Select ...

  5. 不等距双杆模型_搜索中的深度匹配模型(下)

    由于知乎字数限制,单篇文章字数限制不超过5万字,这篇文章主要为上一篇的延续 前文链接: 搜索中的深度匹配模型 4.3 match function模型总结 5.搜索中query和doc的相关性匹配模型 ...

  6. 浏览器中实现深度学习?有人分析了7个基于JS语言的DL框架

    作者:仵冀颖 编辑:H4O 本文中,作者基于WWW'19 论文提供的线索,详细解读了在浏览器中实现深度学习的可能性.可行性和性能现状.具体而言,作者重点分析了 7 个最近出现的基于JavaScript ...

  7. 【推荐实践】腾讯推荐系统中的深度匹配模型

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 [免费下载]2022年6月热门报告合集从零开始了解推荐系统全貌机器学习在B站推荐系统中的应用实践微信视频号实时推 ...

  8. 夯实产业智能化基座,OpenI/O 2020启智开发者大会纵论深度学习

    点击左上方蓝字关注我们 当科技与生活无可割离的交融,深度学习正推动AI步入工业化大生产阶段,加速产业智能化进程的同时,给各产业带来了巨大的增值空间和机遇. 在此时代潮流中,在此时代潮流中,超算与云计算 ...

  9. 重庆社区计算机考试题库,2020重庆社区工作者考试题库:模拟题100题(64)

    2020年重庆社区工作者考试正在如火如荼的开展,为了帮助大家做好备考工作,社区工作者考试模拟题,希望考生们能与小编共同坚持--每日一练! 2020年社区工作者考试模拟题100题64 1. 在市场经济条 ...

最新文章

  1. 一年只有0.001「薇」!杜克大学陈怡然教授自嘲「科学家不如带货」
  2. 成功人士具备的20个习惯(转载)
  3. POJ 1745 Divisibility【DP】
  4. 异常:Get请求提交过来的中文参数乱码
  5. 小米12系列或首发2亿像素主摄:配原生1英寸超大底
  6. 【Pre-Training】超细节的 BERT/Transformer 知识点
  7. oracle 查询优化
  8. Python 矩形积分法计算f_x=x函数的值(完美实现)
  9. 电信校园招聘计算机笔试,中国电信校园招聘笔试试题
  10. Submissions in Production是什么意思?
  11. 关于开源框架GPUImage 的简单说明
  12. C++ 获取特定进程的CPU使用率
  13. python服务启动调试的时候报错:SyntaxError: (“Non-ASCII character ‘\\xca‘ in file......解决办法
  14. 超强技巧分享,如何将人民币大小写转换?
  15. 《算法导论》第16章 贪心算法 个人笔记
  16. 手电筒安卓_iPhone手电筒只能照明?这两个隐藏技巧一定要会,事半功倍!
  17. 【Ajax】 # ajax简单概述
  18. ROP_Emporium_badchars
  19. 盛迈坤电商:拼多多营销策划的方法
  20. Unity 物体(Rigibody组件)碰撞穿透、碰撞抖动

热门文章

  1. python生成xml文件工具_Python根据指定文件生成XML的方法
  2. 小技巧2 - 负边距居中法
  3. 1968: [Ahoi2005]COMMON 约数研究
  4. 教你怎样在电脑上建一个绝密目录
  5. 第二阶段——个人工作总结DAY10
  6. C# 图片文件文本string格式 传输问题
  7. windows常用命令行整理
  8. 怎么看android sdk 文档
  9. java 转账 锁_Java多线程 多个人转账发生死锁
  10. java匹配出某单词除外_java正则匹配 指定内容以外的 内容