【问题标题】:Retain ordering of text data when vectorizing向量化时保持文本数据的顺序
【发布时间】:2016-12-04 19:48:43
【问题描述】:

我正在尝试使用scikit-learn 编写一个机器学习算法,它可以解析文本并根据训练数据对其进行分类。

使用文本数据的示例,直接取自scikit-learn 文档,使用CountVectorizer 生成每个单词出现次数的稀疏数组。

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> count_vect = CountVectorizer()
>>> X_train_counts = count_vect.fit_transform(twenty_train.data)

不幸的是,这没有考虑到短语的任何顺序。可以使用更大的ngrams (CountVectorizer(ngram_range=(min, max))) 来查看特定的短语,但这会迅速增加特征的数量,甚至不是那么好。

有没有用另一种方式处理有序文本的好方法?我绝对愿意使用自然语言解析器(nltktextblob 等)以及scikit-learn

【问题讨论】:

  • 词袋 + 朴素贝叶斯模型在某些情况下效果很好。你是在做二分类还是多分类?
  • @bpachev 我从二元分类开始,但是一旦我的二元分类器工作正常,我想进入多类。

标签: python python-3.x scikit-learn nltk


【解决方案1】:

word2vec embedding? 怎么样?它是一个基于神经网络的词嵌入向量,并考虑了上下文。这可以为您的分类器提供一组更复杂的功能。

gensim 是一个用于自然语言处理且具有良好 word2vec 实现的强大 Python 库。 Gensim 被构建为非常可扩展和快速,并具有先进的文本处理能力。以下是有关如何开始的简要概述:

正在安装

只需 easy_install -U gensimpip install --upgrade gensim

一个简单的 word2vec 示例

import gensim

documents = [['human', 'interface', 'computer'],
 ['survey', 'user', 'computer', 'system', 'response', 'time'],
 ['eps', 'user', 'interface', 'system'],
 ['system', 'human', 'system', 'eps'],
 ['user', 'response', 'time'],
 ['trees'],
 ['graph', 'trees'],
 ['graph', 'minors', 'trees'],
 ['graph', 'minors', 'survey']]

model = gensim.models.Word2Vec(documents, min_count=1)
print model["survey"]

这将输出“调查”映射到的向量,您可以将其用作分类器的特征输入。

Gensim 还有很多其他功能,如果您对自然语言处理感兴趣,值得深入了解它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    相关资源
    最近更新 更多