使用SO-PMI算法构建行业/专业情感词典
文章目录
- 1. 情感词典内容
- 2. 情感倾向点互信息算法(SO-PMI)算法
- 点互信息算法 PMI
- 情感倾向点互信息算法 SO-PMI
- 3. 构建情感词典
- 1. 导入项目
- 2. 构建情感种子词
- 3. 使用TF-IDF方便构建情感种子词
- 4. 构建专业词典的效果与使用方法
- 5. 其他说明
1. 情感词典内容
- 情感词典构建方法归为三类, 分别是: 词关系扩展法、迭代路径法和释义扩展法
- 情感极性:正向、负向;表示正面情感(开心愉快)或负面情感(伤心愤怒)
- 情感极值:情感倾向(微笑、开怀大笑、手舞足蹈虽然都可以表示开心,但有不一样的极值,表示情绪的表现程度)
已有的情感词典请参考:
2. 情感倾向点互信息算法(SO-PMI)算法
这个算法比较直白:包含两个部分,一个是PMI,一个是SO-PMI
点互信息算法 PMI
word1word1word1,word2word2word2 表示两个不同的词,Pword1P_{word1}Pword1 表示在整个语料库中 word1word1word1 出现的概率,一般认为:
1. PMI > 0 表示两个词语是相关的,值越大,相关性越强
2. PMI = 0 表示两个词语是统计独立的
3. PMI < 0 表示两个词语是不相关的,互斥的
PMI算法用一句话形容就是:两个词同时出现的概率越大,其相关性越大
情感倾向点互信息算法 SO-PMI
PwordP_{word}Pword 指一个基准词,PwP_{w}Pw指基准词列表,wordwordword 指随便一个词;
SO-PMI的基本思想是:有两个情感倾向的列表,一个是正向的情感词,一个是负向的情感倾向。计算每个词与这两个列表中的每个词的PMI,看这个词更接近哪个列表,是更接近正向情感词列表还是负向情感词列表。即:
SO-PMI值> 0,表示这个词更接近正向,即褒义词
SO-PMI值 = 0,表示这个词为中性词
SO-PMI值 < 0,表示这个词更像是负面词,即贬义词
一句话形容这个算法:判断一个词更倾向于与积极词一起出现,还是与消极词一起出现。
3. 构建情感词典
参考Github项目:https://github.com/liuhuanyong/SentimentWordExpansion
1. 导入项目
在python环境中安装依赖:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ jieba
然后使用git导入项目:
git clone git@github.com:liuhuanyong/SentimentWordExpansion.git
导入项目后直接运行SOPMI.py
文件就可以运行案例了。构建自己的情感词典,需要替换data/
文件夹下的train.txt
语料库与sentiment_words.txt
情感种子词,或是修改SOPMI.py
文件中的构造函数:
def __init__(self):self.train_path = './data/train.txt' # 需要提供的训练数据语料库self.sentiment_path = './data/sentiment_words.txt' # 需要提供的情感种子词列表self.candipos_path = './data/candi_pos.txt' # 输出的正向词列表self.candineg_path = './data/candi_neg.txt' # 输出的负向词列表
2. 构建情感种子词
在SO-PMI算法中提供基准词 PwordP_{word}Pword 的词称为情感种子词,需要自定义,种子词的构建直接决定了最后的效果。
从预料中选择一些主观上明显感觉这个词有强烈的情感倾向的词,然后按照种子词的格式罗列下来就行。种子词的列表格式是一个词\t情感倾向\n
,其中情感倾向有pos
正向/积极 与 neg
负向/消极,例:
解决 pos
尊敬 pos
问题 neg
严重 neg
投诉 neg
噪音 neg
博主这里提供一个构建情感种子词的工具类,方便将看着像这种格式,但是并没有用\t
切分的文件转换成能直接输入的格式:
file = open('my_sentiment_words.txt', 'a')
for line in open('data/sentiment_words.txt'):line_list = line.strip().split(' ') # 词与情感倾向之间用空格切分,没有用\t切分file.write(line_list[0] + '\t' + line_list[1] + '\n')
file.flush()
file.close()
3. 使用TF-IDF方便构建情感种子词
自己去从海量的文本中找有明显情感倾向的词这也太硬核了!所以借助TF-IDF构建会方便很多。TF-IDF的算法这里就不展开了,直接上代码:
import jieba # 分词器
import jieba.analyse
import pandas as pddef tfidf_ana(content):title_keys = jieba.analyse.extract_tags(content, topK=700, withWeight=False) # topK为期望得到的关键词个数with open('tf_idf_words.txt', 'a') as file:for i in title_keys:file.write(i + '\n')file.flush()file.close()if __name__ == '__main__':answer_df = pd.read_csv('../coment_answer.csv')answer_list = answer_df['content'].to_list()answer_str = ''for k in answer_list:answer_str += str(k)data = tfidf_ana(answer_str)
在tf_idf_words.txt
这个文件中会借助TF-IDF
输出700个词,从700个词中挑选情感种子词总比从语料库中找方便吧。输出格式:
拆迁
需求
附近
纠纷
受理
催促
4. 构建专业词典的效果与使用方法
以输出的candi_pos.txt
为例,这些内容包括词语,pmi值,情感极性,词的长度,词性
,使用情感词典时可以把所有词的权重定为1,也可以使用pmi值作为权重,来判断一句话的整体情感。
简单化,102.5088270306492,pos,3,v
不辞辛苦,99.88645456051404,pos,4,i
心怀,99.65437740515684,pos,2,n
祝愿,84.25764401332869,pos,2,v
人民大众,83.15324812078094,pos,4,nt
适时,82.92507246585465,pos,2,ad
欣喜,81.43696536070502,pos,2,a
密切,78.28173699693579,pos,2,ad
辛勤工作,77.90533206036869,pos,4,n
5. 其他说明
按照如上所述,替换掉案例中data/
文件夹下的train.txt
语料库与sentiment_words.txt
情感种子词后,运行SOPMI.py
即可得到预期效果。如果有报错请检查情感种子词格式每一行是否中间是用\t
切分,结尾是否用\n
换行。
在这个项目中collect_cowords
函数中有一个参数词共现窗口window_size
,可自行指定
使用SO-PMI算法构建行业/专业情感词典相关推荐
- 云小课 | ModelArts Pro 自然语言处理套件:高效构建行业高精度文本处理模型
摘要:ModelArts Pro提供了自然语言处理套件,为客户提供自然语言处理的自定制工具,旨在帮助客户高效地构建行业领域的高精度文本处理模型,可应用于政府.金融.法律等行业. 本文分享自华为云社区& ...
- 数据分析案例-基于随机森林算法的商品评价情感分析
目录 1.挖掘目标 2.分析方法与过程 2.1总体流程 2.2具体步骤 2.3结果分析 3.结论 摘 要:随着我国的信息化发展速度的加快,时代科技技术的进步以及我国联网设施不断完善.不断普及,网民人数 ...
- 线下课程推荐 | 知识图谱理论与实战:构建行业知识图谱 (第四期)
知识,是智能的前提. 2012年,Google推出"Google Knowledge Graph",并利用其在搜索引擎中增强搜索结果,这便是"知识图谱"名称的由 ...
- 如何构建行业知识图谱 (以医疗行业为例)
The world is not made of strings,but is made of things. - 辛格博士,from Google 随着人工智能走到台前,人们越来越认识到,场景才是盘 ...
- 知识图谱发展的难点 构建行业知识图谱的重要性
这是阿拉灯神丁Vicky的第 009 篇文章 一,概述 尽管人工智能依靠机器学习和深度学习取得了快速进展,但这些都是弱人工智能,对于机器的训练,需要人类的监督以及大量的数据来喂养,更有甚者需要 ...
- 柯基数据:先进的知识图谱技术,构建行业知识图谱,助企业打通内部信息孤岛,链接海量数据 |百万人学AI评选
2020 无疑是特殊的一年,而 AI 在开年的这场"战疫"中表现出了惊人的力量.站在"新十年"的起点上,CSDN[百万人学AI]评选活动正式启动.本届评选活动在 ...
- 医学影像组学人工智能算法构建培训班
各企事业单位.高等院校及科研院所: 随着影像组学和人工智能尤其是视觉技术的高速融合,影像组学延伸领域也随之高速增长,同时也推动了人工智能技术在医学科研应用领域快速地发展,相关科研成果和学术论文数量逐年 ...
- 04 集成学习 - Boosting - AdaBoost算法构建
03 集成学习 - Boosting - AdaBoost算法原理 十.AdaBoost算法构建 上一章最后说明了每个基模型的权值α是如何求得的,于是我就可以对模型进行更新操作了. 构建过程一 1.假 ...
- sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights)、计算融合模型的混淆矩阵、可视化混淆矩阵
sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights).计算融合模型的混淆矩阵.可视化混淆矩阵 目 ...
最新文章
- Win32系统下安装Win64补充说明
- HDU 4339 Query
- 使用category 01同时下载3个hierarchy equipment
- 未找到导入的项目,请确认 Import 声明中的路径正确
- 如果没有,那么就去创造
- 上新了! 热门开源 AutoML 工具 NNI 2.0 来袭!
- 分享一个mysql的docker-compose.yml
- 微信WAP H5支付功能实现
- mysql脱库_mysql 脱裤(脱库)通用脚本
- java8新特性 lambda Stream map(函数式编程)
- 京东零售2021年度表彰大会
- 如何批量导入文件夹,批量重命名
- H3CV7交换机WEB登录设备方法
- 美国最好的计算机工程专业排名,2017年美国大学排名之计算机工程专业排名TOP100...
- 深入浅出计算机组成原理26-Superscalar和VLIW:如何让CPU的吞吐率超过1?
- 论文阅读-Detecting and Recovering Sequential DeepFake Manipulation(SeqFakeFormer)
- ADF7901BRUZ ASK/FSK发射器 ISM频段
- 单核CPU的并发和并行(操作系统篇)
- Hazelcast IMDG技术详解
- 原画师惊呆:这个爆火AI真把梦境画成现实了!下载APP人人可用
热门文章
- Unity3D开发技巧:如何避开unity编辑器的那些坑
- 浅谈EventBus的使用原理
- Android RecyclerView、ListView实现单选列表的优雅之路.
- UVA 10004 Bicoloring
- [Web 开发] URL 的最大长度
- java 鼠标拖动_java 让表项支持鼠标拖动移位,并自动滚动滚动条
- python垃圾回收 循环引用_在做 Python 循环引用垃圾回收实验中的一个小问题, Python3 的 print 是线程安全的吗?...
- mysql的存储引擎_Mysql数据库3种存储引擎有什么区别?
- mysql got signal 11_求助 mysqld got signal 11 解决办法
- 优良中差五个等级英文表达_谈谈英文医学论文的文体特征和翻译技巧