こんにちは。きんくまです。
前に書いたエントリの音声認識についてです。
今回読んだ本
この本をざっくりと読んでみました。
内容は、どうやって音声データを解析してそれを認識するかという原理についてです。
結論を最初に正直に書いてしまいますと、「難しくてさっぱりわかりませんでした!」
ただ、わからないながらもわかった部分は少しはあります。
音声認識(書き取り)と音声合成(発話)は違う
大前提としてわかってなかったのがこれです。
音声 → 文字
文字 → 音声
というのは、システム的にかぶるところはあるのですが別物です。
それぞれのライブラリや、有償のサービスも存在するのですが、どっちに変換するかによって使うものが違ってきます。
音声認識について
本の中に戻ります。
いろいろと難しい数式やら理論が載っていたのですが、「いかに認識の確率の精度をあげていくか」がメインの目的だと思いました。
音声データのある点の波形を周波数ごとに分解します。
そこから話されている文字が何かを当てることを考えるとします。
するとそこには考慮しないといけないことがすごくたくさんあるんです。
発話者がそもそも持つ音の特徴や前後の文脈による発音の変化、または外部の環境のノイズなど。
それらを考慮するために、確率論や統計論を駆使しているみたいです。
あと音声認識は一定の状況で最も判定が良くなるようです。
現状では様々なシチュエーションに対応できるわけではないです。
だから例えばSiriで普段よりも非常に早口になったり、逆に非常に遅く話したりしたときはうまく認識してくれません。
これはSiriで最も最適化された話し方というものがあり、そのゆらぎの範囲の中でならきちんと認識してくれるのですが、そこからはずれてしまうと上手く理解できないということです。
ゆっくりだろうと早口だろうと、それを普通のスピードで解析するためにエラーが起きてしまいます。
逆に言えば、話すスピードや話される語意なんかを一定の枠にしぼってしまえば、認識させやすくなるとも言えます。
(確率の分母が小さくなるから)
まとめ
わかってないのにまとめるのも何ですがw まとめると、
・音声認識は確率論
・確率を上げるために、似たモデル(音響モデルや言語モデル)を作る
・条件を限定した方が当てやすい
という感じですかね。
それで、実際のアプリにもし組み込むのであれば、種々ライブラリを利用することになります。
ざっと調べると
>> 大語彙連続音声認識エンジンJulius
>> 音声認識(RecognizerIntent)を使用するには Android
>> iOS SDK用音声認識ライブラリ VocalKit の使い方
>> Nuance – Nuance Mobile Developer Program – DragonモバイルSDK
>> Inspirium 汎用組込みソフトウェア : 富士通
>> 擬人化エージェントツールキット Galatea Toolkit
>> AquesTalk – テキスト音声合成ミドルウェア
有料、無料もろもろあります。あとはSiriのAPIが解放されたらいいなって
>> iOS 5.1 の音声入力を使ってアプリケーションを操作してみる
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ