关键词抽取

1. 刘知远:

作者:刘知远
链接:https://www.zhihu.com/question/21104071/answer/24556905

我博士阶段的研究课题就是关键词抽取,欢迎下载阅读我的论文“基于文档主题结构的关键词抽取方法研究”。以我做关键词抽取的经验,建议如下:

1. TFIDF是很强的baseline,具有较强的普适性,如果没有太多经验的话,可以实现该算法基本能应付大部分关键词抽取的场景了。

2. 对于中文而言,中文分词和词性标注的性能对关键词抽取的效果至关重要。

3. 较复杂的算法各自有些问题,如Topic Model,它的主要问题是抽取的关键词一般过于宽泛,不能较好反映文章主题。这在我的博士论文中有专门实验和论述;TextRank实际应用效果并不比TFIDF有明显优势,而且由于涉及网络构建和随机游走的迭代算法,效率极低。这些复杂算法集中想要解决的问题,是如何利用更丰富的文档外部和内部信息进行抽取。如果有兴趣尝试更复杂的算法,我认为我们提出的基于SMT(统计机器翻译)的模型,可以较好地兼顾效率和效果。

4. 以上都是无监督算法,即没有事先标注好的数据集合。而如果我们有事先标注好的数据集合的话,就可以将关键词抽取问题转换为 有监督的分类问题。这在我博士论文中的相关工作介绍中均有提到。从性能上来讲,利用有监督模型的效果普遍要优于无监督模型,对关键词抽取来讲亦是如此。在Web 2.0时代的社会标签推荐问题,就是典型的有监督的关键词推荐问题,也是典型的多分类、多标签的分类问题,有很多高效算法可以使用

2.rake关键词提取

3.
能够识别一个query里面哪些是关键term,哪些是比较弱的term。

假如来了一个query,那么我们要判断里面的哪个词是关键词,我们会给每一个term都打一个分(term weight),分高的就是关键词,分低的就是垃圾词。那么这个分怎么来打比较合理呢?下面讲两个算法,都是基于海量数据统计的(query数目大约60亿);

第一个:上下文无关的weight算法
一个term单独出现的频次越高,而且和其他term搭配出现的机会越少,那么我们可以肯定,这个term表达意图的能力越强,越重要。
所以有公式:



一看就知道是一个迭代的公式。初始化的时候,每一个query的所有term权重之和等于1,所以每一个term的权重就是1/m;m是当前query的term数目。


4.

曾经在微博上试过TF-IDF,LDA 和TextRank,感觉LDA在短文本上完全不靠谱,在文档级应用上应该可以(没试过,这方面的论文应该很多)


5.

facebookresearch/fastText 这个也不错,用起来挺好,也是基于 topic 来打标签

思路:term 词向量求和取平均 -> logistic regression,只不过由于标签过多,所以用层次 softmax 或者 negative sampling 来优化性能。


6.

当前关键词提取算法主要可以分成两个流派:

1. Statistical

2. Rule Based

本文提供的是一种比较大的分类方法,也有很多reivew的文章分成3类、4类、5类种种,都不重要,关键把思路理清就好。

1) Statistical 

统计流派,其思路是,先定义一个关键词指标,然后为文章中所有词汇计算关键词指标,把词汇按照指标从大到小排列,指标大的优先选为关键词。这种思路很简单,有点儿像班里选班长,老师说选学习成绩最好的同学当班长,那么选拔方法就是,先定义一个指标,比如考试总分,然后,给每个学生的语文、数学、物理成绩加总,排名,总分排第一的当班长(关键词)。当然,老师可以指定班里有任意多个班长,例如选K个班长,那么就是成绩排名前K个学生当班长。统计流派的关键在于,计算每个词汇的关键词指标,这个指标是根据词汇在文章中的表现统计并计算出来的,所以有Statistical其名。

在对关键词进行提取时,可以有多种指标,影响力最大的两个是:TF-IDF指标和 PageRank指标。TF-IDF基于词袋模型(Bag-of-Words),把文章表示成词汇的集合,由于集合中词汇元素之间的顺序位置与集合内容无关,所以TF-IDF指标不能有效反映文章内部的词汇组织结构。PageRank指标,基于网络模型(Graph Model),把文章表示成网络的结构,网络中的节点表示词汇,节点之间的边为词汇之间的位置邻接关系,网络结构比集合结构包含信息多,考虑了文章内词汇的顺序,所以PageRank指标一般比TF-IDF指标表现更好。

2) Rule Based

规则流派,其思路是,将关键词提取任务,定义为一个对词汇进行二元分类的任务。即给定一个词汇,要么是关键词,要么不是关键词,对其分类,是关键词为1,不是就是0。那么,关键词提取问题就变成了一个预测问题。预测问题,需要一个预测函数,这个函数就是规则,给定词汇,获得该词汇的特征( x_i=\{x_{i1},x_{i2},x_{i3},...x_{ik}\} ),然后预测该词汇是否为关键词 y_i=\{0,or,1\} 。

规则可以人工指定,也可以通过机器学习(Machine Learning)的方法获得。人工指定规则,一般比较难,费脑子,谁也不清楚究竟到底啥样儿的词是关键词....所以大家就想着让程序自己去获得规则,即通过机器学习。机器学习的方法相对省脑子,但是费体力,要一堆闲的蛋疼的人到网上找一堆文章手工标关键词,然后把标记过的样本扔到模型里去把规则给学习出来。机器学习过程中,需要指定一些词汇特征,用于训练。这些特征,一般也不知道,所以也需要人工指定,比如,考虑词频、词汇包含的字数、词性、词汇的位置等等。所以,前十年,做机器学习进行关键词提取的论文,特别好搞,你选几个指标,发一篇,他选几个指标,又发一篇,也不太费脑子,就是各种拍脑袋想指标,然后把想出的指标各种排列组合丢到模型里去跑,找个相对好的结果就行。这几年,深度学习比较火,有人说了,我想规则费脑子,想指标也费脑子,我就是懒,我直接搞个神经网络让他连词汇特征都一起给学习了。所以,现在深度学习成为关键词提取新的发展方向,但是深度学习的方法只能通过复杂网络的训练帮你抽象出词汇特征,但是还得依赖于人工标注,依然需要闲的蛋疼的人去标记文章。当然了,深度学习的一大好处在于,有一些模型支持对没标记的数据进行学习,可以优化词汇特征的表示。例如,自动编码器,深度玻尔兹曼机...什么的...

总结:

基于此,我想说的是,虽然关键词提取的算法很多,也很花哨,但是思路比较简单,应当在写Paper之前,或者开发技术应用之前,做好技术定位。另外,几乎没有论文回答最基础的一个问题,什么是关键词?为什么某些词应当被提取出来给阅读者看而另外一些词应当忽略?哪些词应当展示给用户看?太多研究关注算法的精度和效率,而忽视了关键词的本质内涵。关键词不是一个客观存在的东西,而本身也是人为标注的,因此模型的评估和优化,本身也是一个主观的东西。这种主观的东西,不应当以算法开发者的意志所左右,而是应当关注用户的需求,想用户之所想,把用户真正关心的那些关键词展示出来。因此,虽然关键词提取算法当前停滞不前,但是从用户的角度重新去考虑关键词的定义,把用户的特征与词汇的特征相结合,进行指标的构建(Statistical)或者规则模型的学习(Rule Based),或许是可以为关键词提取算法的未来研究提供新的发展契机。


7. 停用词词表(搜一下还有很多)

http://blog.csdn.net/shijiebei2009/article/details/39696571

另外的一种方法,可以利用词性过滤,只保留指定词性的单词即可,类似的python有jieba分词,java有hanlp,ansj-seg,这些在分词的时候都有词性的标注,都可以很方便的处理


8.

先看你是单文档还是多文档。
如果是单文档,用textrank,另外你需要注意停用词处理。或者把单文档中按段或句分割成多文档
如果是多文档,那就更简单了,tf-idf是最简单的,也可用lda, 词嵌入svd,w2v,获取文档语义,然后找出与文档语义相关度最大的几个词就可

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关键词抽取是一种用于从文本中提取出最具代表性的关键词的方法。在Python中,有多种方法可以实现关键词抽取,其中包括TF-IDF、TextRank和Word2Vec词向量聚类等方法。 TF-IDF是一种常用的关键词抽取方法,它通过计算词频-逆文档频率(TF-IDF)值来评估一个词在文本中的重要程度。TF-IDF的计算公式是根据词频和文档频率之间的关系来得出的。 TextRank是一种基于图的排序算法,它通过将文本中的词作为节点,根据词之间的共现关系构建图,并通过迭代计算节点的重要性得到关键词。TextRank算法可以将文本中的重要信息进行抽取和排序,从而得到关键词。 而Word2Vec词向量聚类是一种将单词表示为向量的方法。通过训练一个word2vec模型,我们可以将每个词映射为一个向量表示,然后可以使用向量之间的相似度来确定关键词。 在Python中,有多个库可以实现关键词抽取,其中比较常用的是jieba库。jieba库提供了一个简单易用的接口,可以方便地实现关键词抽取。你可以使用jieba库的tfidf函数来进行关键词抽取,通过调整函数的参数,可以实现不同的筛选和返回方式。 总结起来,关键词抽取是一种从文本中提取出最具代表性的关键词的方法,Python中可以使用TF-IDF、TextRank和Word2Vec词向量聚类等方法实现关键词抽取。其中,jieba库是一个常用的工具库,可以方便地实现关键词抽取。你可以通过调用jieba库的tfidf函数来进行关键词抽取,并通过调整参数来实现不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值