blmoistawinde / HarvestText

文本挖掘和预处理工具(文本清洗、新词发现、情感分析、实体识别链接、关键词抽取、知识抽取、句法分析等),无监督或弱监督方法
MIT License
2.42k stars 329 forks source link

请问下,通用情感词典[内置资源]要怎样才能用上? #47

Closed jiandam55 closed 1 year ago

jiandam55 commented 1 year ago

如果没想好选择哪些词语作为“种子词”,本库中也内置了一个通用情感词典内置资源,在不指定情感词时作为默认的选择,也可以根据需要从中挑选。 具体如何挑选? sent_dict = ht.build_sent_dict(sents,min_times=1,scale="+-1") 是我从qh_sent_dict.json里挑选词,组成sents吗?有无自动加载qh_sent_dict.json全部词的方法?

jiandam55 commented 1 year ago
from harvesttext.resources import get_qh_sent_dict
sdict = get_qh_sent_dict()              # {"pos":[积极词...],"neg":[消极词...]}
sent_dict = ht.build_sent_dict(sents,min_times=1,scale="+-1",pos_seeds=sdict["pos"],neg_seeds=sdict["neg"])
我现在这么弄,得到的sent_dict 词性全部都是0,不明白
blmoistawinde commented 1 year ago

你好,其实通用情感词典在你不填写pos_seeds和neg_seeds的时候就会自动用上qh_sent_dict了,当然你在二楼写的在这个方法也可以得到完全等价的结果。

你的问题应该主要是得到的词性没有正负倾向,全是0吧。这主要是因为这里使用的SO-PMI算法,是通过某个词语和正负面词典中的某个seed共同出现的频率,来估算它的极性。大概描述就是跟好词一起出现的词就也是好词这样的意思。这个共现频率是需要从你输入的sents中统计出来的。如果你给的sents数据量过少、不包含seed词,那么算法也就没办法统计共现频率,只能把每个词语都当做0了。我估计你的输入大概是这样的,所以可以考虑增加数据量,并且保证输入的句子里面有一些典型的好坏词语,再试试。

或者,如果你确实没有太多的数据,只是想要对手头的很少量的文本直接做情感分析,那么现在的一些预训练模型或许更适合你的要求,比如: https://huggingface.co/IDEA-CCNL/Erlangshen-Roberta-110M-Sentiment image