不会吧不会吧,真的还有人做关键词抽取不用TextRank吗???
就算是你没有用过,想必你也一定听说过这个方法吧?
这个算法计算起来非常快,也非常简单易操作 [这让我想起来分类中的大哥FastText]。它之所以应用非常广泛,是因为它还有一个特点,是不需要标注样本。显然,如果是在摘要和关键词的抽取场景中进行人工标注的话,那工作量其实是非常大的。
简单的概括,TextRank的算法思路是,将文本中的grammar cell 作为图(graph)中的节点。如果两个cell之间存在一定的语法关系,那么它们在图上就可以表现为有边相连。通过迭代的学习,不同的节点都会有不一样的权重。我们就可以选取权重大的节点作为该段文本的关键词。
在图上(无向有权图),每一个点节点的权重不仅依赖于它的入度节点,还依赖于这些入度节点的权重。也就是说,当一个节点的入度结点多的时候,说明这个结点的权重越高。这是容易理解的,入度节点多说明出现次数高,如果某些词汇(非停用词)出现的次数多的话,就可以很容易地判断该词是较为重要的。
首先,要进行预处理。也就是进行分词、词性标注等工作,这在几乎所有的NLP任务中都是必须要做的一步。在分词后,将切分好的每一个词(word)作为节点添加到图中。
然后,需要设置语法过滤器,将通过语法过滤器的词添加到图中。如果两个词出现在同一窗口中,则它们相互形成一条边。
再然后,根据节点权重的计算公式,迭代优化。