ゼファーネットのロゴ

音声分析-SciNetを使用した音声識別

日付:

この記事は、の一部として公開されました データサイエンスブログソン

概要

現代の世界の現実は、アナリストが研究中のシステムの動作における特定の逸脱を特定するために、最新の機械学習アルゴリズムにますます頼らなければならないようなものです。 最も需要が高いのは、写真とビデオの情報を処理するためのコンピュータービジョンアルゴリズムと、テキスト分析のために自然言語を操作するための手法です。 ただし、この記事で説明するオーディオの操作などの重要な領域を忘れないでください。

SciNetを理解する

顧客からの多数の電話を分析して、疑似信頼管理の事実を特定するという任務を負った例を考えてみましょう。つまり、同じ人物が複数のクライアントの利益を電話で代表している場合です。 オーディオデータの総量は500GBを超え、総継続時間は445日(11時間)でした。 当然、何人かの人の録音をすべて聞くことは不可能なので、この問題を解決するために、類似した音声の自動クラスタリングを使用し、その後、得られたグループを分析します。

音声ベクトルを取得するためのモデルとして、SincNetモデルが選択されました。 しかし、適用される方法の説明に進む前に、音から特徴を抽出するためのアプローチが存在することと、SincNetを選択した理由を考えてみましょう。

振幅時間分析は、おそらくサウンド処理への最も簡単なアプローチです。

写真1SciNetを使用した音声識別図1

このアプローチでは、オーディオ信号は、特定のサンプリング周波数での音波の振動の1次元表現と見なされます(図XNUMX)。 このアプローチの主な利点のXNUMXつは、信号に関する完全な情報を保持することです。つまり、重要な情報を拒否することなく、信号を「そのまま」分析します。 残念ながら、これは同時にアプローチの欠点でもあります。信号を有用なノイズとノイズに分離することは困難であり、データの次元が高いため、データを迅速かつ高品質で処理することは困難です。 残念ながら、このアプローチを使用して信号から多数の有用なプロパティを抽出することは困難です。

スペクトル分析は代替アプローチです。 その本質は、元の信号を任意に必要な精度でコンポーネントに分解できるという事実にあります。 言い換えると、複雑な信号は、特定の周波数と振幅を持つ構成正弦波の形で表すことができます。 したがって、信号スペクトルはすでに信号のXNUMX次元表現であり、信号エネルギーが時間内の周波数全体にどのように分布しているかを正確に判断することができます。

図2写真2SciNetを使用した音声識別

スペクトル分析がオーディオ処理で大きな進歩を遂げた理由を理解するために、人間の声の例を使用して、音とは何か、そしてそれが何で構成されているかを思い出してみましょう。

SciNetを使用した音声識別

図3

空気が声帯を通過すると、振動が発生し、弾性波の形で媒体内を伝播します。 各音(人工的なものでない限り)は、そのような波のセット全体です。 音の基本音、倍音、フォルマントを研究することで、音声の分析に関連する特定の問題をうまく解決することができます。

たとえば、ピッチ周波数(信号の最低周波数)は、男性と女性の平均ピッチ値が異なり、男性の平均が130 Hzであるのに対し、女性の平均は235 Hzであるため、性別の決定タスクでよく使用されます。 音声倍音のセットの分析は、話者識別の問題に役立つことがよくあります。これは、このセットがそれぞれ個別の音声装置に依存しているためです。 そして最後に、フォルマント(特定の周波数の増幅領域)の分析は、音声のテキストへの翻訳に関連する問題で積極的に使用されます。

スペクトログラムを使用すると、上記のすべてのコンポーネントを正常に分析できます。これは主に、信号の周波数にわたるエネルギーの分布に関するデータに基づいて作成されたモデルの精度がかなり高いためです。

しかし、オーディオ信号のデータを処理するためのXNUMX番目のアプローチもあり、このアプローチは現在流行している概念であるニューラルネットワークに関連付けられています。 アイデアは単純です。音声をネットワーク入力にフィードし、ネットワークがデータ内のパターンを独立して識別し、特徴抽出、話者識別、音声認識、感情分析などの必要なタスクを解決することを学習することを期待しましょう。

図4図4

信号から主要な特徴を抽出するためのアーキテクチャとして、畳み込みニューラルネットワークがよく使用されます。これは、コンピュータビジョンタスクだけでなく、コンピュータヒアリングタスクでも良好な結果を示します。 トレーニング中に、CNNは、ネットワークがデータの記述に最適であると考える畳み込みを学習します。 この場合、データ自体を元の信号の形式で提示する必要はありません。 たとえば、スペクトル、fbank、またはmfccの形式で信号を表現すると、ネットワークのトレーニングの品質と速度が大幅に向上します。

問題は、元の信号をその表現に置き換えることによって、一方ではネットワークのタスクを単純化し、他方では信号自体の最良の表現を見つける機会を奪うことです。 新しいアプローチの本質は、信号が元の形式でネットワークの入力に供給され、バンドパスフィルターが畳み込みとして使用され、そのパラメーターが学習プロセスでネットワークによって選択されることです。 各フィルターについて、2つのパラメーター(上限周波数と下限周波数)のみがトレーニングされます。 したがって、一方では、アルゴリズムが生データを表示できるようにし、他方では、特定の周波数範囲のみのコンテキストでデータを表示するようにネットワークに指示します。

バンドパスフィルター自体は、5つの低周波フィルターの差として表すことができます(図XNUMX)。 時間領域に移ると、フィルターはXNUMXつのsin関数の差になります(したがって、ネットワークの名前はSincNetです)。 元の信号に結果の畳み込みを掛けることは、信号の特定の周波数帯域を選択することと同じです。

図5

標準のCNNで学習した畳み込みと、SincNetで学習した畳み込みを比較すると、両方のネットワークが最終的に同じことを学習するという結論になります。つまり、信号内の特定の対象周波数の割り当てですが、SincNetには特定の切り札があります。通常のCNNはそれ自体で最適なフィルター形状を選択することを余儀なくされますが、フィルターがどのように見えるかについての最初のレイヤー情報に

図6図6

このアプローチにより、SincNetには、標準の畳み込みネットワークに比べていくつかの利点があります。

  1. より少ないパラメーター(各SincNet畳み込みは常に2つのパラメーター(低周波数と高周波数)のみに依存します)。

  2. 畳み込みは対称に基づいているため、フィルターを計算する操作が少なくなります。 前半を計算し、後半をミラーリングします。

  3. 高速収束

  4. 優れたネットワーク解釈可能性–各畳み込みは明確な境界を持つフィルターです。 同時に、フィルターの正規化された合計は、メイントーンとフォルマントに注意が集中していることを示します。

これらすべての利点は、SincNetが従来のバンドルDNN-MFCC、CNN-FBANK、CNN-RAWよりも優れた結果を示す品質メトリックの比較によってサポートされています。

製品の導入

入力データとして、サンプリングレートが16kHzのwavファイルを使用しました。 発信者の番号に関する情報がマークアップとして使用されました。これは、同じ人が同じ番号から電話をかけていることを意味します。 データの主要な前処理には、マーキングに加えて、サードパーティの音声アクティビティ検出モデルを使用した一時停止と無音の除去、およびラウドネスの正規化が含まれます。

def audio_normalization(source_file、norm_file):[signal、fs] = sf.read(source_file)signal = signal.astype(np.float64)signal = signal / np.max(np.abs(signal))sf.write(norm_file、signal 、fs)#VADモデルをロードしますmodel = torch.jit.load(r'D:caller_cluster sincnet silero-vad files model_mini.jit')model.eval()empty_file = [] for wav in tqdm(wavs):way = os.path.join('calls'、wav)wav = read_audio(way)speech_timestamps = get_speech_ts_adaptive(wav、model、step = 500、num_samples_per_window = 4000)if len(speech_timestamps)> 0:#一時停止を削除save_audio(way、collect_chunks (speech_timestamps、wav)、16000)#audio_normalization(way、way)を正規化するelse:#音声がない場合はファイルを削除するempty_file.append(way)! rm --r {way}

ネットワーク設定はデフォルトで行われ、変更はトレーニングデータセットへのパスにのみ影響しました。

  dnn_models import MLP
  dnn_models import シンクネット as CNN オプション= read_conf('SincNet_TradeDesk.cfg')

SincNetは、基本的に3つのモデルで構成されています。 最初のモデルは、sincベースの畳み込みカーネルを備えたCNNであり、主要な特徴を抽出するために使用されます。 2048番目のモデルは、すべての特徴を収集し、それらを低次元のベクトルに変換します。 最初のXNUMXつのモデルの作業の結果として得られたXNUMX次元のベクトルに基づく、XNUMX番目のモデルのタスクは、音声がXNUMX人の話者に属するか別の話者に属するかを予測することです。

#機能抽出CNN trunk_arch = {'input_dim':wlen、'fs':fs、'cnn_N_filt':cnn_N_filt、'cnn_len_filt':cnn_len_filt、'cnn_max_pool_len':cnn_max_pool_len、'cnn_use_laynorm_inp' cnn_use_laynorm':cnn_use_laynorm、' cnn_use_batchnorm':cnn_use_batchnorm、' cnn_act':cnn_act、' cnn_drop':cnn_drop} trunk = torch.nn.DataParallel(CNN(trunk_arch).to(device))#埋め込みモデルを設定します。 embedd_arch = {'input_dim':trunk_out_dim、'fc_lay':fc_lay、'fc_drop':fc_drop、'fc_use_batchnorm':fc_use_batchnorm、'fc_use_laynorm':fc_use_laynorm、'fc_use_laynorm_inp':fc_use_laynorm、'fc_use_laynorm_inp':fc } embedder = torch.nn.DataParallel(MLP(embedder_arch).to(device))#分類子を設定します。 分類器は埋め込みを取得し、次元ベクトルを出力します。 classifier_arch = {'input_dim':fc_lay [-1]、'fc_lay':class_lay、'fc_drop':class_drop、'fc_use_batchnorm':class_use_batchnorm、'fc_use_laynorm':class_use_laynorm、'fc_use_laynorm_inp':class_use_atchnorm_inp':class_use_laynorm fc_act':class_act} classifier = torch.nn.DataParallel(MLP(classifier_arch).to(device))OUTPUT = classifier(embedder(trunk(INPUT)))

私たちのタスクでは、最終的な目標は分類ではなくクラスタリングであったため、XNUMX番目のモデル(実際には埋め込み)の出力からのベクトルがn次元空間に近くなるように、このスタックをトレーニングする必要がありました。彼らが同じ人に属し、離れている場合、異なる人に属している場合。 このため、学習プロセスはMetricLearning手法を使用して変更されました。

異なる人が同じ番号から電話をかけることができ、同じ人が異なる番号から電話をかけることができるため、最初の段階で、データセットでモデルを事前トレーニングすることが決定されました。マークアップでは、100%確実でした。 このデータセットは従業員の声から収集され、自動的にマークアップされました。

得られたベクトルの近接度を推定するために、UMAP次元削減法を適用しました(図8)。 数年間のトレーニングの後、モデルが正しく機能し、ある人の声を別の人の声からうまく分離できることが明らかになりました。 視覚的には、これは同じ色(同じ声)のドットが別々のグループに編成されているという事実に表れています。

図8図8

ベクトル化装置の優れた作業にもかかわらず、分類器の精度はわずか0.225(err = torch。mean(predict!= Label))であり、最初は混乱する可能性があります。 ただし、この精度は、バッチ、および音声のランダムな部分(たとえば、次の前の短い一時停止など)を明確に判断できない部分を含めて考慮されることを理解する必要があります。単語または外部ノイズ)、バッチに分類されます。 モデルの品質を評価するために、わずかに異なるアプローチが使用されます。話者からのフレーズが短いセクションに分割され、各セクションが分類され、その後、最も頻繁に予測されるラベルがセット全体に付与されます。 モデルを評価するためのこのアプローチは、モデルの精度がかなり高いことが判明したことを示しています。 下のグラフは、学習プロセスを示しています。

結論

ご覧のとおり、結果のモデルのtest_sent_errorエラーは、0.055番目のエポックまでにすでに32に減少しており、精度=0.945と解釈できます。 これはまともな結果です。 単一のGTX6を使用して2070つのエポックをトレーニングするのに約2分かかり、TeslaV100データラボを使用して約XNUMX分かかりました。 したがって、XNUMX日も経たないうちに、目的に合った許容可能な品質のモデルを取得することができました。

その結果、このモデルを使用して、考えられないほどの数の電話での会話が処理されました。 この処理により、55〜2人のクライアントから約5のグループを特定することが可能になり、申請はXNUMX票で提出されました。 経営陣はこの事実を知らされ、適切な措置が取られました。

この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、作成者の裁量で使用されています。

PlatoAi。 Web3の再考。 増幅されたデータインテリジェンス。
アクセスするには、ここをクリックしてください。

出典:https://www.analyticsvidhya.com/blog/2021/08/audio-analysis-voice-identification-using-scinet/

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?