文章目录

  • 1. 情感词典内容
  • 2. 情感倾向点互信息算法(SO-PMI)算法
    • 点互信息算法 PMI
    • 情感倾向点互信息算法 SO-PMI
  • 3. 构建情感词典
    • 1. 导入项目
    • 2. 构建情感种子词
    • 3. 使用TF-IDF方便构建情感种子词
    • 4. 构建专业词典的效果与使用方法
    • 5. 其他说明

1. 情感词典内容

  1. 情感词典构建方法归为三类, 分别是: 词关系扩展法、迭代路径法和释义扩展法
  2. 情感极性:正向、负向;表示正面情感(开心愉快)或负面情感(伤心愤怒)
  3. 情感极值:情感倾向(微笑、开怀大笑、手舞足蹈虽然都可以表示开心,但有不一样的极值,表示情绪的表现程度)

已有的情感词典请参考:

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算法构建行业/专业情感词典相关推荐

  1. 云小课 | ModelArts Pro 自然语言处理套件:高效构建行业高精度文本处理模型

    摘要:ModelArts Pro提供了自然语言处理套件,为客户提供自然语言处理的自定制工具,旨在帮助客户高效地构建行业领域的高精度文本处理模型,可应用于政府.金融.法律等行业. 本文分享自华为云社区& ...

  2. 数据分析案例-基于随机森林算法的商品评价情感分析

    目录 1.挖掘目标 2.分析方法与过程 2.1总体流程 2.2具体步骤 2.3结果分析 3.结论 摘 要:随着我国的信息化发展速度的加快,时代科技技术的进步以及我国联网设施不断完善.不断普及,网民人数 ...

  3. 线下课程推荐 | 知识图谱理论与实战:构建行业知识图谱 (第四期)

    知识,是智能的前提. 2012年,Google推出"Google Knowledge Graph",并利用其在搜索引擎中增强搜索结果,这便是"知识图谱"名称的由 ...

  4. 如何构建行业知识图谱 (以医疗行业为例)

    The world is not made of strings,but is made of things. - 辛格博士,from Google 随着人工智能走到台前,人们越来越认识到,场景才是盘 ...

  5. 知识图谱发展的难点 构建行业知识图谱的重要性

    这是阿拉灯神丁Vicky的第   009   篇文章 一,概述 尽管人工智能依靠机器学习和深度学习取得了快速进展,但这些都是弱人工智能,对于机器的训练,需要人类的监督以及大量的数据来喂养,更有甚者需要 ...

  6. 柯基数据:先进的知识图谱技术,构建行业知识图谱,助企业打通内部信息孤岛,链接海量数据 |百万人学AI评选

    2020 无疑是特殊的一年,而 AI 在开年的这场"战疫"中表现出了惊人的力量.站在"新十年"的起点上,CSDN[百万人学AI]评选活动正式启动.本届评选活动在 ...

  7. 医学影像组学人工智能算法构建培训班

    各企事业单位.高等院校及科研院所: 随着影像组学和人工智能尤其是视觉技术的高速融合,影像组学延伸领域也随之高速增长,同时也推动了人工智能技术在医学科研应用领域快速地发展,相关科研成果和学术论文数量逐年 ...

  8. 04 集成学习 - Boosting - AdaBoost算法构建

    03 集成学习 - Boosting - AdaBoost算法原理 十.AdaBoost算法构建 上一章最后说明了每个基模型的权值α是如何求得的,于是我就可以对模型进行更新操作了. 构建过程一 1.假 ...

  9. sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights)、计算融合模型的混淆矩阵、可视化混淆矩阵

    sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights).计算融合模型的混淆矩阵.可视化混淆矩阵 目 ...

最新文章

  1. Win32系统下安装Win64补充说明
  2. HDU 4339 Query
  3. 使用category 01同时下载3个hierarchy equipment
  4. 未找到导入的项目,请确认 Import 声明中的路径正确
  5. 如果没有,那么就去创造
  6. 上新了! 热门开源 AutoML 工具 NNI 2.0 来袭!
  7. 分享一个mysql的docker-compose.yml
  8. 微信WAP H5支付功能实现
  9. mysql脱库_mysql 脱裤(脱库)通用脚本
  10. java8新特性 lambda Stream map(函数式编程)
  11. 京东零售2021年度表彰大会
  12. 如何批量导入文件夹,批量重命名
  13. H3CV7交换机WEB登录设备方法
  14. 美国最好的计算机工程专业排名,2017年美国大学排名之计算机工程专业排名TOP100...
  15. 深入浅出计算机组成原理26-Superscalar和VLIW:如何让CPU的吞吐率超过1?
  16. 论文阅读-Detecting and Recovering Sequential DeepFake Manipulation(SeqFakeFormer)
  17. ADF7901BRUZ ASK/FSK发射器 ISM频段
  18. 单核CPU的并发和并行(操作系统篇)
  19. Hazelcast IMDG技术详解
  20. 原画师惊呆:这个爆火AI真把梦境画成现实了!下载APP人人可用

热门文章

  1. Unity3D开发技巧:如何避开unity编辑器的那些坑
  2. 浅谈EventBus的使用原理
  3. Android RecyclerView、ListView实现单选列表的优雅之路.
  4. UVA 10004 Bicoloring
  5. [Web 开发] URL 的最大长度
  6. java 鼠标拖动_java 让表项支持鼠标拖动移位,并自动滚动滚动条
  7. python垃圾回收 循环引用_在做 Python 循环引用垃圾回收实验中的一个小问题, Python3 的 print 是线程安全的吗?...
  8. mysql的存储引擎_Mysql数据库3种存储引擎有什么区别?
  9. mysql got signal 11_求助 mysqld got signal 11 解决办法
  10. 优良中差五个等级英文表达_谈谈英文医学论文的文体特征和翻译技巧