3

Я новичок в моделях пакетов и векторных пространств gensim в целом, и я не уверен , что именно я должен делать с выходом LSA., объединяющий LSA/LSI с Naive Bayes для классификации документов

Чтобы дать краткий обзор моей цели, я хотел бы улучшить классификацию Наивного Байеса с помощью моделирования тем, чтобы улучшить классификацию отзывов (положительных или отрицательных). Вот great paper Я читал, что сформировал свои идеи, но оставил меня еще несколько смущенным по поводу реализации.

У меня уже есть рабочий код для Naive Bayes - в настоящее время я просто использую униграммный пакет слов поскольку мои функции и ярлыки являются либо положительными, либо отрицательными.

Вот мой код gensim

from pprint import pprint # pretty printer 
import gensim as gs 

# tutorial sample documents 
docs = ["Human machine interface for lab abc computer applications", 
       "A survey of user opinion of computer system response time", 
       "The EPS user interface management system", 
       "System and human system engineering testing of EPS", 
       "Relation of user perceived response time to error measurement", 
       "The generation of random binary unordered trees", 
       "The intersection graph of paths in trees", 
       "Graph minors IV Widths of trees and well quasi ordering", 
       "Graph minors A survey"] 


# stoplist removal, tokenization 
stoplist = set('for a of the and to in'.split()) 
# for each document: lowercase document, split by whitespace, and add all its words not in stoplist to texts 
texts = [[word for word in doc.lower().split() if word not in stoplist] for doc in docs] 


# create dict 
dict = gs.corpora.Dictionary(texts) 
# create corpus 
corpus = [dict.doc2bow(text) for text in texts] 

# tf-idf 
tfidf = gs.models.TfidfModel(corpus) 
corpus_tfidf = tfidf[corpus] 

# latent semantic indexing with 10 topics 
lsi = gs.models.LsiModel(corpus_tfidf, id2word=dict, num_topics =10) 

for i in lsi.print_topics(): 
    print i 

Вот выход

0.400*"system" + 0.318*"survey" + 0.290*"user" + 0.274*"eps" + 0.236*"management" + 0.236*"opinion" + 0.235*"response" + 0.235*"time" + 0.224*"interface" + 0.224*"computer" 
0.421*"minors" + 0.420*"graph" + 0.293*"survey" + 0.239*"trees" + 0.226*"paths" + 0.226*"intersection" + -0.204*"system" + -0.196*"eps" + 0.189*"widths" + 0.189*"quasi" 
-0.318*"time" + -0.318*"response" + -0.261*"error" + -0.261*"measurement" + -0.261*"perceived" + -0.261*"relation" + 0.248*"eps" + -0.203*"opinion" + 0.195*"human" + 0.190*"testing" 
0.416*"random" + 0.416*"binary" + 0.416*"generation" + 0.416*"unordered" + 0.256*"trees" + -0.225*"minors" + -0.177*"survey" + 0.161*"paths" + 0.161*"intersection" + 0.119*"error" 
-0.398*"abc" + -0.398*"lab" + -0.398*"machine" + -0.398*"applications" + -0.301*"computer" + 0.242*"system" + 0.237*"eps" + 0.180*"testing" + 0.180*"engineering" + 0.166*"management" 

Любые предложения или общие замечания будут оценены.

+0

Вы решили проблему? Я пытаюсь сделать то же самое в данный момент, и я тоже не уверен, как получить gensim lsi-модель в классификаторах sklearn. –

ответ

0

Только начал работать на одной и той же задачи, но с SVM вместо этого, AFAIK после тренировки вашей модели вам нужно сделать что-то вроде этого:

new_text = 'here is some document' 
text_bow = dict.doc2bow(new_text) 
vector = lsi[text_bow] 

Где вектор является распределение темы в документе, с длина, равная числу тем, которые вы выбираете для обучения, 10 в вашем случае. Таким образом, вам необходимо представить все ваши документы в виде распределений тем и передать их алгоритму классификации.

P.S. Я знаю, что это какой-то старый вопрос, но я все время вижу его в результатах Google при каждом поиске)