周杰伦歌词预测 #博学谷IT学习技术支持#
目錄
一、目標
二、思路
1 構建詞料庫
? ? 1.1數據清洗
? ? 1.2 構建分詞到索引的映射表
2 構建數據集對象
2.1 創建一個歌詞類
2.2? 構建數據集
3 構建網絡模型
4 構建訓練函數
4.1 創建訓練數據集?
4.2 初始化網絡模型
4.3 構建損失函數
4.4 選擇優化方法
4.4 確定訓練輪數
4.5 保存訓練模型
5 構建預測函數
5.1? 把輸入的開始詞,先轉化為索引向量
?
一、目標
相當于我們在音樂播放器里面搜索。歌詞里面的幾個字。就可以顯示出歌詞后面的一些字。比如,
輸入? ? ? “誰在用琵琶”,5,
輸出? ? ? ?誰在用琵琶彈奏一曲東
輸入一串文本,預測下一個文本,屬于分類問題。
有一個周杰倫歌詞的文檔。希望通過輸入歌詞的前幾個字和一個數字,能夠預測出輸入歌詞的前幾個字和之后的幾個字。
二、思路
1 構建詞料庫
? ? ?因為歌詞是一個文本文檔。我們需要把文本文檔里面的文字用數字表示,便于我們后面處理計算。比如,氣球,用[0,1]表示。類似這樣的,就是詞料庫。
? ? 1.1數據清洗
? ? ?首先我們需要把歌詞的文本文檔進行處理。去掉多余的文字,空格,換行等等。只留下 漢字,字母,數字,感嘆號,問號,逗號。
? ? 1.2 構建分詞到索引的映射表
? ? 把文檔里面的每一行讀出來。再把每一行里面的單詞利用jieba庫,分詞,比如,把 我喜歡你,分成 ['我','喜歡','你']。?
? ? ?把分詞出來的所有的分詞,去重,放在一個列表中。就得到了從索引到分詞的映射表。再根據這個映射表得到從分詞到索引的字典。
? ? ?根據這個字典,把文檔中的每句中文,轉換成用索引表示的向量。這就是詞料庫。
2 構建數據集對象
2.1 創建一個歌詞類
? ? 有init ,有len魔法方法。
2.2? 構建數據集
? ? ?實例化歌詞類,得到數據集,用數據加載器來加載數據集。
3 構建網絡模型
? ?有三層,
? ? 第一層是詞嵌入層,用于將詞料庫,轉化為詞向量。比如我們把每一個分詞,用一個128維的向量來表示。假設輸入的句子長度為5,那么經過嵌入層之后的向量,維度就是 1,5,128? 。這里面1是batch size,5是句子的長度,128是每個分詞的向量維數。
? ? 第二層是循環網絡, 用來提取句子的語義特征。
輸入的維度是128維,輸出的維度是128維。
循環網絡層的輸入希望batch_size在第一位。注意要有隱藏層。輸出output是每一個時間步的輸出,hidden只表示最后一個時間步的隱藏狀態。將output送入全連接層,得到輸出。
? ? ?第三層是全連接層,用來輸出對詞典中每個詞的預測概率,我們最后選取預測概率最大的詞,作為我們的輸出。輸入維度是128維。預測結果維度是? ?5,1,5682。? ?這里面1是batch size,5是句子的長度,5682是分詞的總數目,? ? 5682是,預測,每一個分詞的概率大小,最后我們選擇預測概率大的詞,輸出。
4 構建訓練函數
把訓練數據集,放進網絡里面訓練。因為文本生成本質上是輸入一串文本,預測下一個文本,屬于分類問題,所以我們使用多分類交叉商損失函數。優化方法,我們使用SGD或者Adam。
4.1 創建訓練數據集?
使用剛剛的數據集類,輸入資料庫和32。這里的32代表32個句子長度。
4.2 初始化網絡模型
使用剛剛構建的網絡模型來初始化網絡模型
4.3 構建損失函數
4.4 選擇優化方法
導入包,選擇優化方法,指定學習率
4.4 確定訓練輪數
? ? ? ?對每輪訓練,初始化數據加載器,batch size等于1。初始化迭代次數,總的訓練損失等于0.0。
? ? ?數據集進入模型訓練后的輸出維度是? 32,1,5682? 。訓練數據集的標簽維度是 1,32? 。
4.5 保存訓練模型
5 構建預測函數
加載預測數據集,從磁盤加載已經訓練好的模型,進行預測。我們輸入一個指定的詞,送入網絡,預測出下一個詞,再將預測出來的詞再送入網絡,再預測下一個詞,以此類推,直到預測出我們指定場長度的內容。
5.1? 把輸入的開始詞,先轉化為索引向量
把輸入的開始詞,利用詞料庫,轉化為索引向量。把所以向量送入模型中去預測下一個概率最大的分詞的索引,放在下一個分詞的索引列表中,再循環,直到完成指定數目。注意,這里得到的是分詞的索引列表,所以需要用所以到分詞的列表,轉化為分詞的分詞列表。這樣就得出了預測的分詞。
?
?
? ? ?
?
?
?
總結
以上是生活随笔為你收集整理的周杰伦歌词预测 #博学谷IT学习技术支持#的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭建maven私服发布项目并从私服下载j
- 下一篇: 使用R包networkD3绘制炫酷的动态