本來是不打算做這個CBOW代碼案例的,想快馬加鞭看看前饋神經網絡
畢竟書都買好了
可是…可是…我看書的時候,感覺有點兒困難,哭的很大聲…
感覺自己腦細胞可能無法這么快接受
要不,還是退而求個稍微難度沒那么大的事,想想自己還有什么是沒實現的呢
哦!CBOW的案例還沒做呢~
在一個巨人面前,我無恥地選擇了暫避其鋒芒
就好像,我本應該英勇地邁過刀山火海,可是我卻慫了
而且,慫的有理有據:CBOW還沒實現呢
只希望,CBOW案例,不要太難,不然我根本寸步難行,只能天天打游戲聊以自慰
首先,我計劃做一個客服預料包,然后用CBOW去預測某個中間關鍵詞
目標明確后,問題接踵而至
問題1-能否用中文語料
:不行,因為中文分詞很麻煩,我懶得去搞分詞,重點是CBOW
英文語料很簡單,因為英文是一個詞跟另一個詞,用空格分開,獲取十分簡單
問題2-頭尾單詞怎么解決
:畢竟CBOW是獲取關鍵詞的前c個和后c個單詞來訓練的,但開頭單詞沒有前c個單詞,末尾單詞沒有后c個單詞
解決辦法
:用額外的單詞替代,比如None,應該問題不大的吧
問題3-按句還是按所有句取上下文
:如果是按句取上下文,那么一個句子開頭和末尾單詞的下文就是None,語料文件有很多個句子,就會有很多個None。
如果按所有句取上下文,那整個語料文件就只有開頭有None,末尾有None,None數量很少
解決辦法
:還是按句吧,畢竟兩句之間的上下文,是毫無關系的。
按照【基于HierarchicalSoftmax的CBOW】正反向傳播流程,來設計程序吧!
【基于HierarchicalSoftmax的CBOW】正向傳播過程
- 輸入層:
- 轉換獨熱編碼:將詞典D轉換為one-hot獨熱編碼,
- 獲取上下文:按規定上下文的長度k,來截取語庫C里的上下文單詞 x x x和預測單詞 y ? y* y?
- 獲取獨熱編碼:獲取上下文單詞x的獨熱編碼向量 x 1 x1 x1, x 2 x2 x2, x 3 x3 x3, x 4 x4 x4,作為初始輸入矩陣X=[ x 1 x1 x1, x 2 x2 x2, x 3 x3 x3, x 4 x4 x4]
- 投影層:
- 計算中間向量:
- 將初始矩陣X乘以一個權重矩陣W,提取出各個初始向量 x 1 x1 x1, x 2 x2 x2, x 3 x3 x3, x 4 x4 x4的權重系數 w 1 w1 w1、 w 2 w2 w2、 w 3 w3 w3、 w 4 w4 w4
- 將這些權重系數加和,作為中間向量h=[ w 1 w1 w1+ w 2 w2 w2+ w 3 w3 w3+ w 4 w4 w4],注意,這里的加和是按列加和
- 輸出層:
- 構建huffman樹,
- 計算路徑概率
- 計算預測模型