SiriやGoogleアシスタントなど、ユーザからの音声による命令を理解してアクションを起こす技術に注目が集まっています。音声操作を行う際、音声をテキストに変換する作業が必要なのはもちろんですが、テキストからユーザの意図を読み解く技術も重要です。

そこで今回はNTT docomoから提供されている発話理解APIを紹介します。
このAPIを利用することで、話し言葉から文脈を理解して、ユーザの意図した通りに動作する柔軟な音声操作機能を実現できます。

ベースについて

まずベースになるコードは以下の記事で解説した内容になります。

音声操作にも。MonacaアプリとGoogle Cloud Speech APIで音声認識を実現しよう

Google Cloud Speech APIを使い、音声をテキストに変換したところから開始します。
なお、このコードはgoofmint/monaca_voice_recognitionにありますので、実装時の参考にしてください。

docomo Developer supportで開発者登録する

APIキーが必要になりますのでdocomo Developer support | NTTドコモにてユーザ登録とアプリケーション登録を行ってください。
「登録アプリケーション一覧」画面で確認できる API key が後ほど必要になります。

Web APIを呼び出す

発話理解APIの呼び出し方は下記になります。Ajaxで呼び出すだけなのでとても簡単です。
api_key は上記のdocomo Developer supportにて得られるキーになります。 text は解析対象のテキストです。

var json={
  "projectKey": "OSU",
  "appInfo": {
    "appName": "hoge_app", // ここはそのままで良いようです
    "appKey": "hoge_app01" // ここはそのままで良いようです
  },
  "clientVer": "1.0.0",
  "dialogMode": "off",
  "language": "ja",
  "userId": "1",
  "location": {
    "lat": 0,
    "lon": 0
  },
  "userUtterance": {
    "utteranceText": text
  }
}
var url = `https://api.apigw.smt.docomo.ne.jp/sentenceUnderstanding/v1/task?APIKEY=${api_key}`;
$.ajax({
  type: 'POST',
  url: url,
  data: JSON.stringify(json),
  dataType:'json',
  contentType: 'application/json'
})
.then(function(data) {

})

結果はJSONで返ってきますが、特に大事なのは extractedWords 以下になります。
例えば下記は「今日は良い天気だったってメモしておいて」という文字列を解析した結果になります。

[
  {
    "wordsValue": "今日",
    "wordsType": [
      "datePnoun",
      "firstName"
    ]
  },
  {
    "wordsValue": "天気",
    "wordsType": [
      "weather",
      "snoun"
    ]
  },
  {
    "wordsValue": "メモ",
    "wordsType": [
      "snoun"
    ]
  },
  {
    "wordsValue": "今日は良い天気だった",
    "wordsType": [
      "memoBody"
    ]
  },
  {
    "wordsValue": "今日は良い天気だったってメモしておいて",
    "wordsType": [
      "inputText"
    ]
  }
]

wordsTypesnoun が最初に出ている項目が実行するべきアクションになります。今回で言えば「メモ」になります。
そしてメモしておきたい内容は wordsTypememoBody が設定されている項目になります。
このように snounmemoBody を組み合わせることでアクションが特定できます。
他にも様々なwordsTypeがありますので、発話理解APIのリファレンスを参考にしてください。

こちらは「monacaでアプリを作りましょうってメモしておいて」と発声した結果です。大事な「monacaでアプリを作りましょう」の部分だけが抜き取れています。


今回のコードはgoofmint/Monaca_Voice_commandにアップロードしてあります。実装時の参考にしてください。

ここではメモ機能を取り上げて解説しましたが、アクションと実行する内容さえ分かれば、地図アプリを開く、電話をかける、動画を再生すると言った様々な機能を実行できるようになるはずです。
音声操作で実行できる範囲が広がれば、文字で入力するよりも手軽で便利なアプリになるはずです。皆さんのアプリにも音声操作機能を追加してみてはいかがでしょう。

発話理解 | docomo Developer support | NTTドコモ