【机器学习】机器学习中的文本摘要入门指南

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: 鱼羊 编译整理 量子位 出品 | 公众号 QbitAI 如果你是科研狗,一定有过被摘要支配的恐惧。 如果你想在浩如烟海的互联网信息里寻找重点,一定想要快速排除多余的内容。 基于机器学习的自动文本摘要工具,将一键解放你的双手,化身抓重点小能手,为你捕捉关键,排除冗余。
鱼羊 编译整理 量子位 出品 | 公众号 QbitAI

如果你是科研狗,一定有过被摘要支配的恐惧。

如果你想在浩如烟海的互联网信息里寻找重点,一定想要快速排除多余的内容。

9c1aaf49e9e9566f6424e233b76f7809.jpeg

基于机器学习的自动文本摘要工具,将一键解放你的双手,化身抓重点小能手,为你捕捉关键,排除冗余。

ea5997b99506c1181381ac40650cb9db.jpeg

近日,有位叫Alfrick Opidi的小哥在入门级深度学习云平台FloydHub 上写了一篇关于自动文本摘要的入门教程,量子位对其进行了编译,希望能帮助大家理解。

自动文本摘要属于自然语言处理(NLP)的范畴,通常用机器学习算法来实现,目前实现的方法主要有两种:

抽取式

就像一支荧光笔,抽取式文本摘要就是给原始文本中的重点单词标上高亮,再将其加以组合形成摘要。b64e8400e268fdcaa2e195e18dab04e8.gif

概要式

概要式文本摘要更接近于人类的思维——通过深度学习对原始文本进行释义并提炼主旨,而后形成摘要。相比于抽取式,概要式文本摘要更像在说人话。bef8408a3ea5c30476b56ed52dde5d69.jpeg

很显然概要式的表现会比抽取式更好,然而这种算法需要复杂的深度学习技术和语言模型支撑,还面临这诸如自然语言生成这样的NLP问题。

因此抽取式方法仍然广泛流行。

鉴于本文是一篇入门指南,接下来提到的内容都是基于抽取式方法来实现的。

文本摘要基础步骤

文本摘要是如何实现的呢?

举个例子,用文本摘要机器学习算法来对下面这段文字进行处理:

夜里志明和春娇乘坐出租车去城里聚会。聚会上春娇晕倒并被送进了医院。她被诊断出患有脑损伤,医生告诉志明要一直陪着她直到她好起来。因此,志明待在医院整整陪了她三天。

第一步:把段落转成句子

首先要做的是分割段落。

  1. 夜里志明和春娇乘坐出租车去城里聚会

  2. 聚会上春娇晕倒并被送进了医院

  3. 她被诊断出患有脑损伤,医生告诉志明要一直陪着她直到她好起来

  4. 因此,志明待在医院整整陪了她三天

第二步:文本处理

接下来,删掉没什么意义的连接词、数字、标点。

就像这样:

  1. 夜里志明春娇乘坐出租车去城里聚会

  2. 聚会春娇晕倒送医院

  3. 诊断脑损伤医生告诉志明陪着好起来

  4. 志明待在医院天

第三步:标注

然后,对句子进行标记,获得句子中的所有单词:

[‘志明’,‘春娇’,‘乘坐’,‘出租车’,‘去’,‘夜里’,‘聚会’,‘城里‘,‘聚会’,‘春娇’,‘晕倒’,‘医院’,‘诊断’,‘脑’,‘损伤’,‘医生’,‘告诉’,‘志明’,‘陪’,‘好起来’,‘志明’,‘待’,‘医院’,‘天’]

第四步:评估单词的加权出现频率

现在就可以计算单词们的加权出现频率了。

计算公式是:单词加权出现频率 = 单词出现次数 / 段落中最常用单词出现次数

第五步:用加权频率替换单词

把句子中的每个单词都替换成加权频率,就可以计算这个句子的权重。比如在志明和春娇这个例子当中,第一句在整个段落中的权重是最大的,那么它就将构成摘要的主体部分。

以上是机器学习实现文本摘要的基本步骤,下面我们来看看如何在真实世界中构建摘要生成器。

亲手构建摘要生成器

使用Python的 NLTK 工具包,我们可以亲自动手创造一个文本摘要生成器,实现对Web文章的摘要生成。

来看看代码蓝图:

1# Creating a dictionary for the word frequency table

2 frequency_table = _create_dictionary_table(article)  3  4 # Tokenizing the sentences  5 sentences = sent_tokenize(article)  6  7 # Algorithm for scoring a sentence by its words  8 sentence_scores = _calculate_sentence_scores(sentences, frequency_table)  9 10 # Getting the threshold 11 threshold = _calculate_average_score(sentence_scores) 12 13 # Producing the summary 14 article_summary = _get_article_summary(sentences, sentence_scores,  1.5  * threshold) 15 16 print(article_summary)

第一步:准备数据

这里使用了Beautiful Soup库。

1import bs4 as BeautifulSoup

2 import  urllib.request    3  4 # Fetching the content from the URL  5 fetched_data = urllib.request.urlopen( 'https://en.wikipedia.org/wiki/20th_century' )  6  7 article_read = fetched_data.read()  8  9 # Parsing the URL content and storing in a variable 10 article_parsed = BeautifulSoup.BeautifulSoup(article_read, 'html.parser' ) 11 12 # Returning 

 tags

13paragraphs = article_parsed.find_all( 'p') 14 15article_content =  '' 16 17 # Looping through the paragraphs and adding them to the variable 18 for p  in paragraphs:   19    article_content += p.text

使用urllib.request实现网页数据的抓取,再调用BeautifulSoup来解析网页数据。

第二步:数据处理

为确保抓取到的文本数据尽可能没有噪音,需要做一些基本的文本清理。这里使用了 NLTK 的 stopwords PorterStemmer 

PorterStemmer可以将单词还原为词根形式,就是说能把 cleaning, cleaned, cleaner 都还原成 clean。

此外还要创建一个字典,来存储文本中每一个单词的出现频率。

循环整个文本来消除 “a”、“the” 这样的停止词,并记录单词们的出现频率。

1from nltk.corpus import stopwords

2 from nltk.stem  import PorterStemmer  3 def _create_dictionary_table(text_string) -> dict:  4  5     # Removing stop words  6    stop_words = set(stopwords.words( "english"))  7  8    words = word_tokenize(text_string)  9 10     # Reducing words to their root form 11    stem = PorterStemmer() 12 13     # Creating dictionary for the word frequency table 14    frequency_table = dict() 15     for wd  in words: 16        wd = stem.stem(wd) 17         if wd  in stop_words: 18             continue 19         if wd  in frequency_table: 20            frequency_table[wd] +=  1 21         else: 22            frequency_table[wd] =  1 23 24     return frequency_table

第三步:将文章标注成句子

1from nltk.tokenize import word_tokenize, sent_tokenize

2 3sentences = sent_tokenize(article)

第四步:计算句子的权重

句子的权重取决于它包含的单词的出现频率。

1def _calculate_sentence_scores(sentences, frequency_table) -> dict:   

2  3     # Algorithm for scoring a sentence by its words  4    sentence_weight = dict()  5  6     for sentence  in sentences:  7        sentence_wordcount = (len(word_tokenize(sentence)))  8        sentence_wordcount_without_stop_words =  0  9         for word_weight  in frequency_table: 10             if word_weight  in sentence.lower(): 11                sentence_wordcount_without_stop_words +=  1 12                 if sentence[: 7in sentence_weight: 13                    sentence_weight[sentence[: 7]] += frequency_table[word_weight] 14                 else: 15                    sentence_weight[sentence[: 7]] = frequency_table[word_weight] 16 17        sentence_weight[sentence[: 7]] = sentence_weight[sentence[: 7]] /        sentence_wordcount_without_stop_words 18 19     return sentence_weight

需要注意的是,长句有可能得到不必要的高分,为了避免这一点,要将 句子的总分数除以该句的单词数 

第五步:计算句子的阈值

为了进一步优化结果,要计算句子的平均分数。使用此阈值,可以避免分数较低的句子的干扰。

1def _calculate_average_score(sentence_weight) -> int:

2  3     # Calculating the average score for the sentences  4    sum_values =  0  5     for entry  in sentence_weight:  6        sum_values += sentence_weight[entry]  7  8     # Getting sentence average value from source text  9    average_score = (sum_values / len(sentence_weight)) 10 11     return average_score

如果感兴趣,FloydHub提供了进行深度学习模型训练的环境,你可以在FloydHub Notebook上运行整个代码。

还可以更上档次

以上只是机器学习中文本摘要算法的入门小知识,想要达到更上档次的效果,甚至可以把抽取式方法和概要式方法结合起来。

113bbacd7aa0ee7aecde07a6ce7f0a5c.gif

△ 图片来自Taming Recurrent Neural Networks for Better Summarization

传送门

如果还想更深入地了解机器学习中的文本摘要,不妨看看以下资源。

WikiHow,一个大规模、高质量的文本摘要数据集:

https://www.wikihow.com/Main-Page

WikiHow食用指南:

https://arxiv.org/pdf/1810.09305.pdf

用指针生成网络(Pointer-Generator Networks)实现文本摘要:

https://arxiv.org/pdf/1704.04368.pdf http://www.abigailsee.com/2017/04/16/taming-rnns-for-better-summarization.html

如何在文本摘要中使用基于预训练的编码器-解码器框架:

https://arxiv.org/pdf/1902.09243.pdf

原文链接:

https://blog.floydhub.com/gentle-introduction-to-text-summarization-in-machine-learning/

本来转自商业新知网

目录
相关文章
|
30天前
|
机器学习/深度学习 人工智能 供应链
掌握机器学习:从理论到实践PHP:从入门到精通的旅程
【8月更文挑战第20天】在探索人工智能的无限可能时,机器学习作为核心驱动力,引领着技术革新和产业变革。本文深入浅出地介绍了机器学习的基本概念、核心算法及其在实际中的应用,旨在为初学者提供一个清晰的学习路径和对这一激动人心领域的全面理解。通过探讨机器学习如何影响我们的生活和工作,本文不仅阐述了理论知识,还分享了实践案例,帮助读者把握机器学习的精髓,激发对未来技术发展的想象与创造。
165 65
|
1天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
9 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
7天前
|
机器学习/深度学习 人工智能 算法
探索AI的奥秘:机器学习入门之旅
【8月更文挑战第43天】本文将带领读者开启一段奇妙的学习之旅,探索人工智能背后的神秘世界。我们将通过简单易懂的语言和生动的例子,了解机器学习的基本概念、算法和应用。无论你是初学者还是有一定基础的学习者,都能从中获得启发和收获。让我们一起踏上这段激动人心的学习之旅吧!
|
18天前
|
机器学习/深度学习 算法 数据挖掘
|
1月前
|
机器学习/深度学习 人工智能 算法
AI基础科普:机器学习入门与实践
本文全面介绍了机器学习及其在信用评分预测中的应用。首先概览了机器学习作为人工智能核心领域的重要性及其实现数字化转型的作用。接着定义了机器学习,并区分了监督、无监督和强化学习等主要类型。随后,通过一个具体的场景——利用Python与scikit-learn库构建逻辑回归模型来预测客户的信用等级,详细阐述了从数据准备、模型训练到评估的全过程。此外,还介绍了如何借助阿里云机器学习平台PAI进行云上的模型训练和部署。最后,通过总结逻辑回归算法和其在金融领域的应用,鼓励读者深入学习并实践AI技术,以适应快速发展的科技趋势。
85 2
AI基础科普:机器学习入门与实践
|
10天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
11 0
|
1月前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
47 7
|
19天前
|
机器学习/深度学习 人工智能 算法
探索AI的奥秘:机器学习入门之旅
【8月更文挑战第31天】本文将带领读者开启一段奇妙的学习之旅,探索人工智能背后的神秘世界。我们将通过简单易懂的语言和生动的例子,了解机器学习的基本概念、算法和应用。无论你是初学者还是有一定基础的学习者,都能从中获得启发和收获。让我们一起踏上这段激动人心的学习之旅吧!
|
19天前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
27 0
|
19天前
|
机器学习/深度学习 自然语言处理 TensorFlow
TensorFlow 入门超简单!从零开始构建你的第一个神经网络,开启机器学习精彩之旅!
【8月更文挑战第31天】本文介绍了流行开源机器学习框架 TensorFlow,涵盖其安装与首个神经网络构建步骤。TensorFlow 由 Google 开发,适用于计算机视觉及自然语言处理等领域。掌握它不仅提升就业机会,还加深对机器学习的理解。通过安装 Python 并使用 pip 命令安装 TensorFlow,即可按照示例构建、训练并评估简单的线性回归模型,快速开启机器学习之旅。
21 0