隱馬爾科夫鏈(HMM)

 

目錄

闡述

1.1 觀測序列O出現的概率

1.1.1 窮舉法(直接計算法)

1.1.2前向算法

1.1.3 後向算法

1.2 根據觀測序列預測狀態序列

1.2.1 維特比算法(動態規劃)

1.3 估計模型參數

參考文獻



闡述

隱馬爾可夫模型(Hidden Markov Model,HMM)是統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程。

用一個簡單的例子來闡述:

假設我手裏有三個不同的骰子。 

第一個骰子6個面(稱這個骰子爲D6),每個面(1,2,3,4,5,6)出現的概率是1/6。 

第二個骰子是個四面體(稱這個骰子爲D4),每個面(1,2,3,4)出現的概率是1/4。 

第三個骰子有八個面(稱這個骰子爲D8),每個面(1,2,3,4,5,6,7,8)出現的概率是1/8。    

 

假設開始擲骰子,先從三個骰子裏挑一個,挑到每一個骰子的概率都是1/3。然後擲骰子,得到一個數字1,2,3,4,5,6,7,8中的一個。不停的重複上述過程,會得到一串數字,每個數字都是1,2,3,4,5,6,7,8中的一個。例如可能得到這麼一串數字(擲骰子10次):1 6 3 5 2 7 3 5 2 4

這串數字叫做可見狀態鏈書中的觀測數據。但是在隱馬爾可夫模型中,不僅僅有這麼一串可見狀態鏈,還有一串隱含狀態鏈狀態序列。在這個例子裏,這串隱含狀態鏈就是你用的骰子的序列。比如,隱含狀態鏈有可能是:D6 D8 D8 D6 D4 D8 D6 D6 D4 D8

一般來說,HMM中說到的馬爾可夫鏈其實是指隱含狀態鏈,因爲隱含狀態(骰子)之間存在轉換概率transition probability)。

可見狀態之間沒有轉換概率,但是隱含狀態和可見狀態之間有一個概率叫做輸出概率(emission probability)。就我們的例子來說,六面骰(D6)產生1的輸出概率是1/6。

採用《統計學習方法》書上的定義,將上述描述定義如下:

Q爲所有可能發生的狀態序列(共N個),V是所有可能的觀測數列集合(共M個)。

                                                     Q=\left\{q_{1}, q_{2}, \cdots, q_{N}\right\}, \quad V=\left\{v_{1}, v_{2}, \cdots, v_{M}\right\}

I是長度爲T的狀態序列,O是對應的觀測數據序列。

                                                         I=\left(i_{1}, i_{2}, \cdots, i_{T}\right), \quad O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)

           A是狀態轉移概率矩陣

                                                                               A=\left[a_{i j}\right]_{N \times N}

其中,a_{i j}=P\left(i_{t+1}=q_{j} | i_{t}=q_{i}\right), \quad i=1,2, \cdots, N ; j=1,2, \cdots, N,是在時刻t處於狀態q_{i}的條件下在時刻t+1轉移到狀態q_{j}的概率。

B是觀測概率矩陣

                                                                              B=\left[b_{j}(k)\right]_{N \times M}

其中,b_{j}(k)=P\left(o_{t}=v_{k} | i_{t}=q_{j}\right), \quad k=1,2, \cdots, M ; j=1,2, \cdots, N,是在時刻t處於q_{j}狀態的條件下生成觀測序列v_{k}的概率。

\pi是初始狀態概率向量:

                                                                                    \pi=\left(\pi_{i}\right)

其中,\pi_{i}=P\left(i_{1}=q_{i}\right), \quad i=1,2, \cdots, N,是時刻t=1處於狀態q_{i}的概率。

隱馬爾可夫模型由初始狀態概率向量\pi,狀態轉移概率矩陣A和觀測概率矩陣B決定。\pi和A決定狀態序列,B決定觀測序列。因此,隱馬爾可夫模型\lambda可以用三元符號表示,即

                                                                                 \lambda=(A, B, \pi)

   

隱馬爾可夫模型有3個基本問題:

(1)概率計算問題,在給定模型\lambda=(A, B, \pi)和觀測序列O的情況下,計算在模型\lambda=(A, B, \pi)下觀測序列O出現的概率P(O | \lambda);知道骰子有幾種(隱含狀態數量),也知道每種骰子擲出來數字的概率(觀測概率矩陣),骰子之間如何轉換比如現在是D4,下一個是D4,D6,D8的概率(狀態轉移概率矩陣),根據擲骰子擲出的結果(觀測序列),想知道擲出這個結果(觀測序列)的概率。

(2)預測問題(解碼問題),已知模型\lambda=(A, B, \pi)和觀測序列O,求給定觀測序列條件概率P(I | O)最大的狀態序列I ,即給定觀測序列,求最有可能的對應的狀態序列;骰子有幾種(隱含狀態數量),也知道每種骰子擲出來數字的概率(觀測概率矩陣),骰子之間如何轉換(狀態轉移概率矩陣),根據擲骰子擲出的結果(觀測序列),想知道每次(骰子共擲了10次)擲出來的都是哪種骰子(狀態序列)

(3)學習問題,已知觀測序列O,估計模型參數\lambda=(A, B, \pi)參數,使得在該模型下觀測序列概率最大P(O | \lambda),用極大似然估計的方法估計參數;知道骰子有幾種(隱含狀態數量),觀測到很多次擲骰子的結果(觀測序列),想反推出每種骰子擲出來數字的概率(觀測概率矩陣),骰子之間如何轉換(狀態轉移概率矩陣)

1.1 觀測序列O出現的概率

1.1.1 窮舉法(直接計算法)

通過列舉所有可能產生觀測序列O的狀態,對於各個狀態下求解產生觀測序列的概率。然後對所有可能的概率求和,可以得到P(O | \lambda)

拿上面的骰子舉例子,求最終觀測預測爲1 6 3 5 2 7 3 5 2 4的概率。

第一步:列舉出可能產生此序列的狀態,(1)可能序列:D4 D6 D4 D6 D4 D8 D8 D6 D4 D4(2)可能序列:D4 D6 D6 D8 D8 D8 D4 D6 D6 D4....

第二步:計算出產生這些狀態的概率,然後在求出這些狀態產生1 6 3 5 2 7 3 5 2 4的概率,將對應的狀態和產生1 6 3 5 2 7 3 5 2 4的概率相乘(聯合概率)

第三步:將所有可能概率求和,得到P(O | \lambda)

上述過程用公式表示爲:

狀態序列I的概率P(I | \lambda)爲:

                                                               P(I | \lambda)=\pi_{i_{1}} a_{i_{1} i_{2}} a_{i_{2} i_{3}} \cdots a_{i_{r-1}, i_{r}}

這個狀態下,觀測序列O的概率爲P(O |I, \lambda)

                                                           P(O | I, \lambda)=b_{i_{1}}\left(o_{1}\right) b_{i_{2}}\left(o_{2}\right) \cdots b_{i_{r}}\left(o_{T}\right)

O和I同時出現的概率P(O ,I| \lambda)爲:

                               P(O, I | \lambda)=P(O | I, \lambda) P(I | \lambda) =\pi_{i_{1}} b_{i_{1}}\left(o_{1}\right) a_{i_{1} i_{2}} b_{i_{2}}\left(o_{2}\right) \cdots a_{i_{r-1}, i_{T}} b_{i_{r}}\left(o_{T}\right)

再對所有可能的狀態序列I求和,得到觀測序列O的概率P(O | \lambda)

                    P(O | \lambda)=\sum_{I} P(O | I, \lambda) P(I | \lambda) =\sum_{i_{1}, i_{2}, \cdots, i_{T}} \pi_{i_{1}} b_{i_{1}}\left(o_{1}\right) a_{i_{1} i_{2}} b_{i_{2}}\left(o_{2}\right) \cdots a_{i_{r-1} i_{T}} b_{i_{r}}\left(o_{T}\right)

但是這樣做工作量很大,是O\left(T N^{T}\right)階的,所以利用前向-後向算法。

1.1.2前向算法

這個前向算法的意思就是每次一個狀態一個狀態的來,假設初始狀態爲D4,那麼下一個狀態爲D4,D6,D8,的概率分別爲1/3,1/3,1/3,下下一個狀態爲D4的概率爲:D4->D4+D6->D4+D8->D4=(1/3)*(1/3)+(1/3)*(1/3)+(1/3)*(1/3)

以此類推,在上述骰子問題中,第n次轉移都是計算前n-1次狀態累加而成的,所以避免了求解所有的狀態概率,節約時間,所以前向算法的複雜度爲O\left(T N^{2}\right),簡要說明問題可以看下圖。

(第一個狀態爲D4,第二個狀態爲D4、D6、D8的概率在第一次的基礎上計算,第三次的狀態爲D4、D6、D8又在前一次的基礎上計算)

上述過程,用公式表述如下:

首先定義前向概率:(t時刻的部分觀測序列爲o_{1}, o_{2}, \cdots, o_{t},且狀態爲q_{i}的概率爲前向概率)

                                                   \alpha_{t}(i)=P\left(o_{1}, o_{2}, \cdots, o_{t}, i_{t}=q_{i} | \lambda\right)

可以遞推求出前向概率\alpha_{t}(i)和觀測序列P(O | \lambda)

遞推算法如下:

1,初值:

                                                              \alpha_{1}(i)=\pi_{i} b_{i}\left(o_{1}\right)

2,遞推,對於t=1,2,3,...,T-1

                                          \alpha_{t+1}(i)=\left[\sum_{j=1}^{N} \alpha_{i}(j) a_{j i}\right] b_{i}\left(o_{t+1}\right), \quad i=1,2, \cdots, N

3,終止

                                                             P(O | \lambda)=\sum_{i=1}^{N} \alpha_{T}(i) 

1.1.3 後向算法

           後向算法和前向算法差不多的道理,只不過這是從後往前推導,從最後一個觀測序列開始。

定義後向概率:(在t時刻狀態爲q_{i}的,從t+1到T的部分觀測序列爲O_{t+1}, O_{t+2}, \cdots, O_{T}的概率爲後向概率)

                                                   \beta_{t}(i)=P\left(o_{t+1}, o_{t+2}, \cdots, o_{T} | i_{t}=q_{i}, \lambda\right)

(1)最後時刻的所有狀態q_{i}規定爲\beta_{T}(i)=1

                                                       \beta_{T}(i)=1, \quad i=1,2, \cdots, N

(2)對於t=T-1,T-2,...,1

                                            \beta_{t}(i)=\sum_{j=1}^{N} a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j), \quad i=1,2, \cdots, N 

(3)最終求得的觀測概率爲

                                                           P(O | \lambda)=\sum_{i=1}^{N} \pi_{i} b_{i}\left(o_{1}\right) \beta_{1}(i)

1.2 根據觀測序列預測狀態序列

繼續拿上面的骰子舉例子,假設最終觀測預測爲1 6 3 5 2 7 3 5 2 4,求解這個序列所對應的最有可能的狀態序列是什麼?

1.2.1 維特比算法(動態規劃)

           維特比算法實際上是用動態規劃解馬爾科夫模型預測問題,即用動態規劃求解概率最大的路徑(最優路徑)。最優路徑求解,必須保證每個路徑之間都必須是最優的,否則其中就會有一條路徑代替它。 

以上面的骰子序列作爲例子,假設D4、D6、D8產生1的概率分別爲:1/4,1/6,1/8,故1對應的狀態序列最優爲D4,假設骰子之間轉移概率相同,那麼6爲D6、D8的概率分別爲1/6,1/8,因此第二個狀態爲D6,(如果狀態轉移概率不同,那麼有可能第二個篩子狀態爲D8的可能性更大),順着這樣的思想依次求解,最終求得最後的狀態序列。

上述描述過程,也就是維特比算法的過程,在這個過程中,既求解到了最優路徑,又求解到了最大概率。

首先定義兩個變量\delta\psi,定義在時刻t狀態爲i的所有單個路徑\left(i_{1}, i_{2}, \cdots, i_{t}\right)中概率最大值的爲

                            \delta_{t}(i)=\max _{i_{1}, i_{2}, \cdots, i_{+1}} P\left(i_{t}=i, i_{t-1}, \cdots, i_{1}, o_{t}, \cdots, o_{1} | \lambda\right), \quad i=1,2, \cdots, N

由上述推導過程可知變量\delta的遞推公式爲,

             \delta_{t+1}(i)=\max _{i_{1}, i_{2}, \cdots, i_{t}} P\left(i_{t+1}=i, i_{t}, \cdots, i_{1}, o_{t+1}, \cdots, o_{1} | \lambda\right)

                         =\max _{1<j<N}\left[\delta_{t}(j) a_{j i}\right] b_{i}\left(o_{i+1}\right), \quad i=1,2, \cdots, N ; t=1,2, \cdots, T-1

定義在時刻t狀態爲i的所有單個路徑\left(i_{1}, i_{2}, \cdots, i_{t}\right)中概率最大的路徑的第t-1個結點爲:

                                              \psi_{i}(i)=\arg \max _{1 \leq j \leq N}\left[\delta_{t-1}(j) a_{j i}\right], \quad i=1,2, \cdots, N

維特比算法過程如下:

(1)初始化(初始狀態向量乘以第一個觀測o_{1}):

                                                       \delta_{1}(i)=\pi_{i} b_{i}\left(o_{1}\right), \quad i=1,2, \cdots, N

                                                       \psi_{1}(i)=0, \quad t=1,2,...,N

(2)遞推,對於t=2,3,...,T

                                       \delta_{t}(i)=\max _{1 \leq j<N}\left[\delta_{t-1}(j) a_{j i}\right] b_{i}\left(O_{t}\right) i=1,2,...,N

(說明一下:t-1時刻狀態[假設D4]乘以轉移概率(0.1,0.2, 0.7)那麼t時刻的概率分別爲0.1,0.2, 0.7;再用t時刻的狀態去乘以觀測概率矩陣(0.8,0.1,0.1)這個的聯合概率乘積中最大才是t時刻的最終狀態,因爲可能小狀態概率對應大觀測概率)

記錄當前狀態:

                                           \psi_{t}(i)=\arg \max _{1\leqslant j\leqslant N}\left[\delta_{t-1}(j) a_{j i}\right] i=1,2,...,N

(3)終止:

                                                               P^{*}=\max _{1 \leqslant i \leqslant N} \delta_{T}(i)

                                                            i_{T}^{*}=\arg \max _{1 \leq i \leq N}\left[\delta_{T}(i)\right]

(4)最優路徑回溯.對於t=T-1, T-2, \cdots, 1

                                                             i_{t}^{*}=\psi_{t+1}\left(i_{t+1}^{*}\right)

求得的最優路徑也就是最可能的狀態序列爲:I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right)

解釋一下這裏爲什麼是最優路徑回溯

因爲\psi_{t}(i)記錄的是當前t時刻、狀態爲i時,第t-1個結點是哪個的狀態。用骰子距離,假設t-1時刻D4、D6、D8的狀態概率分別爲(0.1,0.4,0.5),\psi_{t}(D4) =max[(0.1,0.4,0.5)*(D4->D4的轉化概率、D6->D4的轉化概率、D8->D4的轉化概率)],假設這個過程中,D6->D4轉化概率最大,故\psi_{t}(D4) =D6;當計算t時刻,狀態爲D6的上一個結點時,同理但是此時\psi_{t}(D6)可能等於D8。因此\psi_{t}(i)僅是記錄上一結點到這一節點最大的概率。

當通過i_{T}^{*}=\arg \max _{1 \leq i \leq N}\left[\delta_{T}(i)\right]公式,計算出T時刻,狀態爲i時,就可以利用公式i_{t}^{*}=\psi_{t+1}\left(i_{t+1}^{*}\right),計算出每一次迭代過程存儲的最大概率下的上一結點信息,因此這裏涉及到一個回溯的過程。

1.3 估計模型參數

用的EM算法。因爲狀態序列看不見(隱藏變量),只能用觀測序列(觀測數據)去推導。

先求解函數Q(E步),再極大化求解參數(M步)。

由EM算法的Q函數可以寫出如下推導:

                                             Q(\lambda, \overline{\lambda})=E_{I}[\log P(O,I | \lambda) |O, \overline{\lambda}]

                                                           =\sum_{\mathbf{I}} \log P(O, I | \lambda) \cdot P(I | O, \overline{\lambda})

                                                            =\sum_{I} \log P(O, I | \lambda) \cdot \frac{P(O,I | \overline{\lambda})}{P(O | \overline{\lambda})}

由於P(O | \overline{\lambda})對於\lambda是一個常數,故(其中\overline{\lambda}是上一次迭代出來的,是一個常數,\lambda是一個變量):

                                           Q(\lambda, \overline{\lambda})=\sum_{\mathbb{I}} \log P(O,I|\lambda) \cdot P(O, I | \overline{\lambda})

由於:

                                           P(O | \overline{\lambda})=\pi_{i 1} b_{i}(o_{1})a_{i_{1}i_{2}} b_{i_{2}}\left(o_{2}\right)....a_{i_{T-1}i_{T}} b_{i_{T}}({o_{T}})

故:

Q(\lambda, \overline{\lambda})=\sum_{I} \log \pi_{i 1} P(O,I| \overline\lambda)+\sum_{I}\left(\sum_{t=1}^{T-1} \log a_{i_{t}} a_{i_{t+1}}\right) \cdot P(O,I | \overline{\lambda})+\sum_{I}\left(\sum_{t=1}^{T-1} \log b_{i_{t}}(o_{t})\right) \cdot P(O,I | \overline{\lambda})

至此E步完成。構造出來了Q函數,下面就是對Q函數極大化然後更新參數(M步)。

M步:由於模型中有三個參數要求解,\pi,a,b。並且Q函數裏面三個參數是求和的形式,所以求解\pi,a,b只取其中一部分就行了。

《統計學習方法》書中給出了\pi的求解,所以我列一個a的求解。

由於\sum_{j=1}^{N} a_{i j}=1(爲什麼是j不是i呢?可以看一下a狀態轉移概率矩陣,每一行都是一個狀態(t-1時刻)向下一個時刻(t時刻)所有狀態轉移的概率,所以概率爲1)

利用拉格朗日函數求解,構造的拉格朗日函數形式如下:

                           \sum_{t=1}^{T} \sum_{i=1}^{N} \sum_{j=1}^{N}\log _{a_{i j}}\log _{a_{i j}}P(O,i_{t}=i,i_{t+1}=j|\overline\lambda)+\gamma \left(\sum_{j=1}^{n} a_{i j-1}\right)

對上式a_{i j}求導數得,

                                                    \frac{P\left(O, i_{t}=i, i_{t+1}=j | \overline\lambda\right)}{a_{i j}}+\gamma =0

                                                  {P\left(O, i_{t}=i, i_{t+1}=j | \overline\lambda\right)}+\gamma{a_{i j}} =0                                   (1)

對上式所有j求和可得:

                                                          \gamma=-P(O, i_{t}=i |\overline{\lambda})

把上述結果帶入(1)可得:

                                                   a_{ij}=\frac{\sum_{t=1}^{T-1} P\left(O, i_{t}=i, i_{t+1}=j | \overline{\lambda}\right)}{\sum_{t=1}^{T-1} P\left(O, i_{t}=i | \overline{\lambda}\right)}

以上述同樣的方法也可以求解出其他兩個變量:

                                                       \pi_{i}=\frac{P\left(O, i_{1}=i| \overline\lambda\right)}{P(O=i |\overline{\lambda})}

                                        b_{j}(k)=\frac{\sum_{t=1}^{N}P\left(O, i_{t}=j )I(o_{t}=v_{k})| \overline\lambda\right)}{\sum_{t=1}^{N}P(O, i_{t}=j |\overline{\lambda})}  、

擴展:

(1)給定模型\lambda和觀測序列O,在時刻t處於狀態q_{i}的概率,記爲:

                                                        \gamma_{t}(i)=P\left(i_{i}=q_{i} | {O}, \lambda\right)=\frac{P\left(i_{t}=q_{i}, O | \lambda\right)}{P(O | \lambda)}

由前向概率和後向概率定義可知,

                                                        {\alpha_{t}(i) \beta_{t}(i)}=P\left(i_{t}=q_{i}, O | \lambda\right)

                                              \gamma_{t}(i)=\frac{\alpha_{t}(i) \beta_{t}(i)}{P(O | \lambda)}=\frac{\alpha_{t}(i) \beta_{t}(i)}{\sum_{j=1}^{N} \alpha_{t}(j) \beta_{t}(j)}

即利用\gamma_{t}(i)刻畫,單個時刻的狀態概率。

(2)給定模型\lambda和觀測序列O,在時刻t處於狀態q_{i}的概率,t+1時刻處於q_{j}的狀態概率爲:

                                                   \xi_{t}(i, j)=P\left(i=q_{i}, i_{t+1}=q_{j} | O, \lambda\right)

利用上述方法有,

                         \xi_{t}(i, j)=\frac{P\left(i_{i}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)}{P(O | \lambda)}=\frac{P\left(i_{t}=q_{i}, i_{i+1}=q_{j}, O | \lambda\right)}{\sum_{i=1}^{N} \sum_{j=1}^{N} P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)}

                                   P\left(i_{t}=q_{i}, i_{i+1}=q_{j}, O | \lambda\right)=\alpha_{i}(i) a_{i} b_{j}\left(o_{i+1}\right) \beta_{i+1}(j)

                                                  \xi_{i}(i, j)=\frac{\alpha_{i}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j)}{\sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j)}

因此在利用學習算法(EM)算法求解出各個參數後,

可以進行進一步化簡表示,即

                                a_{i j}=\frac{\sum_{t=1}^{T-1} P\left(O, i_{t}=i, i_{t+1}=j | \overline{\lambda}\right)}{\sum_{t=1}^{T-1} P\left(O, i_{t}=i | \overline{\lambda}\right)}=\frac{\sum_{i=1}^{T-1} \xi_{t}(i, j)}{\sum_{i=1}^{T-1} \gamma_{t}(i)}                (1)

                        b_{j}(k)=\frac{\sum_{i=1}^{T} P\left(O, i_{t}=j | \overline{\lambda}\right) I\left(o_{t}=v_{k}\right)}{\sum_{i=1}^{T} P\left(O, i_{t}=j | \overline{\lambda}\right)}=\frac{\sum_{t=1,o_{t}=v_{k}}^{T} \gamma_{t}(j)}{\sum_{t=1}^{T} \gamma_{t}(j)}            (2)

                                                \pi_{i}=\frac{P\left(O, i_{1}=i| \overline\lambda\right)}{P(O=i |\overline{\lambda})}=\gamma_{1}(i)                                           (3)

故學習問題可以利用骰子模型,這樣做實驗。

(1)給定初始參數:a_{i j}b_{j}(k)\pi_{i}

(2)

             A.開始擲篩子,記錄觀測序列(1次實驗,擲10次),得到10組觀測序列如下:

               第一組:1,3,5,7,3,1,3,2,6,8

               第二組:2,3,6,4,1,8,7,5,3,4

               第三組:6,3,1,5,3,2,7,2,1,5

               以此類推......

           B.利用給定初始參數,計算10組觀測序列對應的最可能的狀態序列(D4簡寫爲4)如下:

              第一組:4,6,4,4,8,4,6,4,6,8

              第二組:4,6,8,4,6,8,8,4,4,6

              第三組:6,4,4,4,6,4,8,4,4,6

              以此類推..... 

         C.根據B步驟得到的狀態序列,和公式(1)(2)(3)更新參數a_{i j}b_{j}(k)\pi_{i}

(3) 重複步驟(2),直至參數穩定在某一數值,或者兩次參數更新小於某一接受範圍。

上述實驗思想原理產生於鮑姆-韋爾奇算法(Baum-Welch Algorithm),每一次迭代都是估計新的模型參數,使得輸出的概率最大化,因此這個過程叫做期望最大化(Expectation-Maximization)簡稱EM。

通過上述實驗步驟,就可以利用EM算法,得到HMM的學習參數。

上述實驗步驟,是我自己想出來的,不具有特別嚴謹性。(如有不妥,歡迎指教)      

參考文獻:

列舉的模型來自:https://blog.csdn.net/zxm1306192988/article/details/78595933

公式來自:《統計學習方法》-李航

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章