Blog3 无监督深度关键短语生成——关键代码分析1

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函数:是神经网络中常用的激活函数之一,其定义为:\sigma \left ( x \right )=\frac{1}{1+e^{-x}}

 其log导数公式:(在后面推导时要用到)

逻辑回归(Logistic Regression):在二分类问题中, 给出具有某些特征x的样本,来拟合训练样本的参数θ,输出预测假设函数h_{\theta }\left ( x \right )=\frac{1}{1+e^{\theta ^{T}x}}

取阈值T=0.5,则二分类的判别公式为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值