cs0*_*815 3 python nlp python-3.x keras
我有一个数据框,其中第一行的标题列包含以下文本:
Use of hydrocolloids as cryoprotectant for frozen foods
Run Code Online (Sandbox Code Playgroud)
使用此代码:
vocabulary_size = 1000
tokenizer = Tokenizer(num_words=vocabulary_size)
tokenizer.fit_on_texts(df['Title'])
sequences = tokenizer.texts_to_sequences(df['Title'])
print(sequences[0])
Run Code Online (Sandbox Code Playgroud)
我得到这个序列:
[57, 1, 21, 7]
Run Code Online (Sandbox Code Playgroud)
使用这个:
index_word = {v: k for k, v in tokenizer.word_index.items()}
print(index_word[57])
print(index_word[1])
print(index_word[21])
print(index_word[7])
Run Code Online (Sandbox Code Playgroud)
我得到:
use
of
as
for
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为这些是更常用的词。也可以使用分词器将分词基于tf–idf进行吗?
增加vocabularyary_size还会标记频率较低的单词,例如:
hydrocolloids
Run Code Online (Sandbox Code Playgroud)
我打算在下游使用手套进行分类任务。保持频繁,从而减少歧视性的词语,例如:
use
Run Code Online (Sandbox Code Playgroud)
在?也许是的,因为手套也着眼于上下文,这与我过去使用的一揽子单词方法相反。在这里,tf–idf是有意义的。
到现在为止(因为Keras总是在更新其功能),所以没有什么可以满足您的需求。
但是它具有使用Tf-Idf方案而不是频率来表示序列的功能:
sequences = tokenizer.texts_to_matrix(df['Title'], mode='tfidf')
Run Code Online (Sandbox Code Playgroud)
代替:
sequences = tokenizer.texts_to_sequences(df['Title'])
Run Code Online (Sandbox Code Playgroud)
另外,作为建议,您可以使用sklearn TfidfVectorizer过滤低频率单词中的文本,然后将其传递给Keras模型。