Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20190208 DroidKaigi2019

KAKKA
February 08, 2019

20190208 DroidKaigi2019

Dialogflowによる自然言語処理(NLP)を用いたボイスコマンド音声認識の精度向上

近年、自然言語処理を用いた音声アシスタントやチャットBOTサービスが普及してきている。AndroidにおけるSpeechRecognizerも非常に認識精度が高い。
しかしこのような対話をベースとしたサービスは利用環境が制限される。例えば劣悪な環境雑音下での音声アシスタントとの会話や、文字自由に入力できないときのチャットBOTサービスはかなり使いづらい。対話が複数回必要になると更に難易度が増す。AndroidにおけるSpeechRecognizerが優秀であっても途中でユーザーがドロップする確率が高くなってしまう。

ユーザーにとって究極にフレンドリーなサービスは、何も言うことなく、何も文字を打つことなく正確に命令をすることであるが、現状では非常に実現難易度が高い。
よって今回は、ユーザーの仕事をなるべく減らし、かつ正確に命令をできる状態を目指す。

本セッションでは、最初にDialogflowやAndroidのSpeechRecognizerの基本を極めて簡単に説明する。次にユーザーが特定の環境で、なるべくユーザーの仕事を減らしながら特定の目的を果たすために、AndroidのSpeechRecognizerとDialogflowを組み合わせて用いることでボイスコマンド音声認識の精度向上を試みる。そしてその具体的な手法及び結果を示す。

KAKKA

February 08, 2019
Tweet

More Decks by KAKKA

Other Decks in Technology

Transcript

  1. Dialogflowによる自然言語処理
    (NLP)を用いたボイスコマンド音声
    認識の精度向上
    DroidKaigi 2019
    2019/02/08 10:30-11:00 @Room1
    Drivemode, Inc.
    KAKKA (Nobuhisa Hirata)
    @KAKKA_Blog

    View Slide

  2. 自己紹介
    KAKKA
    DroidKaigi 2017
    音声認識と連続音声認識について
    DroidKaigi 2018
    ActivityRecognitionについて

    View Slide

  3. 目次
    ● ボイスコマンド音声認識の実現方法
    ○ シンプルかつ単一要件の場合
    ○ 複雑または複数要件の場合
    ● Dialogflow
    ○ 概要
    ○ 使い方
    ● 音声認識率改善結果について

    View Slide

  4. ボイスコマンド音声認識の実現方法

    View Slide

  5. シンプルかつ単一要件の場合

    View Slide

  6. シンプルかつ単一要件の場合
    押 す

    View Slide

  7. シンプルかつ単一要件の場合
    私は押すことが
    できます。
    ボタン押せるヤツ

    View Slide

  8. シンプルかつ単一要件の場合
    押して
    ボタン押せるヤツ

    View Slide

  9. シンプルかつ単一要件の場合
    ピンポーン!
    ボタン押せるヤツ

    View Slide

  10. シンプルかつ単一要件の場合
    ボタン押せるヤツ
    音声認識
    キーワード辞書
    押す能力

    View Slide

  11. シンプルかつ単一要件の場合
    音声認識
    SpeechRecognizer recognizer = SpeechRecognizer.createSpeechRecognizer(application);
    recognizer.setRecognitionListener(new RecognitionListener() {
    ...
    @Override
    public void onResults(Bundle results) {
    List recognitionResultList =
    results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    }
    ...
    });
    recognizer.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH));

    View Slide

  12. シンプルかつ単一要件の場合
    キーワード辞書
    String[] dictionary = {"押す", "押せ", "押し", "雄", "推し"};
    for (String keyword : dictionary) {
    if (recognitionResult.contains(keyword)) {
    return true;
    }
    } 押す

    View Slide

  13. シンプルかつ単一要件の場合
    キーワード辞書
    String[] dictionary = {"押す", "押せ", "押し", "雄", "推し"};
    for (String keyword : dictionary) {
    if (recognitionResult.contains(keyword)) {
    return true;
    }
    } 押す
    アプリ内で完結

    View Slide

  14. 複雑または複数要件の場合
    音楽再生したい
    注文したい
    教えてほしい
    喋りたい
    案内してほしい
    メッセージ送りたい
    電話かけたい

    View Slide

  15. 複雑または複数要件の場合
    私はいろいろでき
    ます。
    いろいろできるヤツ

    View Slide

  16. 複雑または複数要件の場合
    よかろう!
    いろいろできるヤツ
    東京駅まで連れ
    てって〜
    ヘビメタの音楽を
    再生
    母に電話かけて
    Androidって何?

    View Slide

  17. 複雑または複数要件の場合
    いろいろできるヤツ
    音声認識
    自然言語処理
    いろんな実行能力

    View Slide

  18. 複雑または複数要件の場合
    いろいろできるヤツ
    音声認識
    自然言語処理
    いろんな実行能力
    Dialogflowを使う

    View Slide

  19. Dialogflow

    View Slide

  20. Dialogflowの概要
    教師データを用いた学習により、自然言語処理を行う
    9時に東京に
    案内して
    要件: 案内
    時間: 9時
    目的地: 東京

    View Slide

  21. Dialogflowの概要
    9時に東京に案内して
    時間 場所
    学習データ

    View Slide

  22. Dialogflowの概要
    9時に東京に案内して
    時間 場所
    学習データ
    10時に岐阜に案内して
    10時に岐阜に案内します

    View Slide

  23. Dialogflowの概要
    いつ、どこに、案内する
    なかったら今
    で良い
    なかったら
    案内できない。
    必須パラメータ
    命令に必要な情報の管理も可能

    View Slide

  24. Dialogflowの概要
    9時に東京に案内して
    学習データ
    案内して
    どこに?
    滋賀県
    (今から)滋賀県に案内します
    必須パラメータ

    View Slide

  25. Dialogflowの使い方

    View Slide

  26. Dialogflowの使い方
    Intent
    Entity
    Agent
    要件を判別
    パラメータ検出
    パラメータの
    種類定義

    View Slide

  27. Intent
    Entity
    Agent
    Dialogflowの使い方

    View Slide

  28. Intentの設定画面
    Training phrases
    Dialogflowの使い方
    学習させる文章を入力

    View Slide

  29. Dialogflowの使い方
    検出したいパラメータを定義

    View Slide

  30. 必須パラメータにできる
    Dialogflowの使い方

    View Slide

  31. リスト形式のパラメータに
    できる
    Dialogflowの使い方

    View Slide

  32. 動作確認
    Dialogflowの使い方

    View Slide

  33. Training phrases
    Dialogflowの使い方

    View Slide

  34. {
    "queryText": "amazon musicで陰陽座
    を再生",
    "action": "音楽再生",
    "parameters": {
    "MusicAppName": "amazon music",
    "ArtistName": "陰陽座"
    },

    }
    Dialogflowの使い方

    View Slide

  35. Intent
    リスト形式のパラメータに
    できる
    Dialogflowの使い方

    View Slide

  36. {
    "queryText": "陰陽座をSpotifyで再生",
    "action": "音楽再生",
    "parameters": {
    "MusicAppName": "Spotify",
    "ArtistName": ["陰陽座"]
    },

    }
    Dialogflowの使い方

    View Slide

  37. Android
    Dialogflowの使い方
    Androidから使うには?

    View Slide

  38. Android
    SpeechRecognizer
    “音楽を再生”
    Dialogflowの使い方

    View Slide

  39. Android
    SpeechRecognizer
    “音楽を再生”
    Dialogflowの使い方

    View Slide

  40. Android
    SpeechRecognizer
    “音楽を再生”
    {
    "queryText": "音楽を再生",
    "action": "音楽再生",
    "parameters": {
    "MusicAppName": "",
    "ArtistName": ""
    },

    }
    Dialogflowの使い方

    View Slide

  41. Android
    AIConfiguration config = new AIConfiguration(
    DIALOG_FLOW_TOKEN,
    ai.api.AIConfiguration.SupportedLanguages.English,
    AIConfiguration.RecognitionEngine.System
    );
    aiDataService = new AIDataService(application, config);
    AIRequest aiRequest = new AIRequest();
    aiRequest.setQuery(recognizedText);
    aiRequest.setResetContexts(resetContext);
    AIResponse response = aiDataService.request(aiRequest);
    Dialogflowの使い方

    View Slide

  42. Android
    AIConfiguration config = new AIConfiguration(
    DIALOG_FLOW_TOKEN,
    ai.api.AIConfiguration.SupportedLanguages.English,
    AIConfiguration.RecognitionEngine.System
    );
    aiDataService = new AIDataService(application, config);
    AIRequest aiRequest = new AIRequest();
    aiRequest.setQuery(recognizedText);
    aiRequest.setResetContexts(resetContext);
    AIResponse response = aiDataService.request(aiRequest);
    Dialogflowの使い方

    View Slide

  43. Android
    自社サーバー
    (1) get token
    V2
    Dialogflowの使い方

    View Slide

  44. Android
    自社サーバー
    (1) get token (2) authentication
    V2
    Dialogflowの使い方

    View Slide

  45. Android
    自社サーバー
    (1) get token (2) authentication
    (3) return token
    V2
    Dialogflowの使い方

    View Slide

  46. Android
    自社サーバー
    (1) get token (2) authentication
    (3) return token
    (4) return token
    V2
    Dialogflowの使い方

    View Slide

  47. Android
    自社サーバー
    (1) get token (2) authentication
    (3) return token
    (4) return token
    (5) detect intent
    V2
    Dialogflowの使い方

    View Slide

  48. Android
    自社サーバー
    (1) get token (2) authentication
    (3) return token
    (4) return token
    (5) detect intent
    (6) return result
    V2
    Dialogflowの使い方

    View Slide

  49. Android
    自社サーバー
    (1) detect intent
    V2
    Dialogflowの使い方

    View Slide

  50. Android
    自社サーバー
    (1) detect intent
    (2) authentication
    V2
    Dialogflowの使い方

    View Slide

  51. Android
    自社サーバー
    (1) detect intent
    (2) authentication
    (3) return token
    V2
    Dialogflowの使い方

    View Slide

  52. Android
    自社サーバー
    (1) detect intent
    (2) authentication
    (3) return token
    (4) detect intent
    V2
    Dialogflowの使い方

    View Slide

  53. Android
    自社サーバー
    (1) detect intent
    (2) authentication
    (3) return token
    (4) detect intent
    (5) return result
    V2
    Dialogflowの使い方

    View Slide

  54. Android
    自社サーバー
    (1) detect intent
    (2) authentication
    (3) return token
    (4) detect intent
    (5) return result
    (6) return result
    V2
    Dialogflowの使い方

    View Slide

  55. Intent
    Entity
    Agent
    Dialogflowの使い方

    View Slide

  56. Entity
    Intentで検出するパラメータのうち、決まった候補(Entity)の中
    から検出するために用いる
    Spotifyでマイケル・ジャクソンを再生
    PlayerName MusicArtistName
    Dialogflowの使い方

    View Slide

  57. Spotifyでマイケル・ジャクソンを再生
    PlayerName MusicArtistName
    Spotify
    Amazon Music
    Google Play Music
    Apple Music
    Entity
    Dialogflowの使い方

    View Slide

  58. Entityの画面
    Dialogflowの使い方

    View Slide

  59. Dialogflowの使い方
    Intentの画面に戻る

    View Slide

  60. Dialogflowの使い方
    Intentの画面に戻る

    View Slide

  61. Dialogflowの使い方
    Intentの画面に戻る
    特定のMusicAppNameのみパラメータとして検出

    View Slide

  62. System Entity
    デフォルトで様々なEntityが定義されている。
    Dialogflowの使い方

    View Slide

  63. DestinationEntityを新規作成
    住所検出
    city name検出
    観光スポット検出
    Dialogflowの使い方

    View Slide

  64. Intentの設定画面にもどる
    Dialogflowの使い方

    View Slide

  65. System Entity
    Dialogflowの使い方

    View Slide

  66. System Entityにより住所を検出
    Dialogflowの使い方

    View Slide

  67. System Entityによって検出されず
    Dialogflowの使い方

    View Slide

  68. Entityに追加してやる
    Dialogflowの使い方

    View Slide

  69. DestinationEntityによって検出
    Dialogflowの使い方

    View Slide

  70. Entityから消して、Training phrasesに追加すると?
    Dialogflowの使い方

    View Slide

  71. Entityから消して、Training phrasesに追加すると?
    Dialogflowの使い方

    View Slide

  72. Entityから消して、Training
    phrasesに追加すると?
    検出されない!
    という仕様らしい
    Dialogflowの使い方

    View Slide

  73. Entityに固有名詞をすべて定義する
    のは難しい
    Dialogflowの使い方

    View Slide

  74. 「スターバックス」のような固有名詞を検出できるSystem Entity
    はあるのか?
    Dialogflowの使い方
    ない!

    View Slide

  75. System Entity: @sys.any
    なんでも検出できるEntity
    Dialogflowの使い方

    View Slide

  76. System Entity: @sys.any
    Dialogflowの使い方

    View Slide

  77. Dialogflowの使い方

    View Slide

  78. System Entity: @sys.any

    なんでも検出できるように
    Dialogflowの使い方

    View Slide

  79. ボイスコマンド音声認識率の改善

    View Slide

  80. 音声認識率の改善
    →音声認識部分はAndroidのSpeechReocgnizerに頼る
    →正しいintent検出の精度を上げる
    音声認識率の改善

    View Slide

  81. いろいろできるマンは何ができる?
    私はいろいろでき
    ます。
    いろいろできるヤツ

    View Slide

  82. ユーザーはなんでも聞いてしまう
    いや、
    無理っす。
    いろいろできるヤツ
    日本の将来は?
    あの娘の好きな人は?
    俺、実は既婚者なんだ
    トリプルアクセルして
    100mを10秒台で走って
    コード書いて

    View Slide

  83. 自信を持ってできることを明確に
    私はいろいろでき
    ます。
    いろいろできるヤツ
    ナビゲーションと
    音楽再生と
    電話発信と
    メール送信

    View Slide

  84. 私はいろいろでき
    ます。
    いろいろできるマン
    ナビゲーションと
    音楽再生と
    電話発信と
    メール送信
    得意なことをユーザーに伝える
    自信を持ってできることを明確に

    View Slide

  85. まずは学習データ集め
    最初はユーザーがなんと命令するかというデータがないの
    で、自分で頑張ってTraining phrasesに定義する。

    View Slide

  86. アノテーション作業

    View Slide

  87. アノテーション作業
    DialogflowのTrainingページだとやりづらい
    自分で解析ツール作るのがいいかも

    View Slide

  88. 音声認識の揺れを吸収
    音楽を再生
    “雲鶴を再製” “雲鶴を再製”
    を学習
    アノテーション作業においてユーザーの意図を読み取ることが
    重要

    View Slide

  89. App Launch
    音声認識率の改善結果
    Navigation
    Play Music
    Send Message
    Place a Call
    キーワード辞書マッチングしてた頃
    VS
    Dialogflowで学習させたあと

    View Slide

  90. No match率の変化
    音声認識率の改善結果
    32.6% 17.3%

    View Slide

  91. まとめ(1/2)
    ● ボイスコマンドの要件がシンプルな場合はDialogflowを使う
    までもない
    ● ボイスコマンドの要件が複雑な場合、自然言語処理が必要。
    Dialogflowを使うと便利
    ● Dialogflowの基本はIntentとEntity
    ○ Intentは要件を判別、パラメータ検出
    ○ Entityはパラメータの種類定義

    View Slide

  92. まとめ(2/2)
    ● ボイスコマンド音声認識率改善のためにDialogflowが活用で
    きる
    ○ 予めユーザーにできることを伝える
    ○ データ集めからスタート
    ○ アノテーション作業は地道にがんばる
    ○ 音声認識の揺れを考慮し、本当にユーザーがやりたいこ
    とを考えてアノテーション作業を行う

    View Slide

  93. 宣伝: Androidエンジニア 1人募集中
    ● Drivemode, Inc.
    ○ 車運転者向けのスマホアプリ提供
    ○ 世界中にユーザーがいるが、アメリカ・ファースト
    ○ アーリーステージ(シリーズA)のスタートアップ
    ○ シリコンバレーの会社だけど、東京支社もあり
    ○ 公用語は英語、英語必須だけどやる気あればOK
    ○ 多国籍企業で英語力上がります
    ○ サーバーエンジニアも募集中
    応募方法
    →LinkedInかIndeedから応募か、私に連絡!(Twitterでも何でも)

    View Slide