2016-07-30 62 views
4

我正在嘗試編寫一個機器學習算法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) 

不幸的是,這並沒有考慮到短語的任何順序。可以使用較大的ngramsCountVectorizer(ngram_range=(min, max)))來查看特定的短語,但這會快速增加功能的數量,甚至不是那麼好。

有沒有一種以其他方式處理有序文本的好方法?我絕對願意使用自然語言解析器(nltk,textblob等)以及scikit-learn

+1

詞袋+樸素貝葉斯模型在某些情況下工作得很好。你在做二元分類還是多分類? – bpachev

+0

@bpachev我從二進制分類開始,但是我希望進入多類,一旦我的二進制分類器正常工作。 – 2Cubed

回答

1

word2vec embedding?這是一個基於神經網絡的單詞嵌入矢量,並考慮到上下文。這可以爲您的分類器提供更復雜的一組功能。

用於自然語言處理的一個功能強大的Python庫,具有良好的word2vec實現方式,是gensim。 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有很多其他功能,如果您對自然語言處理感興趣,則更有必要了解它。