如何科學地使用keras的Tokenizer進行文本預處理
如何科學地使用keras的Tokenizer進行文本預處理
緣起
之前提到用keras的Tokenizer進行文本預處理,序列化,向量化等,然後進入一個simple的LSTM模型中跑。但是發現用Tokenizer對象自帶的 得到的向量用LSTM訓練不出理想的結果,反倒是換成Dense以後效果更好。後來實驗了一下發現是對這個向量化函數的理解出現了偏差。鑒於網上沒找到相關的講解,就自己實驗了一下,並在這裡做一個總結。
關於Tokenizer
原本以為直接用 方法就可以直接把texts中的每個text,也就是每個string都轉成LSTM輸入所需要的向量,於是直接輸入進去LSTM了。其實稍微一想就可以發現,LSTM要求的是每個string都是一個(num of word , length of word vector) 的矩陣,而這個函數出來的則是一個一維的向量,顯然是有問題的。當時誤判是因為沒有仔細看,看到to matrix 並且得到了0-1的binary的matrix就想當然地當做輸入了。那麼下面就來看一下這個matrix究竟是什麼:
可以看出,實際上這是一個binary的向量,如果dictionary的下標為i 的那個詞在這個string中出現了,那麼就給一個1,否則給0。當然,可以通過mode參數,
進行設置,比如改成counts或者freq:
Tokenizer實際上只是生成了一個字典,並且統計了詞頻等信息,並沒有把文本轉成需要的向量表示。
如果Tokenizer加上這個參數,那麼生成的就是列數為這個參數的matrix,其中包含單詞表中most frequent的單詞的binary或者count或者詞頻。
科學地使用Tokenizer
所以科學使用Tokenizer的方法是,首先用Tokenizer的 方法學習出文本的字典,然後 就是對應的單詞和數字的映射關係dict,通過這個dict可以將每個string的每個詞轉成數字,可以用,這是我們需要的,然後通過padding的方法補成同樣長度,在用keras中自帶的embedding層進行一個向量化,並輸入到LSTM中。
2018年03月05日16:11:27
大地春又回,長空裂驚雷。萬物生欲動,無為自有為。 —— 詩人,余世存
TAG:柯壯的小屋 |