このドキュメントでは、AnalyticDB for MySQL に基づくボイスプリント認識ソリューションを紹介し、ライドヘイリングドライバーの録音における機密性の高いコンテンツを検出するユースケースについて詳しく説明します。このソリューションは、ライドヘイリングサービス、複数人会議、オフラインセールス、AIボイスレコーダー、音声アシスタントなどのシナリオに適用できます。話者を特定し、発話内容を検査することで、企業がインテリジェントなボイスプリント検索システムを効率的に構築するのに役立ちます。
背景情報
デジタル時代において、音声は身分認証、セキュリティ制御、インテリジェントなインタラクションのための主要な生体認証識別子です。ボイスプリント認識技術は、音声特徴を抽出し、それらを構造化されたベクターに変換することで、話者を効率的に検証および取得します。
AnalyticDB for MySQL は、ネイティブなベクター保存および検索機能に基づいて、エンドツーエンドのボイスプリント認識ソリューションを提供します。ボイスプリント比較、検索、クラスタリングの3つのコア機能をサポートしています。このソリューションは、話者ダイアリゼーション、音声テキスト変換、コンテンツ品質検査などの機能で拡張でき、高精度なボイスプリント検索システムを迅速に構築するのに役立ちます。
制限事項
ボイスプリント検索機能は現在、招待プレビュー中です。この機能を使用するには、テクニカルサポートにチケットを送信して有効化してください。
機能
ボイスプリント比較
この機能は、組み込みのボイスプリントモデルを使用して、生オーディオからボイスプリント特徴を抽出し、それらを構造化されたベクターに変換します。2つの音声ベクター間の類似度を計算することで、それらが同じ話者に属するかどうかを判断し、1:1のボイスプリント本人確認を可能にします。
ボイスプリント検索
この機能は、ボイスプリント特徴ベクターと効率的なインデックスを使用して、確立されたボイスプリントライブラリからターゲット話者を迅速に検索します。1:Nのボイスプリント認識シナリオをサポートし、大規模なボイスプリントライブラリでの効率的なID照合に最適です。
ボイスプリントクラスタリング
この機能は、教師なし学習技術を使用して、ラベル付けされていないオーディオデータを分析し、話者IDごとに自動的にグループ化します。複数話者オーディオシナリオを効果的に処理し、オーディオデータのインテリジェントなグループ化と管理を可能にします。
使用方法
API
オーディオ埋め込みの生成 - /audio/embedding
メソッド:
POST機能: オーディオファイルの埋め込みベクターを生成します。
パラメーター:
パラメーター | タイプ | 必須 | 説明 |
input_audio | string | はい | 入力オーディオのURL。 |
oss_ak | string | いいえ | OSS AccessKey ID。 |
oss_sk | string | いいえ | OSS AccessKey Secret。 |
oss_token | string | いいえ | OSS STSトークン。 |
start_time | float | いいえ | 開始タイムスタンプ。 |
end_time | float | いいえ | 終了タイムスタンプ。 |
リクエスト例:
curl -X POST "http://addr:8100/audio/embedding" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"input_audio": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"start_time": 1220,
"end_time": 3200
}'レスポンス例:
{
"code": 200,
"message": "success",
"result": [1.861976, 0.151182, -0.888397, ...]
}ボイスプリントの登録 - /voice/enroll
メソッド:
POST機能: 新しいボイスプリントサンプルを登録します。
パラメーター:
パラメーター | タイプ | 必須 | 説明 |
audio_url | string | はい | 入力オーディオのURL。 |
name | string | はい | ボイスプリントの名前。 |
リクエスト例:
curl -X POST "http://addr:8100/voice/enroll" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"name": "test1"
}'レスポンス例:
{"code": 200, "message": "Voiceprint enrollment successful", "result": true}ボイスプリントのクエリ - /voice/query
メソッド:
GETまたはPOST機能: 登録されたボイスプリントレコードをクエリします。
パラメーター:
パラメーター | タイプ | 必須 | 説明 |
name | string | いいえ | ボイスプリントの名前。 |
id | integer | いいえ | ボイスプリントのID。 |
リクエスト例:
curl "http://addr:8100/voice/query" \
-H "Authorization: Bearer {api-key}"レスポンス例:
{
"code": 200,
"message": "Found 1 voiceprint records",
"result": [{"id": 1968033551534260224, "name": "test1", "location": null}]
}ボイスプリントの削除 - /voice/delete
メソッド:
DELETEまたはPOST機能: 指定されたボイスプリントレコードを削除します。
パラメーター:
パラメーター | タイプ | 必須 | 説明 |
name | string | 条件付き | ボイスプリントの名前。このパラメーターまたは |
id | integer | 条件付き | ボイスプリントのID。このパラメーターまたは |
リクエスト例:
curl -X POST "http://addr:8100/voice/delete" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"name": "test1"
}'レスポンス例:
{"code": 200, "message": "Voiceprint deletion successful", "result": true}ボイスプリント検索 - /voice/search
メソッド:
POST機能: 指定されたオーディオファイルに最適な一致のボイスプリントを検索します。
パラメーター:
パラメーター | タイプ | 必須 | 説明 |
audio_url | string | はい | 検索するオーディオファイルのURL。 |
names | array | いいえ | 検索に含めるボイスプリント名のリスト。 |
top_k | integer | いいえ | 返される上位結果の数。デフォルト値: 1。 |
リクエスト例:
curl -X POST "http://addr:8100/voice/search" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"top_k": 1
}'レスポンス例:
{
"code": 200,
"message": "Found 1 matching voiceprints",
"result": [{"name": "test1", "similarity": 0.99999994}]
}ASR (音声テキスト変換) - /bailian/funasr/asr
メソッド:
POST機能: Alibaba Cloud Model Studio FunASR を使用してオーディオをテキストに変換します。
パラメーター:
パラメーター | タイプ | 必須 | 説明 |
source_url | string | はい | OSS内のオーディオファイルのパス。 |
model_name | string | いいえ | モデル名。デフォルト値は |
diarization | bool | いいえ | 話者ダイアリゼーションを有効にするかどうかを指定します。デフォルト値は |
speaker_count | int | いいえ | 話者の数。このパラメーターが指定されていない場合、システムが自動的に話者の数を検出します。 |
output_type | string | いいえ | 出力フォーマット。 |
lang | string | いいえ | 言語設定。サポートされている言語については、Alibaba Cloud Model Studio FunASR の「リクエストパラメーター」ドキュメントをご参照ください。 |
diarization_mode | string | いいえ | 話者ダイアリゼーションの結果でサポートされている集約ディメンションは |
リクエスト例:
curl -X POST "http://addr:8100/bailian/funasr/asr" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"source_url": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"output_type": "json",
"diarization_mode": "sentence",
"model_name": "fun-asr-mtl",
"lang": "zh"
}'レスポンス例:
{
"code": 200,
"message": "success",
"result": {
"file_url": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"properties": {
"audio_format": "pcm_s16le",
"channels": [0],
"original_sampling_rate": 16000,
"original_duration_in_milliseconds": 3834
},
"transcripts": [
{
"channel_id": 0,
"speakers": [
{
"speaker_id": 0,
"sentences": [
{
"sentence_id": 1,
"start_time": 100,
"end_time": 3300,
"text": "Hello world, this is the Alibaba Speech Lab."
}
]
}
]
}
]
}
}SQL
AnalyticDB for MySQL には、SQL で直接ボイスプリント検索を実行できる AI機能が含まれています。
ai_audio_embed
オーディオファイルのボイスプリント埋め込みベクターを生成します。詳細については、「ai_audio_embed」をご参照ください。
ai_audio_embed(text)
ai_audio_embed(model_name, text)
ai_audio_embed(model_name, text, options)ai_audio_transcribe
オーディオファイルをテキストに変換します。詳細については、「ai_audio_transcribe」をご参照ください。
ai_audio_transcribe(url)
ai_audio_transcribe(model_name, url)
ai_audio_transcribe(model_name, url, options)例
ボイスプリントライブラリテーブルの作成
CREATE DATABASE ai;
CREATE TABLE IF NOT EXISTS
ai.voiceTest (
id bigint NOT NULL AUTO_INCREMENT,
name varchar NOT NULL,
voiceprint_feature ARRAY<float>(512) ENCODE = 'no' COMPRESSION = 'no',
ANN INDEX idx_voiceprint_feature (voiceprint_feature),
PRIMARY KEY (id)
) INDEX_ALL = 'Y' STORAGE_POLICY = 'HOT' ENGINE = 'XUANWU'
TABLE_PROPERTIES = '{"format":"columnstore"}'
DISTRIBUTE BY HASH (id);ボイスプリントの登録
INSERT INTO ai.voiceTest (name, voiceprint_feature)
SELECT '{name}', ai_audio_embed('{audio_file}');ボイスプリントのクエリ
SELECT id, name FROM ai.voiceTest WHERE name = '{name}';ボイスプリントの削除
DELETE FROM ai.voiceTest WHERE name = '{name}';ボイスプリント検索の実行
SELECT name, similarity
FROM (
SELECT
name,
cosine_similarity(
voiceprint_feature,
ai_audio_embed('audio_embedding', '{audio_file}',
'{''start_time'':1000, ''end_time'':3000}')
) AS similarity
FROM ai.voiceTest
) t
ORDER BY similarity DESC
LIMIT 3;ユースケース:ドライバーモニタリングとコンテンツ検出
背景情報
ある配車サービス会社は、音声認識技術を利用して車内の音声録音を分析したいと考えていました。その目的は、複数人での会話からドライバーの音声を正確に抽出し、ドライバーの発言にポリシー違反がないかを特定することでした。
この会社は、AnalyticDB for MySQL のボイスプリント認識ソリューションを利用して、エンドツーエンドのシステムを構築しました。このシステムは、話者ダイアライゼーション、ノイズリダクション、自動音声認識 (ASR)、自動ボイスプリントライブラリ構築、ボイスプリント検索、テキストコンテンツの品質検査といった主要なステップをカバーしています。
ソリューションのワークフロー
音声強調:生の音声を前処理して、バックグラウンドノイズを低減し、人の声を強調します。
話者ダイアライゼーション:話者認識技術を使用して音声を分離し、各セグメントをその話者に割り当てます。
音声セグメンテーション:話者ダイアライゼーションの結果に基づいて、元の音声を各話者ごとに独立したクリップに分割し、個別の処理と分析を容易にします。
ボイスプリント認識と音声テキスト変換:ボイスプリント認識と自動音声認識 (ASR) を使用して、各音声セグメントから発話内容を抽出します。
ボイスプリント検索:ボイスプリントライブラリを検索して、音声セグメントをドライバーの ID と照合します。
コンテンツの品質検査:話者の ID を書き起こされたテキストと統合し、大規模言語モデル (LLM) を使用してコンテンツにポリシー違反がないか分析します。