【问题标题】:How to vectorize words?如何向量化单词?
【发布时间】:2020-02-17 03:22:46
【问题描述】:

来自 Keras 的文档:

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

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

但在 scikit-learn 的 CountVectorizer 中:

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

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

【问题讨论】:

    标签: keras scikit-learn nlp


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 2017-08-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2012-05-21
      相关资源
      最近更新 更多