感情分析
概要
感情分析とは
感情分析とは、音声から発話者の感情を分析して出力する機能です。AmiVoice APIでは、ESジャパン社のESAS (Emotional Signature Analysis Solution)感情解析エンジンを利用して音声から感情パラメータを返します。ESASは、イスラエルのNemesysco社が提供する最新の感情分析エンジン『LVA7』をベースに日本向けにチューニングした感情解析エンジンです。技術的な背景については、ESジャパン社のサイトを参照してください。
APIについて
AmiVoice APIでは、音声認識のリクエスト時にオプションパラメータsentimentAnalysisをTrueに設定することで、ESASの出力する感情パラメータを取得できます。ESASが発話と判定した音声区間に対して約2秒に1回、20個の感情パラメータの配列を出力します。
結果はレスポンスの中のsentiment_analysisに得られます。
"sentiment_analysis": {
"segments": [
{
"starttime": 10,
"endtime": 20,
/* 感情パラメータ */
},
{
"starttime": 100,
"endtime": 200,
/* 感情パラメータ */
},
/* 省略 */
]
},
感情パラメータについては後述の感情パラメータ一覧や、感情パラメータの意味と解釈の仕方を参照してください。また、レスポンス中のパラメータ名はAPIを使って取得することができます。
感情分析は、非同期 HTTP インタフェース のみに対応しています。
非同期 HTTP インタフェースの新しいバージョン(v2)では、現在、感情分析の機能を利用することができません。感情 分析を利用する場合は、従来版(v1)をご利用ください。
なお、v2 で感情分析機能を利用しようとした場合、invalid parameter (sentimentAnalysis must be False. sentiment analysis is currently not implemented)というエラーメッセージが返ります。
利用方法
リクエスト
感情パラメータを得るには、音声認識のリクエスト時に、dパラメータにsentimentAnalysis=Trueを設定します。
例えば、感情分析を利用しない場合、AmiVoice API のサンプルプログラムに同梱している音声を curl コマンドを使って汎用エンジンで音声認識する場合は以下のようにコマンドを実行します。
curl https://acp-api-async.amivoice.com/v1/recognitions \
-F d="grammarFileNames=-a-general" \
-F u={APP_KEY} \
-F a=@test.wav
感情分析機能を有効にするには、以下のように変更します。
curl https://acp-api-async.amivoice.com/v1/recognitions \
-F d="grammarFileNames=-a-general sentimentAnalysis=True" \
-F u={APP_KEY} \
-F a=@test.wav
レスポンス
リクエストが成功したら、結果が得られるまでジョブの状態を定期的に確認してください。詳細は、非同期 HTTP インタフェースの「2. 音声認識ジョブの状態をチェックし、結果を取得する」を参照してください。
以下では感情分析機能を有効にしたときの結果レスポンスについて説明します。
成功したとき
感情分析の結果は、sentiment_analysisに得られます。
感情解析エンジンが発話と判定した音声に対して、約2秒に1回、20個の感情パラメータを出力します。sentiment_analysis.segmentsには、この感情パラメータが時間順に配列として得られます。各要素には、音声の開始時間を0としたミリ秒単位の相対的な時間情報として開始時間(starttime)、終了時間(endtime)と、その時間に対応した感情パラメータがあります。
レスポンスの例:
{
"audio_md5": "40f59fe5fc7745c33b33af44be43f6ad",
"audio_size": 306980,
"code": "",
"message": "",
"segments": [
{
"results": [
{
"confidence": 0.998,
"endtime": 8794,
"rulename": "",
"starttime": 250,
"tags": [],
"text": "アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。",
"tokens": [
{
"confidence": 1,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ",
"starttime": 522,
"written": "アドバンスト・メディア"
},
{
"confidence": 1,
"endtime": 1834,
"spoken": "は",
"starttime": 1578,
"written": "は"
},
/* 省略 */
]
}
],
"text": "アドバンスト・メディアは、人と機械との自然な コミュニケーションを実現し、豊かな未来を創造していくことを目指します。"
}
],
"sentiment_analysis": {
"segments": [
{
"starttime": 10,
"endtime": 20,
/* 感情パラメータ */
},
{
"starttime": 100,
"endtime": 200,
/* 感情パラメータ */
},
/* 省略 */
]
},
"service_id": "user01",
"session_id": "018160cbe43f0a304474a999",
"status": "completed",
"text": "アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。",
"utteranceid": "20220614/15/018160cc54ee0a3044b539d0_20220614_150012"
}
感情分析結果が空になるとき
感情を分析するのに十分な長さの音声がない場合、以下のようにsentiment_analysisのsegmentsが空の配列になります。
sentiment_analysis": {
"segments": []
}