Pull to refresh

Comments 12

Интересно, а для русского языка это будет также хорошо работать?
Оно и для английского-то не очень работает (всякие вещи типа сарказма и люди-то не всегда понимают, так что гадание на твиттере может быть не очень успешным).

Но если использовать второй подход (word2vec/glove) и сделать word embedding для большого русскоязычного корпуса, то должно работать с более-менее нормальным результатом. По крайней мере, в задачах NER w2v с русским работает очень прилично.
Я не очень понял, как w2v помогает извлекать именованные сущности (под NER вы это имеете ввиду?). И не подскажете, какой точностью обладают системы для распознавания эмоциональной окраски текста в реальных задачах?
NER (Named Entity Recognition) — это выделение из текстов именованных сущностей (такие как собственные имена, местоимения). Уже немало попыток было сделано для использования w2v для выделения NER. Думаю, Вам лучше взглянуть сюда www.aclweb.org/anthology/W15-1830 или же сюда datascience.stackexchange.com/questions/492/word2vec-for-named-entity-recognition.
В реальных задачах, я по крайней мере, выше чем 75-80% не поднимался. Но думаю есть и результаты получше. Например — nlp.stanford.edu/sentiment. Здесь они используют глубокие нейронные сети для анализа тональности.
Согласен с Вами, но даже word2vec/glove не решены таких недостатков как омонимия, многозначность, и т.д. Также во многих случаях нужно учитывать синтаксическую структуру языка. Для достижения лучших результатов одного машинного обучения думаю не достаточно. Нужно использовать гибридные методы (машинное обучение + rule based) для которых в свою очередь нужны размеченные корпуса (с размеченной морфологией и синтаксисом).
По поводу омнимии и полисемии на Word2Vec рекомендую взглянуть сюда.
А как быть со словарями беспощадно большими(даже после стемминга)? Какие подходы оправдывачт себя?
Ну тут уже прямиком на использование Big Data. Но на мой взгляд такие словари являются сильно зашумленными, то есть множество слов можно отсеять по частотной характеристике. Или же сделать что-то наподобие подхода 2 в этой статье.
Для обучающей выборки мы использовали открытый набор данных с сайта www.kaggle.com, а именно, набор включающий в себя данные из 50000 обзоров фильма из сайта IMDB, специально отобранных для анализа тональности.
Подскажите, пожалуйста, речь идёт о данных из этого учебного соревнования?
word2vec-nlp-tutorial Data

Дело в том, что на форуме сразу была поднята тема, что простенькая (shallow) линейная регрессия на Bags of words (tfidf) без всякого Word2Vec достигает 0,95 accuracy
www.kaggle.com/c/word2vec-nlp-tutorial/forums/t/11261/beat-the-benchmark-with-shallow-learning-0-95-lb
Если мне не изменяет память, на десктопе считалось не так уж и долго (минуты или десятки минут)

(А вот на рецензиях Rotten Tomates www.kaggle.com/c/sentiment-analysis-on-movie-reviews где оценивается каждая фраза рекордный результат не больше 80% )

Или речь идёт о другом датасете?
Здравствуйте! Все верно, речь идет о данных, которые взяты с учебного соревнования. Я попробовал испытать тестовые данные используя Bag-Of-Words + Logistic Regression, но выше чем 0,87 не поднялся. Этот вопрос в форуме я почему-то не заметил, попробую поиграться с их скриптом. Спасибо!
А на счет десяток минут времени, Bag-of-words действительно занимает не более 3-4 минут, а вот обучение word2vec+кластерирезация+обучение заняло с моим ноутбуком больше часа времени.
«Заменяя предыдущие вектора на индекс слова в словаре получаем следующее»
Вот самый непонятный аспект в статьях про NLP: как получить вектор? И хотя бы: что такое вектор?
В этой статье получилось 3 вектора над {0,1}^9 (не понятно как, конкатенация двоичного представления номера слова в словаре не подходит, т.к. «0, 0, 0» используется 2 раза). В других встречались ℝ^n, но тоже не понятно, откуда.
Подход 1 в этой статье один из самых простых методов представления текста в виде вектора. Если не понятно давайте разберем пример, который дан в этой статье:

Есть словарь, где мы собираем все наши слова и сортируем, допустим — [biography, cinema, feature, film, going, originally, part, remember, see], т.е. понятно, что на самом деле в конечном словаре их намного больше. Но для упрощение представим, что в нашей базе только эти 9 слов. У каждого из них есть порядковый номер: biography — 0, cinema — 1, и т.д. Далее для каждого документа создаем вектор (ну или массив если слово вектор вводит Вас в заблюждение) длиною кол-ву слов в словаре (т.е. 9) изначально все заполненные нулями, назовем его v = [0,0,0,0,0,0,0,0,0]. Затем, если в тексте встретилось слово biography, значит v[0] = 1, и т.д.
Sign up to leave a comment.

Articles