機械学習はとても興味深い:音声認識にディープラーニングを使用する方法

機械学習はとても興味深い:音声認識にディープラーニングを使用する方法

[[203766]]

音声認識は私たちの生活に「侵入」しています。携帯電話、ゲーム機、スマートウォッチにはすべて音声認識機能が組み込まれています。彼は私たちの家も自動化しています。たった 50 ドルで、Amazon Echo Dot を購入できます。これは、次のように言うだけでテイクアウトを注文したり、天気予報を確認したり、ゴミ袋を購入したりできる魔法の箱です。

アレックス、ピザを注文して!

Echo Dot は、2015 年のクリスマス休暇中に発売され、Amazon ですぐに売り切れるなど大ヒットとなりました。

しかし、音声認識は実は何年も前から存在していたのに、なぜ今になって主流になりつつあるのでしょうか。それは、ディープラーニングによって、制御されていない環境での音声認識の精度が、ようやく実用に耐えるレベルまで向上したからです。

アンドリュー・ン教授はかつて、音声認識の精度が 95% から 99% に向上すると、それがコンピューターと対話する主な方法になると予測しました。

それでは、音声認識にディープラーニングを使用する方法を学びましょう。

機械学習は必ずしもブラックボックスではない

ニューラル機械翻訳がどのように機能するのか疑問に思っているなら、単に音声をニューラル ネットワークに入力して、テキストを生成するようにトレーニングすればよいと推測できるでしょう。

これはディープラーニングを使用した音声認識の最高峰ですが、残念ながらまだそこまでには至っていません(少なくともこの記事を書いている時点では。数年後には到達するでしょう)

大きな問題の一つは、話す速度が異なることです。ある人は「こんにちは!」と非常に速く言うかもしれませんが、別の人は「こんにちは!」と非常にゆっくり言うかもしれません。その結果、より多くのデータを含む長いサウンド ファイルが生成されます。両方のファイルは、「こんにちは!」という同じテキストとして認識される必要があります。さまざまな長さのオーディオ ファイルを固定長のテキストに自動的に揃えることは難しいことが判明しました。

この問題を解決するには、特別なトリックを使用し、ディープニューラルネットワークの外部で特別な処理を実行する必要があります。どのように動作するか見てみましょう!

音をビットに変換する

音声認識への最初のステップは、言うまでもなく、音波をコンピューターに入力することです。

音波を数値に変換するにはどうすればよいでしょうか。私が「こんにちは」と言っているサウンド クリップを例に挙げてみましょう。

音波は 1 次元であり、その高さに基づいて各瞬間に値を持ちます。音波の一部を拡大してみましょう。

この音波を数値に変換するには、等間隔のポイントで音波の高さを記録するだけです。

これをサンプリングといいます。毎秒数千回読み取り、その時点での音波の高さを数値として記録します。これは基本的に非圧縮の .wav オーディオ ファイルです。

「CD 品質」のオーディオは 44.1khz (1 秒あたり 44100 回の読み取り) でサンプリングされます。しかし、音声認識の場合、人間の音声の周波数範囲をカバーするには、16kHz (1秒あたり16,000サンプル) のサンプリング レートで十分です。

「Hello」の音波を1秒間に16,000回サンプリングしてみましょう。最初の 100 個のサンプルは次のとおりです。

各数字は、16,000 分の 1 秒あたりの音波の振幅を表します。

デジタルサンプリングアシスタント

音波サンプルは断続的にしか読み取られないため、元の音波の大まかな近似値にすぎないと思われるかもしれません。読み取り値の間にギャップがあるため、データが失われるのは必然ですよね?

しかし、ナイキスト定理のおかげで、サンプリング レートが予想される最高周波数より少なくとも 2 倍速ければ、数学を使用して間隔を置いたサンプルから元の音波を完全に再構築できることがわかっています。

私がこれについて言及する理由は、ほとんどの人がこの間違いを犯し、サンプル レートを高くすると必ずオーディオ品質が向上すると誤解しているからです。実はそうではありません。

サンプリングした音声データの前処理

これで、各数字が 1/16000 秒における音波の振幅を表す一連の数字が得られました。

これらの数値をニューラル ネットワークに入力することはできますが、音声認識のためにこれらのサンプルを直接分析するのは依然として困難です。代わりに、オーディオ データに対して前処理を実行することで、問題を簡単にすることができます。

まず、サンプリングしたオーディオを 20 ミリ秒の長さのチャンクに分割することから始めましょう。以下は最初の 20 ミリ秒のオーディオ (つまり最初の 320 サンプル) です。

これらの数値を単純な折れ線グラフとしてプロットすると、20 ミリ秒間の元の音波のおおよその形状が得られます。

この録音はわずか 1/50 秒の長さですが、このような短い録音でも、さまざまな周波数の音が複雑に組み合わされています。低音、中音、高音も少しあります。しかし、一般的には、人間の話し声はこれらの異なる周波数の音が混ざり合って構成されています。

このデータをニューラル ネットワークが処理しやすくするために、この複雑な音波を構成要素に分解します。まずベース部分を分離し、次にその次に低い部分を分離します。次に、各周波数帯域(低周波数から高周波数まで)のエネルギーを合計して、オーディオ クリップの各クラスのフィンガープリントを作成します。

誰かがピアノで C メジャーコードを演奏している録音があると想像してください。この音は C、E、G の 3 つの音符で構成されています。それらが混ざり合って複雑な音を形成します。この複雑な音を個々の音に分解して、C、E、G を区別できるようにします。これは音声認識と同じ原理です。

これを行うにはフーリエ変換が必要です。複雑な音波をより単純な音波に分解します。個々の音波が得られたら、各周波数帯域に含まれるエネルギーを合計します。

最終結果は、ベース(低音)から高音までの各周波数範囲の重要性の尺度となります。 50Hz それぞれが周波数帯域である場合、低周波から高周波までの 20 ミリ秒のオーディオに含まれるエネルギーは、次のリストのように表すことができます。

しかし、図で描くと理解しやすくなります。

20 ミリ秒のサウンド クリップには低周波エネルギーが多く含まれていますが、高周波エネルギーはあまり含まれていないことがわかります。これは典型的な「男性」の声です。

このプロセスを 20 ミリ秒のオーディオ チャンクごとに繰り返すと、スペクトログラムが作成されます (左から右への各列は 29 ミリ秒のオーディオ チャンクです)。

スペクトログラムは、オーディオ データ内の音符やその他のピッチ パターンを実際に確認できるので便利です。ニューラル ネットワークにとって、生の音波よりもこの種のデータでパターンを見つける方がはるかに簡単です。これが、ニューラル ネットワークに入力するデータを実際に表現する方法です。

短い音声から文字を認識する

処理しやすい形式のオーディオができたので、これをディープ ニューラル ネットワークに入力します。ニューラル ネットワークへの入力は、20 ミリ秒のオーディオ チャンクになります。ニューラル ネットワークは、それぞれの小さなオーディオ スライスごとに、現在話されている音に対応する文字を判別しようとします。

ここでは、リカレント ニューラル ネットワーク、つまり将来の予測に影響を与えるメモリを持つニューラル ネットワークを使用します。これは、予測される各文字が次の文字の予測に影響を与える可能性があるためです。たとえば、これまで「HEL」と言っていた場合、次に「LO」と言って「Hello」を完成させる可能性が高くなります。 「XYZ」のように発音できないものを言うことはまずありません。したがって、以前の予測を記憶しておくと、ニューラル ネットワークは将来についてより正確な予測を行うことができます。

オーディオ クリップ全体をニューラル ネットワークに通すと (一度に 1 ブロックずつ)、オーディオの各ブロックとそれに最もよく対応する文字を識別するマッピングが作成されます。これは私が「こんにちは」と言ったときに得られるマッピングの大まかな概要です。

私たちのニューラル ネットワークは、私が言った単語はおそらく「HHHEE_LL_LLLOOO」であると予測しています。しかし、私が「HHHUU_LL_LLLOOO」、あるいは「AAAUU_LL_LLLOOO」と言った可能性もあると考えています。

この出力を整理するには、いくつかの手順に従うことができます。まず、重複する文字を 1 つの文字に置き換えます。

  • HHHEE_LL_LLLOOO は HE_L_LO になります
  • HHHUU_LL_LLLOOO は HU_L_LO になります
  • AAAUU_LL_LLLOOO は AU_L_LO になります

次に、すべての空白を削除します。

  • HE_L_LOはHELLOになる
  • HU_L_LOはHULLOになる
  • AU_L_LO は AULLO になります

これにより、「Hello」、「Hullo」、「Aullo」という 3 つの転写が可能になります。これらの単語を声に出して言うと、すべて「Hello」に似た音になります。ニューラル ネットワークは一度に 1 文字ずつ予測するため、純粋に音声的な書き起こしが生成されます。たとえば、「彼は行かないだろう」と言うと、「彼は行かないだろう」と書き起こされるかもしれません。

秘訣は、これらの発音ベースの予測を、書かれたテキスト(書籍、ニュース記事など)の大規模なデータベースに基づく尤度スコアと組み合わせることです。最も可能性が低い結果を捨て、最も実用的な結果を残します。

「Hello」、「Hullo」、「Aullo」という可能性のある書き起こしのうち、「Hello」の方がテキスト データベースでより頻繁に出現することは明らかです (元の音声ベースのトレーニング データでは言うまでもありません)。そのため、これが正解である可能性が高いです。したがって、他の文字起こしの代わりに「Hello」を最終結果として選択します。終わり!

ちょっと待ってください!

「でも、もし誰かがHulloと言ったらどうなるでしょうか?」と思うかもしれません。その言葉は実際に存在します。おそらく「Hello」は誤記です!

[[203775]]

もちろん、実際に「Hello」ではなく「Hullo」と言う人もいるかもしれません。しかし、そのような音声認識システム(アメリカ英語でトレーニングされたもの)は、基本的に「Hullo」のような転写結果を生成しません。ユーザーが「Hullo」と言うと、「U」をどれだけ強く発音しても、常に「Hello」と言っていると認識されます。

ぜひお試しください。携帯電話がアメリカ英語に設定されている場合、携帯電話のアシスタントに「Hullo」という単語を認識させてみましょう。これはうまくいきません! テーブルをひっくり返してこれを拒否します。常に「こんにちは」と理解します。

「Hullo」を認識しないのは合理的な動作ですが、携帯電話があなたが言った有効な文章を理解できないという厄介な状況に遭遇することがあります。このため、これらの音声認識モデルは常に再トレーニング状態にあり、少数のケースを修正するにはさらに多くのデータが必要になります。

独自の音声認識システムを構築できますか?

機械学習の最も素晴らしい点の 1 つは、それが時々非常にシンプルに見えることです。大量のデータを取得して機械学習アルゴリズムに入力すると、魔法のように、ゲーミング ノート PC のグラフィック カード上で実行される世界クラスの AI システムが作成されます...そうですよね?

これは場合によっては当てはまりますが、音声認識の場合は当てはまりません。音声認識は難しい問題です。低品質のマイク、バックグラウンドノイズ、リバーブやエコー、アクセントの違いなど、ほぼ無限の数の課題を克服する必要があります。ニューラル ネットワークがこれらを処理できるようにするには、トレーニング データにこれらすべてを含める必要があります。

もう一つの例を挙げましょう。騒がしい部屋で話すとき、騒音に負けないように自動的に声のピッチを上げることをご存知ですか?人間はどんな状況でも理解できますが、ニューラル ネットワークはこの特殊なケースを処理するようにトレーニングする必要があります。つまり、騒音の中で大声で話している人のトレーニング データが必要なのです。

Siri、Google Now!、Alexa などのプラットフォームで実行される音声認識システムを構築するには、大量のトレーニング データが必要になります。何百人もの人を雇って記録してもらわなければ、自分では得られないほど多くのトレーニング データが必要になります。ユーザーは低品質の音声認識システムに対して許容度が低いため、ケチることはできません。 80% しか機能しない音声認識システムを望む人はいません。

Google や Amazon のような企業にとって、実際の生活状況で録音された何万時間もの人間の音声は貴重なものです。これが、彼らの世界クラスの音声認識システムとあなたのシステムとを区別するものです。 Google Now! や Siri を無料で使用したり、Alexa を 50 ドルでサブスクリプション料金なしで使用できるようにする目的は、できるだけ多く使用してもらうことです。これらのシステムに対して話した内容はすべて永久に記録され、音声認識アルゴリズムの将来のバージョンのトレーニング データとして使用されます。これが彼らの本当の目的です!

信じられないですか? Google Now! がインストールされた Android スマートフォンをお持ちの場合は、ここをクリックして、これまでに話したすべての単語を聞いてください。

Alexa を通じて Amazon でも同じものを見つけることができます。しかし残念ながら、Apple は Siri の音声データへのアクセスを許可していません。

したがって、スタートアップのアイデアを探している場合、Google と競合する独自の音声認識システムを構築しようとすることはお勧めしません。代わりに、何時間も話している自分の録音を人々に提供してもらう方法を見つける必要があります。このデータはあなたの製品になることができます。

<<:  イノベーションに関する対話 - 51CTO 初の開発者コンテストが始まりました!

>>:  軍事分野における人工知能の浸透と応用に関する考察

ブログ    
ブログ    
ブログ    

推薦する

顔認識を禁止した後、サンフランシスコは検察官の事件処理を支援するためにAIを活用

最近、海外メディアの報道によると、サンフランシスコ市は7月1日に導入予定の「偏見削減ツール」を発表し...

掃除機はいくらかかりますか?掃除ロボットの原理とハードウェア構成の詳細な説明

時代の発展とともに、掃除ロボットは多くの家庭にとって必需品となりました。掃除ロボットは、ベッドの下を...

...

シンプルなデータ暗号化と復号化アルゴリズムの実装方法を教えます

この記事では、シンプルだが実用的な暗号化方式を実装する方法を紹介します。実際のプロジェクト開発におけ...

...

景勝地ロープウェイのスペアパーツに基づくドローン検査市場の簡単な分析

最近、中秋節と国慶節の連休が近づき、わが国の多くの観光地では、今年、省をまたぐ団体旅行が再開され、観...

...

分析技術は、2019-nCoVの潜在的な感染を追跡し予測するのに役立っています。

[[314175]] 2019-nCoVの最も危険な特徴は人から人へと感染する能力であり、中国では...

ChatGPT を使ってデータを分析する 6 つの方法

翻訳者 |ブガッティレビュー | Chonglouここ数か月で、リリースされる AI ツールの数は増...

GitHub が機械学習コードの脆弱性スキャンを無料で提供、JavaScript / TypeScript もサポート

現在、JavaScript および TypeScript リポジトリで開発およびテストが行​​われて...

...

レビュー: 8 月に Github で注目すべき 7 つのデータ サイエンス プロジェクト

[[279134]]機械学習の旅で次の大きな一歩を踏み出す準備はできていますか? 実験的なデータセッ...

地下鉄乗車時の「顔認識」:AI専門家にとって新たな金鉱

[[276754]]業界のすべての実務者が合意に達することはまれですが、AI業界は例外です。ほぼすべ...