2021SC@SDUSC
附所有代码链接:https://github.com/Jayshen0/ Unsupervised-Deep-Keyphrase-Generatio
本篇分析代码模块为:extract.py(一)
一、代码目标
Phrase Bank for Absent Keyphrases
二、代码任务分析
1.短语库的构建(Phrase Bank Construction)
从原始文档集合 D 中的每个文档中,提取存在候选短语,将它们集合在一起来构建一个短语库。
2.缺失候选短语(Absent Candidate Generation)
利用pke工具包从短语库中提取缺失候选短语。
3.根据相似性排名,生成最终的银标签(Rank)
利用doc2vec模型对短语库中的的单词生成词向量,计算嵌入相似性和tf-idf值,进行综合排名,生成存在和缺失候选短语的top5。
三、了解代码背景
1.涉及领域:NLP
自然语言处理( NLP )就是开发能够理解人类语言的应用程序和服务。
我们生活中经常会接触到自然语言处理的应用,包括语音识别,语音翻译,语音助手,搜索引擎,社交网站信息流的处理(比如推荐算法通过自然语言处理了解到你的兴趣,并向你展示相关内容。)等。
2.代码所用库分析
import nltk
from gensim.models.doc2vec import Doc2Vec
from gensim.test.utils import get_tmpfile
from nltk.corpus import stopwords
(1)nltk库
NLTK 是一个当下流行的,用于自然语言处理的 Python 库。它为50多种语料库和词汇资源(如WordNet)提供了易于使用的界面,还提供了一套用于分类,标记化,词干化,标记,解析和语义推理的文本处理库。NLTK被称为“使用Python进行教学和计算语言学工作的绝佳工具”,以及“用自然语言进行游戏的神奇图书馆”。
①from nltk.stem.porter import PorterStemmer(基于Porter词干提取算法)
在英语中,一个单词常常是另一个单词的“变种”,如:happy=>happiness,这里happy叫做happiness的词干(stem)。在信息检索系统中,我们常常做的一件事,就是在Term规范化过程中,提取词干(stemming),即除去英文单词分词变换形式的结尾。
e.g.
porter_stemmer = PorterStemmer()
porter_stemmer.stem(‘multiply’) # 提取'multiply'的词干
stemmer = PorterStemmer()
plurals = ['caresses', 'flies', 'dies', 'mules', 'denied']
singles = [stemmer.stem(plural) for plural in plurals] #提取plurals中所有词的词干
②from nltk.corpus import stopwords(停用词处理)
停用词在文本中被视为噪音。文本可能包含停用词,例如is,am,are,this,a,an,the等。在用于删除停用词的NLTK中,我们需要创建停用词列表并从这些单词中过滤出标记列表。
e.g.
example_sent = "This is a sample sentence, showing off the stop words filtration."
stop_words = set(stopwords.words('english')) #设置停用词为英文停用词语库
word_tokens = word_tokenize(example_sent) #分词
filtered_sentence = [w for w in word_tokens if not w in stop_words]
输出:
filtered_sentence=['This', 'sample', 'sentence', ',', 'showing', 'stop','words', 'filtration', '.']
(2)gensim库
gensim是一个python的自然语言处理库,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。gensim能够将文档根据TF-IDF, LDA, LSI 等模型转化成向量模式,以便进行进一步的处理。此外,gensim还实现了word2vec功能,能够将单词转化为词向量。
①from gensim.models.doc2vec import Doc2Vec(文档向量处理:段落向量法)
这里用到了doc2vec模型,为了更好地理解代码的整个实现过程,下面我们先要对该模型进行深入的学习。
Doc2vec模型或者叫做 paragraph2vec, sentence embeddings,是一种非监督式算法,可以获得sentences/paragraphs/documents 的向量表达,是 word2vec 的拓展。学出来的向量可以通过计算距离来找 sentences/paragraphs/documents 之间的相似性。而我们要学习的这篇论文。在extract.py的代码中,就是要利用Doc2vec模型生成的词向量,来计算嵌入相似性。
因此,我们下面的阶段就要对word2vec和Doc2vec模型进行学习。
(一)前期基础:word2vec模型
来自《word2vec 中的数学原理详解》学习记录
1.预备知识
①sigmod函数:是神经网络中常用的激活函数之一,其定义为:。
其log导数公式:(在后面推导时要用到)
②逻辑回归(Logistic Regression):在二分类问题中, 给出具有某些特征x的样本,来拟合训练样本的参数θ,输出预测假设函数。
取阈值T=0.5,则二分类的判别公式为: