使用隐马尔可夫模型进行情感分析

时间:2018-11-10 11:16:22

标签: python nlp sentiment-analysis hidden-markov-models

我有一个评论列表,列表的每个元素都是kaggle中IMDB数据集的评论。共有25000条评论。我给每个评论的标签分别为+1和-1。

我想用这些评论和标签来训练隐马尔可夫模型。

1-我应给予HMM的顺序是什么?是像单词袋一样,还是像我需要计算的概率呢?哪种特征提取方法合适?有人告诉我在评论的列表上使用单词袋,但是当我进行一些搜索时,我发现HMM关心单词的顺序,但是单词袋并不保持顺序中单词的顺序。我应该如何准备此评论列表以将其输入到HMM模型中?

2-是否有针对此的框架?我知道hmmlearn,我认为我应该使用MultinomialHMM,如果我错了,请更正我。但是它没有监督,当我想训练它时,它的模型不会将标签作为输入,而且由于一些第一个问题,我问到正确的输入类型,我遇到了一些未知的错误,这些错误我不知道如何解决应该给它。 seqlearn是我最近发现的一种,它好还是有更好的一种使用?

我非常感谢您提供任何指导,因为我对NLP的知识几乎为零。

1 个答案:

答案 0 :(得分:1)

我能够以某种方式以出乎意料的高准确度做到这一点,但是我不确定到底发生了什么,我使用了具有令人遗憾的文档的 seqlearn 框架。我真的建议对HMM使用 MATLAB 代替python。

我使用了 sklearn TfidfVectorizer 进行特征提取,然后我做到了:

vectorizer = TfidfVectorizer(norm=None)
x_train = vectorizer.fit_transform(train_review)
x_test = vectorizer.transform(test_review)

len_train_seq = np.array([[1,1]]*(len(train_review)/2))
len_test_seq = np.array([1]*len(test_review))

model = seqlearn.hmm.MultinomialHMM()
HMM_Classifier = model.fit(x_train, Y, lengths = len_train_seq)
y_predict = HMM_Classifier.predict(x_test, lengths=len_test_seq)

如果对HMM知识渊博的人能提供更健壮,更清晰的关于使用HMM进行情感分析的指南,我仍将不胜感激。