背景 声紋検索は、その名前が示すように、話者認識であり、音を通じて話者の声を確認または識別します。声紋認識における重要なステップは、話者の音声を構造化されたベクトルに変換する音声ベクトル化です。 Alibaba Cloud AnalyticDB Vector Edition は、声紋検証および検索ソリューションのセットを提供します。ユーザーは、いくつかの簡単な SQL コマンドを使用するだけで、3 つのステップで高精度の音声プリント取得および検証サービスを構築できます。 声紋認識技術 1) 声紋検索のデモンストレーション 図 1 は、AnalyticDB ベクトル データベースの音声プリント検索システムのデモ インターフェイスを示しています。ユーザーエクスペリエンスを向上させるために、380人の音声情報をベクトルに変換し、システムに保存しました。現在のデモシステムは2つの部分に分かれています。最初の部分は検索部分です。ユーザーは録音した音声ファイルを入力するか、ユーザーがその場で音声ファイルを録音してアップロードし、音声マッチング検索のために声紋ライブラリに送信します。 2 番目の部分は登録部分です。ここでユーザーは自分の音声を現在の声紋ライブラリに登録してアップロードし、その後のクエリと検証を容易にすることができます。次の章では、それぞれの機能を個別に紹介していきます。 図1. 音声指紋デモンストレーションシステム 図2は、S0004のテスト音声「BAC009S0004W0486.wav」を音声プリントライブラリにアップロードして検索しています。TOP1の結果であるS0004が一番上に表示されることがわかります。 図2. クエリ音 図 3 は声紋登録システムを示しています。ユーザーは自分の声をバックグラウンド声紋データベースに登録して、簡単に検索することができます。たとえば、ユーザー Hanchao は自分の音声 (7 秒間のみ) を現在のシステムに登録します。現在のシステムはテキストなしの登録をサポートしており、ユーザーは何でも言って登録できます。 図3. 音の登録 図 4 は、ユーザーが現場で音声を録音し、それをシステムにアップロードして、検索を実行する様子を示しています。たとえば、「Hanchao」は 5 秒間の音声を録音し、それを音声プリント システムに送信して検索しました。 「Hanchao」の音は以前にも登録されており、現在のシステムでは、1位の音が「Hanchao」の音であることが分かります。 図4. 音声の録音と取得 現在、声紋デモンストレーションでは、会議室での認識に使用できる 1:N デモンストレーション結果を使用しています。音声を通じて、関連する会議のスピーカーを見つけることができます。現在、本人確認、このような 1 対 1 のデモンストレーションでは、本人確認を容易にするために距離を 550 未満に制限するだけで済みます。 2) アプリケーション構造の全体設計 Alibaba Cloud 声紋データベース検索のシステムフレームワークの全体的なアーキテクチャを図 5 に示します。AnalyticDB (声紋データベース) は、声紋検索アプリケーション全体のすべての構造化情報 (ユーザー登録 ID、ユーザー名、その他のユーザー情報) と非構造化情報 (音声ベクトル) の保存とクエリを担当します。クエリ プロセス中に、ユーザーは声紋抽出モデルを使用して音声をベクトルに変換し、AnalyticDB でクエリを実行します。システムは関連するユーザー情報とl2ベクトル距離[5]を返します。次の章では、音声抽出モデルのトレーニングとテストについて説明します。 図5. 声紋検索データベース 3) システムの精度 現在のデモ声紋システムでは、GMM-UMBモデルによって抽出されたiベクトルを検索ベクトルとして使用しています[3]。さらに、より高精度なディープラーニング声紋認識モデル(x-vector[4])のトレーニングも行いました。さらに、音声プリントモデルのトレーニングは、電話通話シナリオ、携帯電話のアプリシナリオ、ノイズの多いシナリオ、その他の関連シナリオなど、特定のシナリオに対して実行できます。詳細については、グループに参加してください。 学術界で一般的に使用されている(1:N)データセット(Aishall.v1 [1]データセットとTIMIT [2]データセット)における声紋認識の精度は99.5%以上です(表1を参照)。 表1. トップ1の精度テスト結果 声紋システムを構築するための3つのステップ 最初のステップは初期化です。 現在のシステムは音声変換機能を実装しており、ユーザーはフロントエンドで取得した音声をPOSTリクエストを通じてAlibaba Cloudサービスシステムに送信し、対応する声紋モデルを選択して、音声を対応するベクトルに変換することができます。 import requestimport jsonimport numpy as np# sound: サウンドバイナリファイル。 # model_id: モデルID。 def get_vector(sound, model_id='i-vector'): url = 'http://47.111.21.183:18089/demo/vdb/v1/retrieve' d = {'resource': sound, 'model_id': model_id} r = requests.post(url, data=d) js = json.loads(r.text) return np.array(js['emb'])# ユーザー ファイルを読み取ります。ファイル = 'xxx.wav'データ = f.read()print(get_vector(data))f.close() 初期化プロセス中に、ユーザーは関連するユーザー音声プリント テーブルを作成します。同時に、テーブルのベクトル列にベクトル インデックスを追加して、クエリ プロセスを高速化します。現在の声紋モデルは 400 次元のベクトルを出力するため、インデックス パラメータ dim は 400 に設定されています。 -- ユーザーの音声プリント テーブルを作成します。CREATE TABLE person_voiceprint_detection_table( id serial primary key, name varchar, voiceprint_feature float4[]); -- ベクトル インデックスを作成します。CREATE INDEX person_voiceprint_detection_table_idx ON person_voiceprint_detection_table USING ann(voiceprint_feature) WITH(distancemeasure=L2,dim=400,pq_segments=40); 2番目のステップは、ユーザーの声を登録することです。 登録プロセス中に、ユーザーが登録され、レコードが現在のシステムに挿入されます。 --ユーザー「Zhang San」を現在のシステムに登録します。 --HTTP サービスを通じて音声プリントを関連するベクトルに変換します。 person_voiceprint_detection_tableにINSERT INTO(name, voiceprint_feature)SELECT '张三', array[-0.017,-0.032,...]::float4[]) 3 番目のステップは、ユーザーの音声を取得または検証することです。 音声指紋ドアロック検証(1:1 検証):検証システムでは、システムはユーザーの識別情報(user_id)を取得し、入力された音声ベクトルと音声指紋ライブラリ内のユーザーの音声ベクトル間の距離を計算します。通常、システムは距離のしきい値(しきい値 = 550)を設定します。ベクトル間の距離がこのしきい値より大きい場合、検証は失敗したことを意味します。閾値未満であれば、声紋認証が成功したことを意味します。 -- 音声プリントドアロック検出 (1:1) 検証 SELECT id, -- ユーザー ID 情報 name, -- ユーザー名 l2_distance(voiceprint_feature, ARRAY[-0.017,-0.032,...]::float4[]) AS distance -- ベクトル距離 FROM person_voiceprint_detection_table -- ユーザー音声テーブル WHERE distance < threshold -- 通常、しきい値は 550 です AND id = 'user_id' -- 検証するユーザー ID; 会議音声プリント取得 (1:N 検出): システムは、現在の話者の音声を識別して、最も関連性の高い登録ユーザー情報を返します。結果が返されない場合は、現在の会議のスピーカーが音声プリントデータベースに存在しないことを意味します。 -- 音声プリント会議担当者識別 (1:N) 検証 SELECT id, -- ユーザー ID 情報 name, -- ユーザー名 l2_distance(voiceprint_feature, ARRAY[-0.017,-0.032,...]::float4[]) AS distance -- ベクトル距離 FROM person_voiceprint_detection_table -- ユーザー音声テーブル WHERE distance < threshold -- 通常、しきい値は 550 です ORDER BY voiceprint_feature <-> ARRAY[-0.017,-0.032,...]::float4[] -- ベクトルで並べ替え LIMIT 1; -- 最も類似した結果を返します
|
<<: AI インテリジェント音声認識アルゴリズム パート 1
IT Homeは12月14日、GoogleがAI駆動型コード補完・生成ツール「Duet AI for...
NRF 2024: Retail’s Big Show に先立ち、マイクロソフト社は、ショッピング体...
[[424530]] 1. 背景近年、人工知能はセキュリティ、教育、医療、観光などの産業や生活の場面...
近年、人工知能、クラウドコンピューティング、ビッグデータ、モノのインターネット、産業用インターネット...
機械にはハードウェアだけでなくソフトウェアもあります。ハードウェアには材料や電力の問題が必要ですが、...
この記事では、Alipay アプリのディープラーニング エンジンである xNN を紹介します。 xN...
AIスタートアップは主に2つのスタイルに分けられます。本日の記事では、その両方を分析して見ていきます...