欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

人工智能Text Generation文本生成原理示例詳解

 更新時間:2023年01月05日 15:45:59   作者:我是王大你是誰  
這篇文章主要為大家介紹了Text Generation文本生成原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

承上啟下

上一篇文章我們介紹了 RNN 相關的基礎知識,現(xiàn)在我們介紹文本生成的基本原理,主要是為了能夠靈活運用 RNN 的相關知識,真實的文本生成項目在實操方面比這個要復雜,但是基本的原理是不變的,這里就是拋磚引玉了。

RNN 基礎知識回顧鏈接:http://www.dbjr.com.cn/article/228994.htm

原理

我們這里用到了 RNN 來進行文本生成,其他的可以對時序數(shù)據(jù)進行建模的模型都可以拿來使用,如 LSTM 等。這里假如已經(jīng)訓練好一個 RNN 模型來預測下一個字符,假如我們限定了輸入的長度為為 21 ,這里舉例說明:

input:“the cat sat on the ma”

把 21 個字符的文本分割成字符級別的輸入,輸進到模型中,RNN 來積累輸入的信息,最終輸出的狀態(tài)向量 h ,然后經(jīng)過全連接層轉換和 Softmax 分類器的分類,最終輸出是一個候選字符的概率分布。

在上面的例子中,輸入“the cat sat on the ma”,最后會輸出 26 個英文字母和其他若干用到的字符(如可能還有標點,空格等)的概率分布。

"a" --> 0.05
"b" --> 0.03
"c" --> 0.054
...
"t" --> 0.06
...
"," --> 0.01
"。" --> 0.04

此時預測的下一個字符“t”概率值最大,所以選擇“t”作為下一個字符,我們之后將“t”拼接到“the cat sat on the ma”之后得到“the cat sat on the mat”,然后我們?nèi)『?21 個字符“he cat sat on the mat”,輸入到模型中

input:“he cat sat on the mat”

此時加入預測下一個字符的概率分布中“。”的概率最大,我們就取“。”拼接到“the cat sat on the mat”之后,得到“the cat sat on the mat。”,如果還需要繼續(xù)進行下去,則不斷重復上面的過程。如果我們的文本生成要求到此結束,則最終得到了文本

the cat sat on the mat。

通常我們要用和目標相同的數(shù)據(jù)進行訓練。如想生成詩詞,就用唐詩宋詞去訓練模型,像生成歌詞,就用周杰倫的歌詞去訓練。

選取預測的下一個字符的三種方式

一般在得到概率分布,然后去預測下一個字符的時候,會有三種方法。

第一種方法就是像上面提到的,選擇概率分布中概率最大的字符即可。這種方法雖然最簡單,但是效果并不是最好的,因為幾乎預測字符都是確定的,但是不能達到多元化的有意思的字符結果。公式如下:

next_index = np.argmax(pred)

第二種方法會從多項分布中隨機抽樣,預測成某個字符的概率為多少,則它被選取當作下一個字符的概率就是多少。在實際情況中往往概率分布中的值都很小,而且很多候選項的概率相差不大,這樣大家被選擇的概率都差不多,下一個字符的預測隨機性就很強。假如我們得到預測成某個正確字符的概率為 0.1 ,而預測成其他幾個字符的概率也就只是稍微低于 0.1 ,那么這幾個字符被選取當作下一個字符的概率都很相近。這種方式過于隨機,生成的文本的語法和拼寫錯誤往往很多。公式如下:

next_onehot = np.random.multimomial(1, pred, 1)
next_index = np.argmax(next_onehot)

第三種方法是介于前兩種方法之間的一種,生成的下一個字符具有一定的隨機性,但是隨機性并不大,這要靠 temperature 參數(shù)進行調(diào)節(jié), temperature 是在 0 到 1 之間的小數(shù),如果為 1 則和第一種方法相同,如果為其他值則可以將概率進行不同程度的放大,這表示概率大的字符越大概率被選取到,概率小的字符越小概率被選擇到,這樣就可以有明顯的概率區(qū)分度,這樣就不會出現(xiàn)第二種方法中的情況。公式如下所示:

pred = pred ** (1/temperature)
pred = pred / np.sum(pred)

訓練

假如我們有一句話作為訓練數(shù)據(jù),如下:

Machine learning is a subset of artificial intelligence.

我們設置兩個參數(shù) len = 5 和 stride = 3 ,len 是輸入長度,stride 是步長,我們將輸入 5 個字符作為輸入,然后輸入下一個字符作為標簽,如下

input:“Machi”
target:“n”

然后因為我們設置了 stride 為 3 ,所以我們在文本中向右平移 3 位,然后又選擇 5 個字符作為輸入,之后的一個字符作為標簽,如下:

input:“hine ”
target:“l(fā)”

如此往復,不斷向右平移 3 個字符,將新得到的 5 個字符和接下來的 1 個字符作為標簽作為訓練數(shù)據(jù)輸入到模型中,讓模型學習文本內(nèi)部的特征。其實訓練數(shù)據(jù)就是(字符串,下一個字符)的鍵值對。此時得到的所有訓練數(shù)據(jù)為:

input:'Machi'
target:'n'
input:'hine '
target:'l'
input:'e lea'
target:'r'
...	
input:'ligen'
target:'c'

然后用這些訓練數(shù)據(jù)進行大量的訓練得到的模型,就可以用來生成新的文本啦!。

總結

訓練模型的流程大致需要三個過程:

1.將訓練數(shù)據(jù)整理成(segment,next_char)的組合

2.用 one-hot 將字符編碼,segment 編碼成 l*v 的向量,next_char 編碼成 v*1 的向量,l 是輸入長度,v 是字符總個數(shù)

3.構建一個網(wǎng)絡,輸入是 l*v 的矩陣,然后通過 RNN 或者 LSTM 捕捉文本特征,然后將最后的特征進行全連接層進行轉換,全連接層用 Softmax 作為激活函數(shù),最后輸出一個 v*1 的概率分布,下一個字符的選擇方式可以看上面的內(nèi)容。

生成文本的流程大致需要三個過程:

一般在已經(jīng)訓練好模型的情況下,我們要輸入字符串當作種子輸入,讓其作為我們接下來要生成文本的開頭,然后不斷重復下面的過程:

  •     a)把輸入使用 one-hot 向量表示,然后輸入到模型中
  •     b)在神經(jīng)網(wǎng)絡輸出的概率分布中選取一個字符,作為預測的下一個字符
  •     c)將預測的字符拼接到之前的文本后,選取新的輸入文本

案例

這里有我之前實現(xiàn)的兩個小案例,可以用來復習 RNN 和 LSTM 的相關知識,覺好留贊。

深度學習TextRNN的tensorflow1.14實現(xiàn)示例

深度學習TextLSTM的tensorflow1.14實現(xiàn)示例

另外 github 上也有很多開源的文本生成項目,項目實現(xiàn)要稍微復雜一點,但是原理和我介紹的一樣,我這里介紹兩個。

https://github.com/stardut/Text-Generate-RNN

https://github.com/wandouduoduo/SunRnn

以上就是Text Generation文本生成原理示例詳解的詳細內(nèi)容,更多關于Text Generation文本生成的資料請關注腳本之家其它相關文章!

相關文章

  • 簡單了解python PEP的一些知識

    簡單了解python PEP的一些知識

    這篇文章主要介紹了簡單了解python PEP的一些知識,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 教你使用Python的pygame模塊實現(xiàn)拼圖游戲

    教你使用Python的pygame模塊實現(xiàn)拼圖游戲

    pygame模塊是一個可以跨平臺的模塊,其設計目的就是為電子游戲而設計,能夠支持圖片和聲音,下面這篇文章主要給給大家介紹了關于使用Python的pygame模塊實現(xiàn)拼圖游戲的相關資料,需要的朋友可以參考下
    2022-07-07
  • PyQt5實現(xiàn)下載進度條效果

    PyQt5實現(xiàn)下載進度條效果

    這篇文章主要為大家詳細介紹了PyQt5實現(xiàn)下載進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python數(shù)據(jù)處理之savetxt()和loadtxt()使用詳解

    Python數(shù)據(jù)處理之savetxt()和loadtxt()使用詳解

    這篇文章主要介紹了Python數(shù)據(jù)處理之savetxt()和loadtxt()使用詳解,NumPy提供了多種存取數(shù)組內(nèi)容的文件操作函數(shù),保存數(shù)組數(shù)據(jù)的文件可以是二進制格式或者文本格式,今天我們來看看savetxt()和loadtxt()的用法,需要的朋友可以參考下
    2023-08-08
  • Python趣味挑戰(zhàn)之pygame實現(xiàn)無敵好看的百葉窗動態(tài)效果

    Python趣味挑戰(zhàn)之pygame實現(xiàn)無敵好看的百葉窗動態(tài)效果

    最近寫了很多期關于pygame的案例和知識點,自己也收獲了很多知識,也在這個過程中成長了不少, 這次還是圍繞surface對象進行詳細介紹,并形成完整的案例過程,文中有非常詳細實現(xiàn)百葉窗動態(tài)效果的代碼示例,需要的朋友可以參考下
    2021-05-05
  • Django配置Redis使用的方法步驟

    Django配置Redis使用的方法步驟

    本文主要介紹了Django配置Redis使用的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Python 語言實現(xiàn)六大查找算法

    Python 語言實現(xiàn)六大查找算法

    本文給大家分享Python 語言實現(xiàn)六大查找算法,針對每種算法通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-06-06
  • python獲取文件版本信息、公司名和產(chǎn)品名的方法

    python獲取文件版本信息、公司名和產(chǎn)品名的方法

    這篇文章主要介紹了python獲取文件版本信息、公司名和產(chǎn)品名的方法,是Python程序設計中非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • Python實現(xiàn)設置顯示屏分辨率

    Python實現(xiàn)設置顯示屏分辨率

    這篇文章主要為大家詳細介紹了Python如何調(diào)用win32庫實現(xiàn)分辨率獲取和讀寫,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考下
    2023-01-01
  • Pytorch如何打印與Keras的model.summary()類似的輸出(最新推薦)

    Pytorch如何打印與Keras的model.summary()類似的輸出(最新推薦)

    這篇文章主要介紹了Pytorch如何打印與Keras的model.summary()類似的輸出,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07

最新評論