首页 > 解决方案 > 如何向量化单词?

问题描述

从 Keras 的文档中:

主输入将接收标题,作为整数序列(每个整数编码一个单词)。整数将在 1 到 10,000 之间(10,000 个单词的词汇表),序列长度为 100 个单词。

这里对单词进行编码的方法似乎只是简单地使用构建词汇表中的单词索引来表示单词。如果训练数据中有“n”个单词,那么向量化的整数i将来自 [0, n-1]。

但在 scikit-learn 的 CountVectorizer 中:

此实现使用 scipy.sparse.csr_matrix 生成计数的稀疏表示。

这两种词向量化方式之间有什么联系吗?计数向量表示会比基于索引的向量化更有效吗?CountVectorizer 考虑了词频。

标签: kerasscikit-learnnlp

解决方案


这是两个完全不同的东西。Keras 及其索引和嵌入适用于深度学习,scikit-learn 及其CountVectorizer来自经典机器学习。

在 Keras(或一般的深度学习框架)中,单词通常由整数索引表示。然后这些索引用作嵌入矩阵中的键,以获取要在神经网络中使用的相应词嵌入。在这种情况下,所有向量都是密集的,因为神经网络使用密集的连续表示。

CountVectorizer在 scikit-learn 中,设计用于表示句子或文档(不是真正孤立的单词)。给定一个训练语料库,它创建语料库中出现的单词的词汇表(使用该fit方法)。然后,一个句子或一个文档被表示为其中出现的单词的频率向量(当调用该transform方法时)。由于大多数词汇表不会出现在单个文档中,因此许多值都是零,因此使用稀疏向量是有意义的。

这种表示对传统的机器学习很有意义。通过深度学习,您将改为使用嵌入、平均它们,然后在它们之上使用 RNN/CNN 或其他方法。


推荐阅读