当前位置 : 主页 > 编程语言 > python >

百度AI开放平台情感分类

来源:互联网 收集:自由互联 发布时间:2022-06-15
百度AI开放平台情感分类 ​​问题及思路​​ ​​完整代码​​ ​​代码解析​​ 上次获取了top10集中式公寓品牌约1600条 ​​微博内容​​,每条微博内容都代表了发博者的情感,其



百度AI开放平台情感分类

  • ​​问题及思路​​
  • ​​完整代码​​
  • ​​代码解析​​


上次获取了top10集中式公寓品牌约1600条

​​微博内容​​,每条微博内容都代表了发博者的情感,其中不乏赞美之词,也不乏抱怨的,还有只做个路人甲的,如何从这些内容提炼发博者的观点态度呢?这有点像英语阅读理解里面的

What`s the author’s opinion or attitude? 我们知道一篇微博里面,往往会出现表露情感的词语比如“大爱“,”怎么还不倒闭“等等,人类总是有7情6欲,其中7情是指

“喜、怒、哀、惧、爱、恶、欲”,这7种情感中

喜和爱 可以表示正性的,而

怒,哀,惧和恶 则表示负性的,唯独

欲 既可为正性又可以为负性,暂定为中性。于是乎,情感又可分为3大类——正性,负性和中性。

问题及思路

如果规定一条微博只表达一种情感的话,那么抽象来看,这个情感判别这就是一个多分类问题,对于文本情感挖掘一般会有下面3个解决办法

  • jieba模块+LSTM神经网络训练
    首先可以利用jieba模块可以将微博内容分词,并标注词的情感,关键是若干个表达情感的词语组合起来综合态度,到底是正性的,负性的还是中性的?这需要一个好的算法。在给每一条微博打上情感标签后,然后利用神经网络LSTM进行有监督学习分类。

  • 调用百度AI开放平台情感倾向分析
    在百度AI开发平台的情感倾向分析返回结果里面,0表示负性,1表示中性,2表示正性,可以调用百度AI开放平台的情感分析接口向服务器发出请求,然后获取返回结果,利用返回结果给每条微博内容打上标签。

  • PaddleHub Senta模块
    这是一个简单的API接口,直接pip install paddlepaddle,然后像sklearn那样调用便是,返回的是某条微博情感方面的参数。

  • 本文以探讨第二种方法,并在此基础上人工验证分类的准确率,共1596条微博内容,人工验证发现有175条分类错误,准确率为89.1%。下面是调用百度AI开放平台的情感倾向分析完整代码

    完整代码

    # -*- coding: utf-8 -*-
    """
    project_name:利用百度接口情感分析
    @author: 帅帅de三叔
    Created on Thu Aug 15 15:36:10 2019
    """
    import pymysql #导入数据库api模块
    import requests #导入请求模块
    import json #导入json模块
    import urllib #导入url操作模块
    import time #导入时间模块
    from tqdm import tqdm #导入进度条模块

    db=pymysql.connect(host="localhost",user="root",password="123456",database="weibo",charset="utf8mb4") #链接数据库weibo
    cursor=db.cursor() #获取游标
    boyu_sql="select * from weibo_zongbiao" #mysql脚本
    cursor.execute(boyu_sql) #执行mysql脚本
    result=cursor.fetchall() #获取所有数据tuple类型
    data=pd.DataFrame(list(result),columns=["user","content","time"]) #自定义表头
    contents=data['content'] #提取微博内容
    cursor.execute("DROP TABLE IF EXISTS weibo_qinggan") #重头再来
    c_sql="""create table weibo_qinggan(
    content varchar(300),
    sentiment_lable varchar(2),
    positive_prob varchar(10),
    negative_prob varchar(10),
    confidence varchar(10)
    )Engine=InnoDB AUTO_INCREMENT=1 Default charset=utf8mb4""" #创建表采用utf8mb4可以把emoji插入数据库
    cursor.execute(c_sql) #执行创建表

    def get_access_token(): #定义获取access_token函数
    host="https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【您的API Key】&client_secret=【您的Secret Key】"
    resp=requests.post(host)
    reply=resp.json()
    access_token=reply['access_token']
    #print(access_token)
    return access_token

    def sentiment_classify(sentence): #定义获取情感分析函数
    material = {"text":"内容"} #以字典形式存放物料
    material['text'] = sentence #通过键值传递实参
    data = json.dumps(material).encode('utf-8') #利用dump把python数据格式转json格式
    host = "https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?charset=UTF-8&access_token="+get_access_token() #请求服务器
    time.sleep(1) #挂起进程1秒
    request = urllib.request.Request(url=host,data=data) #发出请求
    request.add_header('Content-Type', 'application/json') #追加请求头
    response = urllib.request.urlopen(request) #获取响应
    content = response.read().decode('utf-8') #读取响应内容
    answer = json.loads(content) #字典类型
    #print(answer)
    ls=answer['items'] #解析内容以字典构成的列表
    print(ls) #测试解析内容
    comment=answer['text'] #原微博内容
    positive_prob=[item[key] for item in ls for key in item][0] #属于消极类别的概率
    confidence=[item[key] for item in ls for key in item][1] #置信度
    negative_prob=[item[key] for item in ls for key in item][2] #属于消极类别的概率
    sentiment=[item[key] for item in ls for key in item][3] #情感极性分类结果,0:负向,1:中性,2:正向情感极性分类结果,0:负向,1:中性,2:正向
    print(comment,sentiment,positive_prob,negative_prob,confidence) #测试返回值
    insert_data=("insert into weibo_qinggan(content,sentiment_lable,positive_prob,negative_prob,confidence)""values(%s,%s,%s,%s,%s)") #控制插入格式
    weibo_data=([comment,sentiment,positive_prob,negative_prob,confidence]) #待插入数据
    cursor.execute(insert_data,weibo_data) #执行数据
    db.commit()#主动提交数据库

    if __name__=="__main__":
    for index in tqdm(contents): #对微博内容循环(带进度条)
    sentiment_classify(index) #执行情感分类函数

    代码解析

    由于微博内容存在mysql数据库里面,先要链接数据库把数据取出来,然后不断向百度AI开放平台发出请求,第一个函数 get_access_token 是用来获取您的access_token以便在第二个函数的时候构造请求url,而第二个函数 sentiment_classify是以微博内容作为请求实体向百度AI开放平台发起请求,返回微博内容一些情感方面的参数,返回结构是json格式如下,其中sentiment是我们主要关心的情感列别表情。

    {
    "text":"苹果是一家伟大的公司",
    "items":[
    {
    "sentiment":2, //表示情感极性分类结果
    "confidence":0.40, //表示分类的置信度
    "positive_prob":0.73, //表示属于积极类别的概率
    "negative_prob":0.27 //表示属于消极类别的概率
    }
    ]
    }

    接着提取返回结果存入数据库里面,注意程序挂起时间,因为百度服务器每秒查询率QPS不能超过2,然后在提取由字典构成的列表items的时候可以像下面这样样提取一个个value值

    positive_prob=[item[key] for item in ls for key in item][0]
    confidence=[item[key] for item in ls for key in item][1]
    negative_prob=[item[key] for item in ls for key in item][2]
    sentiment=[item[key] for item in ls for key in item][3]

    整个过程流畅并无赘余,有很好的参考价值,下一次准备试一下PaddleHub Senta模块,并打算自己写一个深度神经网络训练情感分类。

    百度AI开放平台情感分类_自然语言处理



    上一篇:Mandelbrot集及python实现
    下一篇:没有了
    网友评论