python - 我可以将单词或句子与 Python 中预先向量化的句子语料库进行匹配以进行 NL 处理吗?

标签 python scikit-learn nlp vectorization

几个小时以来,我一直在寻找这个特定问题的答案,虽然我学到了很多东西,但我仍然没有弄清楚。

我有一个约 70,000 个句子的数据集,其中约 4,000 个句子的子集已被适当分类,其余的未分类。目前,我正在使用带有 CountVectorizer 和 TfidfTransformer 的 scikit 管道来对数据进行矢量化,但是我仅根据 4,000 个句子进行矢量化,然后通过交叉验证测试各种模型。

我想知道是否有一种方法可以使用 Word2Vec 或类似的方法来向量化整个数据语料库,然后将这些向量与我的 4,000 个句子的子集一起使用。我的目的是通过使用包含语料库中所有语义数据而不仅仅是 4,000 个句子的数据的词向量来提高模型预测的准确性。

我当前使用的代码是:

    svc = Pipeline([('vect', CountVectorizer(ngram_range=(3, 5))),
               ('tfidf', TfidfTransformer()),
               ('clf', LinearSVC()),
               ])

nb.fit(X_train, y_train)

y_pred = svc.predict(X_test)

其中 X_train 和 y_train 分别是我的特征和标签。我还有一个列表 z_all,其中包括所有剩余的未分类功能。

只要指出正确的方向(或告诉这是否可行)就会非常有帮助。

谢谢!

最佳答案

我想说答案是:您可以使用Word2Vec或其他类似的词嵌入方法来获取数据中每个句子的向量,然后使用这些向量作为训练和测试线性支持向量机 (SVC) 中的数据。

是的,您可以先为大约 70,000 个句子的整个语料库创建这些向量,然后再对数据进行实际训练。


但是,它并不像您当前使用的方法那么简单。

有许多不同的方法可以实现此目的,因此我将仅介绍其中一种方法,以帮助您了解如何完成此操作的基础知识。

在我们开始查看您可以遵循的可能步骤之前,请记住,这里的目标是为语料库中的每个句子获取一个向量。

如果你不知道什么word-embeddings是,我强烈建议您阅读它,但简而言之,这只是将预定义词汇表中的每个单词链接到给定维度的向量的一种方法。

例如,您将:

# the vector associated with the word "cat" is the following vector of fixed-length
word_embeddings["cat"] = [0.0014, 0.6710, ..., 0.3281]

既然您知道了这一点,那么您可以遵循以下步骤:

  1. 标记化 - 您要做的第一件事是tokenize你的每一句话。这可以使用 NLP 库(例如 SpaCy)来完成,它将帮助您:

    • 将每个句子拆分为单词列表
    • 删除这些单词中的所有标点符号并将其转换为小写
    • 删除停用词 - 可选
    • lemmatize所有单词 - 可选
  2. 训练单词嵌入模型 - 现在您已经将每个句子作为预处理的单词列表,您需要训练 word-embedding使用您的语料库进行模型。有许多不同的算法可以做到这一点。我建议使用GenSim和 Word2Vec 或 fastText 。您还可以做的是使用预先训练的词嵌入,例如 GloVe或任何在语言/上下文方面最适合您的语料库的内容。无论哪种方式,这都将允许您:

    • 为语料库词汇表中的每个单词提供一个预定义大小的向量
    • 获取语料库中每个句子的大小相等的向量列表
  3. 采用加权方法 - 一旦你有了语料库中每个句子的向量列表,主要是因为你的句子长度不同(有些有 6 个单词,有些有 13 个单词)单词等)您想要做的是为每个句子获取一个向量。为此,您只需对每个句子中的单词对应的向量进行加权即可。您可以:

    • 对所有向量求平均值
    • 使用像 TF-IDF weights 这样的权重给予某些词比其他词更重要
    • 使用其他加权方法...
  4. 训练和测试 - 最后,您要做的就是使用这些向量训练模型,例如使用线性支持向量机 (SVC),并测试准确性在测试数据集上建立模型(您也可以使用验证数据集)。

关于python - 我可以将单词或句子与 Python 中预先向量化的句子语料库进行匹配以进行 NL 处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59193877/

相关文章:

python - 如何在字符级别对句子矩阵进行单热编码?

python - psycopg2安装多个版本的python

python - 在 python 中拟合线性变换

python - 线性回归 - 图像

python - 属性对 Python 中特定目标的预测能力,使用 Sklearn 中的特征选择

python - 使用 Python 抓取英文单词

python - 如何更改满足特定条件的数据框中的第一个值

python - 给定位数时生成 66666 等数字的最快方法

algorithm - 智能家居的自然语言处理

python - 将 tf-idf 与 FastText 向量结合使用