Машинное обучение или учим компьютер понимать нашу речь

Всем привет! Продолжаю посты про машинное обучение. Этот пост будет посвящён компьютерной лингвистике. Сразу оговорюсь: я не занимался задачами, в которых стоит задача работы со звуками. Например, вы говорите:"Окей, гугл. А что тое изобние янда Алиса?", а компьютер показывает вам результаты по выдаче "А что такое изобретение Яндекса Алиса". То есть, компьютер записал вашу речь и затем восстановил её. Там свой пласт задач и алгоритмов (например, основанных на Витерби).


Вообще, задача понимания текста очень актуальна. Всем желающим причаститься к проблемам: раз, два и будущая Алиса от сбербанка (ага, программисты им не нужны. Ну да, отдадим на аутсорс). Мы с вами будем заниматься несколько другой задачей. Давайте представим себе следующий отзыв с кинопоиска:

"Последние Пираты ну просто редкостное дерьмо. Сюжета никакого нету, всё высосано из пальца. Только Депочка и Джефри Раш тащут. За них и поставлю такой балл. Нет, честно. Хотя я и люблю пиратскую тематику, но смотреть фильм невозможно. Ну, ещё спецэффекты ничего. Итого, 4 из 10"

В мои задачи входило:

1. Самая простая задача. Понять, а какова эмоциональная окраска текста? Ну, здесь довольно очевидно. Явно отрицательная.

2. Немного усложним задачу. А вообще о чём пишет пользователь? Какова тематика отзыва?

3. А теперь совсем сделаем  сложной задачу: надо понять что именно не понравилось пользователю.

4. Ну, и задача в моей кандидатской была на основании того, что пользователю нравится и на что он обращает внимание порекомендовать кино. (про рекомендательные системы напишу попозже).


Сразу же перед нами встаёт техническая задача. А как построить матмодель для задачи? Ну, или как представлять слова в компьютере? Существует два подхода.  Классический (bag-of-words) и современный (word2vec). Рассмотрим первый подход (последний более сложный)

Машинное обучение или учим компьютер понимать нашу речь Обзор, Наука, Лингвистика, Искусственный интеллект, Длиннопост

Bag-of-words.

Классика же. Давайте представим, что у нас ограниченный язык и состоит из следующих слов: "я", "люблю", "кофе","утром", "чай","с", "лимон", "ненавижу". Давайте пронумеруем подряд все эти слова от 0 до 7. Будем представлять, что у нас каждое предложение это вектор. На i-ой позиции, которая символизирует соответствующее слово, может стоять или 0 (слово из языка не встречается), или 1 (наоборот). Например, предложение "Я люблю кофе" будет выглядеть :(1,1,1,0,0,0,0,0,0). А предложение:"Я люблю утром чай с лимоном" будет выглядеть "1,1,0,1,1,1,1,0". Когда мы разобрались уже с представлением текста, давайте попробуем приспособить нашу модель, для анализа тональности текста. Пусть теперь если слово имеет положительный окрас, оно будет иметь оценку 1, а если негативную, то -1. Остальные слова имеют 0 оценку. Рассмотрим предложение:"Я ненавижу кофе утром". Оно будет иметь вид:"0,0,0,0,0,0,0,-1". Что делать дальше?


А дальше можно делать разное, но лучше всего тупо взять и просуммировать. То есть, если выражаться научным языком у нас будет линейный классификатор.  Картинка будет выглядеть примерно следующим образом:

Машинное обучение или учим компьютер понимать нашу речь Обзор, Наука, Лингвистика, Искусственный интеллект, Длиннопост

Да-да, я взял картинку персептрона (нейросети. По ним будет отдельный разговор), но сути это не меняет. На вход подаётся вектор, каждой координате вектора присваивается определённый вес, затем каждая координата умножается на этот вес и всё суммируется. По сути я расписал здесь работу в S. Но тогда (до 2014) использовался активно SVM. Что это за зверь?

SVM

Предположим, у нас есть двумерное пространство. Два измерения: Х и У. Есть выборка. Любой элемент из выборки может быть или звёздочкой (класс 1), или кружавчиком (класс 2). Мы взяли и нарисовали это на двумерной плоскости. Получили примерно следующую картинку.

Машинное обучение или учим компьютер понимать нашу речь Обзор, Наука, Лингвистика, Искусственный интеллект, Длиннопост

Теперь мы хотим определить алгоритм, который позволит новые элементы отнести или к кружкам, или к звёздочкам. На картинке это красная линия. Любой элемент, который будет левее этой линии будет отнесён к звёздочкам, а правее ко кружкам. Как построить эту линию? Надо будет решить оптимизацию по максимизации/минимизации margin (вообще-то в литературе принято именно такое название. На рисунке это почему-то называется gap). Говоря простым языком, разделяющая гиперплоскость  (красная линия) должна проходить по cередине между двумя классами. (Желающим понять как решается математически эта задача - размещу ссылку в конце). Ясное дело, что такую прямую не всегда можно построить. Множества объектов, где можно построить такую прямую называются линейно-разделимыми.

Ещё у линейных алгоритмов есть одно замечательное свойство/особенность, которое ярко проявляется в задачах лингвистики. В задачах анализа текста мы имеем дело с векторами с ОЧЕНЬ большой размерностью. А есть теорема, которая гласит, что для ЛЮБОГО множества  можно подобрать пространство, где оно будет линейно разделимо.

Машинное обучение или учим компьютер понимать нашу речь Обзор, Наука, Лингвистика, Искусственный интеллект, Длиннопост

На левой картинке множество в двумерном пространстве не является линейно-разделимым. Но если мы выйдем в трёхмерное пространство, то всё будет ок! А теперь, у нас итак дофигамерное пространство. Там скорее всего и так будет всё линейно разделимо.

На практике используют всё-таки модификации алгоритма. Добавляют специальные функции: ядра, которые служат чтобы повысить размерность задачи и всё было разделимо. Это отдельный такой тонкий момент, не будем его касаться в данном посту. (Желающим узнать больше первая ссылка)

"Так как же это всё применить к нашей задаче?"- наверняка спросите вы. А я отвечу. Давайте возьмём линейный классификатор SVM в качестве алгоритма. Составим огроменные вектора (обычное дело, когда там 10 000 координат), где i-ая координата вектора будет слово алфавита. Затем, возьмём отзыв который мы хотим классифицировать. Закодируем и подадим на вход нашему алгоритму и получим ответ. А как вы думаете, такой способ кодировки - он нормальный? В ранних работах по анализу тональности текста с бинарной классификацией (нравится/не нравится), такой "тупой" и "примитивный" подход давал вполне неплохой результат. Насколько я помню, где-то 70-80%. Что казалось круто. Кстати, а в чём же всё-таки минусы такой кодировки? Кодировки bag-of-words и последующего применения SVM?

Минусы:

1. Теряется информация о предложении. Зачастую довольно важная.

2. Всё сваливается в одну кучу и невозможно понять, а о чём собственно отзыв?

3. Теряются связи в предложении.


А самое главное. А что будет, когда пользователь начнёт в своём отзыве пересказывать сюжет? А там запросто может быть что-то ругательное, но не относящееся к мнению пользователя. Или наоборот, "Добрый принц поскакал героически спасать прекрасную принцессу. Имхо, сюжет говно". Гляньте, сколько положительных слов в первом предложении! И сильных эмоционально. Но мнение пользователя в реальности отражает только второе предложение и оно ключевое. Как это понять?


В середине нулевых была работа, которая призывала тренировать SVM на отзывах, которые были малость причёсаны вручную. Были выделены отдельно фразы, которые отражают мнение пользователя, а отдельно общие фразы типа насчёт сюжета. Такой подход дал неплохой прирост. Где-то 80%-85% точности. Идея хорошая. Но можно улучшить. А что если применить ещё метрику tf.idf для анализа текста? Была использована следующая модификация.

Машинное обучение или учим компьютер понимать нашу речь Обзор, Наука, Лингвистика, Искусственный интеллект, Длиннопост

где:

Vt,d — вес слова t в документе d

Сt,d — кол-во раз слово t встречается в документе d

|P| — кол-во документов с положительной тональностью

|N| — кол-во документов с отрицательной тональностью

Pt — кол-во положительных документов, где встречается слово t

Nt — кол-во отрицательных документов, где встречается слово t

Затем в bag-of-words вместо +-1 ставилась эта оценка.


Результаты работы, где была введена эта метрика:

Машинное обучение или учим компьютер понимать нашу речь Обзор, Наука, Лингвистика, Искусственный интеллект, Длиннопост

Круто, что сказать. Вообще, здесь можно говорить много, поэтому вместо итога расскажу немного о своей роли в мировой науке (2014 год). Я поставил вопрос: а на каких отзывах считать delta tf.idf? На больших текстах или небольших "а ля твиты"? Ну, у меня получилось, что лучше твиты. Тетсировал я, дай Бог памяти, на 100 000 отзывах. Также там попинал одного греческого учёного за неаккуратное ведение исследований. Статью у меня приняли в скопус на английском, но, если честно, я её стыжусь. Да, я сделал исследование и сделал его сам, но это херь по своей значимости (хотя, чего таить, было приятно. Что я магистр и в скопусе). Тем более, что в том же году Томас Миколов триумфально ввёл в обиход компьютерной лингвистики рекуррентные нейросети...


Честно говоря,  и так получился огромный пост. Если будет интересно, в следующем посту немного расскажу или о нейросетях и word2vec, или о рекомендательных системах и их симбиозе с анализом тональности текста. Ну, или про шахматные программы.


Ссылки:

1. SVM: http://www.ccas.ru/voron/download/SVM.pdf

2. Учёные, которые догадались использовать машинное обучение для сентимент-анализа. Их статья, где они придумали использовать субъективные фразы. http://www.cs.cornell.edu/home/llee/papers/cutsent.pdf

3. Учёные, которые придумали использовать delta td.ifd. http://ebiquity.umbc.edu/_file_directory_/papers/446.pdf

Наука | Научпоп

7.7K постов78.5K подписчиков

Добавить пост

Правила сообщества

Основные условия публикации

- Посты должны иметь отношение к науке, актуальным открытиям или жизни научного сообщества и содержать ссылки на авторитетный источник.

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

- Научные статьи должны сопровождаться описанием исследования, доступным на популярном уровне. Слишком профессиональный материал может быть отклонён.

- Видеоматериалы должны иметь описание.

- Названия должны отражать суть исследования.

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


Не принимаются к публикации

- Точные или урезанные копии журнальных и газетных статей. Посты о последних достижениях науки должны содержать ваш разъясняющий комментарий или представлять обзоры нескольких статей.

- Юмористические посты, представляющие также точные и урезанные копии из популярных источников, цитаты сборников. Научный юмор приветствуется, но должен публиковаться большими порциями, а не набивать рейтинг единичными цитатами огромного сборника.

- Посты с вопросами околонаучного, но базового уровня, просьбы о помощи в решении задач и проведении исследований отправляются в общую ленту. По возможности модерация сообщества даст свой ответ.


Наказывается баном

- Оскорбления, выраженные лично пользователю или категории пользователей.

- Попытки использовать сообщество для рекламы.

- Фальсификация фактов.

- Многократные попытки публикации материалов, не удовлетворяющих правилам.

- Троллинг, флейм.

- Нарушение правил сайта в целом.


Окончательное решение по соответствию поста или комментария правилам принимается модерацией сообщества. Просьбы о разбане и жалобы на модерацию принимает администратор сообщества. Жалобы на администратора принимает @SupportComunity и общество Пикабу.

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Здравствуйте! А можно почитать вашу диссертацию по данной теме, очень интересно

раскрыть ветку (10)
Автор поста оценил этот комментарий
Вечер добрый! Неа:
1. Я ушёл из аспирантуры по факту в 2015 году, сразу же как сдал минимум по философии и английскому.
2. Я стал активно работать по программистской тематике и была куча событий в моей жизни, и я забил на попытки вернуться в аспу (особенно после того, как я в нижнем попробовал поступить в политех и мне сказали цену...)
3. По работе, если мне случалось заниматься наукоемким (грант, есть упоминания в моих постах, хакатоны в нижнем), то я этим уже не занимался(работой с речью).
4. На вскидку, что я помню, то там только были попытки подружить инфу с кинопоиска (на питоне сграбил, потом при помощи Тамита парсера разбил, стал строить Lde модели и ещё какую-то штуку) с рекомендационной моделью.

Если ввас просто интересует работа с текстом, то я бы рекомендовал погуглить сбербанковские хакатоны, у них всегда один трек минимум был посвящён работе с текстом. Ну а также работы Миколова, где был введён word2vec. Если в шаде в этом семестре будет курс по работе с текстом, то может ещё чего нить посоветую.
раскрыть ветку (9)
Автор поста оценил этот комментарий

Спасибо за ответ! Меня интересуют работы именно по тональности текста, так как тема дипломной работы связана с изучением и сравнением программ, которые используются для определения тональности. Не могли бы Вы, пожалуйста, посоветовать что-нибудь по данной тематике?

раскрыть ветку (8)
Автор поста оценил этот комментарий
Про тональность текста - лет 5-6 назад было актуально:
1. Delta tf.idf (базовая хрень, которая уже даст очень хороший базис)
2. В добавок к предыдущему кастомная разборка прндложения с учётом отрицаний, слов усилителей, смайликов, сарказма(это самое муторное) . Это набор для чуть более интеллектуального анализа. Вообще, препроцессинг очень важен для этой задачи.
3. Тут ещё такой момент: а у вас бинарная классификация или 5 классов? Если последнее могу посоветовать на kaggle посмотреть конкурсы. Я точно помню, что лет 5-6 назад там был конкурс посвящённый классификации на 5 классов.
4. Для диплома может и хватит и классического bagofwords с каким-нибудь SVN (большое пространство признаков, линейные классификаторы будут очень ничего). Для себя и если тема заинтересует, смотрите word2vec и его приложения. После ухода из аспы я за nlp тематикой как-то не следил.
5. Когда будете разбирать, а из чего состоят тексты и как там слова друг с другом связаны, могу посоветовать Стэнфордский парсер (у них раньше ещё и классификатор по тональности текста был) и яндексвоскую Тамиту (для русского языка незаменимая вещь).
Я еду сегодня домой, если найду свое творчество времен универа, то может ещё что-то добавлю.
раскрыть ветку (7)
Автор поста оценил этот комментарий

Спасибо Вам большое! Буду очень рада, если какие-то дополнительные материалы ещё получится найти! Что касается классификации, то где-то бинарная, где-то 5 классов, все зависит от программы, моя задача в практической части работы как раз и заключается в том, чтобы провести эксперименты в разных программах и сравнить эффективность и точность их работы.

раскрыть ветку (6)
Автор поста оценил этот комментарий

В общем, посмотрел. К сожалению, черновиков/рефератов не осталось у меня, осталась бета версия моей магистерской (там есть список литературы. На 2014 год это было очень актуально. Последние версии, что я изучал в аспирантуре, не скажу). Если хотите, могу выслать. Статью свою давать не буду, ибо несоклько её стыжусь.

Некоторые общие замечаения

1. Бинарная классификация проще всего. В принципе, я помню, что one vs all для многомерной как-то не особо зашли.

2. Немного материалов, может будет полезно:


то, что говорил вчера про конкурс с кэггла.

https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews...


Настоятельно рекомендую ознакомиться с её творчеством:

https://www.annualreviews.org/doi/abs/10.1146/annurev-lingui...

Я в своё время смотрел её старые работы. Сам алгоритм классификации не очень интересен, но она достаточно грамотно выделяет шаблоны, которые могут показывать изменение анализа тональности в предложении.

раскрыть ветку (5)
Автор поста оценил этот комментарий

Спасибо!!!

По второй ссылке только платные работы? Примерно по 100$ все.

раскрыть ветку (4)
Автор поста оценил этот комментарий

1 К.В. Воронцов. Математические методы обучения по прецедентам

(обучение по прецедентам

http://www.machinelearning.ru/wiki/images/6/6d/Voron-ML-1.pd...

2 К. Д.Маннинг, П. Рагхаван, Х. Шютце. Введение в информационный

поиск// Вильямс, 2011

3 Bing Liu. Sentiment Analysis and Subjectivity — Handbook of Natural

Language Processing, Second Edition. Taylor and Francis Group, Boca,

2010

4 McKewn R., Hatzivaasilioglou V. Predicting the semantic orientation of

adjectives.//Proceedings of the 35th Annual Meeting of the Association for

Computational Linguistics and Eighth Conference of the European Chapter

of the Association for Computational Linguistics.pp. 174-181

5 Pang, B., Lee, L., Vaithyanathan, S. Thumbs up? Sentiment classification

using machine learning techniques// Proceedings of EMNLP, pp. 79–86,

2002

6 Martineau, J., Finin, T., Delta TFIDF: An Improved Feature Space for

Sentiment Analysis // preprint, Third AAAI Internatonal Conference on

Weblogs and Social Media, May 2009, San Jose CA.

7 Paltoglou, G., Thelwall, M., A study of Information Retrieval weighting

schemes for sentiment analysis // Proceedings of the 48th Annual Meeting of

the Association for Computational Linguistics, pp. 1386–1395. Uppsala,

Sweden, 2010

8 Pang, B., Lillian, L., A Sentimental Education: Sentiment Analysis Using

Subjectivity Summarization Based on Minimum Cuts // Proceeding ACL

’04 Proceedings of the 42nd Annual Meeting on Association for

Computational Linguistics Article No. 271,USA,2004.

9 Taboada, M.,Brooke, J. and al. Lexicon-based methods for sentiment

analysiss //Journal Computational Linguistics archive Volume 37 Issue 2,

June 2011 , Pages 267-307 Sweden, 2010

10 Leo Breiman. Random Forests — Machine Learning,October 2001, Volume

45, Issue, pp 5-32.

11.John Blitzer, Mark Dredze, Fernando Pereira. Biographies, Bollywood,

Boom-boxes and Blenders: Domain Adaptation for Sentiment

Classification// Association of Computational Linguistics (ACL), 2007


12 .Amazon review collection

http://www.cs.jhu.edu/~mdredze/datasets/sentiment/unprocesse...

13 Cornell Movie Review Data

http://www.cs.cornell.edu/people/pabo/movie-review-data/

14 List of stop words

http://norm.al/2009/04/14/list-of-english-stop-words/

15.Michigan dataset

http://inclass.kaggle.com/c/si650winter11

16 Sentiment Analysis with Python NLTK Text Classification

http://text-processing.com/demo/sentiment/

17 Sentiment Analysis with Stanford’s classifier

http://nlp.stanford.edu:8080/sentiment/rntnDemo.html

18 Twitter Sentiment Analysis Training Corpus (Dataset)

http://thinknook.com/twitter-sentiment-analysis-training-cor...

2012-09-22/

19 Rotten tomatoes dataset and Stanford’s challenge

http://www.kaggle.com/c/sentiment-analysis-on-movie-reviews

Автор поста оценил этот комментарий

Скинул свой старый список литературы. Из актуального там не очень уж и много. Разве что датасеты все +- актуальные.


Про Табоаду - нет. Есть и бесплатные.

9 Taboada, M.,Brooke, J. and al. Lexicon-based methods for sentiment


analysiss //Journal Computational Linguistics archive Volume 37 Issue 2,


June 2011 , Pages 267-307 Sweden, 2010


Её я тогда упомянул больше для примера, кого надо искать, если хочется посмотртеь на лексические заморочки

раскрыть ветку (2)
Автор поста оценил этот комментарий

Большое Вам спасибо за литературу! Скажите, пожалуйста, а Вы сможете помочь за отдельную плату написать небольшую программу в Python для определения тональности. В своей исследовательской работе изучаю сентимент анализ, но знаний для того, чтобы практически реализовать данную задачу, не достаточно. Но очень хочется попробовать написать что-то своё и проследить, как работает система.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Деньги у меня есть, но времени нет. Так что я врядли помогу.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку