Google CLOUD SPEECH APIにヒント(単語)を与えてどこまで精度向上できるか試してみた


こんにちは、エイチーム引越し侍の中川です。
Google CLOUD SPEECH APIには単語でヒントを与えて
精度向上できる仕組みがあるので、表題の通り、
どこまでいけるか試してみます。
本当は、テストデータに一生懸命チューニングしてもしょうがない気もしますが、
今回は割り切ってやってみましょう!

テスト音声

https://youtu.be/QnRd-VjPeC0
こちらの動画を、wav変換したものを使用

結果

{
  "name": "*****************(APIの返り値nameが表示されています)",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeMetadata",
    "progressPercent": 100,
    "startTime": "2017-06-19T13:50:42.036788Z",
    "lastUpdateTime": "2017-06-19T13:50:58.537973Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeResponse",
    "results": [
      {
        "alternatives": [
          {
            "transcript": "こま",
            "confidence": 1
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "テニスキャスターの待ち受けあやかです明日の全国の天気今日は晴れたところが多くなりました明日になると西日本を中心に傘の出番がありそうですでは全国の天気アイコン見ていきましょう全国の明日の天気で沖縄では引き続き雨の降りやすい空明日も傘を持ってお出かけください西日本では東の届くところもありますがだんだんと雲が増えていきます特に九州南部では午前から本降りの雨九州北部は四国では午後から中国エリア夜勤切れは夕方以降にわか雨がありそうですから北海道にかけては広く日差しが優勢です明日も夏の暑異なる試しかっさ対策熱中症対策を行って下さい以上明日の全国の天気をお伝えしました今日も一日お疲れ様でした",
            "confidence": 0.8548987
          }
        ]
      }
    ]
  }
}

うーん、すでに予定より精度がめちゃくちゃいい(笑)
「天気アイコン」とか、よく聞き取れたなと。

ほぼ正解ですが、間違えたところをピックアップしてみました

  • こんにちは → こま
  • ウェザーニュース → テニス
  • 松雪彩花 → 待ち受けあやか
  • お伝えいたします → です
  • 日差し → 東
  • 中国エリアや近畿では → 中国エリア夜勤切れは
  • 山陽 → (聞き取れず)
  • 夏の暑さとなるためしっかりと → 暑異なる試しかっさ

ヒントを与える

{
  "config": {
      "encoding":"LINEAR16",
      "sample_rate": 44100,
      "language_code":"ja-JP",
      "speech_context": {
        "phrases":["こんにちは","ウェザーニュース","松雪彩花","お伝えいたします","日差し","近畿","山陽","しっかりと"]
      }
  },
  "audio": {
      "uri":"gs://*****************.wav",
  }
}

まあ、キャスターの名前は難しいだろうけど・・・

結果

ヘッダー部分は同じなので省略します。

        "alternatives": [
          {
            "transcript": "こま",
            "confidence": 1
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "ウェザーニュースキャスターの待ち受けあやかです明日の全国の天気今日は晴れたところが多くなりました明日になると西日本を中心に傘の出番がありそうですでは全国の天気アイコン見ていきましょう全国の明日の天気で沖縄では引き続き雨の降りやすい空明日も傘を持ってお出かけください西日本では東の届くところもありますがだんだんと雲が増えていきます特に九州南部では午前から本降りの雨九州北部は四国では午後から中国エリア夜勤切れは夕方以降にわか雨がありそうですから北海道にかけては広く日差しが優勢です明日も夏の暑異なる試しかっさ対策熱中症対策を行って下さい以上明日の全国の天気をお伝えしました今日も一日お疲れ様でした",
            "confidence": 0.8576704
          }
        ]

・・・。全然変わらんやないかーい!

  • こんにちは → こま(変わらず)
  • ウェザーニュース → ウェザーニュース(改善!!)
  • 松雪彩花 → 待ち受けあやか(変わらず)
  • お伝えいたします → です(変わらず)
  • 日差し → 東(変わらず)
  • 中国エリアや近畿では → 中国エリア夜勤切れは(変わらず)
  • 山陽 → (聞き取れず)(変わらず)
  • 夏の暑さとなるためしっかりと → 暑異なる試しかっさ(変わらず)

ほぼ同じという残念な結果に・・・

さらにヒントを...

{
  "config": {
      "encoding":"LINEAR16",
      "sample_rate": 44100,
      "language_code":"ja-JP",
      "speech_context": {
        "phrases":["こんにちは","ウェザーニュース","松雪彩花","お伝えいたします","西日本では日差しの届くところもありますが","中国エリアや近畿では","山陽から北海道にか>けて","明日も夏の暑さとなるため", "しっかりと暑さ対策"]
      }
  },
  "audio": {
      "uri":"gs://***********************.wav",
  }
}

もう、音声認識ってなんだっけ、ってレベルで、ほぼ正解の文章をヒントとして与えてみます(笑)
キャスター名はもう諦めます。ノーヒントできいたら確かに「待ち受けあやか」に聞こえなくもない・・・

結果

    "results": [
      {
        "alternatives": [
          {
            "transcript": "こま",
            "confidence": 1
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "ウェザーニュースキャスターの待ち受けあやかです明日の全国の天気今日は晴れたところが多くなりました明日になると西日本を中心に傘の出番がありそうですでは全国の天気アイコン見ていきましょう全国の明日の天気で沖縄では引き続き雨の降りやすい空明日も傘を持ってお出かけください西日本では日差しの届くところもありますがだんだんと雲が増えていきます特に九州南部では午前から本降りの雨九州北部は四国では午後から中国エリアや近畿では夕方以降にわか雨がありそうです山陽から北海道にかけては広く日差しが優勢です明日も夏の暑さとなるためしっかりと暑さ対策熱中症対策を行って下さい以上明日の全国の天気をお伝えしました今日も一日お疲れ様でした",
            "confidence": 0.8895709
          }
        ]

おおー。
一応、ほぼ完ぺきに。

  • こんにちは → こま(変わらず)
  • ウェザーニュース → (改善!!)
  • 松雪彩花 → 待ち受けあやか(変わらず)
  • お伝えいたします → です(変わらず...というか対策してない)
  • 日差し → (改善!!)
  • 中国エリアや近畿では → (改善!!)
  • 山陽 → (改善!!)
  • 夏の暑さとなるためしっかりと → (改善!!)

やってみて

はじめからかなりの精度でしたが、それ以上あげることはあまりできないのですかね。
ヒントというよりほぼ正解、くらいのヒントを与えると一応ちゃんと正すことはできました。

次回はノイズが多かったり滑舌が悪かったりする音声データでも試してみます、お楽しみに!