我有一個代碼,關于深度學習的文本預處理:
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
tokenizer = Tokenizer(num_words = 10000)
tokenizer.fit_on_texts(X)
tokenizer.word_index
但是當我檢查 tokenizer.word_index 的長度時,可以安全地得到 10000,我得到 13233。X 的長度等于 11541(但是,如果需要知道的話,一個包含 11541 的資料幀列)。所以我的問題出現了:詞匯量是多少?num_words 還是 word_index 的長度?看來我已經糊涂了!任何幫助表示贊賞。
uj5u.com熱心網友回復:
根據官方檔案,論點num_words是,
根據詞頻保留的最大詞數。
num_words-1只會保留最常用的單詞。
word_index將包含 中存在的所有單詞texts。但是當您使用Tokenizer.texts_to_sequences. 例如,讓我們考慮一些句子,
texts = [
'hello world' ,
'hello python' ,
'python' ,
'hello java' ,
'hello java' ,
'hello python'
]
# Frequency of words, hello -> 5, python -> 3 , java -> 2 , world -> 1
tokenizer = tf.keras.preprocessing.text.Tokenizer( num_words=3 )
tokenizer.fit_on_texts( texts )
print( tokenizer.word_index )
上述代碼段的輸出將是,
{'hello': 1, 'python': 2, 'java': 3, 'world': 4}
根據檔案,num_words-1只能在將單詞轉換為索引時使用最熱門的單詞(基于它們的頻率)。在我們的例子num_words=3中,因此我們希望 Tokenizer 只使用2單詞進行轉換。中最常見的兩個詞texts是hello和python。考慮這個例子來檢查輸出texts_to_sequences
input_seq = [
'hello' ,
'hello java' ,
'hello python' ,
'hello python java'
]
print( tokenizer.texts_to_sequences( input_seq ) )
輸出,
[[1], [1], [1, 2], [1, 2]]
請注意,在第一句話中,hello按預期編碼。在第二個句子中,這個詞java沒有被編碼,因為它沒有包含在詞匯表中。在第三句中,單詞hello和python都包含在內,這是我們假設的預期行為。在第四句中,單詞java沒有在輸出中編碼。
所以我的問題出現了:詞匯量是多少?
num_words或長度word_index?
正如您可能已經理解num_words的那樣,詞匯大小是因為只有這么多單詞在輸出中被編碼。其余的詞,在我們的例子中java,world只是從轉換中省略了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/438700.html
標籤:python-3.x 张量流 喀拉斯 深度学习 nlp
上一篇:處理堆疊的合并表
