python - 在 keras Tokenizer 中使用 tf–idf

标签 python python-3.x keras nlp

我有一个数据框,其中第一行的标题列包含以下文本:

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

增加 vocabulary_size 也会标记出频率较低的单词,例如:

hydrocolloids

我打算在下游使用手套进行分类任务。保留频繁且因此可能不那么具有歧视性的词是否有意义:

use

在?也许是的,因为 glove 也会查看上下文,这与我过去使用的词袋方法形成对比。这里 tf–idf 是有道理的。

最佳答案

直到现在(因为 Keras 总是在更新它的功能),没有什么可以产生你想要的..

但它有一个函数,使用 Tf-Idf 方案而不是 freq 来表示序列。

sequences = tokenizer.texts_to_matrix(df['Title'], mode='tfidf')

代替:

sequences = tokenizer.texts_to_sequences(df['Title'])

此外,作为建议,您可以使用 sklearn TfidfVectorizer 从低频词中过滤文本,然后将其传递给您的 Keras 模型..

关于python - 在 keras Tokenizer 中使用 tf–idf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52224666/

相关文章:

Python - 类型错误 - 类型错误 : '<' not supported between instances of 'NoneType' and 'int'

python - Python 中的 random.sample() 方法有什么作用?

python-3.x - 使用 Python 重命名目录中的一堆文件的问题

python - 使用 QSUB 和 bash 文件打印 Keras 的训练进度

python - Keras model.summary() 对象到字符串

Python PCA - 投影到低维空间

python - 日差,Python 3.6

python-3.x - 使用pyrfc获取FAGLL03H报告

python-3.x - Openssl:0 深度查找时出现错误 20:无法获取本地颁发者证书

python - 如何通过 Keras Wrapper(或一般)传递参数?