您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何使用Python生成基于馬爾可夫鏈的偽隨機文本,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
首先看一下來自Wolfram的定義
馬爾可夫鏈是隨機變量{X_t}的集合(t貫穿0,1,...),給定當前的狀態(tài),未來與過去條件獨立。
Wolfram的定義更清楚一點兒
...馬爾可夫鏈是具有馬爾可夫性質(zhì)的隨機過程...[這意味著]狀態(tài)改變是概率性的,未來的狀態(tài)僅僅依賴當前的狀態(tài)。
馬爾可夫鏈具有多種用途,現(xiàn)在讓我看一下如何用它生產(chǎn)看起來像模像樣的胡言亂語。
算法如下,
找一個作為語料庫的文本,語料庫用于選擇接下來的轉(zhuǎn)換。
從文本中兩個連續(xù)的單詞開始,最后的兩個單詞構(gòu)成當前狀態(tài)。
生成下一個單詞的過程就是馬爾可夫轉(zhuǎn)換。為了生成下一個單詞,首先查看語料庫,查找這兩個單詞之后跟著的單詞。從它們中隨機選擇一個。
重復(fù)2,直到生成的文本達到需要的大小。
代碼如下:
為了看到一個示例結(jié)果,我們從古騰堡計劃中拿了沃德豪斯的《My man jeeves》作為文本,示例結(jié)果如下。
馬爾可夫算法怎樣呢?
最后兩個單詞是當前狀態(tài)。
接下來的單詞僅僅依賴最后兩個單詞,也就是當前狀態(tài)。
接下來的單詞是從語料庫的統(tǒng)計模型中隨機選擇的。
這是一個示例文本。
這個文本對應(yīng)的語料庫像這樣,
現(xiàn)在如果我們從"brown fox"開始,接下來的單詞可以是"jumps"或者"who"。如果我們選擇"jumps",然后當前的狀態(tài)就變成了"fox jumps",再接下的單詞就是"over",之后依此類推。
提示
我們選擇的文本越大,每次轉(zhuǎn)換的選擇更多,生成的文本更好看。
狀態(tài)可以設(shè)置為依賴一個單詞、兩個單詞或者任意數(shù)量的單詞。隨著每個狀態(tài)的單詞數(shù)的增加,生成的文本更不隨機。
不要去掉標點符號等。它們會使語料庫更具代表性,隨機文本更好看。
關(guān)于如何使用Python生成基于馬爾可夫鏈的偽隨機文本就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。