api大全-提供全网api api大全-提供全网api

上古,莒县,幂函数-api大全-提供全网api

鱼羊 编译收拾

量子位 出品 | 大众号 QbitAI

假如你是科研狗,必定有过被摘要分配的惊骇。

假如你想在汗牛充栋的互联网信息里寻觅要点,必定想要快速扫除剩余的内容。


根据机器学习的主动文本摘要东西,将一键解放你的双手,化身抓要点小能手,为你捕捉要害,扫除冗余。

近来,有位叫Alfrick Opidi的小哥在入门级深度学习云渠道FloydHub 上写了一篇关于主动文本摘要的入门教程,量子位对其进行了编译,希望能协助咱们了解。

主动文本摘要归于自然言语处理(NLP)的领域,通常用机器学习算法来完成,现在完成的办法主要有两种:

抽取式

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

概要式

概要式文本摘要更接近于人类的思想——经过深度学习对原始文本进行释义并提炼宗旨,然后构成摘要。比较于抽取式,概要式文本摘要更像在说人话。

很显然概要式的体现会比抽取式更好,但是这种算法需求杂乱的深度学习技能和言语模型支撑,还面对这比如自然言语生成这样的NLP问题。

因而抽取式办法依然广泛盛行。

鉴于本文是一篇入门攻略,接下来说到的内容都是根据抽取式办法来完成的。

文本摘要根底过程

文本摘要是怎么完成的呢?

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

夜里志明和春娇乘坐出租车去城里集会。集会上春娇晕倒并被送进了医院。她被确诊出患有脑损害,医师通知志明要一向陪着她直到她好起来。因而,志明待在医院整整陪了她三天。

榜首步:把阶段转成语句

首先要做的是切割阶段。

  1. 夜里志明和春娇乘坐出租车去城里集会
  2. 集会上春娇晕倒并被送进了医院
  3. 她被确诊出患有脑损害,医师通知志明要一向陪着她直到她好起来
  4. 因而,志明待在医院整整陪了她三天

第二步:文本处理

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

就像这样:

  1. 夜里志明春娇乘坐出租车去城里集会
  2. 集会春娇晕倒送医院
  3. 确诊脑损害医师通知志明陪着好起来
  4. 志明待在医院天

第三步:标示

然后,对语句进行符号,取得语句中的一切单词:

[‘志明’,‘春娇’,‘乘坐’,‘出租车’,‘去’,‘夜里’,‘集会’,‘城里‘,‘集会’,‘春娇’,‘晕倒’,‘医院’,‘确诊’,‘脑’,‘损害’,‘医师’,‘通知’,‘志明’,‘陪’,‘好起来’,‘志明’,‘待’,‘医院’,‘天’]

第四步:评价单词的加权呈现频率

现在就能够核算单词们的加权呈现频率了。

核算公式是:单词加权呈现频率 = 单词呈现次数 / 阶段中最常用单词呈现次数

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

把语句中的每个单词都替换成加权频率,就能够核算这个语句的权重。比如在志明和春娇这个比如傍边,榜首句在整个阶段中的权重是最大的,那么它就将构成摘要的主体部分。

以上是机器学习完成文本摘要的根本过程,下面咱们来看看怎么在实在国际中构建摘要生成器。

亲手构建摘要生成器

运用Python的NLTK东西包,咱们能够亲主动手发明一个文本摘要生成器,完成对Web文章的摘要生成。

来看看代码蓝图:

 1# Creating a dictionary for the word frequency table
2frequency_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)
9
10# Getting the threshold
11threshold = _calculate_average_score(sentence_scores)
12
13# Producing the summary
14article_summary = _get_article_summary(sentences, sentence_scores, 1.5 * threshold)
15
16print(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 variable
10article_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
18for p in paragraphs:
19 article_content += p.text

运用urllib.request完成网页数据的抓取,再调用BeautifulSoup来解析网页数据。

第二步:数据处理

为保证抓取到的文本数据尽或许没有噪音,需求做一些根本的文本整理。这儿运用了NLTKstopwordsPorterStemmer

PorterStemmer能够将单词还原为词根方式,便是说能把 cleaning, cleaned, cleaner 都还原成 clean。

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

循环整个文原本消除 “a”、“the” 这样的中止词,并记载单词们的呈现频率。

 1from nltk.corpus import stopwords
2from 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)
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[:7] in 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上运转整个代码。

还能够更上档次

以上仅仅机器学习中文本摘要算法的入门小常识,想要到达更上档次的作用,乃至能够把抽取式办法和概要式办法结合起来。



图片来自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/

— 完 —

诚挚招聘

量子位正在招募修改/记者,工作地点在北京中关村。等待有才华、有热心的同学参加咱们!相关细节,请在量子位大众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追寻AI技能和产品新动态

作者:admin 分类:我们的头条 浏览:140 评论:0