码迷,mamicode.com
首页 > 其他好文 > 详细

从零构建摘要:摘要的正确打开方式是什么?

时间:2020-12-21 11:50:16      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:价值   pytho   这不   出现   词汇   splash   简便   了解   新闻   

技术图片
图源:unsplash

我们的生活中有许多地方会用到概要。看书的时候,书背后的简要使我们大概了解其内容;新闻软件往往会有关于文章内容的标题;而概要对于影评来说也是特别重要的。

随着自然语言处理和机器学习等技术的出现,我们为何不用它们来生成概要而无需介入人力呢?在你决定为了即将到来的考试概括教材之前,先来了解一些重要的概念吧。

文本摘要有两类,抽取式和生成式。

抽取式摘要

抽取式摘要可被定义为精心挑选出所有重要的句子,并保持原样将其添加至摘要。

· 阅读文本,拆分成句子;
· 解析每个句子,根据某些参数识别其中更为重要的句子,将其打分;
· 选出分数更高的句子;
· 将这些句子添加至摘要。

生成式摘要

生成式摘要更像是人们平常总结一个文本的方式,理解并分析文章。

· 阅读文本;
· 分析文本和句子背后的深意;
· 选出重要主题,创造新的句子(是否运用原文词汇是不确定的);
· 将这些这句添加至摘要。

两相比较,抽取式摘要更加简便一些,因为它不必考虑语义或词汇。本文将讨论抽取式摘要,再从头创造自己的文本摘要。

技术图片

词频——逆文档频率(TF-IDF)

看到一句话,我们能轻易地确认它的内容以及试图表达的信息。但是,一台电脑无法做到。该怎么做呢?如上述所说,将句子分级,并选出级别最高的句子。谁来决定这些句子的级别?TF-IDF来决定。

词频-逆文档频率对于增添至最终摘要的句子选择来说是基础。TF-IDF的数值计算是这样的:词频-逆文档频率=术语频率×逆文档频率。

词频(TF)

词频计算的是文档中一个词语出现的次数。仅看词频得出的结果很有可能是不准确的,因为同样的单词(‘w’)在长文档中会比短文档出现更多次。但是,如果我们将其除以总字数的话,最终数据便会变得更准确,这使词频得出的数量对我们来说更有价值。

词频(w,d)=某词‘w’在文档中的出现次数/该文档的总字数‘d’

这就结束了不是吗,为什么还需要其他计算呢?如果你仔细想想,特别常见的词(如“is,am,was”)的词频值会非常高。词频本身在这种情况下会变得很多余,这个时候就需要我们的救星IDF了。

逆文档频率(IDF)

在开始IDF之前,先讨论一下文档频率(DF)。DF是指在共N个文档中包含某词‘w’的文档数量,字母D即所有文档。

文档频率(w, D)=包含单词‘w’的文档数量

然而,文档频率并不是我们关注的内容,反之才相关。逆文档频率揭晓每个术语承载了多少信息。在逆文档效率的作用结果中,常见词将会有很低的IDF值,而少见的术语会有更高优先级。我们之所以使用这个数值的算法是因为,对于大型文档而言该术语的数值会异常升高。

IDF(w, D)=log(N/(DF(w, D)+1))

用(DF+1)作分母,以避免分母为零。在某些情况下,分母为零会导致严重的错误。

TF-IDF(w,d)=TF(w,d)*log(N/(DF+1))

所有计算完成后,根据TF-IDF分数和阈值将每个文档(在此处是句子)分级,最终得出文本的摘要。那么,现在开始编码吧!

编码部分

输入库:

技术图片

清扫文本:

技术图片

将文本文件转为一个个句子,这将成为我们的文档。

每个句子中的单词数量:

技术图片

为所有文档中的每个单词创建频率列表:

技术图片

此处创建一个列表,其中存储了文档中每个单词的频率。

计算TF和IDF值:

技术图片

第一个功能计算每个文档(此处指句子)中单词的词频,第二个功能计算句子中每个单词的逆文档频率。

记算TF-IDF值:

技术图片

计算每个术语的TF-IDF值。

将所有文档分级:

技术图片

阈值根据句子中每个单词的TF-IDF值来计算每个句子的分数。

生成摘要:

技术图片

阈值是通过线性函数计算TF-IDF值的平均值得出。注意,平均值阈值可通过与标志相乘调整,以增减摘录规模。

是时候运行所有的功能啦!

技术图片

确保文档是在格式为(*.txt)的一个文件中,并和Python脚本在同一个目录中。

测试:

技术图片

完成啦!不过这不是总结文本的唯一方式,除此之外还有很多技巧可以完成摘要。

一次美妙旅途的结束了,笔者感受到了很多乐趣,也希望你享受一起编程、学习文本摘要的过程。

留言点赞发个朋友圈

我们一起分享AI学习与发展的干货

编译组:石书宁、邓逸瑶
相关链接:
https://medium.com/spidernitt/how-to-build-a-text-summarizer-from-scratch-1a68e39558c4

如转载,请后台留言,遵守转载规范

推荐文章阅读

ACL2018论文集50篇解读
EMNLP2017论文集28篇论文解读
2018年AI三大顶会中国学术成果全链接
ACL2017论文集:34篇解读干货全在这里
10篇AAAI2017经典论文回顾

长按识别二维码可添加关注
读芯君爱你

技术图片

从零构建摘要:摘要的正确打开方式是什么?

标签:价值   pytho   这不   出现   词汇   splash   简便   了解   新闻   

原文地址:https://blog.51cto.com/15057819/2564768

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!