Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TopicRank 实现 #23

Open
JiaxiangBU opened this issue Sep 9, 2020 · 3 comments
Open

TopicRank 实现 #23

JiaxiangBU opened this issue Sep 9, 2020 · 3 comments
Labels
enhancement New feature or request

Comments

@JiaxiangBU
Copy link

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

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 的底层函数。

其他想说的

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

@blmoistawinde
Copy link
Owner

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

特别对于HarvestText来说:

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

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

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

@blmoistawinde blmoistawinde added the enhancement New feature or request label Sep 9, 2020
@JiaxiangBU
Copy link
Author

JiaxiangBU commented Sep 11, 2020

@blmoistawinde

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

特别对于HarvestText来说:

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

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

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

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

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

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

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

blmoistawinde added a commit that referenced this issue Oct 8, 2020
引入可下载的外部词典,辅助新词发现排除旧词 #24
@blmoistawinde
Copy link
Owner

新版初步实现了这个接口,并评测了算法表现,目前仅提供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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants