Keras文字預處理詳解
阿新 • • 發佈:2020-08-07
彙總
Tokenizer
分詞器(類)
Tokenizer.fit_on_texts
分詞器方法:實現分詞
Tokenizer.texts_to_sequences
分詞器方法:輸出向量序列
pad_sequences
進行padding
具體示例和程式碼分析
分詞器分詞和向量化
主要的類是Tokenizer,用到其中的一些方法將文字轉換為序列。需要注意的是這個類的一些預設方法
- filters:預設會過濾一些標點符號,標點符號和單詞之間沒有空格也沒關係。內部程式碼是先把標點符號替換為空格,然後進行分詞,所以的這樣的:"eat!Some"也可以正確識別
- lower=True:預設會轉為小寫
- split=" ":預設是空格
這些方法都已經實現,所以在可以不用自己寫,直接設定引數就行。另外兩個引數:
- num_words:處理的最大單詞數量。
- char_level: 預設False,如果是True,返回字元向量化結果(char embedding的時候可以用到)
還有就是注意必須先進行fit_on_texts
方法,然後進行texts_to_sequences
。fit_on_texts
後有兩個有用的輸出:
- word_counts:詞頻統計結果
- word_index:詞和index的對應關係
texts_to_sequences
輸出的是根據對應關係輸出的向量序列,是不定長的,跟句子的長度有關係。
fromkeras.preprocessing.text import Tokenizer text1='Some ThING to eat !' text2='some thing to drink .' texts=[text1,text2] print(texts) #out:['Some ThING to eat !', 'some thing to drink .'] tokenizer = Tokenizer(num_words=100) #num_words:None或整數,處理的最大單詞數量。少於此數的單詞丟掉 tokenizer.fit_on_texts(texts) print( tokenizer.word_counts)#out:OrderedDict([('some', 2), ('thing', 2), ('to', 2), ('eat', 1), ('drink', 1)]) print( tokenizer.word_index) #out:{'some': 1, 'thing': 2, 'to': 3, 'eat': 4, 'drink': 5} sequences = tokenizer.texts_to_sequences(texts) word_index = tokenizer.word_index print(sequences) #out:[[1, 2, 3, 4], [1, 2, 3, 5]] 轉換為序列,注意這裡句子等長,所以輸出一樣,但是不等長句子輸出的長度是不一樣的 print('Found %s unique tokens.' % len(word_index)) #out:Found 5 unique tokens.
填充至等長
pad_sequences
,對上面生成的不定長序列進行補全。可以手動設定每個句子的最大長度引數,大於這個長度截斷,小於這個長度填充。注意:預設補全和截斷都是在句子前面進行填充和截斷。這裡是用0進行填充,也就是空格,這也是為什麼上面序列index起始是1的原因。
#接上面的程式碼 SEQ_LEN = 10 data = pad_sequences(sequences, maxlen=SEQ_LEN) print(data) #out:[[0 0 0 0 0 0 1 2 3 4] # [0 0 0 0 0 0 1 2 3 5]]
來自 https://zhuanlan.zhihu.com/p/55412623