基于概率的和弦識別方法——隱馬爾可夫模型

什么是HMM

假設(shè)我手里有三個不同的骰子。第一個骰子是我們平常見的骰子(稱這個骰子為D6),6個面,每個面(1,2,3,4,5,6)出現(xiàn)的概率是1/6。第二個骰子是個四面體(稱這個骰子為D4),每個面(1,2,3,4)出現(xiàn)的概率是1/4。第三個骰子有八個面(稱這個骰子為D8),每個面(1,2,3,4,5,6,7,8)出現(xiàn)的概率是1/8。


假設(shè)我們開始擲骰子,我們先從三個骰子里挑一個,挑到每一個骰子的概率都是1/3。然后我們擲骰子,得到一個數(shù)字,1,2,3,4,5,6,7,8中的一個。不停的重復(fù)上述過程,我們會得到一串?dāng)?shù)字,每個數(shù)字都是1,2,3,4,5,6,7,8中的一個。例如我們可能得到這么一串?dāng)?shù)字(擲骰子10次):1 6 3 5 2 7 3 5 2 4這串?dāng)?shù)字叫做可見狀態(tài)鏈。但是在隱馬爾可夫模型中,我們不僅僅有這么一串可見狀態(tài)鏈,還有一串隱含狀態(tài)鏈。在這個例子里,這串隱含狀態(tài)鏈就是你用的骰子的序列。比如,隱含狀態(tài)鏈有可能是:D6 D8 D8 D6 D4 D8 D6 D6 D4 D8。

一般來說,HMM中說到的隱馬爾可夫鏈其實(shí)是指隱含狀態(tài)鏈。隱含狀態(tài)(骰子)之間存在轉(zhuǎn)換概率(transition probability),可見狀態(tài)之間沒有轉(zhuǎn)換概率,但是隱含狀態(tài)和可見狀態(tài)之間有一個概率叫做輸出概率(emission probability)。就我們的例子來說,六面骰(D6)產(chǎn)生1的輸出概率是1/6。產(chǎn)生2,3,4,5,6的概率也都是1/6。

隱馬爾可夫模型狀態(tài)圖

其實(shí)對于我們上述的HMM來說,如果提前知道所有隱含狀態(tài)之間的轉(zhuǎn)換概率和所有隱含狀態(tài)到所有可見狀態(tài)之間的輸出概率,做模擬是相當(dāng)容易的。但是應(yīng)用HMM模型時候呢,往往是缺失了一部分信息的,有時候你知道骰子有幾種,每種骰子是什么,但是不知道擲出來的骰子序列;有時候你只是看到了很多次擲骰子的結(jié)果,剩下的什么都不知道。如果應(yīng)用算法去估計這些缺失的信息,就成了一個很重要的問題。這些算法我會在下面詳細(xì)講。

和HMM模型相關(guān)的算法主要分為三類,分別解決三種問題:
1)知道骰子有幾種(隱含狀態(tài)數(shù)量),每種骰子是什么(轉(zhuǎn)換概率),根據(jù)擲骰子擲出的結(jié)果(可見狀態(tài)鏈),我想知道每次擲出來的都是哪種骰子(隱含狀態(tài)鏈)。
這個問題呢,在語音識別領(lǐng)域呢,叫做解碼問題。這個問題其實(shí)有兩種解法,會給出兩個不同的答案。每個答案都對,只不過這些答案的意義不一樣。這里只給出第一種解法。這種解法叫做求最大似然狀態(tài)路徑,說通俗點(diǎn)呢,就是我求一串骰子序列,這串骰子序列產(chǎn)生觀測結(jié)果的概率最大。

2)還是知道骰子有幾種(隱含狀態(tài)數(shù)量),每種骰子是什么(轉(zhuǎn)換概率),根據(jù)擲骰子擲出的結(jié)果(可見狀態(tài)鏈),我想知道擲出這個結(jié)果的概率。
看似這個問題意義不大,因?yàn)槟銛S出來的結(jié)果很多時候都對應(yīng)了一個比較大的概率。問這個問題的目的呢,其實(shí)是檢測觀察到的結(jié)果和已知的模型是否吻合。如果很多次結(jié)果都對應(yīng)了比較小的概率,那么就說明我們已知的模型很有可能是錯的,有人偷偷把我們的骰子給換了。

3)知道骰子有幾種(隱含狀態(tài)數(shù)量),不知道每種骰子是什么(轉(zhuǎn)換概率),觀測到很多次擲骰子的結(jié)果(可見狀態(tài)鏈),我想調(diào)節(jié)每種骰子是什么(轉(zhuǎn)換概率)來讓出現(xiàn)這種結(jié)果的概率最大。
這個問題很重要,因?yàn)檫@是最常見的情況。很多時候我們只有可見結(jié)果,不知道HMM模型里的參數(shù),我們需要從可見結(jié)果得到出這些參數(shù),使這個模型是一個最優(yōu)的模型,這是建模的一個必要步驟。

正式定義

好了直觀的理解完成了,我們來給出音隱馬爾可夫模型的基本定義
我們將上述直觀的理解抽象表達(dá)一下:

  • 基本元素
    隱馬爾可夫模型可以用5個基本元素來描述,包括兩個狀態(tài)集和三個狀態(tài)矩陣
    1)隱含狀態(tài)S
    例如S = [S1, S2, S3]
    2)可觀測狀態(tài)集O
    例如O = [O1, O2, O3, O4, O5]
    (注意:隱含狀態(tài)集S不一定需要和可觀測狀態(tài)集O的數(shù)目一致)
    3)初始狀態(tài)概率矩陣π
    表示隱含狀態(tài)S在初始狀態(tài)時的概率矩陣,例如π = [P(S1), P(S2), P(S3)] = [P1, P2, P3]
    4)隱含狀態(tài)轉(zhuǎn)移概率矩陣A
    表示各個隱含狀態(tài)之間的狀態(tài)轉(zhuǎn)移概率,aij表達(dá)t時刻為Si的狀態(tài),在t+1時刻變換為Sj的概率。
    隱含狀態(tài)轉(zhuǎn)移矩陣

    5)觀測狀態(tài)轉(zhuǎn)移概率矩陣B
    觀測狀態(tài)轉(zhuǎn)移矩陣

    令N表示隱含狀態(tài)數(shù)目,M表示可觀測狀態(tài)數(shù)目,則

Bij = P(Oi | Sj),1<=i<=N, 1<=j<=M

表示著在t時刻,隱含狀態(tài)為Sj的情況下,可觀察狀態(tài)為Oi的概率,也就是我們上述的輸出概率。

總結(jié):一般來說,我們可以使用一個三元組來表示隱馬爾可夫模型

λ = (π, A, B)

一旦確定了這個隱馬爾可夫模型,我們就可以使用它來解決各種各樣的問題了。根據(jù)上述說法,我們知道隱馬爾可夫模型可以解決的問題有三類,前兩類實(shí)際上是一個模式識別問題:解碼和評估,后一類是模型學(xué)習(xí)問題。

相關(guān)算法

  • viterbi算法
  • 前向算法
  • EM

如何使用隱馬爾可夫模型進(jìn)行和弦識別

《Chord Segmentation and Recognition using EM-Trained Hidden Markov Models》這篇論文中,使用每個和弦對應(yīng)一個隱藏狀態(tài)(隱藏狀態(tài)數(shù)量已知),每一幀的PCP譜圖作為可見狀態(tài)(可見狀態(tài)鏈),我們采用EM算法訓(xùn)練模型。在得到HMM之后之后,我們就可以采用viterbi方法求出概率最大的隱藏序列(最大似然路徑),并對齊到每個時間幀上。最后,闡述一種基于旋轉(zhuǎn)PCP的加權(quán)平均算法來處理原始的PCP,這種方法計算所有音級的加權(quán)平均值(通過標(biāo)注和弦出現(xiàn)的頻率進(jìn)行加權(quán)),然后將加權(quán)平均PCP向量解旋回到它們的原始位置,并為每個和弦構(gòu)建新的,正則化的模型的位置。


image.png

之后《A System for Acoustic Chord Transcription and Key Extrac- tion from Audio Using Hidden Markov Models Trained on Synthe- sized Audio》和《Acoustic Chord Transcription and Key Extraction from Audio Using Key-Dependent HMMs Trained on Synthesized Audio》這兩篇論文根據(jù)和弦的基音區(qū)分方法,定義 24 個基音,為每個基音建立一個 HMM,構(gòu)造 Key-Dependent HMM 模型. 對于輸入的音樂信號,系統(tǒng)利用 Viterbi 解碼在 24 個模型中選擇一個最大可能的基調(diào)模型,從而確定輸入音樂的基調(diào),并從對應(yīng)于這個基調(diào)模型的最優(yōu)狀態(tài)路徑來得到和弦序列.


搬運(yùn):https://www.zhihu.com/question/20962240/answer/33438846

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容