Word2vec加TextRank算法生成文章摘要

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hanlp中文分词、提取摘要关键字、语句分析、智能推荐

hanlp资源&#xff1a; hanlp介绍&#xff1a;http://hanlp.linrunsoft.com/ hanlp下载&#xff1a;https://github.com/hankcs/HanLP hanlp(分词)使用&#xff1a;https://blog.csdn.net/nima1994/article/details/72819973 hanlp1.7:https://github.com/hankcs/HanLP/tree/v1…

TextRank、BM25算法提取关键字、文章自动摘要优秀文章保存

转载地址&#xff1a;http://www.hankcs.com/nlp/textrank-algorithm-java-implementation-of-automatic-abstract.html

set 用法

Set常用用法 2013-04-22 19:24 86508人阅读 评论(1) 收藏 举报分类&#xff1a;CPlus&#xff08;54&#xff09; set集合容器&#xff1a;实现了红黑树的平衡二叉检索树的数据结构&#xff0c;插入元素时&#xff0c;它会自动调整二叉树的排列&#xff0c;把元素放到适当的位置…

去掉标点符号

//去掉标点符号、空格title title.replaceAll("[\\pP\\p{Punct}| ]", "");

C语言向文件写入内容并读取显示

将学生信息&#xff08;姓名、年龄、学号和平均分&#xff09;写入文件&#xff0c;然后读取显示出来。要求&#xff1a;从控制台输入学生信息&#xff1b;可以输入任意数目的学生信息&#xff1b;文件每行存储一条学生信息&#xff0c;姓名、年龄、学号、平均分以tab(\t)为分隔…

C语言main()主函数执行完毕后是否会再执行一段代码

C语言main()主函数执行完毕后是否会再执行一段代码 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网main() 主函数执行完毕后&#xff0c;是否可能会再执行一段代码&#xff1f;给出说明。main主函数是所有程序必须具备的函数&#xff0c;是C/C人员一接触代码就知道的函数…

java 操作redis

//连接redis &#xff0c;redis的默认端口是6379Jedis jedis new Jedis ("localhost",6379); //验证密码&#xff0c;如果没有设置密码这段代码省略jedis.auth("password"); jedis.connect();//连接jedis.disconnect();//断开连接Set<String> keys…

C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

C语言用递归求斐波那契数&#xff0c;让你发现递归的缺陷和效率瓶颈 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网递归是一种强有力的技巧&#xff0c;但和其他技巧一样&#xff0c;它也可能被误用。一般需要递归解决的问题有两个特点&#xff1a;存在限制条件&#xf…

【转载保存】java四种线程池的使用

https://blog.csdn.net/qq_31441667/article/details/78830395

size_t strtok

C语言字符串长度统计函数strlen()的实现原理 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网C标准库中有一个字符串长度统计函数strlen()&#xff0c;用来统计字符串的长度&#xff0c;它的实现与下面类似。 复制纯文本复制 #include <stdlib.h>size_t strlen( cha…

【保存】maven的pom.xml标签的xsi:schemaLocation处报错

maven装X的原因是 maven对下载不下来的jar文件会生成一个 *.lastUpdated 文件 &#xff0c;不将*.lastUpdated文件干掉&#xff0c;它是不会给你重新下载jar, so 将 *.lastUpdated 这个家伙干掉&#xff0c;再update一下就OK了 原文&#xff1a;https://blog.csdn.net/…

strlen() Bug

C语言strlen()以NUL作为字符串结束标记&#xff0c;自定义一个字符串长度统计函数消除这个Bug 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网我们知道&#xff0c;字符串长度统计函数 strlen() 以NUL作为字符串结束标记&#xff0c;但是很不幸的是&#xff0c;有时候字符…

C语言中文件的读取和写入

C语言中文件的读取和写入 注意&#xff1a; 1、由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2、电脑处理文本型和二进制型的不同 &#xff08;因为电脑只认识二进制格式&#xff09; 在C语言中写文件 //获取文件指针 FILE *pFile fopen("1.txt", //打开文件…

基于ansj_seg和nlp-lang的简单nlp工具类

1、首先在pom中引入ansj_seg和nlp-lang的依赖包&#xff0c; ansj_seg包的作用&#xff1a; 这是一个基于n-GramCRFHMM的中文分词的java实现&#xff1b; 分词速度达到每秒钟大约200万字左右&#xff08;mac air下测试&#xff09;&#xff0c;准确率能达到96%以上; 目前实现了…

ArrayList的四种初始化方法

转载&#xff1a;https://beginnersbook.com/2013/12/how-to-initialize-an-arraylist/ Method 1: Initialization using Arrays.asList Syntax: ArrayList<Type> obj new ArrayList<Type>(Arrays.asList(Object o1, Object o2, Object o3, ....so on)); Exam…

C++ Deque(双向队列

C Deque(双向队列)C Deque(双向队列) 是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问&#xff0c;但它不像vector 把所有的对象保存在一块连续的内存块&#xff0c;而是采用多个连续的存储块&#xff0c;并且在一个映射结构中保存…

java.lang.IllegalArgumentException: URLDecoder异常解决

异常&#xff1a; Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u9" at java.net.URLDecoder.decode(URLDecoder.java:194) at com.hbzx.co…

STL迭代器

STL迭代器及总结解释迭代器是一种对象&#xff0c;它能够用来遍历STL容器中的部分或全部元素&#xff0c;每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口&#xff0c;所谓迭代器是一种概念上的抽象&#xff1a;那些行为上象迭代器的东西都可以叫做迭代器。…

C++ Sets MultiSets

C Sets & MultiSetsSTL Set介绍 集合(Set)是一种包含已排序对象的关联容器。多元集合(MultiSets)和集合(Sets)相像&#xff0c;只不过支持重复对象,其用法与set基本相同。Set 又称集合&#xff0c;实际上就是一组元素的集合&#xff0c;但其中所包含的元素的值是唯一的&am…