Learning to Generate Questions by Learning What not to Generate阅读笔记

再次调试代码后 简单记录了项目的结构和主要流程

一  加载数据集,用spacy进行预处理,提取词汇特征,保存成.pkl文件。

二 做嵌入,通过glove文件嵌入初始化每个向量,原文是glove.500B.100d.txt,运行内存不足,我换成了glove.6B.50d.txt.在prepro_util.py文件里做单词嵌入、答案位置嵌入、ner、pos、dep、iob等嵌入,得到嵌入矩阵和字典,构建特征实例。生成output里txt文件。

三 线索预测器

预测器由四层组成:嵌入层。该层与文章编码器具有相同的特性,只是它不包括线索指示器。因此,每个单词都由其单词嵌入、词汇特征、二进制特征、单词频率特征和答案位置指示器来表示。语法依赖分析层。我们通过spaCy[24]得到了每一段的句法依存分析树,其中词之间的依存边是有方向的。模型中,使用句法结构来表示通过词的结构。编码层。编码层的目标是基于依赖树将上下文信息编码到每个单词中。利用多层GCN将相邻词的特征信息融合到每个顶点,即一个词。在L-GCN层之后,每个单词的隐藏向量表示将合并其相邻单词的信息,这些单词在依赖关系树中的跳数不超过L。输出层。在获得文章中每个词的上下文感知表示之后,我们计算每个词成为线索词的概率。利用线性层计算非正规化概率。我们随后通过一个Gumbel Softmax层为每个单词取样二元线索指示符,给出了不正常的概率。采样值为1表示该词被谓词为线索词

对于每个训练示例,我们都会得到输入通道和输出问题中出现的不间断单词。对于训练集中的每一个线索词,我们根据语篇的依存分析树,找到其到达答案块的最短无向路径。对于最短路径上的每个跳转,我们记录依赖项类型。根据每个线索词和答案之间的字数来计算它们之间的距离。为了根据线索词对答案块的依赖关系(不知道还没有生成的问题)预测线索词的位置,使用图卷积网络(GCN)在每一段的依赖树上卷积词的特征。

四 passage Encoder 是双向BRU,输入是 以上的单词嵌入,词汇特征,以及单词预测器的输出,将以下特征连接起来以形成一个要输入到编码器的连接表示:Word Vector,Lexical Features.,Binary Features,Answer Position,Word Frequency Feature,Clue Indicator Feature. 。

代码并没有学习词汇表中每个单词的完整表示,而是使用一种masking策略,用一个特殊的标记替换低频词的单词嵌入,这样低频词的信息只由其答案/线索指示器和其他增强的特征嵌入来表示,除了词向量。由于两个原因,此策略可以提高性能。首先,在问题生成中,低频词的增强标记特征往往比词义更具影响力。这样,masking策略可以帮助模型忽略问题生成不需要的细节。其次,需要学习的参数数量,特别是需要调整的单词嵌入数量,大大减少。因此,隐藏不必要的词嵌入,同时只保留相应的增强特征和指标,不会影响问题生成的性能。它实际上通过降低模型复杂度来改进训练。

五 Decoder

输入是从词汇表中生成的单词和从输入文章中复制单词的概率,利用注意和复制机制帮助生成问题,输出是两个输出,一个是利用注意机制生成的单词,一个是利用复制机制 复制的大概率的单词。

猜你喜欢

转载自blog.csdn.net/xulijun_811/article/details/106937954
今日推荐