Предположим, нам надо оценить эмоциональную окраску твитов, например, для проведения различных социологических замеров (о том, могут ли такие замеры заменить классические соц. опросы см. здесь). В таком случае, очевидным подходом будет взять словарь эмоционально окрашенных слов, где эмоции выражены количественно, и оценивать твиты по наличию слов из этого словаря. Но тут возникает проблема: такие словари редки, малы и могут устареть, к тому же не соответствуют «живому» языку общения в соц. сетях. Кажется законным пополнять доступные словари новыми словами, при этом приписывая им эмоциональность твитов, в которых эти слова встречаются (точнее, среднее арифметическое по всем твитам, содержащим данное слово). Собственно такая задача предлагается к решению в курсе «Introduction to Data Science». Возникает вопрос: является ли такое продолжение законным? Будет ли полученный словарь зависеть от тех твитов на которых он расширялся или, точнее, насколько будут отличаться два словаря, полученные из одного и того же начального словаря, но дополненные на разных твитах?
Оценка твитов
Получить твиты, а, точнее, доступ к потоку новых твитов, можно, зарегистрировав приложение на сайте Твиттера через URL и используя python модуль — oauth2 (подробнее в описании соответствующего проекта в курсе, приведенном выше).
Лучше сохранять только сам текст для экономии места. Также можно отбросить другие языки, так как в дальнейшем будут анализироваться твиты только на английском.
Следующая часть — это оценка твитов на базе словаря. Я использовал словарь из 2500 слов, каждому слову приписано значение от -5 до 5.
Схема оценки твитов:

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

Сравнение словарей
Далее переходим к сравнению двух словарей, полученных на базе одного начального, но расширенных на разных сериях твитов. Так как словари интересны не сами по себе, а то, как они будут оценивать последующие твиты, то и сравнивал я их по тому, как они оценивают независимую серию твитов. Для каждого словаря можно составить вектор, i-ая координата которого — это оценка словарем i-го твита из серии. Таким образом, задача свелась к сравнению двух векторов, каждый из которых соответствует определенному словарю, а координаты — численной оценке твитов.
Параметры, которые вычислялись
корреляция — чем ближе к +1, тем лучше. Словари с корреляцией равной +1 «ведут» себя одинаково.
среднее разности векторов — насколько в среднем различалась оценка твитов двумя словарями
стандартное отклонение среднего — чтобы подсчитать вероятность того, что разница в оценке твита двумя словарями — «случайная» ошибка.
Что получилось
Если словари создавать на базе из 8 тыс. твитов, то:
корреляция — 0.66
среднее разности — 0.105
стандартное отклонение — 0.042
То есть, отклонение среднего разности от нуля (предполагаем, что ошибка случайна) равно 2.5 стандартных отклонений, что, конечно, многовато. Но в принципе, можно сказать, что словари оценивают похоже. Если же базу брать в размере 60 тыс. твитов для каждого словаря, то результаты намного лучше:
корреляция — 0.89
среднее разности — 0.00086
стандартное отклонение — 0.0080
То есть, отклонение среднего разности от нуля равно 0.1 стандартных отклонений, что позволяет сделать вывод о «случайности» ошибки (разности).
Таким образом, мы получили, что словари, расширенные на базе более 60 тыс. твитов, не зависят от самой базы. На практике это означает, что 30 минут скачивания потока Твиттера (60 тыс. отфильтрованных сообщений) позволяют получить новый, расширенный словарь с количеством слов — 16.5 тыс. вместо 2.5 в начальном словаре.
Дальнейшая работа заключается в том, чтобы проверить, что такой расширенный словарь будет не только «единственным» но и правильным: например, встроить процедуру корректировки значений на некоторой известной базе или процедуру конечной сверки полученного словаря с неиспользованной частью начального словаря.
Комментарии (9)
 - ServPonomarev17.06.2015 14:10+2- Что такое хорошо, что такое плохо (скипграммы): 
 
 Enter word or sentence (EXIT to break): хорошо
 
 Word: хорошо Position in vocabulary: 1322
 
 Word Cosine distance
 — хоршо 0.748067
 хорощо 0.713937
 прекрасно 0.682211
 отлично 0.679190
 плохо 0.675239
 неплохо 0.641755
 интересно 0.638518
 просто 0.636137
 спокойно 0.634527
 всегда 0.620789
 даже 0.620331
 замечательно 0.617962
 так 0.616831
 зорошо 0.615472
 только 0.612478
 вообще 0.610174
 очень 0.608186
 хоошо 0.608186
 то 0.607600
 хрошо 0.603901
 ужасно 0.599045
 страшно 0.598783
 но 0.590102
 легко 0.588955
 круто 0.586992
 хуже 0.586305
 хороо 0.585358
 наоборот 0.585256
 понятно 0.584545
 весело 0.583578
 совсем 0.581358
 наверное 0.575665
 шорошо 0.575417
 потому 0.572287
 странно 0.569226
 она 0.568151
 харошо 0.567638
 хлрошо 0.567548
 еще 0.565177
 приятно 0.563256
 Enter word or sentence (EXIT to break): плохо
 
 Word: плохо Position in vocabulary: 1465
 
 Word Cosine distance
 — полохо 0.755004
 плозо 0.743426
 плоха 0.740933
 сильно 0.695998
 плохл 0.687667
 слабо 0.678554
 нормально 0.678436
 хорошо 0.675239
 туго 0.657558
 не 0.657456
 рлохо 0.644137
 поохо 0.642739
 тяжело 0.642100
 постоянно 0.639980
 долго 0.636029
 пдохо 0.634517
 медленно 0.626684
 плхо 0.620504
 плохр 0.610601
 хуже 0.591879
 постояно 0.591841
 плоо 0.588206
 часто 0.585112
 плрхо 0.585109
 иплохо 0.580389
 медлено 0.579150
 тежело 0.578908
 неприятно 0.578856
 нармально 0.571858
 плоъо 0.568687
 плочо 0.567627
 плоховато 0.560026
 что 0.558980
 ужасно 0.558124
 иногда 0.553562
 резко 0.552327
 хреново 0.551475
 почемуто 0.549690
 почему 0.548091
 похо 0.547614
 
 (багофвордс):
 
 Enter word or sentence (EXIT to break): хорошо
 
 Word: хорошо Position in vocabulary: 1450
 
 Word Cosine distance
 — хоршо 0.790929
 хорощо 0.745507
 отлично 0.701097
 одихаем 0.691935
 плохо 0.684141
 хороо 0.675422
 хороошо 0.670692
 вавилушка 0.661926
 преживай 0.654526
 рэпцентр 0.651677
 ъорошо 0.651287
 хоошо 0.648912
 хорошол 0.646242
 эжить 0.644421
 хорлшо 0.643647
 сеобудит 0.643139
 замечтательно 0.642189
 хрошо 0.641470
 неплохо 0.641023
 каторжником 0.635752
 прекрасно 0.633564
 хорошр 0.631457
 замечательно 0.628330
 зорошо 0.627905
 хорошоскачать 0.625179
 русижить 0.624352
 хорошоъ 0.619743
 хооршо 0.614906
 чбокси 0.611316
 посвищут 0.609207
 правдоискательства 0.606537
 оболда 0.606388
 чобски 0.603656
 хороршо 0.603111
 эить 0.601693
 вердючка 0.600977
 звенина 0.598875
 оболдуеве 0.598266
 дочур 0.594444
 некрвсов 0.593791
 Enter word or sentence (EXIT to break): плохо
 
 Word: плохо Position in vocabulary: 1591
 
 Word Cosine distance
 — плоха 0.740065
 нормально 0.693406
 полохо 0.688477
 хорошо 0.684141
 не 0.674494
 рлохо 0.660781
 пдохо 0.651909
 плоо 0.648410
 медленно 0.647129
 пложо 0.646863
 плозо 0.645705
 плдохо 0.639308
 прлохо 0.638288
 слабо 0.629214
 сильно 0.628831
 хьютор 0.626530
 иногда 0.623982
 плхо 0.620968
 почемуто 0.620181
 долго 0.620131
 пдлохо 0.619860
 перестал 0.618821
 нлохо 0.617709
 дыит 0.617141
 тяжело 0.615071
 пплохо 0.612485
 плохл 0.612272
 хуже 0.611977
 перестала 0.611066
 прерывесто 0.609763
 плочо 0.609388
 неровно 0.607406
 почему 0.606728
 нармально 0.606544
 пережимаешь 0.605609
 постоянно 0.605018
 неустойчиво 0.600829
 заврдится 0.600277
 плохол 0.599486
 мало 0.599094
 - AndrewNikolaevich18.06.2015 22:22- Есть одна большая проблема — грамотность пользователей Twitter-a.  - Kaiser19.06.2015 14:58- Можно пропускать твит через корректор и только потом добавлять его в обучающую выборку/классификатор. Но время на освоение PyEnchant или yandex speller (если проходите по лимитам) будет потрачено. А количество ошибок может остаться прежним. Когда я, например, твиты пишу, мне телефон/браузер явные опечатки исправляет. 
 
 С точки зрения последовательности действий подход мне кажется верным. Сначала получаем приемлемый результат, убеждаемся в перспективности подхода, а потом занимаемся тонкой настройкой.
 
 Но сам подход с присвоением баллов словам мне перспективным не кажется. Сейчас я бы попробовал bag of words + svm. Но, уверен, что для данной задачи на текстах есть более хитрые подходы с лучшим качеством.
 
 - Assistant_Branch_Manager Автор18.06.2015 23:00- Данный метод как раз позволяет добавлять слова с ошибками и сленг в словарь (главное, чтобы такие слова встречались вместе с другими корректными, уже оцененными словами в одном твите). 
 ex: bro=-0.29 - AndrewNikolaevich19.06.2015 13:27- но тогда если я всё правильно понял, то слову с ошибкой будет соответствовать другое число, нежели правильно написанному?  - Assistant_Branch_Manager Автор19.06.2015 16:50- Если это действительно ошибка (совершается случайно), то вероятность употребления такого слова в правильном и искаженном написании рядом с положительными/отрицательными уже оцененными словами одинакова, следовательно при достаточно большом объеме твитов у слова и его искаженной версии будут одинаковые «числа». 
 Если же слово намеренно коверкается, скорее всего у него другое значение, следовательно вероятность встретиться с положительно/отрицательно оцененными словами разная для вариантов написания, таким образом и их оценка будет разная.
 
 
 
           
 
samodum
Как он будет определять эмоциональность выражений типа:
«I don't hate this bastard!»
«Awesome bastards!»
«Do you hate this bastard?»
Assistant_Branch_Manager Автор
Выражения типа «Awesome bastards!» такой метод оценки может оценивать некорректно (скорее всего около нуля, так как присутствует одно сильно негативное и одно сильно положительное слово), хотя стоит заметить, что и человек испытывает сложности в оценки подобных выражений вырванных из контекста.
В любом случае данный метод предназначен для оценки в среднем большого количества информации, а не единичных твитов. Например, если в данном месяце вместе со словом «Obama» стали чаще встречаться позитивные/негативные слова, (в сравнении с предыдущем месяцем), то можно сделать вывод об положительном/отрицательном изменении рейтинга. Главное, что бы реальное изменение настроений было больше чем погрешность измерений.
Конечно дополнение данного метода возможностью распознавать словосочетания, а также отрицательные и вопросительные предложения, позволит повысить его точность и осмысленность.
Error_403_Forbidden
в оценкЕ
с предыдущИМ
ЧТОБЫ — слитно
и т.д.
ну и запятые.
Русский язык слабоват. Рановато ещё заниматься обработкой текстов