Не очень большие данные и определение тональности текста

от автора

Всякая идея имеет простое, понятное и неправильное решение.
Одно из таких решений я и опишу в этой статье.
Не пытайтесь повторить эти эксперименты дома.
А если попытаетесь — то претензии по сгоревшим процессорам не принимаются.

Итак, есть датасет www.cs.cornell.edu/people/pabo/movie-review-data/review_polarity.tar.gz
Он состоит из 1000 негативных и 1000 позитивных отзывов.

Как с помощью буханки черного хлеба архиватора xz и линейного классификатора получить точность, сравнимую со сверточной нейронной сетью, word2vec или прочими чудесами совеременных технологий?

Очень просто.

1. Берем 100 случайных текстов (50 из негативов и 50 из позитивов)
2. Выкидываем их из датасета.
3. Для каждого из 1900 оставшихся считаем обобщенную дистанцию с каждым из 100 выкинутых следующим методом:
Пусть X и Y — два файла, для которых надо посчитать дистанцию.
И пусть Z(N) — длина файла N после сжатия его архиваторм xz.

Вычислим значения
X = Z(X)
Y = Z(Y)
XY = Z(XY)
YX = Z(YX)

Последние два значения — результат архивации конкатенации файлов X и Y в первом случае и Y и X — во втором.

И теперь считаем магическую формулу, взятую здесь
attribute = (min(XY,YX)-min(X,Y))/max(X,Y)

4. У нас получилась матрица 1900 х 100
Теперь ее надо нормализовать от 0 до 1.

5. Тадам:
$svm-train -v 10 -s 0 -t 0 -с 10 rand100.norm.svm
Cross Validation Accuracy = 75.6316%

Почему это работает?
Дело в том, что чем больше общих последовательностей в двух текстах, тем больше будет сжатие Z(XY)
Таким образом система сама выделяет общие группы символов.
Возможно что на 200 случайных файлах получилось бы лучше.

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

И именно поэтому этот метод представляет лишь теоретический интерес в рамках прикладной фаллометрии.

PS
Кода не будет за тривиальностью — я все делал шеллом и перловыми онлайнерами, при попытке чтения которых гомосапами, архивация начинает происходить непосредственно в коре головного мозга. А нейронные сети, как известно, плохо приспособлены к такой нагрузке.

PPS
А вдохновил меня на сей эксперимент — вот этот пост.

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


Комментарии

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

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