无监督关键短语的生成问题01--综述

2021SC@SDUSC 

一、问题背景

关键短语提取(Keyphrase generation)可以得到一个能够总结输入的长文档的短语列表,被广泛应用于信息检索、文本总结、文本分类等领域。研究表明,对于科学领域的相关文档,大约有50%的关键短语并没有在原文中出现。随着深度神经网络的发展,近来有研究表明可以根据关键短语和文档的语义相关性生成文档的关键短语(无论它们是否出现在原文中)。但这些方法都是有监督的,并且需要大量的文档--关键短语对训练。

本课题提出了一个无监督的关键短语提取方法,该方法不利用人工注释,可以直接生成文档的关键短语(无论它们是否出现在原文中)。作者发现,许多在文档中并未出现的关键短语可能会在其他文档中出现;文档的关键短语可能并不是逐字的按序出现在原文中,而是被分成了许多tokens。

作者提出了AutoKeyGen方法,其步骤大致为

  1. 从语料库的所有文档中提取候选的存在在文档中的关键短语(candidate present keyphrase),并将它们放入短语库(phrase bank)中。限定关键短语的词根应该存在在输入文本中,通过部分配对方法可以提取每个文本的候选缺失关键短语(candidate absent keyphrase)
  2. 将两类关键短语(absent/present)进行打分排序,其排序方法融合了两个流行的无监督关键短语的打分方法。其中TF-IDF体现了词汇相似性,嵌入相似性体现了语义相似性。
  3. 将第二步得到的排名高的候选present/absent关键短语作为"sliver data"以训练利用深度神经网络的关键短语生成模型(deep generative model),该模型倾向于通过输入文档来预测关键短语,而不是通过某些单词。

之后,作者采用AutoKeyGen做了大量实验,实验结果表明AutoKeyGen比所有无监督的基准方法做的更好,甚至优于一些有监督的基准。

我们确定,step3中关键短语模型的构建是该方法的核心,其代码也是本次课题的核心代码(对英应与项目的model.py文件)。之后我们将逐步分析该方法,并对step3的方法重点分析。

二、问题公式化

本课题构建的关键短语生成模型仅以文档为基础,而不依赖于任何关键短语注释。关键短语的生成常被描述为排名问题,即输入文章x,输出一个已打分排名的关键短语的列表\gamma

我们将输入的文档表示为一个tokens的序列,即x=[x_1,...,x_{|x|}],这里的|x|代表文章中的总tokens数。

根据关键短语是否在文档中出现,我们可以将关键短语\gamma划分到两个排名的列表中。其中\gamma^P=\{y^p_1,...,y^p_{|\gamma^P|}\}\gamma^A=\{y^p_a,...,y^a_{|\gamma ^A|}\},这里|\gamma^P||\gamma^A| 分别代表了预测的present/absent关键短语个数。显然,\gamma =<\gamma ^P,\gamma^A>,每个关键短语也是一个tokens的序列,可以包含一个或多个tokens。

三、AutoKeyGen方法

AutoKeyGen方法的框架图图如图所示

 图1:AutoKeyGen框架图

 更具体地,该方法的三个步骤为:

  1. 将从所有文章中提取出的presnt phrase放入短语库(phrase bank)中,再提取每篇文档的absnet phrase。
  2. 通过TF-IDF和文档和候选短语间的嵌入相似性对所有候选短语进行排名。
  3. 通过step2得到的sliver label训练Seq2Seq关键短语生成模型,得到更多可能在文档或前叙步骤中未出现的candidate phrase。

基于以上方法,当需要推断新文本的关键短语时,AutoKeyGen方法将从短语库(phrase bank)中提取候选短语,并通过Seq2Seq关键短语生成模型生成候选短语,最后将这些候选短语一起用step2中的排序方法进行排序。

四、方法分析

1.包含presnt/absent phrase 的短语库

1)短语库的构造

许多文档的关键短语并未出现在原文中,而是会出现在其他文档里。首先,该方法采用之前的研究中提出的方法从所有原始文档中提取存在的候选短语。具体细节将在后续博文中介绍。

2)缺失短语的生成

前文中提到,许多文档的关键短语在原文里可能并不是逐字地出现,大多数情况下,其tokens将分散在原文档中。因此,我们将采用部分配对的方法提出absent phrase。

给定输入文档x,可以迭代phrase bank中的所有phrase,若某个phrase中的tokens全部出现在文档中,则该phrase可作为candidate phrase。之所以用所有tokens都要出现在文档中的限制是因为构建的phrase bank非常庞大,若采用部分出现,会有很多的候选短语。

为了提高效率,采用反转索引,将文档中的tokens映射到短语库中,这样做使得不必为每篇文档都扫描全部的短语库。

2.排名模型

1)嵌入相似性

首先将短语和文档编码为同一空间的向量,其语义相关性便可空间向量的余弦距离来衡量。我们用E(x)E(c)分别代表文档x和候选短语c的嵌入形式,其语义相似性可定义如下

Semantic(x,c)=\frac{||E(x)\cdot E(c)||}{||E(x)||\cdot ||E(c)||}

2)TF-IDF

对于语料库D中的文档x,短语c的TF-IDF得分可由下公式计算

Lexical(x,c)=\frac{TF(c,x)}{|x|}log\frac{|D|}{DF(c,D)}

其中|x|是文档x中的词语数,TF(c,x)是短语c在文档x的出现频率,DF(c,D)是包含短语c的文档在语料库D的出现频率。

3)结合两指标的排名模型

对于1),2)两种指标,其在不同长度的文档上的表现不同,直觉上采用几何平均数作为排名的分数,其定义如下

RankScore(x,c)=\sqrt{Semantic(x,c)\cdot Lexical(x,c)}

RankScore(x,c)越高,候选短语c越有可能出现在文档x中。

3.关键短语生成模型

本部分涉及该方法的核心技术,将在后续的博客结合代码深入分析。

五、数据集

论文中提供了5个数据集,我们将选取其中1-2个

https://github.com/ memray/OpenNMT-kpg-release

六、环境配置

工具:pke用于候选短语生成

https://github.com/boudinfl/pke

  • Python3.7.6
  • Python第三方库 

Numpy1.18.1

支持python3.5-3.8
Matplotlib3.1.3 支持python3.6-3.8
Scipy1.4.1支持python3.5-3.8
Keras2.3.1支持python3.5-3.8
Scikit_learn0.22.1支持python3.5-3.8
Scikit_image0.16.2支持python3.6-3.8
  • Cuda 10.1        Cudnn 7.6.5 for cuda 10.1(与cuda版本对应)
  • Pytorch 1.8.2支持cpu/gpu       tensorflow 1.14 支持python3.5-3.7,python2.7;支持cpu/gpu

七、分工和步骤

我们要完成的课题任务是:输入一个文档x,输出x对应的一个关键短语列表\gamma(\gamma既包含present关键短语,也包含absent关键短语)。针对该任务,分工如下。

  1. 给定语料库,首先依据文档中的presnt phrase构建短语库(phrase bank)
  2. 依据构建的短语库,提取每个文档的候选absent短语
  3. 依据步骤1、2生成的候选短语,利用TF-IDF和词向量的相似性等属性,进行rank(贴标签)
  4. 训练一个absent关键短语生成模型

我们将基于这些,分析以上四个步骤的代码实现,其中model.py是核心代码部分,将重点分析。 由于我们大数据专业暂未开设机器学习和自然语言处理相关课程,之前也没有深度学习和自然语言处理的项目经验,基础较差,需要学习很多相关知识,我们也会在博客中进行分享与分析。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值