tags什么意思(生化是什么意思)

选自floydhub作者:Alfrick Opidi机器心脏编译参加:张骞杜威在阅读新闻报道和其他实时文章时,我们需要快速概括文章的主旨。但是,如果把一篇长文章

选自floydhub

作者:Alfrick Opidi

机器心脏编译

参加:张骞杜威

在阅读新闻报道和其他实时文章时,我们需要快速概括文章的主旨。但是,如果把一篇长文章概括成一个小段落,能够涵盖原文的中心思想,就要花费我们很多时间。本文介绍了自然语言处理中自动文本摘要的两种方法——抽取和摘要文本摘要。这两种方法通过计算句子成分在文中的权重来生成摘要,可以大大节省阅读全文和概括主要信息的时间,为读者提供方便。

文章太长不想看?ML 文本自动摘要了解一下

你有没有把一篇很长的文档总结成一小段?你花了多长时间?人工总结费时又枯燥。自动文本摘要可以克服这样的问题,并帮助您轻松地总结文章的中心思想。

文本法可以简洁、准确地概括冗长的文本,同时把重点放在传达有用信息的章节上,而又不失文章的主旨。

自动文本摘要旨在将冗长的文档转换成缩写版本,如果手动完成,可能会很麻烦且成本很高。

在生成所需的抽象文本之前,可以训练机器学习算法来理解文档,并识别传达重要事实和信息的章节。

文章太长不想看?ML 文本自动摘要了解一下

使用文本摘要机器学习算法生成在线新闻文章的摘要。

自动文本摘要的必要性

目前,随着数字空中数据的爆炸式增长,并且其中大部分是非结构化的文本数据,有必要开发自动文本摘要工具,以便人们可以轻松地了解文本的主要思想。目前,我们可以快速获取大量信息。然而,大部分信息冗长且不相关,可能无法传达其初衷。比如你想从一篇网络新闻报道中搜索一些特定的信息,你可能要彻底了解报道的内容,花大量的时间排除无用的信息,才能找到你想了解的信息。因此,使用一个能够提取有用信息,剔除无关和无用数据的自动文本摘要生成器是非常重要的。摘要的实现可以增强文档的可读性,减少搜索信息的时间,获得更多适合特定领域的信息。

自动文本摘要的主要类型

概括地说,自然语言处理中的文本摘要有两种方法:抽取和抽象。

类型摘要(基于提取的摘要)

在摘要摘要中,代表一段文本中重要内容的单词子集被提取并组合以生成摘要。我们可以把摘要想象成一个荧光笔——从原文中提取主要信息。

文章太长不想看?ML 文本自动摘要了解一下

荧光笔=可移动摘要

在机器学习中,文摘通常需要测量基本句子成分的权重,并根据权重结果生成文摘。

可以使用不同类型的算法和方法来测量句子的权重,然后根据组件之间的相关性和相似性对它们进行排序——并进一步连接这些组件以生成摘要。

如下例所示:

文章太长不想看?ML 文本自动摘要了解一下

摘录摘要

如上例所示,摘要由荧光笔标记为黄色的单词组成,生成的摘要语法可能不准确。

抽象抽象抽象

在摘要摘要中,高级深度学习技术用于解释和缩写原始文档,就像人类一样。把抽象摘要想象成一支笔——它可以生成可能不属于源文档的新句子。

文章太长不想看?ML 文本自动摘要了解一下

笔=抽象的抽象的抽象

抽象机器学习算法可以生成代表源文本中最重要信息的新短语和句子,因此这些抽象算法可以帮助克服摘要中的语法错误。

如下例所示:

文章太长不想看?ML 文本自动摘要了解一下

抽象抽象抽象。

虽然抽象文本摘要性能更好,但开发相关算法需要复杂的深度学习技能和语言模型。

为了获得合理的输出,摘要方法必须能够解决许多自然语言处理问题,如自然语言生成、语义表示和推理置换。

同样,抽象文本摘要方法仍然非常流行。在本文中,我们将重点讨论摘要文本摘要方法。

如何执行文本摘要

我们使用下面的段落来展示如何执行文本摘要提取:

让我们按照下面的步骤来总结这段话,同时尽可能的保留原意。

第一步:把这篇文章变成一个句子。

首先,我们把这段话分成相应的句子。转换成句子最好的方法是在句号出现的时候提取一个句子。

第二步:文字处理。

接下来,我们去掉stopword(没有实际意义的常用词,如“和”“和”)、数字、标点符号等句子中的特殊字符。

句子成分的过滤有助于去除冗余和不重要的信息,这些信息可能对文本意图的表达没有任何价值。

以下是文本处理的结果:

第三步:细分。

剪下每个句子,列出句子中的所有单词。

这里有一个单词列表:

['peter','elizabeth','took','taxi','attend','night','party','city','party','elizabeth','collapse','rush','hospital', 'diagnose','brain', 'injury', 'doctor','told','peter','stay','besides','get','well','peter', 'stayed','hospital','days','without','leaving']

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

然后,我们计算所有单词的加权频率。为此,我们将每个单词的频率除以在这篇文章中出现次数最多的单词的频率。彼得在这段经文中出现的次数最多,共有三次。

下表给出了每个词的加权频率。

文章太长不想看?ML 文本自动摘要了解一下

第五步:用对应的加权频率替换原句中的每个词,然后计算总和。

我们在文本处理步骤中已经去掉了停用词、特殊字符等无关紧要的词,所以它们的加权频率为零,所以在计算中不需要添加。

文章太长不想看?ML 文本自动摘要了解一下

根据所有词的加权频率之和,可以推导出第一句话在整个段落中的权重最大。所以第一句话最能概括这段话的意思。

另外,如果把第一句和第三句(在全句中排第二位)结合起来,可以做更好的总结。

上面的例子只是对如何在机器学习中执行抽象文本摘要的基本解释。现在,让我们看看如何将上述概念应用于创建一个实际的摘要生成器。

维基百科文章的文本摘要

让我们创建一个文本摘要生成器,它可以简化冗长的web文章中的信息。为了简单起见,除了Python的NLTK工具包,我们不使用任何其他的机器学习库。

下面是摘要生成器的代码蓝图:

# Creating a dictionary for the word frequency tablefrequency_table = _create_dictionary_table(article)# Tokenizing the sentencessentences = sent_tokenize(article)# Algorithm for scoring a sentence by its wordssentence_scores = _calculate_sentence_scores(sentences, frequency_table)# Getting the thresholdthreshold = _calculate_average_score(sentence_scores)# Producing the summaryarticle_summary = _get_article_summary(sentences, sentence_scores, 1.5 * threshold)print(article_summary)

按照这些步骤,使用Python语言创建一个简单的文本摘要生成器。

第一步:准备数据。

在这个例子中,我们想总结一下这篇维基百科文章的信息,它只是对20世纪重大事件的概述。

为了获得本文的文本,我们将使用漂亮的汤库。

下面是抓取文章内容的代码:

import bs4 as BeautifulSoupimport urllib.request # Fetching the content from the URLfetched_data = urllib.request.urlopen('https://en.wikipedia.org/wiki/20th_century')article_read = fetched_data.read()# Parsing the URL content and storing in a variablearticle_parsed = BeautifulSoup.BeautifulSoup(article_read,'html.parser')# Returning <p> tagsparagraphs = article_parsed.find_all('p')article_content = ''# Looping through the paragraphs and adding them to the variablefor p in paragraphs: article_content += p.text

在上面的代码中,我们首先导入捕获web数据所需的库。BeautifulSoup库用于解析网页内容,而urllib库用于连接网页和检索HTML。

BeautifulSoup将输入文本转换为Unicode字符,输出文本转换为UTF-8字符,省去了从web抓取文本时处理不同字符集代码的麻烦。

我们使用urllib.request程序中的urlopen函数来打开网页。之后,使用read函数读取捕获的数据对象。为了解析数据,我们调用BeautifulSoup对象并向其传递两个参数,即article_read和html.parser

find_all函数用于返回所有

第二步:处理数据。

为了确保丢弃的文本数据尽可能无噪声,我们将执行一些基本的文本清理。为了帮助完成这个过程,我们将从NLTK库中导入一个停用词表。

我们还将介绍PorterStemmer,这是一种将单词还原为词根形式的算法。比如清洁、被清洁、更清洁这些词,都可以简化为根清洁。

此外,我们将创建一个字典表,包含文本中每个单词的频率。我们将依次阅读课文和相应的单词,去掉所有的停用词。

之后,我们将检查该单词是否出现在frequency_table中。如果一个单词以前在字典中,它的值会更新1。否则,如果一个单词是第一次被识别,它的值被设置为1。

例如,频率表应该如下所示:

文章太长不想看?ML 文本自动摘要了解一下

代码如下:

from nltk.corpus import stopwordsfrom nltk.stem import PorterStemmerdef _create_dictionary_table(text_string) -> dict: # Removing stop words stop_words = set(stopwords.words("english")) words = word_tokenize(text_string) # Reducing words to their root form stem = PorterStemmer() # Creating dictionary for the word frequency table frequency_table = dict() for wd in words: wd = stem.stem(wd) if wd in stop_words: continue if wd in frequency_table: frequency_table[wd] += 1 else: frequency_table[wd] = 1 return frequency_table

第三步:把文章分成句子。

为了将article_content拆分成一个句子集,我们将使用NLTK库中的内置方法。

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

第四步:确定句子的加权频率。

为了评价文中每个句子的得分,我们会分析每个单词的出现频率。在这种情况下,我们会根据句子中的单词对句子进行评分,即加上每个重要单词在句子中的出现频率。

请看下面的代码:

def _calculate_sentence_scores(sentences, frequency_table) -> dict: # Algorithm for scoring a sentence by its words sentence_weight = dict() for sentence in sentences: sentence_wordcount = (len(word_tokenize(sentence))) sentence_wordcount_without_stop_words = 0 for word_weight in frequency_table: if word_weight in sentence.lower(): sentence_wordcount_without_stop_words += 1 if sentence[:7] in sentence_weight: sentence_weight[sentence[:7]] += frequency_table[word_weight] else: sentence_weight[sentence[:7]] = frequency_table[word_weight] sentence_weight[sentence[:7]] = sentence_weight[sentence[:7]] / sentence_wordcount_without_stop_words return sentence_weight

重要的是,为了避免长句的分数必然高于短句的分数,我们用每个句子的分数除以那个句子的字数。

另外,为了优化字典内存,我们任意添加了句子[:7],指的是每个句子的前七个字符。但是,在长文档中,您很可能会遇到开头n _ chars相同的句子。这时,最好使用哈希函数或索引函数来处理这种边缘情况,避免冲突。

第五步:计算句子阈值。

为了进一步调整适合摘要的句子类型,我们将创建句子的平均分数。借助这个门槛,我们可以避免选择分数低于平均值的句子。

代码如下:

def _calculate_average_score(sentence_weight) -> int: # Calculating the average score for the sentences sum_values = 0 for entry in sentence_weight: sum_values += sentence_weight[entry] # Getting sentence average value from source text average_score = (sum_values / len(sentence_weight)) return average_score

第六步:生成摘要。

最后,我们有了所有必要的参数,所以我们现在可以生成文章摘要。

代码如下:

def _get_article_summary(sentences, sentence_weight, threshold): sentence_counter = 0 article_summary = '' for sentence in sentences: if sentence[:7] in sentence_weight and sentence_weight[sentence[:7]] >= (threshold): article_summary += " " + sentence sentence_counter += 1 return article_summary

摘要

下图显示了创建文本摘要算法的工作流。

文章太长不想看?ML 文本自动摘要了解一下

以下是机器学习中一个简单抽象文本生成器的完整代码:

#importing librariesfrom nltk.corpus import stopwordsfrom nltk.stem import PorterStemmerfrom nltk.tokenize import word_tokenize, sent_tokenizeimport bs4 as BeautifulSoupimport urllib.request #fetching the content from the URLfetched_data = urllib.request.urlopen('https://en.wikipedia.org/wiki/20th_century')article_read = fetched_data.read()#parsing the URL content and storing in a variablearticle_parsed = BeautifulSoup.BeautifulSoup(article_read,'html.parser')#returning <p> tagsparagraphs = article_parsed.find_all('p')article_content = ''#looping through the paragraphs and adding them to the variablefor p in paragraphs: article_content += p.textdef _create_dictionary_table(text_string) -> dict: #removing stop words stop_words = set(stopwords.words("english")) words = word_tokenize(text_string) #reducing words to their root form stem = PorterStemmer() #creating dictionary for the word frequency table frequency_table = dict() for wd in words: wd = stem.stem(wd) if wd in stop_words: continue if wd in frequency_table: frequency_table[wd] += 1 else: frequency_table[wd] = 1 return frequency_tabledef _calculate_sentence_scores(sentences, frequency_table) -> dict: #algorithm for scoring a sentence by its words sentence_weight = dict() for sentence in sentences: sentence_wordcount = (len(word_tokenize(sentence))) sentence_wordcount_without_stop_words = 0 for word_weight in frequency_table: if word_weight in sentence.lower(): sentence_wordcount_without_stop_words += 1 if sentence[:7] in sentence_weight: sentence_weight[sentence[:7]] += frequency_table[word_weight] else: sentence_weight[sentence[:7]] = frequency_table[word_weight] sentence_weight[sentence[:7]] = sentence_weight[sentence[:7]] / sentence_wordcount_without_stop_words return sentence_weightdef _calculate_average_score(sentence_weight) -> int: #calculating the average score for the sentences sum_values = 0 for entry in sentence_weight: sum_values += sentence_weight[entry] #getting sentence average value from source text average_score = (sum_values / len(sentence_weight)) return average_scoredef _get_article_summary(sentences, sentence_weight, threshold): sentence_counter = 0 article_summary = '' for sentence in sentences: if sentence[:7] in sentence_weight and sentence_weight[sentence[:7]] >= (threshold): article_summary += " " + sentence sentence_counter += 1 return article_summarydef _run_article_summary(article): #creating a dictionary for the word frequency table frequency_table = _create_dictionary_table(article) #tokenizing the sentences sentences = sent_tokenize(article) #algorithm for scoring a sentence by its words sentence_scores = _calculate_sentence_scores(sentences, frequency_table) #getting the threshold threshold = _calculate_average_score(sentence_scores) #producing the summary article_summary = _get_article_summary(sentences, sentence_scores, 1.5 * threshold) return article_summaryif __name__ == '__main__': summary_results = _run_article_summary(article_content) print(summary_results)

点击原文中的以下按钮,运行FloydHub笔记本上的代码:

文章太长不想看?ML 文本自动摘要了解一下

在这个例子中,我们使用的阈值是平均分数的1.5倍。这个超参数值在几次实验后为我们产生了良好的结果。当然也可以根据自己的喜好微调数值,提高汇总生成效果。

下图是生成的维基百科文章摘要。

文章太长不想看?ML 文本自动摘要了解一下

使用文本摘要算法生成的维基百科文章摘要。

正如你所看到的,运行代码可以总结冗长的维基百科文章,并简要概述20世纪发生的主要事件。

然而,我们可以改进摘要生成器来生成长文本的简明而准确的摘要。

更多内容

当然,本文只是简单介绍一下在机器学习中使用文本摘要算法可以实现的功能。

如果你想更多地了解这个主题,尤其是抽象文本摘要,以下有用的资源可以帮助你:

有没有可能把两种方法(摘要和摘要文本自动摘要)结合起来?这就是指针生成器网络的主要原理,通过提取(指向)和抽象(生成)相结合,达到最佳效果。

文章太长不想看?ML 文本自动摘要了解一下

图片:“驯服递归神经网络以获得更好的摘要”

Wikihow:大规模文本摘要数据集提出了一个新的大规模自动文本摘要数据集WikiHow,它包含了从WikiHow在线知识库中提取的超过23万篇文章。目前,大多数可用的数据集都不够大,不足以训练序列到序列的模型。它们可能只提供有限的摘要,它们更适合提取摘要。但是WikiHow数据集规模大,质量高,在摘要文本摘要方面可以得到最好的结果。

文章“基于预训练的文本摘要自然语言生成”提出了一个独特的基于序列到序列范式的两阶段模型。在该模型中,在编码器和解码器端都使用BERT,并且强调在学习过程中加强目标。在一些基准数据集上对该模型进行测试,结果表明该方法在自动文摘中表现更好,尤其是与其他传统系统相比。

文章太长不想看?ML 文本自动摘要了解一下

原文链接:https://blog . floydhub . com/gentle-introduction-to-text-abstraction-in-machine-learning/

本文为机器之心整理,授权请联系本微信官方账号。

? -

加入机器之心(专职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告与商业:bd@jiqizhixin.com

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/162933.html

发表回复

登录后才能评论