網頁

2019年7月7日 星期日

Keras--- text.Tokenizer:文本與序列預處理

使用keras可以透過keras.preprocessing模組的text和sequence將文本轉換成One-Hot Encoding:

from keras.preprocessing import text, sequence

藉由pandas讀取csv或者自己定義字串可以得到文本資訊,然而自己定義的字串如果放在list裡面或者是獨立字串的話,text.Tokenizer函式裡的char_level=True引數設定就相當重要,此外,text.Tokenizer函式裡的num_words的引數設定也會影響tokenizer.texts_to_matrix函式。以下示範DNA序列利用pandas讀取csv的做法。





如果字串之間沒有空格的話,一定要在tokenizer.fit_on_texts函式加上char_level=True,num_words=None表示處理的最大單詞數量,少於此數的單詞丟掉。tokenizer.fit_on_texts和tokenizer.texts_to_sequences兩個函式的引數要傳入DNA的sequence。sequence.pad_sequences的padding='pre'和maxlen=50是指如果長度不足50會在字串前面補0,反之padding='post'是指在字串後面補0。

接著,如果是自訂字串,結果也是會跟pandas讀取csv結果一樣,但差別是字串必須是list的element。


然而,如果字串是獨立字串的話,請別將char_level=True寫入tokenizer.fit_on_texts函式。


還有一種函式不僅能使用二進制,也支持one-hot外的向量化編碼模式,但是如果text.Tokenizer函式裡的num_words的引數設定為None,那就只會產生出部分陣列



如果num_words的引數設定為50




還有其他函式可以更清楚了解文本的資訊



tokenizer.document_count會產生一個dict,處理的文本數量
tokenizer.index_docs會產生一個dict,保存word的id出現的文檔的數量
tokenizer.word_counts會產生一個dict,保存每個詞在所有文檔中出現的次數
tokenizer.word_index會產生一個dict,保存所有word對應的編號id,從1開始
tokenizer.word_docs會產生一個dict,保存每個詞出現的文檔的數量

沒有留言:

張貼留言