Как использовать модель MultinomialNB с живыми данными? - PullRequest
0 голосов
/ 27 января 2020

Я новичок в машинном обучении. Я пытался разработать приложение для сентиментального анализа для проекта CRM. Моя программная модель предсказывает статус последующего наблюдения, когда пользователь вводит последующий комментарий. Для создания модели я заставил программу прочитать старые комментарии и статус из входного CSV-файла и преобразовать «Комментарии» в вектор. Это хорошо работает с тестовыми данными, но я не знаю, как использовать это на практике, я имею в виду, когда я пытаюсь предсказать, используя другое входное значение, оно показывает ошибку. 'ValueError: несоответствие размеров' Может ли кто-нибудь подсказать мне, как использовать это в практическом случае?

Пожалуйста, ознакомьтесь с основной частью кода.

#this program will automatically generate the follow-up status from enquiry followup comment
import numpy as np
import pandas as pd
import string
import nltk
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics

#Data preprocessing

follow_ups=pd.read_csv('enquiry_followups.csv')
follow_ups.describe()
follow_ups=follow_ups.dropna()
follow_ups=follow_ups.apply(lambda x: x.astype(str).str.lower())
follow_ups['Status'].loc[(follow_ups['Status'] == 'nuetral')|(follow_ups['Status'] == 'nutral')]='neutral'
follow_ups['Status']=follow_ups['Status'].apply(lambda x: getIndexOfStatus(x))
status_count=follow_ups.groupby('Status').count()
remove_punk_dic= dict((ord(p_value),None) for p_value in string.punctuation)
lemmer=nltk.stem.WordNetLemmatizer()
cv = CountVectorizer(lowercase=True,stop_words='english',ngram_range = (1,1),tokenizer = lem_normalize)
text_counts= cv.fit_transform(follow_ups['Comment'].tolist())#Output status 
#this is how we split the data as train set and test set
X_train, X_test, y_train, y_test = train_test_split(text_counts, follow_ups['Status'].tolist(), test_size=0.2, random_state=4)
#Import scikit-learn metrics module for accuracy calculation
# Model Generation Using Multinomial Naive Bayes
clf = MultinomialNB().fit(X_train, y_train)
predicted= clf.predict(X_test)
print("MultinomialNB Accuracy:",metrics.accuracy_score(y_test, predicted))
data_list=['she wont come','he didnt pickup the call']
X_test1= cv.transform(data_list)
predicted2= clf.predict(X_test1)
""" Functions """
#input status values return index
def getIndexOfStatus(status):
    status_values=['cancelled','negative','neutral','positive','registered']
    return status_values.index(status)

#lemmatize tokens
def lem_tokens(tokens):
    return [lemmer.lemmatize(token_word) for token_word in tokens]

""" This function will lemmatize input_corpus
1. converts input_corpus to lower letter
2. remove punctuation
3. lemmatize using lem_tokens
""" 
def lem_normalize(input_corpus):
   return lem_tokens(nltk.word_tokenize(input_corpus.lower().translate(remove_punk_dic)))

Ошибка вывода Gettin: Ошибка Error: несоответствие размеров

1 Ответ

0 голосов
/ 27 января 2020

Моя программа после создания нового объекта CountVectorizer, но я не могу понять, почему он не работает с тем же объектом CountVectorizer.

data_list=['not intrested..got a job..', 'her  talk to very rough, follow up by Ameer','looking for job not now','not intrested']
cv2 = CountVectorizer(vocabulary=cv.vocabulary_,lowercase=True,stop_words='english',ngram_range = (1,1),tokenizer = lem_normalize)
X_test1= cv2.transform(data_list)
predicted2= clf.predict(X_test1)

Пожалуйста, кто-нибудь объяснит?

...