HarvestText icon indicating copy to clipboard operation
HarvestText copied to clipboard

TopicRank 实现

Open JiaxiangBU opened this issue 3 years ago • 3 comments

描述你想要的功能 能够提供具体例子更好

TextRank 得到的是摘要性的句子而非短语,TopicRank 可以实现这一点,这算一个新功能。 而且从 paper 的对比试验来看,短语抽取是比 TextRank 会更高些(作者对比可英文和法语)。

是否有自己想过的可能解决方案?

其实有解决方案了,见 pke,但是这个包实在是太多 bug 了

  1. 基本上是依赖包各种问题(nltk),要么就是一些浮动值计算的bug,如ZeroDivisionError: float division by zero,这里gap不做极端例子的处理, self.graph[i][j]['weight'] += 1.0 / gap
  2. 整个包我看了,不支持中文,只支持英文和其他几种外语,如果要强用中文,需要自己手动分词等按照英文的方式去套用模型,这个在中文文本数据处理有点违背初衷了。
  3. 我有一些准备,基本上 paper 我看了,idea 大概比较清楚,这有一些 notes,实现上,我还在考虑,基本上其实可以参考一些 pke 的底层函数。

其他想说的

也想看看项目开发者的想法,比如这个需求有没有必要做。

JiaxiangBU avatar Sep 09 '20 06:09 JiaxiangBU

获得关键词或者短语确实可以是一个很实用的新功能。

特别对于HarvestText来说:

  • 若已有实体别名信息,就可以借用现有的实体消歧的框架合并实体的不同指称,期望或许能够提升一些精度或者减少一些冗余。
  • 若没有已知实体,也可以作为NER、新词发现外的挖掘关键实体的一种手段。

不过目前我本人可能还不能抽出太多时间去实现这个功能,可以作为一个enhancement留到以后做。如果你有空的话,也欢迎贡献力量。

考虑实现的方案是提供一个通用的关键词抽取的函数,比如叫ht.extract_keywords,其中除了topicrank,也可以支持更简单的tfidf(从提供的语料统计或使用jieba的统计), textrank(关键词部分),便于对比挑选,可以在CSL之类的关键词抽取数据集上评测一下效果。

blmoistawinde avatar Sep 09 '20 12:09 blmoistawinde

@blmoistawinde

获得关键词或者短语确实可以是一个很实用的新功能。

特别对于HarvestText来说:

  • 若已有实体别名信息,就可以借用现有的实体消歧的框架合并实体的不同指称,期望或许能够提升一些精度或者减少一些冗余。
  • 若没有已知实体,也可以作为NER、新词发现外的挖掘关键实体的一种手段。

不过目前我本人可能还不能抽出太多时间去实现这个功能,可以作为一个enhancement留到以后做。如果你有空的话,也欢迎贡献力量。

好的,我和我的小伙伴 @gaowenxin95 先研究下 HarvestText 框架,再考虑下这个算法的实现。

考虑实现的方案是提供一个通用的关键词抽取的函数,比如叫ht.extract_keywords,其中除了topicrank,也可以支持更简单的tfidf(从提供的语料统计或使用jieba的统计), textrank(关键词部分),便于对比挑选,

我觉得OK的,设置一个 model,方便用户调用即可。

可以在CSL之类的关键词抽取数据集上评测一下效果。

好的,实现后,到时候看下效果。

JiaxiangBU avatar Sep 11 '20 11:09 JiaxiangBU

新版初步实现了这个接口,并评测了算法表现,目前仅提供tfidf和textrank

REAMDE中相关的说明

目前提供包括textrank和HarvestText封装jieba并配置好参数和停用词的jieba_tfidf(默认)两种算法。

示例(完整见example):

# text为林俊杰《关键词》歌词
print("《关键词》里的关键词")
kwds = ht.extract_keywords(text, 5, method="jieba_tfidf")
print("jieba_tfidf", kwds)
kwds = ht.extract_keywords(text, 5, method="textrank")
print("textrank", kwds)
《关键词》里的关键词
jieba_tfidf ['自私', '慷慨', '落叶', '消逝', '故事']
textrank ['自私', '落叶', '慷慨', '故事', '位置']

CSL.ipynb提供了不同算法,以及本库的实现与textrank4zh的在CSL数据集上的比较。由于仅有一个数据集且数据集对于以上算法都很不友好,表现仅供参考。

算法 P@5 R@5 F@5
textrank4zh 0.0836 0.1174 0.0977
ht_textrank 0.0955 0.1342 0.1116
ht_jieba_tfidf 0.1035 0.1453 0.1209

blmoistawinde avatar Oct 08 '20 09:10 blmoistawinde