處理技術
聲音是一種資訊密集的資料類型。雖然在視訊內容的時代,音訊可能會讓人覺得過時,但對許多人而言,音訊仍是主要的資訊來源。儘管聽眾人數長期下降,2020 年仍有 83% 的 12 歲或以上美國人在特定週間收聽地面 (AM/FM) 廣播 (低於 2019 年的 89%)。相反地,線上音訊的聽眾在過去二十年來持續增加,根據同一份皮尤研究中心的研究報告,62% 的美國人每週都會收聽某種形式的線上音訊。
作為一種波,聲音包含四個特性:頻率、振幅、波形和持續時間。在音樂術語中,這些被稱為音高、動態、音色和持續時間。聲音還能幫助人類和其他動物感知和理解我們的環境,為我們周圍環境中物體的位置和移動提供上下文線索。
作為一種資訊載體,音訊可分為三類:
- 語音:由文字和語法組成的溝通媒介。透過語音辨識演算法,語音可以轉換成文字。
- 音樂:聲樂和/或器樂聲音結合在一起,產生由旋律、和聲、節奏和音色組成的作品。音樂可以用樂譜來表示。
- 波形:將類比聲音數位化後所得到的數位音訊訊號。波形可以代表語音、音樂、自然或合成的聲音。
音訊檢索可用於即時搜尋與監控線上媒體,以打擊侵犯智慧財產權的行為。它也在音訊資料的分類和統計分析上扮演重要的角色。
處理技術
語音、音樂和其他一般聲音各有其獨特的特性,需要不同的處理方法。一般而言,音訊會被分為包含語音的群組和不包含語音的群組:
- 語音音訊由自動語音辨識處理。
- 非語音音訊,包括音樂音訊、音效和數位化語音訊號,則使用音訊檢索系統處理。
本文主要介紹如何使用音訊檢索系統處理非語音音訊資料。本文不涵蓋語音辨識
音訊特徵萃取
特徵萃取是音訊檢索系統中最重要的技術,因為它可以進行音訊相似性搜尋。提取音頻特徵的方法分為兩類:
- 傳統的音頻特徵萃取模型,例如高斯混合模型 (GMM) 和隱藏馬可夫模型 (HMM);
- 基於深度學習的音頻特徵萃取模型,如重複神經網路 (RNN)、長短期記憶 (LSTM) 網路、編碼-解碼框架、注意力機制等。
基於深度學習的模型的錯誤率比傳統模型低一個數量級,因此逐漸成為音訊訊號處理領域的核心技術。
音訊資料通常以萃取的音訊特徵來表示。檢索過程搜尋和比較的是這些特徵和屬性,而不是音訊資料本身。因此,音頻相似性檢索的有效性很大程度上取決於特徵萃取的品質。
本文使用用於音頻模式識別的大規模預訓音頻神經網路 (PANNs)來提取特徵向量,其平均準確度 (mAP) 為 0.439 (Hershey et al., 2017)。
在提取出音頻資料的特徵向量後,我們可以使用 Milvus 實現高性能的特徵向量分析。
向量相似性搜尋
Milvus是一個雲原生的開源向量資料庫,專為管理機器學習模型和神經網路產生的嵌入向量而建立。它廣泛應用於電腦視覺、自然語言處理、計算化學、個人化推薦系統等情境。
下圖描述了使用 Milvus 的一般相似性搜尋流程: how-does-milvus-work.png
- 非結構化資料透過深度學習模型轉換為特徵向量,並插入 Milvus。
- Milvus 會儲存這些特徵向量並建立索引。
- Milvus 會根據要求搜尋並傳回與查詢向量最相似的向量。
系統概觀
音訊檢索系統主要由兩部分組成:插入(黑線)和搜尋(紅線)。
音訊檢索系統.png
本專案使用的樣本資料集包含開放原始碼的遊戲音效,程式碼詳述於Milvus bootcamp。
步驟 1:插入資料
以下是使用預先訓練的 PANNs 推理模型產生音訊嵌入並插入 Milvus 的範例程式碼,Milvus 會為每個向量嵌入指定唯一的 ID。
1 wav_name, vectors_audio = get_audio_embedding(audio_path)
2 if vectors_audio:
3 embeddings.append(vectors_audio)
4 wav_names.append(wav_name)
5 ids_milvus = insert_vectors(milvus_client, table_name, embeddings)
6
然後,傳回的ids_milvus會與其他相關資訊 (例如wav_name),一起儲存在 MySQL 資料庫中的音訊資料,以供後續處理之用。
1 get_ids_correlation(ids_milvus, wav_name)
2 load_data_to_mysql(conn, cursor, table_name)
3
步驟 2:音訊搜尋
Milvus 會計算預先儲存的特徵向量與輸入特徵向量之間的內積距離,輸入特徵向量是使用 PANNs 推理模型從查詢的音訊資料中萃取出來,並傳回類似特徵向量的ids_milvus,這些特徵向量對應於所搜尋的音訊資料。
1 _, vectors_audio = get_audio_embedding(audio_filename)
2 results = search_vectors(milvus_client, table_name, [vectors_audio], METRIC_TYPE, TOP_K)
3 ids_milvus = [x.id for x in results[0]]
4 audio_name = search_by_milvus_ids(conn, cursor, ids_milvus, table_name)
5
API 參考與示範
API
本音訊檢索系統是以開放原始碼建立。其主要功能為音訊資料的插入與刪除。在瀏覽器中輸入127.0.0.1:
示範
我們在線上提供了以 Milvus 為基礎的音訊檢索系統的即時示範,您可以使用自己的音訊資料進行試用。
audio-search-demo.png
總結
生活在大資料時代,人們發現生活中充斥著各式各樣的資訊。為了更好地理解這些資訊,傳統的文字檢索已經無法滿足需求。現今的資訊檢索技術急需檢索各種非結構化資料類型,例如視訊、影像和音訊。
電腦難以處理的非結構化資料,可以利用深度學習模型轉換成特徵向量。這些轉換後的資料可以輕鬆地由機器處理,讓我們能夠以前人無法做到的方式分析非結構化資料。Milvus 是一個開放原始碼的向量資料庫,可以有效率地處理人工智能模型所萃取的特徵向量,並提供各種常見的向量相似度計算。
參考文獻
Hershey, S., Chaudhuri, S., Ellis, D.P., Gemmeke, J.F., Jansen, A., Moore, R.C., Plakal, M., Platt, D., Saurous, R.A., Seybold, B. and Slaney, M., 2017, March.用於大規模音頻分類的 CNN 架構。In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), pp.
別做陌生人
Like the article? Spread the word