热门推荐
【自然语言处理基础技能(NLP)】jieba中文文本处理
2024-11-02 02:27

   

【自然语言处理基础技能(NLP)】jieba中文文本处理

基本概念理解

      背景:有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction,完全不加以人工干预,请问怎样才能正确做到?这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通人只用10分钟就可以理解,这就是我今天想要介绍的TF-IDF算法。让我们从一个实例开始讲起。假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的关键词。
    词频:停用词:逆文档频率

    一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现。于是,我们进行"词频"(Term Frequency,缩写为TF统计。结果你肯定猜到了,出现次数最多的词是—-“的”、”是”、”在”—-这一类最常用的词。它们叫做"停用词"(stop words,表示对找到结果毫无帮助、必须过滤掉的词。假设我们把它们都过滤掉了,只考虑剩下的有实际意义的词。这样又会遇到了另一个问题,我们可能发现”中国”、”蜜蜂”、”养殖”这三个词的出现次数一样多。这是不是意味着,作为关键词,它们的重要性是一样的?显然不是这样。因为"中国"是很常见的词,相对而言"蜜蜂"和"养殖"不那么常见。如果这三个词在一篇文章的出现次数一样多,有理由认为,”蜜蜂”和”养殖”的重要程度要大于”中国”,也就是说,在关键词排序上面,”蜜蜂”和”养殖”应该排在”中国”的前面。所以,我们需要一个重要性调整系数,衡量一个词是不是常见词。如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。用统计学语言表达,就是在词频的基础上,要对每个词分配一个”重要性”权重。最常见的词(”的”、”是”、”在”)给予最小的权重,较常见的词(”中国”)给予较小的权重,较少见的词(”蜜蜂”、”养殖”)给予较大的权重。这个权重叫做"逆文档频率"(Inverse document Frequency,缩写为IDF,它的大小与一个词的常见程度成反比。知道了”词频”(TF)和”逆文档频率”(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。

   计算

第一步,计算词频。

考虑到文章有长短之分,为了便于不同文章的比较,进行”词频”标准化,这样就使用一个比例来减少了每篇文章数量不一致的影响。

或者

第二步,计算逆文档频率。
这时,需要一个语料库(corpus,用来模拟语言的使用环境。

如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。附一个wiki百科对数的链接

第三步,计算TF-IDF。


可以看到TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。

关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径

  • 用法: jieba.analyse.set_idf_path(file_name) # file_name为自定义语料库的路径

    自定义语料库示例
劳动防护 13.900677652 勞動防護 13.900677652 生化学 13.900677652 生化學 13.900677652 奥萨贝尔 13.900677652 奧薩貝爾 13.900677652 考察队员 13.900677652 考察隊員 13.900677652 岗上 11.5027823792 崗上 11.5027823792 倒车档 12.2912397395 倒車檔 12.2912397395 编译 9.21854642485 編譯 9.21854642485 蝶泳 11.1926274509 外委 11.8212361103

 

关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径

  • 用法: jieba.analyse.set_stop_words(file_name) # file_name为自定义语料库的路径
  • 自定义语料库示例

关键词一并返回关键词权重值示例

         2.3.基于 TextRank 算法的关键词抽取

1.基本介绍

TextRank 算法是一种用于文本的基于图的排序算法,通过把文本分割成若干组成单元(句子,构建节点连接图,用句子之间的相似度作为边的权重,通过循环迭代计算句子的TextRank值,最后抽取排名高的句子组合成文本摘要。本文介绍了抽取型文本摘要算法TextRank,并使用Python实现TextRank算法在多篇单领域文本数据中抽取句子组成摘要的应用。

文本摘要可以大致分为两类——抽取型摘要和抽象型摘要

  • 抽取型摘要:这种方法依赖于从文本中提取几个部分,例如短语、句子,把它们堆叠起来创建摘要。因此,这种抽取型的方法最重要的是识别出适合总结文本的句子。

  • 抽象型摘要:这种方法应用先进的NLP技术生成一篇全新的总结。可能总结中的文本甚至没有在原文中出现。

本文,我们将关注于抽取式摘要方法。

2.引入

在开始使用TextRank算法之前,我们还应该熟悉另一种算法——PageRank算法。事实上它启发了TextRank!PageRank主要用于对在线搜索结果中的网页进行排序。让我们通过一个例子快速理解这个算法的基础。

PageRank算法简介

图 1 PageRank算法

假设我们有4个网页——w1,w2,w3,w4。这些页面包含指向彼此的链接。有些页面可能没有链接,这些页面被称为悬空页面。

  • w1有指向w2、w4的链接

  • w2有指向w3和w1的链接

  • w4仅指向w1

  • w3没有指向的链接,因此为悬空页面

为了对这些页面进行排名,我们必须计算一个称为PageRank的分数。这个分数是用户访问该页面的概率。

为了获得用户从一个页面跳转到另一个页面的概率,我们将创建一个正方形矩阵M,它有n行和n列,其中n是网页的数量。

矩阵中得每个元素表示从一个页面链接进另一个页面的可能性。比如,如下高亮的方格包含的是从w1跳转到w2的概率。

如下是概率初始化的步骤

1. 从页面i连接到页面j的概率,也就是M[i][j],初始化为1/页面i的出链接总数wi 

2. 如果页面i没有到页面j的链接,那么M[i][j]初始化为0

3. 如果一个页面是悬空页面,那么假设它链接到其他页面的概率为等可能的,因此M[i][j]初始化为1/页面总数

因此在本例中,矩阵M初始化后如下

最后,这个矩阵中的值将以迭代的方式更新,以获得网页排名。

3.TextRank算法

现在我们已经掌握了PageRank,让我们理解TextRank算法。我列举了以下两种算法的相似之处

  • 用句子代替网页

  • 任意两个句子的相似性等价于网页转换概率

  • 相似性得分存储在一个方形矩阵中,类似于PageRank的矩阵M

TextRank算法是一种抽取式的无监督的文本摘要方法。让我们看一下我们将遵循的TextRank算法的流程

1. 第一步是把所有文章整合成文本数据

2. 接下来把文本分割成单个句子

3. 然后,我们将为每个句子找到向量表示(词向量)。

4. 计算句子向量间的相似性并存放在矩阵中

5. 然后将相似矩阵转换为以句子为节点、相似性得分为边的图结构,用于句子TextRank计算。

6. 最后,一定数量的排名最高的句子构成最后的摘要。

4.实践

我决定设计一个系统,通过扫描多篇文章为我提供一个要点整合的摘要。如何着手做这件事?这就是我将在本教程中向大家展示的内容。我们将在一个爬取得到的文章集合的文本数据集上应用TextRank算法,以创建一个漂亮而简洁的文章摘要。

数据集下载链接

https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2018/10/tennis_articles_v4.csv

结果显示

实践总结

1.导入所需要的库

2.读入数据

3.检查数据

4.将文本分割成句子

5.下载GloVe词汇量

     GloVe词向量下载链接

     https://nlp.stanford.edu/data/glove.6B.zip

6.文本预处理

7.句子特征向量处理

8.相似矩阵准备

9.应用PageRank算法

10.提取摘要

拓展待研究

1. 问题导向

  • 多领域文本摘要

  • 单个文档的摘要

  • 跨语言文本摘要

    (文本来源是一种语言,文本总结用另一种语言

2. 算法导向

  • 应用RNN和LSTM的文本摘要

  • 应用加强学习的文本摘要

  • 应用生成对抗神经网络(GAN)的文本摘要

计算所汉语词性标记集:

【本部分未进行实践(设备有要求)】

原理:将目标文本按行分隔后,把各行文本分配到多个 Python 进程并行分词,然后归并结果,从而获得分词速度的可观提升 基于 python 自带的 multiprocessing 模块,目前暂不支持 Windows

用法

实验结果:在 4 核 3.4GHz Linux 机器上,对金庸全集进行精确分词,获得了 1MB/s 的速度,是单进程版的 3.3 倍。

注意:并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt。

from jieba.analyse import ChineseAnalyzer

    以上就是本篇文章【【自然语言处理基础技能(NLP)】jieba中文文本处理】的全部内容了,欢迎阅览 ! 文章地址:http://syank.xrbh.cn/quote/6911.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 迅博思语资讯移动站 http://kaire.xrbh.cn/ , 查看更多