面向特定问题的开源算法管理和推荐(七)

2021SC@SDUSC

系列文章目录

(一)组内分工情况

(二)任务一爬虫部分代码分析(上)

(三)任务一爬虫部分代码分析(下)

(四)任务一数据集统计代码分析

(五)任务二及PKE模型解读

(六)PKE模型使用一

(七)PKE模型使用二

目录

系列文章目录

前言

一、输入格式

二、非英语语言

三、随机游走

总结


前言

上一篇博客已经介绍了pke模型使用教程中的DF,本篇将继续讲解教程,为下篇博客的代码分析做好准备


一、输入格式

pke 目前支持以下输入格式:

1.原始文本(raw text):利用spacy进行文本预处理,即tokenization, sentence splitting和 POS-tagging

原始文本文件中的内容示例:

Efficient discovery of grid services is essential for the success of
grid computing. [...]

要以原始文本格式阅读文档:

extractor = pke.unsupervised.TopicRank()
extractor.load_document(input='/path/to/input.txt', language='en')

下面简单介绍spacy

安装:pip install spaCy

国内源安装:pip install spaCy -i https://pypi.tuna.tsinghua.edu.cn/simple

  • spaCy是世界上最快的工业级自然语言处理工具。 支持多种自然语言处理基本功能。
  • 官网地址:https://spacy.io/
  • spaCy主要功能包括分词、词性标注、词干化、命名实体识别、名词短语提取等等。
import spacy
nlp = spacy.load('en')
doc = nlp(u'This is a sentence.')

(1)tokenize功能

for token in doc:
    print(token)
This
is
a
sentence
.

(2)词干化(Lemmatize)

for token in doc:
    print(token, token.lemma_, token.lemma)
This this 1995909169258310477
is be 10382539506755952630
a a 11901859001352538922
sentence sentence 18108853898452662235
. . 12646065887601541794

(3)词性标注(POS Tagging)

for token in doc:
    print(token, token.pos_, token.pos)
This DET 89
is VERB 99
a DET 89
sentence NOUN 91
. PUNCT 96

(4)命名实体识别(NER)

for entity in doc.ents:
    print(entity, entity.label_, entity.label)

(5)名词短语提取

for nounc in doc.noun_chunks:
    print(nounc)
a sentence

2.输入文本(input text):与原始文本相同,文本预处理使用spaCy进行。

要阅读输入文本:

extractor = pke.unsupervised.TopicRank()
text = u'Efficient discovery of grid services is essential for the [...]'
extractor.load_document(input=text, language='en')

3.Stanford XML CoreNLP:使用注释器 tokenize、ssplit、pos 和lemma生成的输出文件。 文档逻辑结构信息可以通过将属性合并到CoreNLP XML格式的句子元素中来指定。

CoreNLP XML 的示例

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <document>
    <sentences>
      <sentence id="1" section="abstract" type="bodyText" confidence="0.925">
       <tokens>
          <token id="1">
            <word>Efficient</word>
            <lemma>efficient</lemma>
            <CharacterOffsetBegin>362</CharacterOffsetBegin>
            <CharacterOffsetEnd>371</CharacterOffsetEnd>
            <POS>JJ</POS>
          </token>
          <token id="2">
            <word>discovery</word>
            <lemma>discovery</lemma>
            <CharacterOffsetBegin>372</CharacterOffsetBegin>
            <CharacterOffsetEnd>381</CharacterOffsetEnd>
            <POS>NN</POS>
           </token>
           [...]

在这里,文档逻辑结构信息通过使用部分,类型和置信度属性添加到CoreNLP XML输出中。我们使用Luong等人(2012)提出的分类类别。在 pke 中,文档逻辑结构信息由 WINGNUS 模型利用,并处理以下值:

section="title|abstract|introduction|related work|conclusions"
type="sectionHeader|subsectionHeader|subsubsectionHeader|bodyText"

要阅读 CoreNLP XML 文档,

extractor = pke.unsupervised.TopicRank()
extractor.load_document(input='/path/to/input.xml')

二、非英语语言

pke 使用spacy来预处理文本。因此,在 spacy 中支持的​​​​​​所有语言都可以在 pke 中处理,列表如下

 下面给出了法语关键短语提取的示例:

import pke

text="""Chaque année, la France déforeste potentiellement 5,1 millions
d'hectares via ses importations. Ensemble, agissons !"""

# initialize a TopicRank extractor
extractor = pke.unsupervised.TopicRank()

# load the content of the document and perform French stemming

extractor.load_document(input=text,
                        language='fr',
                        normalization="stemming")

# keyphrase candidate selection, here sequences of nouns and adjectives
# defined by the Universal PoS tagset
extractor.candidate_selection(pos={"NOUN", "PROPN" "ADJ"})

# candidate weighting, here using a random walk algorithm
extractor.candidate_weighting()

# N-best selection, keyphrases contains the 10 highest scored candidates as
# (keyphrase, score) tuples
keyphrases = extractor.get_n_best(n=2)

>>> [('hectares', 0.25085794471351), ('importations', 0.22508473817875038)]

其中在候选加权步骤中,这里使用的是随机游走(random walk)算法,下面简单介绍一下

三、随机游走

定义:随机游走,概念接近于布朗运动,是布朗运动的理想数学状态。

核心概念:任何无规则行走者所带的守恒量都各自对应着一个扩散运输定律。

随机游走算法的基本思想是:
从一个或一系列顶点开始遍历一张图。在任意一个顶点,遍历者将以概率1-a游走到这个顶点的邻居顶点,以概率a随机跳跃到图中的任何一个顶点,称a为跳转发生概率,每次游走后得出一个概率分布,该概率分布刻画了图中每一个顶点被访问到的概率。用这个概率分布作为下一次游走的输入并反复迭代这一过程。当满足一定前提条件时,这个概率分布会趋于收敛。收敛后,即可以得到一个平稳的概率分布。

本质上 Random  Walk 是一种随机化的方法,在实际上生活中,例如醉汉行走的轨迹、花粉的布朗运动、证券的涨跌等都与 Random  Walk 有密不可分的关系。Random Walk已经被成功地应用到数学,物理,化学,经济等各种领域。当前研究者们已经开始将 Random  Walk 应用到信息检索、图像分割等领域,并且取得了一定的成果,其中一个突出的例子就是 Brin 和 Page 利用基于 Random Walk 的 PageRank 技术创建了 Google 公司。

随机游走的形式有:

  1. 马尔可夫链马可夫过程:一维随机游走也可以看作马尔可夫链,其状态空间由整数给出。
  2. 布朗运动
  3. 醉汉走路(drunkard’s walk)
  4. 莱维飞行(Lévy flight)

随机游走(random walk)矩阵可以看做是马尔科夫链的一种特例。

喝醉的酒鬼总能找到回家的路,喝醉的小鸟则可能永远也回不了家。

一维、二维随机游走过程中,只要时间足够长,我们最终总能回到出发点;

三维网格中随机游走,最终能回到出发点的概率只有大约 34%;

四维网格中随机游走,最终能回到出发点的概率是 19.3% ;

八维空间中,最终能回到出发点的概率只有 7.3% ;

定理是著名数学家波利亚(George Pólya)在 1921 年证明的。

物理意义:

随机游走是现实生活中常见的一种模型:

气体分子的运动、滴入水中的墨水 、气味的扩散、醉汉行走轨迹、花粉的布朗运动、证券的涨跌、抛硬币…

  1. 物理学化学:Random Walk是扩散过程的基础模型。
  2. 统计领域:马尔可夫链蒙特卡罗(MCMC),解决近似计算问题。MCMC是解决近似计算问题一种重要方法,它能以比确定性算法快指数级的速度提供解决问题的最好随机方法,目前已经被广泛地应用在统计领域。 
  3. 信息检索:早期搜索引擎如Yahoo使用的是关键字匹配技术,性能容易受到关键词频率的欺骗,所以搜索效果不是很好。1998年Jon Kleinberg 提出了HITS算法,Sergey Brin 和 Larry Page 提出了 PageRank算法之后,搜索的正确率就得到了巨大的改观,这两种技术都是基于Random Walk。《通用化的PageRank公式推导
  4. 经济学:证券的涨跌

参考文档:随机游走算法_满腹的小不甘-CSDN博客_随机游走算法原理


总结

通过本篇博客的学习,了解了使用pke模型的先备知识,从下篇起正式对pke模型方面的代码进行分析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值