突发奇想,突然想把自己阅读后的paper整理下来,整理自己思路的同时也可以方便有需要的读者阅读,感觉这应该是个好习惯hhh…
今天要讲解的是谷歌在17年发表的关于复述生成的一篇论文:
Dictionary-Guided Editing Networks for Paraphrase Generation
什么是复述生成呢?简单来说就是一个句子经过复述后,跟原来的句子在表达形式上有所区别,但是表达的是相同的意思,而且复述的句子还要保证语法通顺。
举个例子:
原句子:“你很漂亮”;
复述句子:“你长得好好看”。
这篇论文的主要贡献为:在encoder-decoder框架中加入字典指导的编辑网络,如下图,右边的词或短语的复述对就是作者引入的外部信息:
第一步:检索
- 作者引入外部数据库:Paraphrase Database (PPDB)来获取词或短语的复述对;
- 使用Lucene工具在PPDB中检索原句子中词或短语的复述对(10倍复述对),然后对这些复述对进行排序,排序算法如下:
这里作者先使用Lucene工具默认的排序工具检索出10倍复述对,然后再使用自己的排序算法取出top M个复述对,排序算法第一项为原始词或短语的tfidf值,表征该短语的整个句子中的重要程度;第二项为复述对的得分函数,可以理解为两个复述短语的语义相似程度。
第二步:字典编码
得到原始句子x的复述对
ε
=
{
(
o
i
,
p
i
)
}
i
=
1
M
\varepsilon=\{(o_i,p_i)\}_{i=1}^M
ε={(oi,pi)}i=1M之后,使用字典编码网络将
ε
\varepsilon
ε转换为表示向量:
第三步:字典指导的编辑模型
- 对于原始输入句子,作者使用BiRNN和标准的attention模型提取有效信息:
- 对于表示向量,作者使用soft attention来判断词是否删除或插入:
具体的soft attention模型如下:
通过 c t c_t ct向量来判断词是否删除或插入。
以上,就是整篇文章的大致流程,paper中的结构图如下:
但其实这个图作者是省略了一些步骤的,具体为隐藏层省略了一层,更具体的应该为:
画的有点丑,将就着看吧…
以上内容,若理解或表达有误,请不吝赐教!