关于文本的关键词提取方法分为有监督、半监督和无监督三种:
- 有监督的关键词抽取算法是将关键词抽取算法看作是二分类问题,判断文档中的词或者短语是或者不是关键词。既然是分类问题,就需要提供已经标注好的训练语料,利用训练语料训练关键词提取模型,根据模型对需要抽取关键词的文档进行关键词抽取。
- 半监督的关键词提取算法只需要少量的训练数据,利用这些训练数据构建关键词抽取模型,然后使用模型对新的文本进行关键词提取,对于这些关键词进行人工过滤,将过滤得到的关键词加入训练集,重新训练模型。
- 无监督的方法不需要人工标注的语料,利用某些方法发现文本中比较重要的词作为关键词,进行关键词抽取
参考链接:文本关键词提取算法解析 - 知乎 (zhihu.com)
基于统计特征的关键词抽取,比如td-idf
基于词图模型的关键词抽取,比如textrank
基于主题模型的关键词抽取,比如zero-shot-clasification
常见的算法效果如下,GPT的效果更差,没有列出来
rake算法流程
a. 预处理
首先,删除停用词。
b. 生成候选词
在停顿词位置和标点处对文档进行分割,得到内容词。不包含停用词的连续共现词被视作候选关键词。
c. 候选词打分
接下来,计算所有内容词的频率。这样就能得到频繁出现的词。
rake算法的缺点如下:
- 如果RAKE中使用的停用词列表并不详尽,它会将连续的长文本视为一个短语,并输出非常长的关键字.
- 包含停用词的多词短语可能会被误判。例如,若有一个叫 "Good Day "的品牌,且停用词列表中存在"good"一词,这个"Good Day"就会被遗漏.
yake提取关键词代码如下:
import yake
text = """no a good product very crooked this is not a good product not sturdy or striaght when assembled instruction where not easy to follow had neighbor help me he agreed this is not good product"""
kw_extractor = yake.KeywordExtractor()
keywords = kw_extractor.extract_keywords(text)
for kw in keywords:
print(kw)