Открыть изображение »
У кого больше зла в твиттере?
19 мая 2012 :: 33 комментария :: 6411 просмотров :: 546 слов

Кому лень читать, могут сразу отмотать в конец, там картинка.

Вчера мне выдался свободный денек и я решил посвятить его кодингу «для себя». Давно вынашивал план написать спам-фильтр для блога на основе каких-нибудь алгоритмов машинного обучения. Что-то типа собственного Akismet, только хуже. Конечно, ценность у проект представлял сугубо для меня, но саморазвитие - это же классно!

Для тех, кто не в курсе - как это все работает: в написании такой системы выбор пал на широко известные алгоритмы классификации, такие как наивный байесовский классификатор и метод Фишера (в наукозадротских кругах известный как «итеративный взвешенный метод наименьших квадратов», если я ничего опять не путаю). Хотел так же использовать давно любимые нейронные сети, но не смог нормально придумать входные сигналы. Любые попытки в конце сводились к вышесказанным классификаторам и я поклал хуй. Как известно и тот и другой метод являются примерами обучения с учителем.

Когда пара классов классификатора (кеке, каламбурчик) на Языке Самого Высокого Уровня Бетон было написано, мне внезапно пришла в голову идея. Классификатор ведь можно использовать не только для определения спама, он получился универсальный и принимал любое количество классов (категорий) для классификации. Тут как раз подвернулся под руку твиттер со своими вечными срачами и мне показалось интересным замерить количество ненависти в каждом из твиттер-аккаунтов моих знакомых. Задача показалась смешной и забавной и, конечно же, я как мудак решил ее реализовать. Никакой научной значимости и полезности для общества, в отличии отзывов на фламп, она не несет, так что можно считать, что я просто хорошо провел время.

Для обучения мне нужно было напарсить обучающее множество. Подключив python-twitter я написал простенький скрипт, который выводил твит и спрашивал есть ли в нем НЕНАВИСТЬ или ДОБРО. На обучение я убил, наверное, больше часа. Всего было собрано по больше 500 твитов в каждой из двух категорий, а сколько вашего я говна начитался - жесть. Но это все равно крайне мало для действительно показательных результатов, я просто заебался. Метод Фишера, реализованный в системе как главный, достаточно хорошо определяет вероятность и не будет лажать как Байес, если слово встретилось только 1 раз в какой-то категории. Будем надеяться. В качестве порогов я задал 0.8, то есть сообщение считается злом или добром только в случае более чем 80% уверенности. Запуск производился на 300 последних твитах пользователя, полученных все через тот же twitter api. Ретвиты не учитывались. И еще одна важная оговорка: мне было лень регать приложения, что-то там подключать, поэтому тестовые выборки делались в «файле ненависти» есть много твитов нашего любимого The___Master, см. пикрелейтед).

Итак, в первом раунде у нас участвуют: iTipsyL, un1or, ReDetection, s_mordvinov, netsvetaev, 2kay_, themylogin, enchantner, a_kadorkin, belokur, alex_ign, vas3k, nakukryskin, paulstashevsky, pechenushka, pro100che, The_Mindless, Feelek.

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

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

Обучающие выборки не выкладываю во избежание срача и демагогии. Ну и наконец-то вот (кликабельно):

Еще? Тогда вот
Комментарии
0
potomushto ⸬ 19 мая 2012, 09:50 ⸬ Novosibirsk, RU ⸬ Windows лог
#
sentiment analysis, только я не понял какие фичи ты использовал, n-граммную модель языка?
0
vas3k ⸬ 19 мая 2012, 09:55 ⸬ Novosibirsk, RU ⸬ Apple лог
#
potomushto, ну изначальный проект не рассчитывался именно на sentiment analysis, так что n-граммы не юзал (кстати, отличная идея, надо попробовать, благодарю). Там просто слова нормализуются (приводятся к начальной форме) и подсчитывается сколько раз какое слово встретилось там и там. На основе этого потом подсчитывается суммарная вероятность всего текста (метод фишера использует функцию хи-квадрат для этого), короче все банально. Развиваться можно еще далеко :)
0
werehuman ⸬ 19 мая 2012, 10:03 ⸬ Novosibirsk, RU ⸬ Windows лог
#
Странно, я думал, что больше всего ненависти будет у тебя.

> Пока что кого точно помню, что забыл: o_Ohmy, werehuman, hanggard, кто еще?
Я в твиттер по сути только репощу всякие смехуёчки, по мне вряд ли удастся что-то задетектить.
0
potomushto ⸬ 19 мая 2012, 10:11 ⸬ Novosibirsk, RU ⸬ Windows лог
#
ога, получается юниграмная частотная модель. Такие проекты-велосипеды на один день люблю я. Если будет интересно добей до какого-нибудь веб-сервиса с коррекцией, пусть по-тихому обучается дальше сам.

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

Забавно, что я пишу про обработку естественного языка с таким количеством ошибок.
0
werehuman ⸬ 19 мая 2012, 10:40 ⸬ Novosibirsk, RU ⸬ Windows лог
#
potomushto, а ещё с такой кашей в голове, что никому ничего не понятно.
0
Psyhister ⸬ 19 мая 2012, 13:37 ⸬ Novosibirsk, RU ⸬ Linux лог
#
А меня? =(
0
Alive ⸬ 19 мая 2012, 14:25 ⸬ Windows лог
#
Интересно, каким образом ты задавал "ненависть". Учитывая, что пол твиттера у меня - няшности - довольно странный результат.
Да и твои ровные 50% радуют ;)
0
The Master ⸬ 19 мая 2012, 15:20 ⸬ RU ⸬ Apple лог
#
Э, а чё меня пропиарили а в таблице ненависти меня нету. Как так? Это дискриминация!!! Я буду жаловаться!
0
vas3k ⸬ 19 мая 2012, 16:35 ⸬ Novosibirsk, RU ⸬ Apple лог
#
The Master, у тебя акк закрытый :P
Psyhister, точно, записал.
0
Sk8er ⸬ 19 мая 2012, 20:43 ⸬ Tyumen, RU ⸬ Linux лог
#
проверь меня)
0
vas3k ⸬ 20 мая 2012, 07:50 ⸬ Novosibirsk, RU ⸬ Apple лог
#
Добавил еще одну картинку
0
werehuman ⸬ 20 мая 2012, 08:20 ⸬ Novosibirsk, RU ⸬ Windows лог
#
Не, у тебя определённо очень предвзятые фильтры.
0
vas3k ⸬ 20 мая 2012, 08:41 ⸬ Novosibirsk, RU ⸬ Apple лог
#
werehuman, прости, я согрешил. Моя программа говно, я не умею писать непредвзятые программы. Даже мой код ненавидит тебя лично.

Интересно. Сколько, блядь, раз нужно предупредить в посте об этом, сколько раз сказать лично или еще где-то написать, что выборка мала, что обучение недостаточно, что показывает погоду, что просто ХА-ХА, БЛЯДЬ, ПОСМЕЯЛИСЬ И РАЗБЕЖАЛИСЬ, но нет же, каждый считает, что я лично сидел и его лично считал с ненавистью АХ ЭТОТ СМОРДВИНОВ И ВЕРХУМАН МЕНЯ ОБИДЕЛИ ЩАС Я ИМ ЗАРЕЖУ ДОБРА ХАХАХАХ. Да, я упомянул, что сделал главную ошибку - смешал обучающее и тестовое множество (хоть и обучающие твиты я выбирал ранние, а тестил на поздних), да, там далеко не совершенно всё, там используется, как уже обсуждали, униграммная модель, которая считает, что если слово "колбаса" встречалась больше в твитах ненависти - оно характеризует зло, обсуждение гомосексуалистов или iphone 4 - точно ненависть и наоборот. Это программа, написанная за час для лулзов, а вы побежали серьезно считать свои твиты. Это влияние пиратов на глобальное потепление, не более. Расслабьтесь, блядь.
0
werehuman ⸬ 20 мая 2012, 09:50 ⸬ Novosibirsk, RU ⸬ Linux лог
#
Чо ты бугуртишь ёбана? Все расслаблены, кроме тебя.
0
Alive ⸬ 20 мая 2012, 10:20 ⸬ Windows лог
#
угу. Я без поддекста спросил. Мне правда интересны критерии "добра" и "зла".
0
vas3k ⸬ 20 мая 2012, 10:21 ⸬ Novosibirsk, RU ⸬ Apple лог
#
Alive, я тебе потом расскажу что такое машинное обучение, раз ты пропускал пары по нему. И как конкретно работает эта система на пальцах.
0
Alive ⸬ 20 мая 2012, 10:24 ⸬ Windows лог
#
V@s3K, Как работает, я себе представляю более менее (хоть у нас и не было пар по этому всему).
Мне интересен "словарь" именно.
0
vas3k ⸬ 20 мая 2012, 10:25 ⸬ Novosibirsk, RU ⸬ Apple лог
#
Alive, выборка из 1000 старых твитов разных людей (штук 20 по-моему), к сожалению, в том числе и ваших.
0
Alive ⸬ 20 мая 2012, 10:33 ⸬ Windows лог
#
V@s3K, аааар. Я не про это же. Тупо приведи пример твита, который отправился в "зло". Не очевидного "заебали суки", естественно :(
0
vas3k ⸬ 20 мая 2012, 10:35 ⸬ Novosibirsk, RU ⸬ Apple лог
#
Alive, если я начну приводить примеры твитов, тут начнется "да я совсем не со зла это писал, это шутка была" и.т.д. Ну и плюс ошибки классификатора. Так что не буду.
0
Alive ⸬ 20 мая 2012, 10:36 ⸬ Windows лог
#
V@s3K, Вааааася :(
0
... ⸬ 20 мая 2012, 12:11 ⸬ RU ⸬ Windows лог
#
>выложу его на свой github

выложи :) интересно посмотреть)
0
Psyhister ⸬ 20 мая 2012, 14:48 ⸬ Novosibirsk, RU ⸬ Linux лог
#
Охохо, я 4-5 по злу. Join the dark side, we have cookies! :D

И ваще, харе сраться, охуенно же. Я даже первые 2 коммента не понял =(
0
ReDetection ⸬ 20 мая 2012, 23:27 ⸬ Novosibirsk, RU ⸬ Linux лог
#
ыы) я в топе злости :D
0
@nakukryskin ⸬ 21 мая 2012, 07:54 ⸬ Novosibirsk, RU ⸬ Windows лог
#
Накукрыскин прямо одна из обителей зла :3
0
vas3k ⸬ 21 мая 2012, 07:55 ⸬ Novosibirsk, RU ⸬ Apple лог
#
@nakukryskin, почему это? У тебя наоборот высокие показатели достаточно.
0
ReDetection ⸬ 21 мая 2012, 14:00 ⸬ Novosibirsk, RU ⸬ Linux лог
#
кстати. если скармливать нейронной сети текст и разницу времени между предыдущим твитом, научить ее определять ФУТБОЛ The_Master'а, потом прикрутить это дело к yahoo pipes, то можно будет автоматически фильтровать всякое такое из ленты :)
0
корнхолио ⸬ 26 июля 2012, 07:46 лог
#
меня забыл! у меня вообще тви полон зла!
(не заполняйте это поле)

me@vas3k.ru :: telegram :: twitter :: instagram :: facebook :: github