Ребзя, у меня тут такой вопрос.

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

Разумеется, если человек указал у себя в профиле интересы, нажимает фэсбуковые лайки там, вконтакт, вот это всё, то ничего сложного. Но ньюанс в том, что потенциальные заказчики хотят эту систему научить работать полностью без вмешательства пользователей. Мало того, что она должна смотреть какие именно материалы читает человек. В идеале она должна как-то анализировать сколько времени юзер провел на странице и, соответственно, насколько она его заинтересовала. То есть открыл и сразу закрыл — игнорим. Открыл и внимательно прочитал — гуд и плюс 1 к рейтингу материала для этого юзера.

Собственно вопрос: с каких сторон подступаться? как наиболее адекватно понимать интерес юзера к статье если юзер не каментит и не лайкает? реально ли вообще реализовать что-то подобное и адекватно работающее? или сразу нахуй-нахуй?

КПЗ «рейтинг»

Linux Nix Web Development - http://linuxoids.org/ image

Симпы / лавки / приблуды

29 Responses to Ребзя, у меня тут такой вопрос.

  1. Hproff:

    Хмм, а как приблуда получает данные?

    Она находится на сайтах-партнерах (например, в виде подключаемого джаваскрипта)?
    Она цепляется плагином/экстешном к браузеру?
    Смешная третья опция?

  2. SkoLt:

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

  3. Hproff:

    А, я протупил, кажися. Материалы только с того же сайта, откуда приблуда?

  4. SkoLt:

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

  5. Ycihlam:

    так он и спрашивает, как лучше сделать, не?

    Время проведенное на странице и анализ времени нахождения — это все будет на жаваскрипте.
    Я бы подключал к каждой странице внизу одинаковый скриптик.

    Каждые 3-5 секунд он будет слать на сервер аяксом флажок, что страница еще открыта.
    На сервере складывать это все в табличку вида: ————————- — —
    юзер — страница — время ————————- — —
    коля — новость1 — 3 сек
    вася — новость3 — 90 сек
    петя — новость4 — 60 сек

    Ну и по твоей же логике — колю не считаем и не записываем (хотя он ее открыл, значит заинтересовался, для статистики тоже интересно).
    Анализ уже делать на серверной стороне — суммарно юзер, за день, за месяц, по категории, по тематике.

    Скрипт может анализировать длину публикации. Если для его рабочего окна текст занимает 2 экрана — можно разбивать на участки и при скроллинге отсылать еще флаг перемотал до середены, до конца.

  6. Hproff:

    Я бы отталкивался от бессознательных действий пользователя.

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

    Детектим подобные телодвижения, считаем, что он изучает страницу. Помножаем на время, прошедшее с открытия страницы до последнего телодвижения.

    Отдельно отлавливаем копипасту. Скопировал абзац — значит, он ему зачем-то нужен.

    Ну и так далее.

    Дальше расставляем весовые коэффициенты, получаем некоторое число, обозначающее степень интереса к материалу.

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

    Ну дальше все понятно.

  7. Ylfer:

    : как-то вы чересчур усложняете. Я бы предложил снабжать новости некими метками, описывающими их тематику и для каждого пользователя вести список интересов на основе хитов по этим меткам. Используя эти данные, можно уже пытаться таргетировать.

  8. Yksin:

    Откроет человек страничку с текстом про голубиное говно, и ляжет спать, а потом целый месяц будет читать только новости про голубиное говно.

  9. S-knode:

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

    Можно сделать сначала что-то простое, а потом бесконечно улучшать, типа чтобы актуальные новые темы попадали в топ, чтобы старые со временем провисали и тд и тп.

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

  10. NamVelo:

    менее глобальный, но интересный вопрос: как вы собираетесь определять похожие интересные новости? по той же категории? по тэгам? Если второе — то новость типа «Валуева тра-ля-ля гос дума» попадет в спорт-интересы или политика-интересы?

  11. 01pSpb:

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

  12. KipaTa:

    если посещаемость большая и данных, соответственно, много, смотрите в сторону collaborative filtering. можно сочетать это с ручным тегированием, которое вы замучаетесь делать хорошо и правильно (и начнёте делать плохо, sad but true), но можно и вообще отказаться от ручного тегирования.

    тогда, если вы посмотрите новость про голубиное говно, то будете читать те же новости, которые потом пошёл читать уйский, когда проснулся.

  13. RatFcuk:

    Давайте повторим яндекс-метрику + вебвизор 🙂
    Разберите данные которые гугл шлет и яндекс когда пользователь на странице сидит.

  14. RatFcuk:

    есть же разбор текста: слова, словосочетания, группы словосочетаний/слов. и выходит что 1 текст = куче коэффициентов для разных тегов. По крайней мере в своей системе от такого отталкивались.

  15. RatFcuk:

    Для разбора данных есть на 90% работающая система. Тестируется ща как антиспам фильтр + система разбора инфы для информагентств+ «комуНадоСледитьЗаТекстами» (инфошум, упоминания и т.п.) + система идеально работает по раскладыванию поступающей почту по папкам/пользователям

  16. Oveer:

    вот тут есть старая но адекватная статья про то как надо делать теги http://spectator.ru/entry/3990

  17. Yksin:

    Одна хуй, бесовщина это всё.

    P. S. айпад

  18. 01pSpb:

    в его сафари, если я ничего не путаю, есть апи для отслеживания активности вкладки. Это раз (хотя, могу путать, я очень отстал от всей это петушиной возни с фронтендом). Два — в нём есть те же самые события, только не клавиатурно/мышиные, а тачевые. Написать полифилл для всего, что показывает веб с информацией активна/пассивна вкладка — дело двух часов.

  19. LesYes:

    а ттх можно в студию и название например.

  20. RatFcuk:

    Названия нет. Был вариант «викитегия», но это переработанная версия для хранения и структурирования документов.
    Какие ттх нужны?

  21. Ki4no:

    на чем крутится, че стоит?

  22. SkoLt:

    хотел бы уточнить — «для разбора данных у нас есть на 90% работающая система»?

  23. RatFcuk:

    парсер текста на с++ написан (для скорости). кто из БД читать будет все? — хоть на php.
    по цене непонятка. писалось все для одних целей, ща под другие переписывается частично.

    в целом все «просто». у текста по базе палить словосочетания/слова/фразы и т.п. «метки». у документа по этим меткам появляется некий слепок: «сисек» — 12, «жопы» упоминаются 10 раз, «политика» упоминается 1 раз и т.д… пользователь/редактор задает этому документу нужные теги. в базе тегов происходит перераспределение коэффициентов. т.е. мы знаем, что тег «путин мудак» — это «Путин» в документе хотя бы 1 раз, «мудак», идиот, кретины, коррупция, и т.п. тоже более 1 раза.. чем больше раз находим «слепки» тем важнее для тега этот док. т.е. по выборке по тегам в топе будет док с максимальным соответствием. там не се так просто в реале, так как в ходе добавления тегов или удаления доков из выборки меняется дофига чего.
    Если раньше спам с купонами был в папке спам, то в короткий срок можно сменить приоритеты так, что купонный письма будут уже в папки «важное». при этом и старые документы мигрируют в «папки». «папки» в кавычках, так как названия папок — это в системе разбора текста фактически теги и есть.
    меня правда уже воротит от нечеткой логики и кучи экспериментов и множества моделей

  24. LesYes:

    ну я так понимаю что язык разбора только русский? Скорость разбора текста в 10000 слов? Наивный баес внутрях?

  25. Zwref:

    Короче, на фрондтенде смотреть активити юзера и считать «активное» время на странице. Периодически аяксом пулять в сервер. Сервер изучает теги или там категории страниц умноженные на время «активного пребывания».

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

    Насчет активности страниц — есть готовые велосипеды на jquery. Но вцелом там элементарно делается все.

  26. RanMsk:

    И почем нынче стоит написать гугль? 🙂

  27. RatFcuk:

    на язык пофиг, проблема только в базе словосочетаний/слов/фраз (для системы мониторинга инет на каждую задачу отдельные человечки вручную вычленяют фразы/слова/сочетания)

    скорость разбора: на какой машинке? на i5 2500k с 32гигами памяти (база слов в памяти умещается) успевает «парсить» около 80 килобайт текста в секунду при почти 100% загрузке. есть «миниоптимизация» в виде предобработки теста, тогда первая машинка успевает готовить текст со скоростью под пару мегабайт кило текста в секунду, а уже «бэки» текст парсят со скоростью под 150-200 кило в секунду каждый.

  28. RatFcuk:

    ну да, у нас

  29. SkoLt:

    4500 рублей)

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