О расширении словаря эмоционально окрашенных слов на базе сообщений твиттера

от автора

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

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

Оценка твиттов

Получить твитты, а, точнее, доступ к потоку новых твиттов, можно, зарегистрировав приложение на сайте Твиттера через URL и используя python модуль — oauth2 (подробнее в описании соответствующего проекта в курсе, приведенном выше).

Сам по себе твитт выглядит так (словарь списков словарей ….), текст выделен жирным

{u’contributors’: None, u’truncated’: False, u’text’: u"Nice to know you aren’t going to disappear on me again", u’in_reply_to_status_id’: None, u’id’: 608365231232978944L, u’favorite_count’: 0, u’source’: u’Twitter for iPhone‘, u’retweeted’: False, u’coordinates’: None, u’timestamp_ms’: u’1433880548662′, u’entities’: {u’user_mentions’: [], u’symbols’: [], u’trends’: [], u’hashtags’: [], u’urls’: []}, u’in_reply_to_screen_name’: None, u’id_str’: u’608365231232978944′, u’retweet_count’: 0, u’in_reply_to_user_id’: None, u’favorited’: False, u’user’: {u’follow_request_sent’: None, u’profile_use_background_image’: False, u’default_profile_image’: False, u’id’: 906813948, u’verified’: False, u’profile_image_url_https’: u’https://pbs.twimg.com/profile_images/608142391472570368/b0RxTzZS_normal.jpg’, u’profile_sidebar_fill_color’: u’000000′, u’profile_text_color’: u’000000′, u’followers_count’: 186, u’profile_sidebar_border_color’: u’000000′, u’id_str’: u’906813948′, u’profile_background_color’: u’000000′, u’listed_count’: 0, u’profile_background_image_url_https’: u’https://abs.twimg.com/images/themes/theme1/bg.png’, u’utc_offset’: -18000, u’statuses_count’: 1197, u’description’: u«There’s something with you that makes me smile», u’friends_count’: 184, u’location’: u’CCTX’, u’profile_link_color’: u’AF65D4′, u’profile_image_url’: u’http://pbs.twimg.com/profile_images/608142391472570368/b0RxTzZS_normal.jpg’, u’following’: None, u’geo_enabled’: True, u’profile_banner_url’: u’https://pbs.twimg.com/profile_banners/906813948/1431466945′, u’profile_background_image_url’: u’http://abs.twimg.com/images/themes/theme1/bg.png’, u’name’: u’Abigail Garcia’, u’lang’: u’en’, u’profile_background_tile’: False, u’favourites_count’: 8431, u’screen_name’: u’AbigailG_23′, u’notifications’: None, u’url’: None, u’created_at’: u’Fri Oct 26 21:33:39 +0000 2012′, u’contributors_enabled’: False, u’time_zone’: u’Central Time (US & Canada)’, u’protected’: False, u’default_profile’: False, u’is_translator’: False}, u’geo’: None, u’in_reply_to_user_id_str’: None, u’possibly_sensitive’: False, u’lang’: u’en’, u’created_at’: u’Tue Jun 09 20:09:08 +0000 2015′, u’filter_level’: u’low’, u’in_reply_to_status_id_str’: None, u’place’: None}

Лучше сохранять только сам текст для экономии места. Также можно отбросить другие языки, так как в дальнейшем будут анализироваться твитты только на английском.

Следующая часть — это оценка твиттов на базе словаря. Я использовал словарь из 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 в начальном словаре.

Дальнейшая работа заключается в том, чтобы проверить, что такой расширенный словарь будет не только «единственным» но и правильным: например, встроить процедуру корректировки значений на некоторой известной базе или процедуру конечной сверки полученного словаря с неиспользованной частью начального словаря.

ссылка на оригинал статьи http://habrahabr.ru/post/260493/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *