深ニューラルネットワーク - 中国の音声認識

1.背景

スピーチは、最も自然な人間の相互作用です。コンピュータの発明した後、機械は、人間の言語を「理解」言語の意味を理解し、正しい答えは一つの目標となっている作ることができるように。このプロセスは、以下の3つの主要な技術、すなわち、自動音声認識(自動音声認識、使用しています
ASR)、NLP(自然言語処理、
NLP)と音声合成(音声合成、SSを)。音声認識技術の目的は、機械が人間の言葉を理解できるようにすることです、代表的な学際的な作業です。

2.概要

モデル音声認識システムは、音響モデルと言語モデルとからなる2つの部分から構成され、音声-音素の確率計算に対応する音響モデルは、言語モデルは、文字の確率計算に音素に対応します。

特徴抽出、音響モデル、言語モデル及び復号部:連続音声認識システムは、実質的に4つの部分で構成されてもよいです。具体的な手順は、音声データから音響特徴、及びその後復号プロセスを介して認識結果を得られる統計的音響モデル、鋳型として同定し、合わせた言語モデルを得るために訓練されたモデルの後に得られた最初の抽出することです。

音響モデル音声認識システムの重要な部分であり、それについて説明する音響特徴列生成部の役割であり、音声信号が分類されます。我々は、各音響ユニットの観測確率と配列へガイドライン尤状態シーケンスに従って機能に属する音響特性ベクトルの期間を計算するためにモデルを使用することができます。
本論文でアドレスデータセット、清華大学THCHS30中国の音声データセット
詳細コードチュートリアルの中国の音声認識

2.1特徴抽出

最初のステップは、我々は、音声データ抽出の特性にしたいので、ニューラルネットワークは、オーディオ入力として訓練することができます。共通する特徴抽出は、人間の声のメカニズムや聴覚に基づいており、聴覚機構に音から音の性質を理解する感覚
:いくつかの共通音響特徴は次の通りである

(1)線形予測係数(LPC)、線形予測分析はチャネルモデル分析スタブカスケードによって得られた、人間の発話原理の類似体です。全極デジタルフィルタを有するシステムの伝達関数を仮定通常16極12が記載されている音声信号の特性とすることができ、類似しています。だから、時刻nにおける音声信号のために、
我々はアナログ近似の前に線形結合タイミング信号を使用することができます。次いで、サンプル値と予測線形音声信号のサンプル値を計算し、そのため平均二乗誤差(MSE)が最小二達する間、LPCを得ることができます。
(2)知覚線形予測(PLP)PLPは、聴覚モデルに基づく特性パラメータです。このパラメータは、多項式の全極モデルの予測係数のセットであり、LPCの特性と等価です。ことを除いて
計算によりPLPの基礎と耳新睡眠の代わりにLPCが使用される時間領域信号を、耳の聴覚モデルプロセスを介して入力音声信号のスペクトル分析に適用される、という利点が有益な抗雑音音声特徴抽出です。

(3)メル周波数ケプストラム係数(MFCC)、また、ベース別MFCCの耳の聴覚特性は、メル周波数
ケプストラム帯域分割のは、メルスケール等角対数メル周波数スケール値と実際の周波数分布に指定されていますより多くの人の耳に沿って、関係は、あなたは、音声信号がより良い表現を持つことができますので。

(5)機能FBANK(フィルタバンク)に基づいて、フィルタバンク、FBANK特徴抽出法はかなりある
MFCC特徴量と、変換MFCC離散コサイン変換の最後のステップを除去するために、FBANK特徴は、より多くの元の音声データを保持します。

(6)スペクトル(スペクトログラム)、音声スペクトログラムスペクトログラムは、一般にそれほど長い時間の十分な長さがあるので、時間領域の信号とすることができ、受信された時間領域信号を処理して得られたスペクトログラムです。スペクトログラムは、異なる周波数帯域の音声信号強度の特性が経時変化を見ることができる観察しました。
この記事では、CNNの画像処理訓練によって機能の入力としてスペクトログラムです。ウインドウ、フレーミング高速フーリエ変換(FFT)を、メイン抽出スペクトログラムは、に分割されるようスペクトログラムは、時間スペクトログラム重ね合わせの期間として理解することができます。

2.1.1オーディオ読み出し

最初のステップは、我々は、fsはサンプリング周波数、wavsignal音声データで、有用な情報へのオーディオモジュールscipyのダウンロードを悪用する方法を見つける必要があります。FS私たちのデータセットは、16kHzです。

import scipy.io.wavfile as wav
filepath = 'test.wav'

fs, wavsignal = wav.read(filepath)

2.1.2サブフレーム、ウィンドウ

音声信号は、一般に25msのを取り、顕微鏡短時間定常性は、(音声信号の音素の発音のためにほぼ一定とみなすことができる10-30ms)を有する、滑らかで、巨視的に安定ではありません。
音声信号を処理するために、我々は唯一のデータ処理ウィンドウ一度、あるウィンドウ音声信号、にしたいです。実際の音声信号が非常に長いので、私たちは、非常に長い時間のデータ処理を持っていないことができません。すべての賢明な解決策は、分析のためのデータの一部を取り、その後、分析される前に、データの一部を削除することです。私たちのウインドウ操作はハミング窓の動作原理を参照するデータのフレームに入れている関数を乗算され   、データの新しいフレームを取得します。式は以下の通りです。
データその一つだけを取る方法は?我々は、高速フーリエ変換(FFT)ハミングた後のデータウィンドウので、通常、ウィンドウ内の信号は、(ウィンドウが左右端部は、実質的に連続であることができる)で周期を表す信号であることを小さいものとします一緒にハミング窓を持つオーディオデータの有意な周期性は、データが近い周期関数にはありません。
重複がある場合、他のウィンドウを移動するように、プラスハミング窓、反射されたデータのみ半ば以降、データは、開口部が25msのをとる場合、10msでステップ(ここで、Aを取ることができ、両側に失われ一般値0.46)。
式は:
!。[](Https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlL19fbGF0ZXgvZDRjYmM0ZjEyY2JlZmM3YTU1MDY5ODM2NDJhYzVlZjAuc3Zn?x-oss-process=image/format,png#card=math&code=W(N、A)=(1-A)* -a COS [\ FRAC {2N \ PI } {N-1}]、0 \ GEQ N \当量のN-1&高さ= 34.59770114942529&幅= 332.2988505747127)

コード:

import numpy as np

x=np.linspace(0, 400 - 1, 400, dtype = np.int64)#返回区间内的均匀数字
w = 0.54 - 0.46 * np.cos(2 * np.pi * (x) / (400 - 1))

time_window = 25
window_length = fs // 1000 * time_window

# 分帧
p_begin = 0
p_end = p_begin + window_length
frame = wavsignal[p_begin:p_end]

plt.figure(figsize=(15, 5))
ax4 = plt.subplot(121)
ax4.set_title('the original picture of one frame')
ax4.plot(frame)

# 加窗

frame = frame * w
ax5 = plt.subplot(122)
ax5.set_title('after hanmming')
ax5.plot(frame)
plt.show()

フォトエフェクト:
image.png

2.1.3高速フーリエ変換(FFT)

音声信号は、通常、我々は、高速フーリエ変換は、図1の時間領域のフレーム毎に窓関数処理後の信号に対して変換を行うように、各フレームの周波数スペクトルに変換された後、周波数ドメイン分布においてエネルギーに変換され、その時間領域特性を参照することはより困難です私たちは、各ウィンドウのオーバーレイスペクトルのためのスペクトログラムを得ることができます。

コード:

from scipy.fftpack import fft

# 进行快速傅里叶变换
frame_fft = np.abs(fft(frame))[:200]
plt.plot(frame_fft)
plt.show()

# 取对数,求db
frame_log = np.log(frame_fft)
plt.plot(frame_log)
plt.show()

2.2  CTC(コネ時間的Classi Fiのカチオン)

オーディオデータセットと対応する転写のクリップがある場合は、音声認識に目を向けると、私たちはどのように転写文字と大幅に音声認識を訓練することの難しさを増加させるオーディオ音素アライメントを、知りません。データは、調整プロセスではない場合、それはあなたには、いくつかの簡単なトレーニング方法を使用することはできません。この点で、我々は第1の方法は、このような「入力音韻10に対応する文字」として、ルールを開発することである選択することができますが、人々は、発話速度を変化させる、このアプローチは、欠陥が発生しやすいです。我々は真の情報の各時間ステップ入力することを知っているので、モデルの信頼性、手動でオーディオの各文字の位置を合わせ、第二の方法は、より良いモデルのパフォーマンストレーニング効果を確認してください。しかし、その欠点は明白である-データセットのさえ右のサイズは、そのようなアプローチは、まだ非常に時間がかかります。実際には、貧しいレギュレーション精度の開発、マニュアルのデバッグも、これらの問題に直面するだろう、ビデオでアクションタグを追加することは、そのような手書き認識として、音声認識の分野では長すぎるだけでなく、他の作業を使用して。
このシナリオでは、それは無用CTCあります。CTCは、音声認識や手書き認識のために非常に適して自動的に学習するための良い方法を整列させるためのネットワークのための方法、です。複数の画像の一部を説明するために、我々は、入力シーケンス(オーディオ)にマッピングすることができるX = X1、X2、... 、XT、]、 対応する出力配列(転写)であり、Y = Y1、Y2、... 、YU] その後、音素アライメント動作との文字が正確マップを確立することと等価であり、詳細はXおよびY-間分かるCTC古典物品
コードの損失関数の一部:

def ctc_lambda(args):
    labels, y_pred, input_length, label_length = args
    y_pred = y_pred[:, :, :]
    return K.ctc_batch_cost(labels, y_pred, input_length, label_length)

コードの一部をデコード:

#num_result为模型预测结果,num2word 对应拼音列表。
def decode_ctc(num_result, num2word):
	result = num_result[:, :, :]
	in_len = np.zeros((1), dtype = np.int32)
	in_len[0] = result.shape[1];
	r = K.ctc_decode(result, in_len, greedy = True, beam_width=10, top_paths=1)
	r1 = K.get_value(r[0][0])
	r1 = r1[0]
	text = []
	for i in r1:
		text.append(num2word[i])
	return r1, text

3.音響モデル

CNNモデルの主な用途は、画像を処理し、プールの最大値を訓練するためにCTC定義された主な機能追加損失関数を抽出します。入力ラベルがある場合、モデル構造は、精度を向上させることができれば、それが望ましい、自分自身を設定することができます。また、あなたは多くのことをCNNで動作し、インターネット上の情報をプール、LSTM・ピア・ネットワーク・アーキテクチャに参加することができ、ここではそれらを繰り返すありません。関心のある読者は、期間を参照することができ畳み込みニューラルネットワークAlexNet  。
コード:

class Amodel():
    """docstring for Amodel."""
    def __init__(self, vocab_size):
        super(Amodel, self).__init__()
        self.vocab_size = vocab_size
        self._model_init()
        self._ctc_init()
        self.opt_init()

    def _model_init(self):
        self.inputs = Input(name='the_inputs', shape=(None, 200, 1))
        self.h1 = cnn_cell(32, self.inputs)
        self.h2 = cnn_cell(64, self.h1)
        self.h3 = cnn_cell(128, self.h2)
        self.h4 = cnn_cell(128, self.h3, pool=False)
        # 200 / 8 * 128 = 3200
        self.h6 = Reshape((-1, 3200))(self.h4)
        self.h7 = dense(256)(self.h6)
        self.outputs = dense(self.vocab_size, activation='softmax')(self.h7)
        self.model = Model(inputs=self.inputs, outputs=self.outputs)

    def _ctc_init(self):
        self.labels = Input(name='the_labels', shape=[None], dtype='float32')
        self.input_length = Input(name='input_length', shape=[1], dtype='int64')
        self.label_length = Input(name='label_length', shape=[1], dtype='int64')
        self.loss_out = Lambda(ctc_lambda, output_shape=(1,), name='ctc')\
            ([self.labels, self.outputs, self.input_length, self.label_length])
        self.ctc_model = Model(inputs=[self.labels, self.inputs,
            self.input_length, self.label_length], outputs=self.loss_out)

    def opt_init(self):
        opt = Adam(lr = 0.0008, beta_1 = 0.9, beta_2 = 0.999, decay = 0.01, epsilon = 10e-8)
        self.ctc_model.compile(loss={'ctc': lambda y_true, output: output}, optimizer=opt)


4.言語モデル

統計的言語モデルに4.1はじめ

統計的言語モデルは、数学的モデルである自然言語処理の基礎は、特定のコンテキスト依存の特性を持っていますが、また自然の確率的グラフィカルモデル、広く機械翻訳、音声認識、表音入力、画像文字認識に使用されています、スペル修正、誤植や検索エンジンを探します。多くのタスクでは、コンピュータは言葉の順序を理解する人、ないタイプミスや、これらの言葉として意味のある文章を、構成することができるかどうかを知る必要があります:

许多人可能不太清楚到底机器学习是什么,而它事实上已经成为我们日常生活中不可或缺的重要组成部分。
不太清楚许多人可能机器学习是什么到底,而它成为已经日常我们生活中组成部分不可或缺的重要。
不清太多人机可楚器学许能习是么到什底,而已常我它成经日为们组生中成活部不重可的或缺分要。

明確な意味を構文的に最初の文は、2番目の文が、それはまた、明確な第三、すべてのことを意味しても曖昧で、まだ意味します。これは、1970年代前の最後の世紀に、科学者たちはそう考え、理解するために、ルールベースの観点からです。以降、ジャレドニックはこの問題を解決するための単純な統計モデルを使用しています。統計的観点から、このような市のような多くの最初の文の確率、   例えば市などの第二は、続いている間、  このような市として、最小の第三このモデルによれば、最初の文の発生確率は20〜10倍の力ではなくへの言及3番目の文ので、最も常識の最初の文の第二です。

4.2モデル

文Sが生成され、言葉W1、W2、... WNの構成のシリーズがあると仮定し、文はSの発生確率です:
![](Https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlL19fbGF0ZXgvNzk3Mjg5OGFlYmM0ZTdjZjYzMDAwY2NmZmEzNGU2MjEuc3Zn?x-oss-process=image /形式、PNG#カード=数学 &コード= P(S)= P(W1、W2、...、WN)= P(W1)* P(W2 | W1)* P(W3 | W1、W2)... P(WN | W1、W2、...、wn- 1)&高さ= 18.50574712643678&幅= 603.448275862069)
によるコンピュータのメモリ空間と計算能力の制限のために、我々は明らかに、より合理的な計算方法であることが必要です。一般的には、唯一の前の単語に関連を考えると、あなたはかなり良い精度を持つことができ、実際の使用では、一般的に最初の3に関連するまれなケースを検討する前に、十分な程度最初の二つの単語を検討し、したがって、我々は次の式を取ることを選択することができます
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlL19fbGF0ZXgvNjY5MzUyNDY5ZDIwNmJlMDhkN2EyMjViYzBiNjMwZWMuc3Zn?x-oss-process=image/format,png#card=math&code=P(S)= P(W1、 W2、...、WN)= P (W1)* P(W2 | W1)* P(W3 | W2)... P(WN | WN-1)&高さ= 18.50574712643678&幅= 502.0689655172414)
とP我々は登山で統計情報を取得することができます単語の頻度は、確率を計算します。

4.3ピンインはテキストを達成するために

漢字のピンインは基本的に同じである最短経路を見つけるためのアルゴリズムで、動的なプログラミングアルゴリズムで回します。それはAとなっている、一つだけの音を読んでたら、左に対応する各単語の綴りが一緒に入れている私たちは、コミュニケーションの問題として中国語を入力することができ、各ピンインは、複数の文字に対応することができ、それぞれのキャラクター有向グラフ。名前画像.PNG

モデル試験

音響モデルのテスト:
image.png
言語モデルのテスト:
image.png
モデルはシンプルで、データセットが小さすぎると、効果は非常に良いモデルではありません。
プロジェクトソース住所:https://momodel.cn/explore/5d5b589e1afd9472fe093a9e?type=app

6.参照

論文:音声の認識技術進歩と展望の
ブログ:ASRT_SpeechRecognitionの
ブログ:DeepSpeechRecognitionを

我々について

Mo(URL:momodel.cnは)のPythonのサポートである人工知能オンラインモデリングプラットフォームを迅速に開発を支援することができ、トレーニングと展開モデル。


MoのAIクラブは、  クラブのしきい値を減らすために開発と利用の人工知能に取り組んサイトのR&Dと製品設計チームが主催しています。ビッグデータの処理や分析、可視化と経験をモデル化したデータを持つチームは、フロントエンドに下から軒並み設計と開発力で、学際的知能プロジェクトを実施してきました。大規模データ分析の管理のための主要な研究の方向と人工知能技術、およびデータ駆動型の科学的な研究を推進するためです。

現在、クラブは随時共有記事や学術交流に、毎週の杭州のラインの下に活動をテーマにした6機械学習技術サロンを開催しました。すべての収束に期待しては、交流を育てる人工知能の民主化を促進し、普及していき、人工知能興味の友人に生活を歩きます。
image.png

公開された36元の記事 ウォンの賞賛4 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_44015907/article/details/100148218