Подходит ли Doc2Vec для анализа настроений?

machine-learning sentiment-analysis gensim word2vec doc2vec

2138 просмотра

1 ответ

50 Репутация автора

Я читал более современные посты о классификации (анализе) настроений, таких как этот .

Взяв в качестве примера набор данных IMDB, я обнаружил, что с помощью Doc2Vec (88%) я получаю такой же процент точности, однако гораздо лучше получаю использование простого векторизатора tfidf с триграммами для извлечения объектов (91%) . Я думаю, что это похоже на таблицу 2 в статье Миколова за 2015 год .

Я думал, что при использовании большего набора данных это изменится. Таким образом, я перезапустил свой эксперимент, используя разбивку на 1 мельницу и 1 мельницу отсюда . К сожалению, в этом случае мой метод извлечения векторных функций tfidf увеличился до 93%, но doc2vec упал до 85%.

Мне было интересно, стоит ли этого ожидать и что другие считают, что tfidf превосходит doc2vec даже для большого корпуса?

Моя очистка данных проста:

def clean_review(review):
    temp = BeautifulSoup(review, "lxml").get_text()
    punctuation = """.,?!:;(){}[]"""
    for char in punctuation
        temp = temp.replace(char, ' ' + char + ' ')
    words = " ".join(temp.lower().split()) + "\n"
    return words

И я попытался использовать 400 и 1200 функций для модели Doc2Vec:

model = Doc2Vec(min_count=2, window=10, size=model_feat_size, sample=1e-4, negative=5, workers=cores)

Тогда как мой tfidf vectoriser имеет 40000 макс. Функций:

vectorizer = TfidfVectorizer(max_features = 40000, ngram_range = (1, 3), sublinear_tf = True)

Для классификации я экспериментировал с несколькими линейными методами, однако нашел, что простая логистическая регрессия делает ОК ...

Автор: Ilia Karmanov Источник Размещён: 12.07.2016 09:01

Ответы (1)


3 плюса

25765 Репутация автора

Решение

Пример кода, который Миколов однажды опубликовал ( https://groups.google.com/d/msg/word2vec-toolkit/Q49FIrNOQRo/J6KG8mUj45sJ ), использовал параметры, -cbow 0 -size 100 -window 10 -negative 5 -hs 0 -sample 1e-4 -threads 40 -binary 0 -iter 20 -min-count 1 -sentence-vectors 1которые в gensim были бы аналогичны dm=0, dbow_words=1, size=100, window=10, hs=0, negative=5, sample=1e-4, iter=20, min_count=1, workers=cores.

Я догадываюсь, что оптимальные значения могут включать меньшее windowи более высокое min_count, и, возможно, sizeгде-то между 100 и 400, но я уже давно не проводил эти эксперименты.

Иногда это также может помочь немного переопределить векторы в конечной модели, используя параметр «больше, чем по умолчанию» passes, вместо повторного использования векторов с массовым обучением. Тем не менее, они могут просто сходиться по производительности, аналогичной Tfidf - все они зависят от одних и тех же слов-функций, а не от большого количества данных.

Переход к полу-контролируемому подходу, где некоторые теги документа представляют настроения там, где они известны, иногда также помогает.

Автор: gojomo Размещён: 29.07.2016 02:33
Вопросы из категории :
32x32