百度AI攻略:對話情緒識別

認證受權:python

在開始調用任何API以前須要先進行認證受權,具體的說明請參考:json

http://ai.baidu.com/docs#/Auth/topapp

獲取Access Tokenide

向受權服務地址https://aip.baidubce.com/oauth/2.0/token發送請求(推薦使用POST),並在URL中帶上如下參數:函數

grant_type:?必須參數,固定爲client_credentials;編碼

client_id:?必須參數,應用的API Key;url

client_secret:?必須參數,應用的Secret Key;spa

例如:code

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&orm

具體代碼以下:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

import urllib

import json

#client_id 爲官網獲取的AK, client_secret 爲官網獲取的SK

client_id =【百度雲應用的AK】

client_secret =【百度雲應用的SK】

#獲取token

def get_token():

    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret

    request = urllib.request.Request(host)

    request.add_header('Content-Type', 'application/json; charset=UTF-8')

    response = urllib.request.urlopen(request)

    token_content = response.read()

    if token_content:

        token_info = json.loads(token_content)

        token_key = token_info['access_token']

    return token_key

對話情緒識別

對話情緒識別的詳細介紹請看:http://ai.baidu.com/tech/nlp/emotion_detection

接口描述

針對用戶平常溝通文本背後所蘊含情緒的一種直觀檢測,可自動識別出當前會話者所表現出的一級和二級細分情緒類別及其置信度,針對正面和負面的情緒,還可給出參考回覆話術。幫助企業更全面地把握產品服務質量、監控客戶服務質量。在自動監控中若是發現有負面情緒出現,能夠及時介入人工處理,幫助在有限的人工客服條件下,下降客戶流失。

請求說明

HTTP方法:?POST

請求URL:?https://aip.baidubce.com/rpc/2.0/nlp/v1/emotion

URL參數:

access_token:?經過API Key和Secret Key獲取的access_token,參考「Access Token獲取」

Header以下:

Content-Typeapplication/json

Body請求示例:

{

"scene":"talk",

"text": "原本今天高高興興"

}

如今body總體文本內容能夠支持GBK和UTF-8兩種格式的編碼了。

一、GBK支持:默認按GBK進行編碼,輸入內容爲GBK編碼,輸出內容爲GBK編碼,不然會接口報錯編碼錯誤

二、UTF-8支持:若文本須要使用UTF-8編碼,請在url參數中添加charset=UTF-8 (大小寫敏感) 例如 https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?charset=UTF-8&access_token=24.f9ba9c5241b67688bb4adbed8bc91dec.2592000.1485570332.282335-8574074

請求參數

1240

返回說明

1240

我用Python3寫的調用函數以下:

def get_emotion(content):

    token=get_token()

    url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/emotion'

    params = dict()

    params['scene'] = 'talk'

    params['text'] = content

    params = json.dumps(params).encode('utf-8')

    access_token = token

    url = url + "?access_token=" + access_token

    url = url + "&charset=UTF-8" # 此處指定輸入文本爲UTF-8編碼,返回編碼也爲UTF-8

    request = urllib.request.Request(url=url, data=params)

    request.add_header('Content-Type', 'application/json')

    response = urllib.request.urlopen(request)

    content = response.read()

    if content:

        content=content.decode('utf-8')

        data = json.loads(content)

        return data

    else:

        return ''

執行:print (get_emotion('原本今天高高興興'))

結果以下:

{'log_id': 8567920447474187651, 'text': '原本今天高高興興', 'items': [{'subitems': [{'prob': 0.501008, 'label': 'happy'}], 'replies': ['笑一笑十年少'], 'prob': 0.501008, 'label': 'optimistic'}, {'subitems': [], 'replies': [], 'prob': 0.49872, 'label': 'neutral'}, {'subitems': [], 'replies': [], 'prob': 0.000272128, 'label': 'pessimistic'}]}

對話擴展:

有一個好玩的點子就是將返回的推薦Replies再發回去,是否是就能讓Ai本身和本身聊天了。說幹就幹,Python代碼以下:

def get_reply(data):

    item=data['items'][0]

    return item['prob'],item['label'],item['replies']

#聊天機器人,startcontent開始內容,talktimes聊多少句

def talk_bot(startcontent,talktimes):

    content=startcontent

    print (content)

    for i in range(talktimes):

        content=get_emotion(content)

        prob,label,replies=get_reply(content)

        print (i,prob,label,replies)

        if len(replies)==0:

            return

        else:

            content=replies

執行:

talk_bot('今天真開心啊',5)

今天真開心啊

0 0.998117 optimistic ['笑得真可愛']

1 0.998332 optimistic ['眼光不錯']

2 0.979875 optimistic ['感受本身棒棒噠']

3 0.932955 optimistic ['謝謝,我很開心']

4 0.999511 optimistic ['開心笑一笑']


talk_bot('你真漂亮啊',5)

你真漂亮啊

0 0.989602 optimistic ['感受本身棒棒噠']

1 0.932955 optimistic ['謝謝,我很開心']

2 0.999511 optimistic ['笑得真可愛']

3 0.998332 optimistic ['感受本身棒棒噠']

4 0.932955 optimistic ['謝謝,我很開心']

建議:

如今的參考回覆話術,中性情緒下該項爲空。不知道是否能在中性情緒下也返回一些建議的回覆內容,這樣的話便於統一處理。

相關文章
相關標籤/搜索