Roman(tic) (infist_xxi) wrote,
Roman(tic)
infist_xxi

Чебурашка ищет друзей, часть 2

Продолжаем решать задачу поиска родственных душ на просторах интернета :)

Часть первая расследования: http://infist-xxi.livejournal.com/58148.html

Выкидывая блова длинной менее 4-х символов и слова, которые встречаются только один раз во всем словаре (смысла в них нет - все равно если это слово одинокое то его использует только один человек и никаких пересечений от него мы не получим, а оно может быть сознательное или несознательной опечаткой) получил "первичный словарь словоформ". С морфологическим приведением слов к базовой форме я справился с помощью яндексовской утилитки mystem company.yandex.ru/technology/mystem/ получив в итоге "словарный запас" пяти тысяч блоггеров из базы ситиметрики www.citymetrica.ru. Итого 45 тыс. базовых словоформ. Сразу же подсчитал распределение "использования словарного запаса блоггерами":

Максимум: 5,73% от общего
Среднее: 0,89% от общего
Стандартное отклонение: 1,0582
 
Для любопытствующи - TOP3 блоггеров с максимально богатым словарным запасом:

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


В предыдущей части нашего расследования мы остановились на гипозе метрик "родственности блоггеров". Получается, что если посчитать "совпадение словарей" то мы получим некоторое подобие тематического совпадения блогов. Т.е. тупо берем 1000 блогов и считаем их соответствие друг другу получая матрицу соответствий. Сортируем строку с нужным блогом (нашим) в порядке убывания и на первом месте получаем блог, наиболее похожий на наш и далее по списку... Вроде все просто и понятно, но!
Косяки такой системы:
- в итоге мы имеем декартово произведение множества блогов, а это 1 млн. значений для 1000 блогов. В принципе, раз плюнуть, но 1000 - это мизер! Есть смысл говорить об анализе 100k блогов, а это уже 10 млрд. элементов в матрице соответствий.
- мы анализируем соответствие только по одной метрике, а если мы захотим использовать 5 метрик? (ну например учитывать кроме простого соответствия еще и соответствие акцентуаций, города в которых блогеры проживают, интенсивности обновления блогов и корреляцию средних размеров постов).

Итого получаем поиск локальных экстремумов в пятимерном пространстве на поле в 10G записей. Задача, несомненно, решаемая, но, чем-то я чую что красоты в ней мало :)

Будем упрощать.

Начнем с того, что надо как-то избавиться от декартова произведения на выходе первого шага. Против второго закона термодинамики не попрешь, и поэтому придется либо отбрасывать информацию, либо переводить ее в иное качество. Отбрасывать пока рано, поэтому попробуем снизить размерность выходного поля путем перевода части информации в дополнитиельные элементы вектора метрик для каждого блога (это почти как в физике - когда физикам в теории суперструн стало нехватать симметрий 4-х мерного пространства времени они расширили его до 11-мерного свернув дополнительные измерения :))) ). Короче, сводится все это к тому что надо искать пересечения словарных запасов не "каждого с каждым", а "каждого с эталоном" (а лучше с несколькими эталонами - а то теряется очень много информации при такой свертке). Откуда взять эталоны словарей? Ну, можно взять 10 интересных блогов тысячнегов в разных тематиках (например, Лебедева tema.livejournal.com, Гришковца e-grishkovets.livejournal.com, Тинькова olegtinkov.livejournal.com, Экслера exler.livejournal.com еще кого-нибудь) и ввести их в систему как системы отсчета. Это я проделаю, но потом... Пока возьму 5-10 случайных блогов из тех что есть в базе. Заодно можно будет проверить как будет меняться картина от выбора разных систем отсчета.

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

А такое средство еееееесть!!!

Несколько лет назад, в университете, я писал бакалаврскую работу на тему анализа финансовой информации... с использованием самоорганизующихся карт Кохонена! Карты Кохонена, это основанный на нейросетях алгоритм кластеризации и проекции многомерных данных на двумерную поверхность. Подробнее о нем можно почитать вот тут: www.basegroup.ru/library/analysis/clusterization/som На этом же сайте есть уже пятая версия инструмента анализа данных Deductor в котором реализована возможность использования этих самых карт. И с помощью этого финта ушами мы можем "сплющить" любое многомерное пространство метрик для упрощения анализа. В итоге получается примерно вот такие картинки:

карты Кохонена
где в каждой "соте" находится несколько "близких" элементов.

Итоговая гипотеза: найдя свой блог в той или иной ячейке карты Кохонена и взяв из нее соседей мы найдем искомые "родственные души"!

Приступаем к практике, ждите новостей! ;)

PS. Кто говорил что OpenOffice может заменить MS Office!? Я говорил? Я беру свои слова назад - то что OpenOffice предлагает вместо экселя годится для работы с табличками 10x10 в которых надо просуммировать столбцы - не больше.

Tags: анализ, блоги, карты кохонена, кластеризация, нейронные сети, ситиметрика
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments