Анализ настроений с использованием скрытой модели Маркова - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть список отзывов, каждый элемент списка - это обзор набора данных IMDB в kaggle. в общей сложности 25000 отзывов. У меня есть ярлык каждого отзыва +1 для положительного и -1 для отрицательного.

Я хочу обучить скрытую марковскую модель с помощью этих обзоров и ярлыков.

1- Какую последовательность я должен дать HMM? это что-то вроде Мешка слов или это что-то вроде вероятностей, которые мне нужно вычислить? какой метод извлечения признаков подходит? Мне сказали использовать пакет слов в списке обзора, но когда я немного искал, я обнаружил, что HMM заботится о порядке, но пакет слов не поддерживает порядок слов в последовательностях. как мне подготовить этот список обзоров, чтобы можно было вставить его в модель HMM?

2 - есть ли рамки для этого? Я знаю Hmmlearn, и я думаю, что я должен использовать MultinomialHMM, поправьте меня, если я ошибаюсь. но он не контролируется, его модели не принимают метки в качестве входных данных, когда я хочу обучить его, и я получаю некоторые забавные ошибки, которые не знаю, как решить из-за первого вопроса, который я задал о правильном типе ввода, который я должен дать ему. seqlearn - это то, что я недавно нашел, это хорошо или есть лучший вариант для использования?

Я ценю любые рекомендации, поскольку у меня почти нулевые знания о НЛП.

1 Ответ

0 голосов
/ 11 ноября 2018

Мне удалось как-то сделать это с удивительно хорошей точностью, но я не уверен, что именно произошло, я использовал seqlearn framework, который имеет печальную документацию. Я действительно предлагаю использовать MATLAB вместо python для HMM.

Я использовал 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.

...