Word2vec加TextRank算法生成文章摘要

依赖包:https://download.csdn.net/download/dreamzuora/10853874
代码:

	String document = "算法可大致分为基本算法、数据结构的算法、数论算法、计算几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法。\n" +
	        "算法可以宽泛的分为三类,\n" +
	        "一,有限的确定性算法,这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。\n" +
	        "二,有限的非确定算法,这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。\n" +
	        "三,无限的算法,是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。";
	List sentenceList = HanLP.extractSummary(document, 3);
	System.out.println(sentenceList);

算法背景:
自动文本摘要是自然语言处理中一个比较难的任务。新闻的摘要要求编辑能够从新闻事件中提取出最关键的信息点,然后重新组织语言进行描述;一般论文的摘要要求作者先表述清楚问题,对前人工作中不完善的地方进行总结,然后用更凝练的语言描述自己的工作;综述性质的论文要求作者通读大量相关领域的工作,用最概括性的语言将每份工作的贡献、创新点写出来,并对每份工作的优缺点进行比较。本质上,文本摘要是一种信息过滤,输出的文本比输入的文本少很多,但却包含了主要的信息,有点类似主成分分析(PCA)。从某种意义上,文本摘要与推荐系统的功能类似,都是为了提取出用户感兴趣的内容,只是使用的方法有很大不同。

自动摘要技术应用最广的领域在新闻,由于新闻信息的过载,也由于很多新闻媒体为了哗众取宠,故意将标题起的特别吸引人眼球,但却名不副实,人们迫切地希望有一个工具可以帮助自己用最短的时间了解最多的最有用的新闻。搜索引擎也是应用之一,基于查询(Query)的自动文本摘要技术会帮助用户尽快找到感兴趣的内容。另外,随着智能设备的普及,自动摘要技术的使用也会为新的信息浏览与人机交互方式带来变革。

按照文档数量,文本摘要可以分为单文档摘要与多文档摘要,前者是后者的基础,但后者不只是前者结果的简单叠加。前者经常应用于新闻信息的过滤,而后者,在搜索引擎中有很大的潜力,难度也随之加大。

按照实现方式,可以分为两大类,提取式(Extractive)和摘要式(Abstractive)。

提取式的方法基于一个假设:一篇文档的核心思想可以用文档中的某一句或者几句话来概括。因此,文本摘要的任务就变成了找到文本中最重要的几句话,这通常是一个排序问题。在文档摘要问题中,基于图的排序算法,是以文档的每句话作为节点,句子之间的相似度作为边的权值构构建图模型,用PageRank算法进行求解,得到每个句子的得分,代表算法有TextRank和LexRank【。基于特征工程的排序算法实用性更强,然而需要人为进行调整的部分也变得更多。文本摘要问题中经常使用到的特征包括句子长度、句子位置、句子是否包含标题词和句子关键词打分等,代表算法是TextTeaser,由于只考虑了相关性而没有考虑新颖性,以上的排序算法很可能出现排名靠前的几句话表达的都是相似的意思,所以需要引入一个惩罚因子,在对排在后面的句子进行评分时,对它与在它之前的句子的相似度进行惩罚,也就是MMR(Maximum Margin Relevance)以上是提取式的自动摘要算法,其输出结果是不同段落中选择出来的Top K的句子,因此摘要的连贯性、一致性很难保证。

摘要式的方法是一种生成式的方法,它要求系统理解文本所表达的意思,然后用可读性强的人类语言将其简练地总结出来。这里包含几个难点:

理解文本。与人类阅读文本类似,需要明白文本表达的意思,涉及到的话题等。
可读性强。可读性是指生成的摘要能够连贯与衔接。
简练总结。即在理解文本的基础上,用尽可能简洁的文本表达最核心的部分。
上述难点即使对于人类也不是一件容易的事情,对于计算机更是。虽然在一些领域中,由于计算机强大的计算能力,人工智能能够领先于人类,但在更多的领域,例如机器翻译、文本摘要,AI离人类的水平还很遥远。

近几年随着深度学习(Deep Learning)的发展,研究者们开始尝试将一些最新的研究成果应用于自动文本摘要,尤其是机器翻译(Machine Translation)中的Encoder-Decoder框架和Attention机制。从这个思路可以将文本摘要问题转化为一个Sequence-2-Sequence问题,由此产生了基于RNN的Attention Model,基于CNN的ABS(Attention-Based Summarization)等。在一定程度上,它们实现了摘要式的自动文本摘要,但还是处于研究初期,效果不算太好。

目前使用到的语料数据分为两种,一种是用于训练深度网络的大型语料,一种是用来参加测评的小型语料。前者经常使用CNN、Daily Mail等提供的新闻数据集。后者通常使用TAC(Text Analysis Conference)提供的小型数据集。关于中文语料数据集,常用的是哈尔滨工业大学(深圳)智能计算研究中心开放的LCSTS(Large Scale Chinese Short Text Summarization Dataset),数据主要采自新浪微博,是一个短文本摘要数据集。

关于评价方法,人工评价自不用提,自动评价目前公认的只有Lin在2003年提出的ROUGE(Recall-Oriented Understudy for Gisting Evaluation)指标【6】,基本思想是将待审的摘要和参考摘要的n元组共现统计量作为评价作为评价依据,然后通过一系列标准进行打分,包括:ROUGH-N、ROUGH-L、ROUGH-W、ROUGH-S和ROUGH-SU几个类型。通俗来说是通过一些定量化的指标来描述待审摘要和参考文摘之间的相似性,例如共同出现次数、最长相同文本长度、带权最长相同文本长度等。

背景:https://blog.csdn.net/Silience_Probe/article/details/80699282
word2vec使用过程(Java版):
https://blog.csdn.net/acwa123/article/details/72626580
详解(python):https://blog.csdn.net/qq_22636145/article/details/75099792
hanlp介绍:http://hanlp.linrunsoft.com/
hanlp下载:https://github.com/hankcs/HanLP
hanlp(分词)使用:https://blog.csdn.net/nima1994/article/details/72819973
hanlp1.7:https://github.com/hankcs/HanLP/tree/v1.7.0

你可能感兴趣的:(菜鸟的机器学习入门之路,java机器学习)