Word2vec加TextRank算法生成文章摘要

本文介绍了如何结合Word2vec和TextRank算法来生成文章摘要。首先,Word2vec用于创建词向量,通过训练大量数据集得到单词的低维向量表示。接着,TextRank算法基于PageRank原理计算句子的重要性,通过句子的相似性来确定其在文章中的权重。通过训练词向量和计算句子相似性,可以生成高质量的文本摘要。虽然深度学习模型如seq2seq在文本摘要上有一定局限性,但Word2vec+TextRank方法目前被视为一个相对成熟的选择。
摘要由CSDN通过智能技术生成

       好久不见,CSDN。

      大数据时代的到来在给人们带来海量数据的便利的同时,也带来了大量的数据冗余和垃圾信息。传统的人工书写文本摘要是文章发布和文章阅读极为重要的一环,读者可以快速阅览摘要判断文章的续读必要性。

       然而,人工智能的出现以及现在深度学习的普及,让文章摘要变得十分便利。早在50年前,人们便开始着手于研究自动文本摘要。1958年,Luhn便提出了“词频”的方法,通过计算文章中“keywords”的出现频率找到文章的中心句子以此来生成文章摘要,这被当做文章摘要的鼻祖。在此基础上,Edmundson通过选取标题词、句子位置、线索词和关键词四种特征表示句子计算句子权重,通过句子的分数(权重)排序比较句子的重要性来生成摘要。后来,Mihalcea在google的算法pagerank的基础上提出了计算文章内在结构,主观上评价句子重要性的textrank算法,该算法意义重大极大的推动了自动文摘的发展。后来,更大的方法被发表出来包括比较著名的tf*idf算法。

       当然,以上这些方法皆是基于文章重要句子抽取的算法。我们把它称之为Extractive式方法,这类方法很大程度上保留了文章的key sentence的意思,还原了文章的框架,但对于一些十分复杂,涉及面较广而且中心句不明确的文章效果差强人意。于是便出现了另一种文本摘要的方法,被称之为Abstractive式方法,机器通过阅读文章然后来概括文章的大意。无疑这种方法难度较大,与传统的人工摘要一样,机器必须自己读懂文章才能生成摘要。由于这类方法的种种局限性,直到去年才google才开源公开了它自己的textsum项目,用于自动生成文摘。

       在google的textsum项目中,用到了seq2seq+attention的深度学习模型,它是google翻译模型。google说这个模型把它的翻译准确率提高到了97%左右,当然国内某度说它的翻译准确率比google更高,然后笔者至今未能有幸体验到如此恐怖的百度翻译。简单的说这种模型是文章的content生成title的模型,RNN神经网络(循环神经网络)将content即文章的内容通过encoder(编码)生成一种sequence,然后另外一个RNN神经网络用来decoder(解码)生成文章的title。这个模型对训练数据的要求极为苛刻,笔者在textsum的基础上用搜歌的语料当做训练模型,在GTX965的GPU上跑了3天左右,最后测试得到的结果令笔者大跌眼镜。生成的句子语义都不通顺更别说组合成为摘要了,在stackoverflow论坛上,很多跑过这个程序都说其效果不佳,当然google自己也表示这个模型还有待优化。当然如果有读者想要试一下这个模型的请移步https://github.com/tensorflow/models/tree/master/textsum。国内目前也有一个deepnlp的团队也做过这个模型的相关测试,有兴趣可以看一下https://github.com/rockingdingo/deepnlp/tree/master/deepnlp/textsum

       在google亲自开源的项目上失败后,笔者着实心灰意冷。再次打开google学术,期待一下能不能有新的发现,果不其然最近两年关于文本摘要的学术发表可谓是琳琅满目。笔者也终于发现了一个目前来说比较成熟的文本摘要方法,通word2vec生成词向量,再利用textrank的方法寻找文本的中心句形成摘要。这种方法被多个学术研究所发表,很多人都提出了各种改进的算法,如果读者想要了解,请搜索顾益军, 夏天. 融合 LDA 与 TextRank 的关键词抽取研究[J]. 现代图书情报技术, 2014(7-8): 41-47. (Gu Yijun, XiaTian. Study on Keyword Extraction with LDA and TextRankCombination [J]. New Technology of Library and InformationService, 2014(7-8): 41-47.)或者融合 Word2vec 与 TextRank 的关键词抽取研究宁建飞 刘降珍(罗定职业技术学院电子信息系 罗定 527200)。这两篇文章都介绍了通过word2vec的方法计算句子的相似性从而获得文本摘要的方法,具体思路笔者会慢慢道来。

       刚刚提到用word2vec+textrank的方法生成文本摘要,首先需要了解word2vec这个深度学习的框架。简单的说word2vec的意思是word to vector,中文翻译过来把它叫做词向量,指的是用空间中的向量用来表示单词,它最初是由Tomas Mikolv提出的,具体请移步Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient Estimation of Word Representations in Vector Space. In Proceedings of Workshop at ICLR, 2013.

      后来google完成了这个项目,并将其开源。在NLP(Nature Language Processing)中,为了方便处理单词,需要将单词进行编码,也就是讲文字数字化,比较常用也比较令人容易接受的方法就是把一个单词表示成一个向量的形式。比如这里有十个单词:she,he,I,her,his,my.....要将这十个单词表示成向量的形式很简单,比如说she可以用[1,0,0,0,0,0,0,0,0,0]来表示,he可以用[0,1,0,0,0,0,0,0,0,0]来表示。可是如果数量达到了一定程度,以亿计的单词用这种表示方法那肯定是极大的臃肿与恐怖。word2vec在此基础上用低维的向量来表示单词,一般为50维或100维,这种向量被表示成这个样子[0.11212,0.116545,0.878789,0.5644659,......]。

       常用的训练word2vec的模型有CBOW和Skip-Gram。具体模型介绍请看这里模型介绍,关于模型的原理和框架请移步这里模型原理。简单的说word2vec通过训练大量的数据集,这些数据集最好经过查重,去停用词处理,得到关于这些词的向量,并且这些向量存在某种联系,比如说词性相同,同义词,反义词都会被记录在这个模型中。笔者这里使用的是gensim的word2vec库,当然读者可以选择其他语言的,Python的操作会相对简单,具体的代码如下:

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值