Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何自动生成文本摘要

如何自动生成文本摘要

作者头像
杨熹
发布于 2018-04-03 07:49:48
发布于 2018-04-03 07:49:48
1.7K00
代码可运行
举报
文章被收录于专栏:杨熹的专栏杨熹的专栏
运行总次数:0
代码可运行

学习资料: https://www.youtube.com/watch?v=ogrJaOIuBx4&list=PL2-dafEMk2A7YdKv4XfKpfbTH5z6rEEj3&index=19 代码: https://github.com/llSourcell/How_to_make_a_text_summarizer/blob/master/vocabulary-embedding.ipynb

今天学习的是自动生成文本摘要。

当我们的身边的信息越来越多,数据越来越多,链接越来越多的时候,用一句简单的话就能把最重要的信息给表达出来,变得越来越重要。

有了这个技能,我们就可以让机器为我们提取一篇文章的重要信息,以后甚至是一本书的重要信息。

这个技术最早是在气象领域应用起来的,就是用一个固定的格式把预测出来的数据套入进去,后来在金融领域,医疗领域也得到广泛的应用,这样的工具可以很好的帮助从业人员节省一部分时间。

过去的方法是提取一个子集,而我们的大脑在对一篇文章进行总结的时候,利用的是抽象性思维,现在我们就可以用深度学习来模拟这个过程。


我们要用的数据是BBC新闻数据集。 http://mlg.ucd.ie/datasets/bbc.html

pickle, 可以将python的对象转化成character stream,我们可以很轻松的重建这个对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cPickle as pickle
FN0 = 'tokens' # this is the name of the data file which I assume you already have
with open('data/%s.pkl'%FN0, 'rb') as fp:
    heads, desc, keywords = pickle.load(fp) # keywords are not used in this project

返回的heads就是标题,desc就是相应的文章。

接着我们需要把整个文章变成一个一个的单词,并且一个词一个词的生成总结。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    from collections import Counter
from itertools import chain
def get_vocab(lst):
    vocabcount = Counter(w for txt in lst for w in txt.split())
    vocab = map(lambda x: x[0], sorted(vocabcount.items(), key=lambda x: -x[1]))
    return vocab, vocabcount

接着我们要用词向量来表示每个单词。 word2vec是一个用大量数据提前训练好的模型,我们可以直接下载。

词向量的每个维度可以表示一个性质,可以是性别或者是头衔等,词向量在每个维度的投影长度可以看作是这个单词在这个性质上的相关度。

另一种算法叫做GloVe,它属于 count based的, 每一行代表一个单词,每一列代表和这个单词出现在同一语境中的频数。 GloVe 比 word2vec 稍微快一点,

首先,将提前训练好的 glove 词向量下载到本地,然后用它们来初始化embedding matrix,我们先随机初始化,然后把 training vocabulary 出现的所有单词的 glove 权重复制一下。对于词汇表以外的单词,我们会找到离它最近的一个 glove 向量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     path = 'glove.6B.zip'
    path = get_file(path, origin="http://nlp.stanford.edu/data/glove.6B.zip")

然后我们要用 seq2seq 模型,我们输入一句话。

encoder,输入就是 vocabulay 集,标签就是相应的一句话标题,embeddings 会在训练过程中不断地优化,loss 是 cross entropy。

decoder,和encoder一样的 lstm 结构,权重矩阵也是用同样的提前训练好的 glove embeddings,它用来生成 summary。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    model = Sequential()
model.add(Embedding(vocab_size, embedding_size,
                    input_length=maxlen,
                    W_regularizer=regularizer, dropout=p_emb, weights=[embedding], mask_zero=True,
                    name='embedding_1'))
for i in range(rnn_layers):
    lstm = LSTM(rnn_size, return_sequences=True, # batch_norm=batch_norm,
                W_regularizer=regularizer, U_regularizer=regularizer,
                b_regularizer=regularizer, dropout_W=p_W, dropout_U=p_U,
                name='lstm_%d'%(i+1)
                  )
    model.add(lstm)
    model.add(Dropout(p_dense,name='dropout_%d'%(i+1)))

这里有一个很关键的点,就是我们需要记住这段文字中的哪些部分呢?关于记忆的话,我们会选择用 ltm 模型来做,而在这个问题上另一个重要的理论就是 attention,它可以学到哪些数据是最相关的最需要记忆的。

decoder 会先生成一个单词,然后把这个单词投入到下一层中,就会生成下一个单词,一直到生成一句标题。

我们在 decoder 这里会应用 attention 机制,对于每一个输出的单词,会计算每个输入单词的权重,来决定应该在这个单词上投入多少 attention。这些权重会被用来计算最后一个隐藏层的加权平均,然后投入到 softmax中。

可以看一下训练效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    X = "What have you been listening to this year ? If you want to find out using cold , hard evidence , then Spotify 's new Year in Music tool will tell you ."
Y = "Spotify Will Make You Smarter for Your App"
    
    samples = gensamples(X, skips=2, batch_size=batch_size, k=10, temperature=1)
    
    HEADS:
12.9753409925 How To Make A <0>^
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.05.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Seq2Seq模型的构建
Seq2Seq是指一般的序列到序列的转换任务,特点是输入序列和输出序列是不对齐的,比如机器翻译、自动文摘等等。
故事尾音
2019/12/16
1.4K0
Seq2Seq模型的构建
Transformer的基本原理
Seq2Seq[1]框架最初是在神经机器翻译(Neural Machine Translation,NMT)领域中提出,用于将一种语言(sequence)翻译成另一种语言(sequence)。其结构如下图所示:
felixzhao
2022/09/26
1.2K0
10分钟带你深入理解Transformer原理及实现
基于 Transformer《Attention Is All You Need》构建的模型(比如 Bert ),在多个自然语言处理任务上都取得了革命性的效果,目前已取代 RNN 成为默认选项,可见 Transformer 的厉害之处。
小白学视觉
2021/08/05
2.3K0
10分钟带你深入理解Transformer原理及实现
超详细的 Bert 文本分类源码解读 | 附源码
在本文中,我将以run_classifier.py以及MRPC数据集为例介绍关于bert以及transformer的源码,官方代码基于tensorflow-gpu 1.x,若为tensorflow 2.x版本,会有各种错误,建议切换版本至1.14。
红色石头
2022/01/10
2K0
超详细的 Bert 文本分类源码解读 | 附源码
深入理解Transformer及其源码解读
深度学习广泛应用于各个领域。基于transformer的预训练模型(gpt/bertd等)基本已统治NLP深度学习领域,可见transformer的重要性。本文结合《Attention is all you need》与Harvard的代码《Annotated Transformer》深入理解transformer模型。 Harvard的代码在python3.6 torch 1.0.1 上跑不通,本文做了很多修改。修改后的代码地址:Transformer。
用户1432189
2019/10/24
2.3K0
深入理解Transformer及其源码解读
通俗讲解从Transformer到BERT模型!
在学会 Transformer 和 Bert 之前,我们需要理解Attention和Self-Attention机制。Attention的本质是要找到输入的feature的权重分布,这个feature在某一个维度有一个长度的概念,如果我们输入一个长为 n 的 feature,那么 Attention 就要学习一个长为 n 的分布权重,这个权重是由相似度计算出来的,最后返回的得分就将会是权重与feature的加权和。
Datawhale
2020/08/28
1.9K0
通俗讲解从Transformer到BERT模型!
百闻不如一码!手把手教你用Python搭一个Transformer
与基于RNN的方法相比,Transformer 不需要循环,主要是由Attention 机制组成,因而可以充分利用python的高效线性代数函数库,大量节省训练时间。
大数据文摘
2019/05/07
1.1K0
百闻不如一码!手把手教你用Python搭一个Transformer
05.序列模型 W2.自然语言处理与词嵌入(作业:词向量+Emoji表情生成)
这些结果反映了某些性别歧视。例如,“computer 计算机”更接近“man 男人”,“literature 文学”更接近“woman 女人”。
Michael阿明
2021/02/19
7640
【留言送书】跟我一起从源码学习Transformer!
近几年NLP领域有了突飞猛进的发展,预训练模型功不可没。当前利用预训练模型(pretrain models)在下游任务中进行fine-tune,已经成为了大部分NLP任务的固定范式。Transformer摒弃了RNN的序列结构,完全采用attention和全连接,严格来说不属于预训练模型。但它却是当前几乎所有pretrain models的基本结构,为pretrain models打下了坚实的基础,并逐步发展出了transformer-XL,reformer等优化架构。本文结合论文和源码,对transformer基本结构,进行详细分析。
lujohn3li
2021/01/12
6170
百闻不如一码!手把手教你用Python搭一个Transformer
与基于RNN的方法相比,Transformer 不需要循环,主要是由Attention 机制组成,因而可以充分利用python的高效线性代数函数库,大量节省训练时间。
一墨编程学习
2019/05/08
7700
百闻不如一码!手把手教你用Python搭一个Transformer
【入门】PyTorch文本分类
文本分类是NLP领域的较为容易的入门问题,本文记录文本分类任务的基本流程,大部分操作使用了torch和torchtext两个库。
zenRRan
2020/02/18
1.9K0
使用PyTorch建立你的第一个文本分类模型
我总是使用最先进的架构来在一些比赛提交模型结果。得益于PyTorch、Keras和TensorFlow等深度学习框架,实现最先进的体系结构变得非常容易。这些框架提供了一种简单的方法来实现复杂的模型体系结构和算法,而只需要很少的概念知识和代码技能。简而言之,它们是数据科学社区的一座金矿!
磐创AI
2020/03/04
2.2K0
TextCNN文本分类(keras实现)「建议收藏」
深度学习模型在计算机视觉与语音识别方面取得了卓越的成就,在 NLP 领域也是可以的。将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似 n-gram 的关键信息),从而能够更好地捕捉局部相关性。
全栈程序员站长
2022/09/13
1.7K0
TextCNN文本分类(keras实现)「建议收藏」
轻松搞懂Word2vec / FastText+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
本人在大三期间做了一个关于“疫苗接种”主题的舆情分析,主要涉及的技术有:爬虫(微博和知乎评论)、数据清洗、文本特征提取、建立模型(SVM、BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention)、文本摘要等。
全栈程序员站长
2022/09/13
1.3K1
轻松搞懂Word2vec / FastText+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
长文实践 | 详述文文本生成任务之营销文本生成
每天给你送来NLP技术干货! ---- 编辑:AI算法小喵 写在前面 在《一文详解生成式文本摘要经典论文Pointer-Generator》中,我们已经详细地介绍过长文本摘要模型 PGN+Coverage。这个工作小喵20年初的时候不仅研读了,同时也做了相关的复现与优化尝试,没记错的话当时用的是TF框架。碍于年代久远,当时也没有做笔记的习惯,所以没法跟大家分享相关的实践内容。 不过,小喵最近发现了一篇与之相关实践类博文,作者将 PGN+Coverage 用在营销文本生成任务上。整个实验与代码实现写的非常详细
zenRRan
2022/09/13
9020
长文实践 | 详述文文本生成任务之营销文本生成
[算法前沿]--004-transformer的前世今生
1.transformer介绍 Transformer被认为是一种新型的深度前馈人工神经网络架构,它利用了自注意机制,可以处理输入序列项之间的长期相关性。 在大量领域中采用,如自然语言处理(NLP)、计算机视觉(CV)、,音频和语音处理、化学和生命科学;他们可以在前面提到的学科中实现SOTA性能。 TransformerX库存储库 1.1 注意力机制 注意力是一种处理能力有限的认知资源分配方案 它同时生成源标记(单词)的翻译,1)这些相关位置的上下文向量和2)先前生成的单词。 注意力的特性 1.软 2.
AI拉呱
2023/04/28
6170
[算法前沿]--004-transformer的前世今生
使用机器学习生成图像描述
图像描述是为图像提供适当文字描述的过程。作为人类,这似乎是一件容易的任务,即使是五岁的孩子也可以轻松完成,但是我们如何编写一个将输入作为图像并生成标题作为输出的计算机程序呢?
deephub
2021/04/30
1K0
TF使用例子-LSTM实现序列标注
原文是基于英文的命名实体识别(named entity recognition)问题,由于博主找不到相应的中文数据集(其实是没备份数据丢了,如果有同学提供,万分感谢)。因此,本文用了msra的分词数据
用户1332428
2018/03/09
1.6K0
TF使用例子-LSTM实现序列标注
NLP 进行文本摘要的三种策略代码实现和对比:TextRank vs Seq2Seq vs BART
来源:Deephub Imba本文约8400字,建议阅读15分钟本文将使用Python实现和对比解释NLP中的3种不同文本摘要策略。 本文将使用 Python 实现和对比解释 NLP中的3种不同文本摘要策略:老式的 TextRank(使用 gensim)、著名的 Seq2Seq(使基于 tensorflow)和最前沿的 BART(使用Transformers )。 NLP(自然语言处理)是人工智能领域,研究计算机与人类语言之间的交互,特别是如何对计算机进行编程以处理和分析大量自然语言数据。最难的 NLP
数据派THU
2022/05/27
8810
NLP 进行文本摘要的三种策略代码实现和对比:TextRank vs Seq2Seq vs BART
教程 | 如何使用深度学习执行文本实体提取
选自TowardsDataScience 作者:Dhanoop Karunakaran等 机器之心编译 参与:Tianci LIU、路 本文介绍了如何使用深度学习执行文本实体提取。作者尝试了分别使用深
机器之心
2018/05/08
1.4K0
教程 | 如何使用深度学习执行文本实体提取
推荐阅读
相关推荐
Seq2Seq模型的构建
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验