矢量化时保留文本数据的顺序

2Cu*_*bed 5 python nltk python-3.x scikit-learn

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

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

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> count_vect = CountVectorizer()
>>> X_train_counts = count_vect.fit_transform(twenty_train.data)
Run Code Online (Sandbox Code Playgroud)

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

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

bpa*_*hev 2

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

gensim是一个强大的自然语言处理 Python 库,具有良好的 word2vec 实现。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"]
Run Code Online (Sandbox Code Playgroud)

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

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