22:00

А ты уже научился заряжать левой ногой свой телефон?
начало: www.diary.ru/~SonicCatPap/p45623499.htm#

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

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

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

Итак есть сеть, представленная одним слоем нейронов (это которые справа - круг и квадрат вместе ):


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

Подробнее:
читать дальше

Комментарии
04.11.2008 в 08:40

Был опыт разарботки на основе наивного алгоритма Баеса... деталей не помню о самом алгоритме, но точно учитывали морфологию и синонимы. Для морфологии использовали словари aspell, а для синонимов - тоже какой то из этой оперы словари...
И еще - тоже тестировали и обучали на архиве из 100 тыщ новостей и могу по этому поводу сказать что тексты в новостях не достсаточно четкие - моя реализация постоянно путала к примеру категории Театр, Культура или Политика и Новости из за рубежа.... На более специфичных текстах результаты были более точны. Если интересно, могу покопатся на своем кладбище кода - давно дело было года два назад уже... но я такие вещи не удаляю :)
04.11.2008 в 09:18

А ты уже научился заряжать левой ногой свой телефон?
да, спасибо, не знал о такой штуке как Pspell (aspell) попробую ее в действии.

А как вы строили входной вектор? У меня это 0 или 1. Вы вводили вес слова по TF-IDF ?

и как вы убирали слова в разных формах типа: "кот", "котенок", "котенка" и др. - это должно быть одно и тоже слово, а именно "кот". Пока на ум приходит только обрубание окончаний, потом проверка по pspell есть ли такое слово и если есть его и считать.
04.11.2008 в 13:15

и как вы убирали слова в разных формах типа: "кот", "котенок", "котенка" и др. - это должно быть одно и тоже слово, а именно "кот". Пока на ум приходит только обрубание окончаний, потом проверка по pspell есть ли такое слово и если есть его и считать.

попробуйте воспользоваться стеммером, где-то даже есть класс под php
04.11.2008 в 14:03

А ты уже научился заряжать левой ногой свой телефон?
Гость
во нашел forum.dklab.ru/php/advises/HeuristicWithoutTheD...
спасибо
04.11.2008 в 14:16

Да вес слова по TF-IDF - точно помню - хотя суть уже надо освежать.
А как обрубал:
Из aspell словарей сгенерил базу словоформ
(id, слово, id_словоформы) one-to-many (id_слоформы, словоформа)
Выбиралась слово по словоформе и в вектрое словоформа заменялась на слово..
собственно реализация была не быстрой в работе. На обучение на 60 или 80 тысячах статей я оставлял крутится сервер на ночь.
Входной вектор составлялся из пердположения(я его когда то на каком то умном сайте вычитал) что входной вектор начинается с n-ого слова в векторе(зависело от длинны нормальизированного вектора) и состоял m-слов(тоже зависело от того же), хотя есть в теории вероятности более точные и академические способы его сформировать. Я же положился на статистическое предположение - типа "Чаще всего вектор..."
04.11.2008 в 14:23

Тут наверное пример подошел бы
нормализированный вектор к примеру
array(
частица => 10//колличество раз встретилось в тексте
физика => 8
квант => 5
атом => 5
бозон => 4
синхрофазатрон =>1
);
n к примеру у нас получилось 3 , а m 3(и з того самого предположения - к сожалению не помню где его откопал и деталей)
Значит вектор на вход должен получится
array(
квант => 5
атом => 5
бозон => 4
);
Вот... :)
04.11.2008 в 14:57

А ты уже научился заряжать левой ногой свой телефон?
kasyaar
даа поместить все словоформы в базу это сильно, почти все русские слова и их формы в базу запихать )).
я пока пытаюсь понять какие файлы из архива словаря куда надо поместить чтобы не было ошибки:

PSPELL couldn't open the dictionary. reason: No word lists can be found for the language "ru". in C:\Apache\htdocs\pspell.php on line 127
04.11.2008 в 16:16

Гость во нашел forum.dklab.ru/php/advises/HeuristicWithoutTheD... спасибо
да, его и видел

еще по предподготовке
>удалось выделить 346 слов не влияющих на класс
можно составить частотный словарь, уже по обрубкам после стемера например - выше какого-то порога там и будут общеупотребительные слова (не влияющие на класс), редкие в принципе тоже можно выкинуть
04.11.2008 в 16:18

А ты уже научился заряжать левой ногой свой телефон?
Гость
да я как понял вместо слов эти обрубки и хранить в базе
и для этих обрубков считать TF-IDF
04.11.2008 в 18:02

А ты уже научился заряжать левой ногой свой телефон?
Во, заработало. Оказалось нужно было скачивать скомпилированные словари:
aspell.net/win32/

include_once( 'tools.php' );

$str = cp1251_to_utf8("Котс");

$pspell_config = pspell_config_create("ru","","","utf-8");
pspell_config_dict_dir($pspell_config, "C:\Apache\htdocs\dict");
$pspell_link = pspell_new_config($pspell_config);

if (!pspell_check($pspell_link, $str))
{
$suggestions = pspell_suggest($pspell_link, $str);

foreach ($suggestions as $suggestion) {
echo "Possible spelling: $suggestion
";
}
}
02.06.2010 в 15:21

Чем закончилась работа? Исходники в паблик не дашь посмотреть? Я вот последнее время интересуюсь этим всем. Хочу провести небольшое исследование на основе алгоритма BM24f
Ежели не сложно - отпиши на мыло admin#devgroup.ru
02.06.2010 в 15:40

А ты уже научился заряжать левой ногой свой телефон?
диплом написал, и оно нормально работало на статьях из ленты и компьюленты
www.diary.ru/~SonicCatPap/p71980345.htm

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

идею после сдачи на развивал
01.12.2013 в 07:52

Похожее есть что-нибудь?
01.12.2013 в 13:59

А ты уже научился заряжать левой ногой свой телефон?
Не, по этой теме больше ничего не делал. Сейчас всецело посвящен клиентской разработке под ios)

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail