第一句子大全,网罗天下好句子,好文章尽在本站!

变身抓重点小能手:机器学习中的文本摘要入门指南 | 资源

时间:2023-05-05

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

友情提示:本文共有 5306 个字,阅读大概需要 11 分钟。

鱼羊 编译整理量子位 出品 | 公众号 QbitAI

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

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

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

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

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

抽取式

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

概要式

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

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

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

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

文本摘要基础步骤

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

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

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

第一步:把段落转成句子

首先要做的是分割段落。

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

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

就像这样:

夜里志明春娇乘坐出租车去城里聚会聚会春娇晕倒送医院诊断脑损伤医生告诉志明陪着好起来志明待在医院天第三步:标注

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

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

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

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

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

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

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

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

亲手构建摘要生成器

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

来看看代码蓝图:

1# Creating a dictionary for the word frequency table2frequency_table = _create_dictionary_table(article) 3 4# Tokenizing the sentences 5sentences = sent_tokenize(article) 6 7# Algorithm for scoring a sentence by its words 8sentence_scores = _calculate_sentence_scores(sentences, frequency_table) 910# Getting the threshold11threshold = _calculate_average_score(sentence_scores)1213# Producing the summary14article_summary = _get_article_summary(sentences, sentence_scores, 1.5 * threshold)1516print(article_summary)

第一步:准备数据

这里使用了Beautiful Soup库。

1import bs4 as BeautifulSoup

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

tags13paragraphs = article_parsed.find_all("p")1415article_content = ""1617# Looping through the paragraphs and adding them to the variable18for 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 stopwords2from nltk.stem import PorterStemmer 3def _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) 910 # Reducing words to their root form11 stem = PorterStemmer()1213 # Creating dictionary for the word frequency table14 frequency_table = dict()15 for wd in words:16 wd = stem.stem(wd)17 if wd in stop_words:18 continue19 if wd in frequency_table:20 frequency_table[wd] += 121 else:22 frequency_table[wd] = 12324 return frequency_table

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

1from nltk.tokenize import word_tokenize, sent_tokenize23sentences = sent_tokenize(article)

第四步:计算句子的权重

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

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

23 # 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 += 112 if sentence[:7] in sentence_weight:13 sentence_weight[sentence[:7]] += frequency_table[word_weight]14 else:15 sentence_weight[sentence[:7]] = frequency_table[word_weight]1617 sentence_weight[sentence[:7]] = sentence_weight[sentence[:7]] / sentence_wordcount_without_stop_words1819 return sentence_weight

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

第五步:计算句子的阈值

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

1def _calculate_average_score(sentence_weight) -> int:

23 # 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))1011 return average_score

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

还可以更上档次

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

△ 图片来自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.pdfhttp://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/

— 完—

本文如果对你有帮助,请点赞收藏《变身抓重点小能手:机器学习中的文本摘要入门指南 | 资源》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
谈谈科技论文摘要写作的认识与体会

谈谈科技论文摘要写作的认识与体会

...无法叙述一、两个很简短、具体的结论,有时可采用一些句子来概括地对自己的研究结果予以简单介绍。这里还应注意的是,摘要的内容应该是整篇论文的精华。例如,对于实验研究论文,摘要应该着重描写采用的方法、主要的...

2022-12-09 #经典句子

床长人工智能教程pdf下载——文本自动生成研究进展与趋势

床长人工智能教程pdf下载——文本自动生成研究进展与趋势

...换和处理从而获得新文本的技术,具体说来包括文本摘要句子压缩句子融合文本复述等。国际上对上述不同技术均进行了多年的研究,相关研究成果主要发表在自然语言处理相关学术会议与期刊上,例如等。国际上几个主要的研...

2023-11-20 #经典句子

阿里谭继伟:基于序列到序列模型的文本摘要及淘宝的实践

阿里谭继伟:基于序列到序列模型的文本摘要及淘宝的实践

...展的任务可以把文本摘要分为单文档摘要、多文档摘要和句子摘要,其中值得注意的是句子摘要,简单来说就是把长句子生成短句子。根据摘要生成的方式又可以把文本摘要分为抽取式摘要和生成式摘要,并且对它们进行了简要...

2023-05-03 #经典句子

论文英文摘要如何撰写

论文英文摘要如何撰写

...文内容,找准重点,分清主次,善于重新组合语言,注重句子的前后呼应,内容全面、真实、客观,避免使用含糊不清的句子,避免出现大词、谦词、敬词,尤其广告语,简化句子结构,减少不必要的字词及词汇,成文后认真阅...

2023-11-06 #经典句子

巴伊兰大学:事件新闻推文的交互式摘要生成

巴伊兰大学:事件新闻推文的交互式摘要生成

...面上探索信息更有意义,而不是像之前针对基于整个原始句子进行那样粗糙(见第6节)。我们利用抽象的方法来支持两种有用的交互模式。首先,我们将信息呈现在一个子弹式(bullet-style)的摘要中,其中最重要的信息一开始在项目...

2023-01-26 #经典句子

如何用自然语言处理与机器学习构建摘要?

如何用自然语言处理与机器学习构建摘要?

...抽取式摘要抽取式摘要可被定义为精心挑选出所有重要的句子,并保持原样将其添加至摘要。· 阅读文本,拆分成句子;· 解析每个句子,根据某些参数识别其中更为重要的句子,将其打分;· 选出分数更高的句子;· 将这些句...

2023-05-05 #经典句子

浅析科技论文摘要英译中几个方面的原则

浅析科技论文摘要英译中几个方面的原则

...必要指出,使用被动语态就能避免不必要的人称代词,使句子结构更加经济、紧凑。另外,被动语态的句子在结构上有较大的调节余地,有利于采用恰当的修辞手段,扩展名词短语,扩大句子的信息量,有利于突出有关的概念、...

2022-11-20 #经典句子

探讨科技论文英文摘要的撰写方法和技巧

探讨科技论文英文摘要的撰写方法和技巧

...了确保英文摘要翻译的准确、完整,医刊汇编译从用词、句子完整性、时态、语态、人称、标点符号等方面,对英文摘要的撰写方法和技巧进行探讨。一、用词。科技论文英文摘要措词得体的一个重要方面取决于翻译人员掌握该...

2022-11-16 #经典句子

3步骤3要点 在字数限制内写好论文摘要

3步骤3要点 在字数限制内写好论文摘要

...题陈述、方法、结果和结论。每一个组成部分通常是一个句子,有时是两个句子。论文摘要还必须包含易于搜索的关键字和短语。秘 诀!列出一些您所在领域的研究人员可能会用于搜索的短语和关键词,确保同样的短语出现在...

2023-06-24 #经典句子