窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

話し言葉の書き起こしをCognitive Services の Text Analyticsで分析しようと思ったけど失敗した話

3行まとめ

  • Text Analytics簡単に試せた
  • 日本語も対応してた
  • 話し言葉の分析はちょっと苦手かも?

モチベーション

私は長い文章を読むことが非常に苦手です(書くのも然り)。 3行とは言わないけれども、ある程度要点がまとまっている文章やキーワード集があればそこを読んでから本文を読む、みたいな流れで文章を読んでいます。 何度も見返すことの出来る文章ですらそういう状態なのに、流れ去ってしまう音声を内容理解して聞くことが出来るでしょうか…私は出来ません。

ということで、音声を文字に一回起こしたら、内容入ってくるのでは?と思い、書き起こしを年末にチャレンジしていました。 やってみた結果がこちらです。

qiita.com

上記の記事にあるように、日本語の話し言葉をCognitive Services Speech To Textで実現できました。

一文一文の書き起こしは出来たのだから、では次に全体通してのキーワードだったり要点をなんとかしてまとめたいな…と思い今回はCognitive Services Text Analyticsを試してみたいと思います。

Cognitive Services Speech To Textとは

Microsoftの提供しているTextを対象とした分析サービスです。

azure.microsoft.com

リンク先のページを見るとわかるように、文章を通してこの内容はポジティブかネガティブか、といったポジネガ判定だったり、キーワード抽出のような機能を備えています。

話し言葉を対象にキーフレーズ抽出を行なってみる

プロジェクトの作成

Azure Cognitive ServicesのSpeech to Textで書き起こしをしてみよう - Qiita

Cognitive Servicesのプロジェクトを作る

の箇所を参考に作っていきます。 前回は音声でしたが、今回は「テキスト分析」を検索しリソースを作成します。

f:id:yamachu_co:20200323212109p:plain

これで準備完了です。

実際に使ってみる

それではコードを書いていきましょう………と言いたいところですが、予めどんな程度の性能が出るのか気になりますよね? そんな時は

f:id:yamachu_co:20200323212448p:plain

リソース管理のリストにあるクイックスタートをクリックします。 ここにはAPIキーやエンドポイントの値の他、APIコンソールへのリンクや様々なプログラミング言語のサンプルコードへアクセスするためのリンクが配置されています。

今回はAPIコンソールを使ってText Analyticsを試してみましょう。 Preview版のリンクもありますが、今回はStableの方を試してみます。

リンクを飛んだ先でKey Phraseのリンクを押して、Ocp-Apim-Subscription-Keyの欄にクイックスタートのページに記載されていたAPIキーを入力します。

Request bodyの欄は最初

  "documents": [
    {
      "language": "en",
      "id": "1",
      "text": "Hello world. This is some input text that I love."
    },
    {
      "language": "fr",
      "id": "2",
      "text": "Bonjour tout le monde"
    },
    {
      "language": "es",
      "id": "3",
      "text": "La carretera estaba atascada. Había mucho tráfico el día de ayer."
    }
  ]

こんな感じのJSONが入力されていると思います。 このdocumentsの欄を自分で書き換えて使ってみます。

例えば

{
  "documents": [
    {
      "language": "ja",
      "id": "1",
      "text": "風邪予防には、しっかりとした手洗いとうがいの他、十分な睡眠をとることも重要である。"
    }
  ]
}

といった文章を入力すると

{
  "documents": [{
    "id": "1",
    "keyPhrases": ["睡眠", "手洗いとうがい", "風邪予防", "こと"]
  }],
  "errors": []
}

こんな感じの結果が返ってきます。 文章の重要単語を抽出してくれているように見えますね。

これなら安心してキーフレーズ抽出できるなと思い、音声の書き起こし結果文章を複数まとめて1入力として食わせてみたのですが。結果としては想像したような結果にはなりませんでした。

一部結果を抜粋すると

セールスアクティビティ", "シンセティック", "ツール先", "データベース", "ビジネス", "ようぜ", "パフォーマンスモニタリングATM", "ブラウザモニタリング", "customersuccessthe customersuccess", "以内交渉", "るぐらい", "dv", "光景", "インフラストラクチャ", "slowquerylog"

といったある程度その文章だったり、話している内容を表しているものもあるのですが、

"成功", "ようん", "メンバー内", "プロダクトアクティベート", "入力", "おじさん", "apm", "習慣", "多く", "なれば", "フラストラクチャー", "中身", "くらい", "レス", "やつ", 

みたいなかすっているけれども……重要単語ではなさそうな単語も複数含まれていました。 原因としては、話し言葉の書き起こしであるため、だいぶくだけた感じの文章であったり、フィラー感動詞などに影響を受けた文末表現など、日本語を使ってはいるが表現が一般的ではない、みたいな文章であるためかなと思っています。 上記の文章はあらかじめフィラーを取り除いたものなのですが、除いたら除いたで文末が壊れてしまっているものもあります。

これに関してはAPIに食わせる前処理をもう少し頑張ればうまくいくのかも知れないと思うので、再度チャレンジしてみたいです。

書き言葉を試してみる

じゃあText Analyticsダメダメなの?と思った方、別にそうではありません。 書き言葉であればそこそこキーフレーズを取ってくれます。

先程のQiitaの記事の「終わりに」の文章をAPIにかけてみます。

Speech to Text APIを使うためにプログラムを書いて、実際に認識するための一連の流れを紹介しました。

一回認識するためのプログラムを用意してしまえば、あとは音声を用意するだけで簡単に書き起こしが出来ちゃいます。

今回紹介できませんでしたが(日本語対応とかしていないというのもあるけど)、認識精度を上げるために話者モデルを作ったり、前述したSpeaker Recognition APIを使用することにより、更に書き起こし業務が簡単になりそうです。

これらをするにはある程度ファイルを分割しておいたほうが楽なので、音声準備の段階で無音区間でファイルを分割みたいなことを推奨していました。

またSpeech to Textサービスはリアルタイムのマイク入力も対応しているので、後々書き起こしがしたい音声の録音時にそのまま書き起こしさせたりすることが出来ます。
また話者毎の認識精度を上げるためにマイクを別々に用意して、各話者毎に録音するなどの工夫次第でどんどん使いやすくなるのでぜひチャレンジしてみて下さい。

これが

["ため", "認識精度", "用意", "こと", "話者毎", "Speech to Text API", "分割", "プログラム", "話者モデル", "音声準備", "まし", "紹介", "出来", "Speech to Textサービス", "マイク入力", "程度ファイル", "録音時", "Speaker Recognition API", "リアルタイム", "無音区間", "段階", "前述", "対応", "おい", "使用", "流れ", "推奨", "だけ", "実際", "工夫次第", "ほう", "業務", "チャレンジ"]

…………やはり日本語は難しいですね!

おわりに

今回は書き起こしの文章をText AnalyticsでKey Phrase抽出してみようと頑張ってみました。 抽出されたKey Phraseはたしかにキーフレーズっぽそうなものも含まれていますが、これはそもそも文末表現だろうというものも含まれていました。

入力の下処理と、結果から更に重要語を探す、といった処理を自分で書けば使えるようにはなりそうです。

今回のAPIはプロジェクトさえ作ってしまえば、コードを書かずにブラウザで簡単に試してみることが出来るので、ぜひ触って確かめてみてください。

日本語対応、こういう文章も解析できるようにしてくれーみたいな要望をあげていこう…