KeyBERT关键词抽取

KeyBERT

关键词抽取算法中详细介绍了TF-IDF算法,从信息论的角度看就是词频越高,包含的信息量越大的词就是越重要的词,根据这个算法可以从预料中计算出词的权重,在推理的过程中只需要分词,查字典即可得到关键词重要程度排序,从而实现关键词抽取。

这个算法优点很明显,文中已经说了,其实也存在很大的问题,就是缺乏语义层面的理解。比如基于特定预料已经算好的权重,而文本中分出来的词是近义词,恰好词典中没有,于是无法抽取出这个词。另一个大问题就是对于某些预料中的低频词,其实重要程度也是很高的,比如专有名词、明星人名、众所周知的产品名称、这些可以认为是实体,这些实体词如果在语料中的权重较低,而抽取关键词时这些词是很重要的词,IF-IDF也很难抽取出来

那如何从语义层面抽取关键词呢?这就涉及到词表示了,如何进行词表示能很好的捕捉语义呢?答案很明显就是使用预训练的BERT了。最初想到的思路就是用BERT的[CLS]来表示句向量,于是词和句子都可以表示出来了,计算query与原始文本的余弦相似度,相似度排序,不就抽取出关键词了。

想到这里应该有开源项目完成这项工作了,于是找到了Github的项目KeyBERT,果然不负众望,抽取关键词的效果相对TF-IDF要好很多。仔细看了源码,原来是封装了大名鼎鼎的Sentence-BERT开源项目,用SBERT来表示词向量肯定比无监督BERT的[CLS]句向量要好太多。

废话不多说,直接看看KeyBERT抽取关键词的效果吧,数据基本与上篇关键词抽取算法用的数据差不多,外加了几条包含人名的。

乳房下垂?试试这款无钢圈通勤内衣,无束缚不勒肉,超聚拢
=> [‘内衣‘, ‘束缚’, ‘乳房’, ‘钢圈’, ‘不勒肉’]
打开这个开关,立即清理!深度清理垃圾缓存文件!
=> [‘清理’, ‘打开’, ‘开关’, ‘垃圾’, ‘立即’]
工程师职称评审,满足这些条件即可申报,快来看看吧
=> [‘工程师‘, ‘评审’, ‘申报’, ‘职称’, ‘看吧’]
家庭保险要趁早,保险规划教你避坑,先咨询清楚后投保,省钱省心
=> [‘保险‘, ‘投保’, ‘省钱’, ‘规划’, ‘趁早’]
沧州世友718地板降价太狠了,强化地板特价59元/㎡
=> [‘地板’, ‘降价’, ‘特价’, ’59’, ‘718’]
看剧还花钱?新人这里领会员,热门影视剧都免费看!
=> [‘免费’, ‘看剧’, ‘热门’, ‘影视剧’, ‘花钱’]
中国联通7月18日免费发1万张888绝版卡,月租永久19元
=> [‘中国联通‘, ‘月租’, ‘免费发’, ‘888’, ‘万张’]
北京全能新型大棚 免费设计 完工结账 可用20年 送棚膜送配件
=> [‘北京’, ‘大棚’, ‘配件’, ’20’, ‘送棚’]
林嘉歌为了娶她,用尽所有方法,靠萌娃助攻,时瑶答应去见他
=> [‘时瑶‘, ‘林嘉歌‘, ‘答应’, ‘萌娃’, ‘为了’]
海量热门小说免费试读,在宜搜可以看到大结局!
=> [‘试读’, ‘小说’, ‘大结局’, ‘热门’, ‘免费’]
戚薇工作室辟谣偷税漏税被罚
=> [‘偷税漏税‘, ‘辟谣’, ‘戚薇‘, ‘工作室’]

相比于关键词抽取算法中的TF-IDF算法来说,效果好太多。比如专有名词中国联通、人名林嘉歌时瑶等都抽取出来了,并且权重很高。

KeyBERT中其实支持选择编码模型的,中文选择了多语言paraphrase-multilingual-MiniLM-L12-v2481M的大模型。既然SBERT编码句向量这个思路得到了验证,在解决中文问题时,可选择的句向量模型就很多了。比如苏神开放的SimBERT,以及进一步微调过的模型RoFormer-Sim,都可以做句向量。最近刚出的CoSENT比Sentence-BERT更有效的句向量方案,这么多方案可以尝试。感谢苏神为开源的贡献。

总结

本文主要记录了抽取关键词任务,最终联想到句向量的思路。从量化词的重要程度出发,要解决这个问题,最好的方式就是语义层面的词编码,这也是TF-IDF做不到的地方,这就很自然想到用BERT了,在网上就找到了KeyBERT,顺着KeyBERT发现SBERT解决这个问题非常漂亮,进一步联想到苏神开源的一些列的句向量模型,思路一下打开了。

基于BERT的关键词抽取已经有这么多方法,并且开源的KeyBERT抽取效果已经很好了。本文算是一篇总结性的文章了。当然对于通用领域的文本、短文本抽取效果很好了,不过公司业务中都是垂直领域的数据,可以进一步微调,以达到最佳效果,打算最近尝试一下。

标签:

发表评论

邮箱地址不会被公开。