python - 在 keras Tokenizer 中使用 tf-idf
问题描述
我有一个数据框,其中第一行的列标题包含以下文本:
Use of hydrocolloids as cryoprotectant for frozen foods
使用此代码:
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])
我得到这个序列:
[57, 1, 21, 7]
使用这个:
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])
我得到:
use
of
as
for
这是有道理的,因为这些是更常见的词。是否也可以使用 Tokenizer 将标记化基于tf–idf?
增加词汇量大小也会标记不太常见的单词,例如:
hydrocolloids
我打算在下游使用手套进行分类任务。保持频繁使用因此可能不太具有歧视性的词是否有意义,例如:
use
在?也许是的,因为 glove 也会查看上下文,这与我过去使用的词袋方法形成对比。这里 tf-idf 是有道理的。
解决方案
直到现在(因为 Keras 总是在更新它的功能),没有什么可以产生你想要的..
但它有一个使用 Tf-Idf 方案而不是频率来表示序列的函数:
sequences = tokenizer.texts_to_matrix(df['Title'], mode='tfidf')
代替:
sequences = tokenizer.texts_to_sequences(df['Title'])
此外,作为建议,您可以使用 sklearn TfidfVectorizer 从低频词中过滤文本,然后将其传递给您的 Keras 模型..
推荐阅读
- javascript - JQuery 在不同的类上运行
- javascript - 单击时反应草稿所见即所得工具栏不起作用?
- excel - 在列表中查找所有带有“number”.“number”的单元格并将整行复制到不同的位置
- visual-studio-code - 将图标添加到 VSCode 树视图
- android - 仅为新输入设置edittext对齐,而不是整个文本
- java - java.lang.IllegalArgumentException:响应必须包含泛型类型(例如,响应
) - node.js - 用另一个数组中的值过滤数组中的值
- r - 如何在R中按行方差对行进行排名和选择
- c - C 内联函数生成未定义符号错误
- java - 如何使用 python 应用程序(java、c++、vb api 可用)与桌面应用程序通信?