sponsored links

人工智慧演算法:語音識別實踐教程

語音相關知識點梳理

語音不像文字,可以看得見,僅有對應的音訊,需要對語音有一個“可以看見”的過程,於是有了下列的幾種音訊檔案的表示方法:

1)波形圖

語音的儲存形式可用波形圖展現,可以看作是上下襬動的數字序列,每一秒的音訊用16000個電壓數值表示,取樣率即為16kHz。

人工智慧演算法:語音識別實踐教程

2)取樣點

取樣點是對波形圖的放大,可以看到的更細的單位

人工智慧演算法:語音識別實踐教程

3)頻譜圖

可以變為頻譜圖,顏色代表頻帶能量大小,語音的傅立葉變換是按幀進行,短的視窗有著高時域和低頻域,長時視窗有低時域和高頻域。

4)基本單位

對於語音而言,基本單位是幀(對應文字的token),一幀即是一個向量,整條語音可以表示為以幀為單位的向量組。幀是由ASR的前端聲學特徵提取模組產生,提取的技術設計“離散傅立葉變換”和”梅爾濾波器組“

整體解決思路

在我的理解認知中,對於ASR的解決方法可以分為兩種,一種是聲學模型加語言模型的組合,另外一種是端到端的解決方式。

第一種方式:

路線的個人理解大約是,有一個音訊,先有聲學模型,將對應的音訊訊號處理為對應的聲學特徵,再有語言模型,將聲學特徵的結果得到機率最大的輸出字串。

在上圖中,代表的是聲學特徵向量,代表輸出的文字序列,在(2.1)中,代表的是聲學模型,代表的是語言模型

第二種方式:

端到端的解決手段,個人印象中在吳恩達的課程裡提到,ASR在CTC提出後有一個較大的提升。個人理解是在CTC之前,seq2seq的建模方式比較難處理輸出序列遠短於輸入序列的情況,以及在不同幀出現的相同音素的輸出

其他術語

聲學模型:常用的話,包括了HMM,GMM,DNN-HM的聲學模型。

語言模型:常用的語言模型這裡包括了n-gram語言模型以及RNN的語言模型。

解碼器:最終目的是取得最大機率的字元輸出,解碼本質上是一個搜尋問題,並可藉助加權有限狀態轉換器(Weighted Finite State Transducer,WFST) 統一進行最優路徑搜尋。

端到端的方法:seq2seq+CTC 損失函式, RNN Transducer, Transforme,這裡需要補充的話 應該要去看李宏毅2020年的人類語言處理的課程。

完整實踐程式碼

本程式碼已經部署到天池DSW實驗平臺上,可直接免配置環境執行,對於DSW不熟悉的學習者可參考:小白如何用免費GPU跑天池演算法大賽!

賽題介紹: 有20種不同食物的咀嚼聲音,給出對應的音訊,對聲音的資料進行建模,判斷是哪種食物的咀嚼聲音

Baseline思路:將對應的音訊檔案,使用librosa轉化為梅爾譜作為輸入的特徵,用CNN對梅爾譜的特徵進行建模分類預測。

Baseline地址:https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12586969.1002.3.78ac14e9eP5wk4&postId=198902

環境要求:TensorFlow的版本:2.0 + keras sklearn librosa

#基本庫
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split #資料分割
from sklearn.metrics import classification_report #評價
from sklearn.model_selection import GridSearchCV #網格搜尋,最優模型選擇
from sklearn.preprocessing import MinMaxScaler #特徵標準化

# 載入深度學習框架
# 搭建分類模型所需要的庫
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPool2D, Dropout
from tensorflow.keras.utils import to_categorical
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC

# 其他庫
#音訊處理
import librosa
import librosa.display
#檔案處理
import glob
import os

0.特徵提取與資料集建立

feature = []
label = []
# 建立類別標籤,不同類別對應不同的數字。
label_dict = {'aloe': 0, 'burger': 1, 'cabbage': 2,'candied_fruits':3, 'carrots': 4, 'chips':5,'chocolate': 6, 'drinks': 7, 'fries': 8, 'grapes': 9, 'gummies': 10, 'ice-cream':11,'jelly': 12, 'noodles': 13, 'pickles': 14, 'pizza': 15, 'ribs': 16,'salmon':17,'soup': 18, 'wings': 19}
# 不同數字對應不同的類別。
label_dict_inv = {v:k for k,v in label_dict.items()}

#特徵提取
from tqdm import tqdm #提示進度條
def extract_features(parent_dir, sub_dirs, max_file=10, file_ext="*.wav"):#提取特徵以及標籤
    c = 0
    label, feature = [], []
    for sub_dir in sub_dirs:
        for fn in tqdm(glob.glob(os.path.join(parent_dir, sub_dir, file_ext))[:max_file]): # 遍歷每個資料集的所有檔案
            label_name = fn.split('/')[-2]
            label.extend([label_dict[label_name]])
            X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
            mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) #計算梅爾頻譜(mel spectrogram),並把它作為特徵
            feature.extend([mels])

    return [feature, label]

parent_dir = './train_sample/'
save_dir = "./"
folds = sub_dirs = np.array(['aloe','burger','cabbage','candied_fruits',
                             'carrots','chips','chocolate','drinks','fries',
                            'grapes','gummies','ice-cream','jelly','noodles','pickles',
                            'pizza','ribs','salmon','soup','wings'])

# 獲取特徵feature以及類別的label
temp = extract_features(parent_dir,sub_dirs,max_file=100)
temp = np.array(temp)#列表轉換成矩陣
data = temp.transpose()#矩陣轉置
# 獲取特徵
X = np.vstack(data[:, 0])
#X的特徵尺寸是: (1000, 128)

# 獲取標籤
Y = np.array(data[:, 1])
#Y的特徵尺寸是: (1000,)
#資料集劃分
#訓練集的大小 750
#測試集的大小 250
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state = 1, stratify=Y)
#random_state 是隨機數的種子。

1.建立模型

model = Sequential()#多個網路層的線性堆疊
# 輸入的大小
input_dim = (16, 8, 1)
model.add(Conv2D(64, (3, 3), padding = "same", activation = "tanh", input_shape = input_dim))# 卷積層
# 輸入shape
model.add(MaxPool2D(pool_size=(2, 2)))# 最大池化

model.add(Conv2D(128, (3, 3), padding = "same", activation = "tanh")) #卷積層
model.add(MaxPool2D(pool_size=(2, 2))) # 最大池化層
model.add(Dropout(0.1))
#為輸入資料施加Dropout。Dropout將在訓練過程中每次更新引數時按一定機率(rate)隨機斷開輸入神經元,Dropout層用於防止過擬合。
model.add(Flatten()) # 展開
model.add(Dense(1024, activation = "tanh"))
model.add(Dense(20, activation = "softmax")) # 輸出層:20個units輸出20個類的機率
# 編譯模型,設定損失函式,最佳化方法以及評價標準
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy’])

model.summary()
# 訓練模型
model.fit(X_train, Y_train, epochs = 20, batch_size = 15, validation_data = (X_test, Y_test))

2. 預測

#提取測試集資料特徵
def extract_features(test_dir, file_ext="*.wav"):
    feature = []
    for fn in tqdm(glob.glob(os.path.join(test_dir, file_ext))[:]): # 遍歷資料集的所有檔案
        X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
        mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) # 計算梅爾頻譜(mel spectrogram),並把它作為特徵
        feature.extend([mels])
    return feature

X_test = extract_features('./test_a/‘)

#輸出測試結果
preds = np.argmax(predictions, axis = 1)
preds = [label_dict_inv[x] for x in preds]

path = glob.glob('./test_a/*.wav')
result = pd.DataFrame({'name':path, 'label': preds})

result['name'] = result['name'].apply(lambda x: x.split('/')[-1])
result.to_csv('submit.csv',index=None)
分類: 科技
時間: 2021-10-10

相關文章

信也科技王春平:價值觀在前的人工智慧演算法發展
9月27日,由瑪娜資料基金會主辦的"促進人工智慧演算法性別平等"報告發佈會暨政策研討會在上海舉行,聯合國婦女署駐華辦公室高階專案官員馬雷軍.上海市浦東新區婦女聯合會副主席國雲丹.瑪 ...

可預測新冠患者用氧需求的人工智慧演算法問世
近日,英國劍橋大學科學家與來自世界各地的20家醫院及醫藥公司聯手,首次利用人工智慧與機器學習技術,在全球範圍內預測新冠肺炎患者的氧氣需求,準確率高達95%.這項名為EXAM的研究於發表在近日的< ...

“教育部人工智慧助推教師隊伍建設行動”北京外國語大學試點工作總結交流會召開
來源:中國教育新聞網 中國教育報-中國教育新聞網訊(記者 梁丹)9月17日,"教育部人工智慧助推教師隊伍建設行動"北京外國語大學試點工作總結交流會在京召開.教育部黨組成員.副部長孫 ...

如何在享受大資料和人工智慧便利的同時,兼顧安全、可靠、可控?

如何在享受大資料和人工智慧便利的同時,兼顧安全、可靠、可控?
來源:方圓 (圖片來源:攝圖網) 網約車與計程車哪個更便宜?蘋果手機與非蘋果手機,誰打車更貴?新客戶打車便宜還是老客戶打車便宜? 帶著這樣的疑問,復旦大學教授孫金雲帶領他的學生,一個月時間內在北京.上 ...

伊朗科學家被害真相:一場無懈可擊的演算法暗殺

伊朗科學家被害真相:一場無懈可擊的演算法暗殺
值班編輯| 宇多田 出品| 虎嗅科技組 封面來源| 視覺中國 如果你還記得2021年8月五角大樓曾公開宣佈,在一次對阿富汗的空襲行動中,他們成功操控無人機"斬首"了一名IS阿富汗分 ...

學習在實踐中發生,實踐從課堂上開始
來源:人民網-山東頻道 深化實踐教學改革是辦好高校思政課的一項重要任務.與高度課程化的理論教學相比,當前高校思政課實踐教學內容規範性.流程可操作性.質量可監控性等都還有一定差距.學校思想政治課教師座談 ...

AI人工智慧已破解糖尿病治療難題,AI未來能取代醫生嗎?

AI人工智慧已破解糖尿病治療難題,AI未來能取代醫生嗎?
Philip Moshe博士和Eran Atlas可能是過去二十年中糖尿病界最有影響力的兩人,他們是Medtronic人工胰腺背後人工智慧演算法的開發者,也是世界上第一位內分泌數字專家. Dr. Ph ...

44種模型,RobustART評測CNN、Transformer、MLP-Mixer誰最魯棒?

44種模型,RobustART評測CNN、Transformer、MLP-Mixer誰最魯棒?
機器之心專欄 北京航空航天大學.商湯科技.京東探索研究院等 來自北航.商湯科技和京東探索研究院等機構的研究者提出了第一個在大規模資料集 ImageNet 上面向模型結構和訓練技巧且針對多種噪音型別的模 ...

專訪|諾獎得主卡尼曼:“噪聲”是影響人類判斷的黑洞

專訪|諾獎得主卡尼曼:“噪聲”是影響人類判斷的黑洞
新冠疫情暴發以來,很多人都關注到了一個值得思考的現象:世界各國在應對新冠的方式和政策上存在著明顯的差異.造成這種現象的原因是什麼呢? 如果把範圍縮小到歐洲,這種現象就更讓人困惑.這些歐洲國家在優先事項 ...

對平臺型企業壟斷問題的思考:謙抑規制與精準規制
崔明巍 劉大洪 平臺型企業是一種新的企業形式,是一種聚合資訊的中介,也是數字經濟時代的產物.平臺型企業透過主動或被動的資訊收集,經由人工智慧演算法處理資訊再分發給需求端,是一種高效的資源配置方式. 技 ...

一冠一亞!時隔13年,東大智慧車再創佳績!

一冠一亞!時隔13年,東大智慧車再創佳績!
聽說這屆學霸有點皮? 頂著俏皮的隊名去比賽還抱回來了全國總冠軍? 這不 第十六屆全國大學生智慧汽車競賽開賽 東北大學"咱也能上天"代表隊 "拖拉機組裝小組"代表 ...

20個值得關注的前沿科技熱點

20個值得關注的前沿科技熱點
2019年9月25日在上海圖書館舉行的2019競爭情報上海論壇暨國際科學技術資訊理事會年會上,上海科學技術情報研究所釋出了20個2019國際前沿科技熱點.這20個熱點集中在資訊科技(7個).生命與健康 ...

鷹瞳科技透過聆訊:主打AI視網膜影像識別,Q1營收增長超9倍

鷹瞳科技透過聆訊:主打AI視網膜影像識別,Q1營收增長超9倍
"醫療AI第一股." 本文為IPO早知道原創 作者|Stone Jin 據IPO早知道訊息,北京鷹瞳科技發展股份有限公司(以下簡稱"鷹瞳科技")日前已透過港交所 ...

用大資料+AI抓住每一縷風,助力智慧功率預測

用大資料+AI抓住每一縷風,助力智慧功率預測
導語: 清潔能源時代,對可再生新能源的輸出功率開展預測,更有利於最佳化發電計劃.一直致力於融合IT前沿技術和新能源發展的金風慧能基於英特爾統一的大資料分析和AI平臺 Analytics Zoo, 結合 ...

智慧化作戰新技術——美軍研發可穿戴程式設計纖維
來源:人民網-軍事頻道 原創稿 近日,美國陸軍作戰能力發展司令部專案經理詹姆斯釋出宣告:一種能夠感知.儲存和分析資料的可程式設計纖維將用於美軍軍服的製作,幫助指揮官收集戰場資訊與部隊情況,從而做出更好 ...

攝像頭才是自動駕駛感知yyds

攝像頭才是自動駕駛感知yyds
[太平洋汽車網 技術頻道]我們理解世界,是以人類的感知為基礎的.我們建立的交通系統,自然也是以人的感知方式為基礎的.人開車最主要依賴的感知途徑是眼睛,所以想要在人類建立的交通系統中開車,"看 ...

大資料和創構認識論
作者:王天恩(上海大學馬克思主義學院.社會科學學部教授,博士生導師) 內容提要:新一代人工智慧的發展,在更深層次展示了大資料的重要性.正是在大資料基礎上,匯聚了資訊科技發展過程中生髮的新認識論旨趣.從 ...

華為塗丹丹:一場無人區的馬拉松

華為塗丹丹:一場無人區的馬拉松
"在科研這方面,我不認為男性和女性有任何的不同.關鍵是你要對它有興趣,還要有堅持下去的勇氣和韌勁:就好像一場無人區的馬拉松,你不知道這條路的盡頭在哪裡,也沒有任何人的陪伴,你必須一個人堅持不 ...

經濟日報:螞蚱腿肉攢到一起也能炒盤菜
來源:經濟日報 過幾天,共享租衣平臺衣二三將徹底停止服務.已經沒有人說得清這是第幾個離場的共享經濟企業了.如果共享經濟現在開班會,點名場面估計會是這樣-- "共享單車來了嗎?"&q ...