Pull to refresh

Comments 29

Не любишь Путина, значит? :D
Ах вот оно как! Его еще и «любить» надо ))
UFO just landed and posted this here
Месяцев 5 не была на adme.ru (судя по вашему сайту — ваш клиент). Открыла статью (рецепты, что еще можно если надоела просто гречка), в рекомендуемом появилась статья "Мы можем достичь всего, если будем безжалостными к себе". Ок, а дальше рекомендации пошли по статьям со словом "мусор", названия разные, а ключевое слово одно :)
И выходит полное противоречие статье в ее части про — разнообразный контент.
Где система дала сбой? :) Или adme имеют таки свой взгляд на систему рекомендаций материалов?
Как всегда: «как правильно» != «как есть»
:) Это верно. Просто статья показалась достаточно "рекламной", ну потому и возник вопрос — в каком месте сбой.
В свое время решалась на одном проекте похожая задача именно с рекомендациями материалов. Перепробовали и разные "математические" методы. Остановились в итоге на том, что математика хорошо, но от живых пользователей пользы больше, и в итоге сделали возможность пользователям добавлять и удалять тэги на материалах путем голосования за эти тэги.
Система рекомендаций интересным образом преобразилась :) Ну, и конверсия на "зависание" пользователей на сайте увеличилась.
Читаю статью и думаю — где-то я ведь уже этот текст видел! Ах, да, вот тут: https://megamozg.ru/company/surfingbird/blog/19106/, спасибо гуглу. На такую интересную тему хорошо было бы новую статью написать, а не копипастить с мегамозга на хабрахабр.
Заметьте, автор один и тот же))
Решение проблемы с разделением хабра — постить одну статью трижды! Что-то в этой ситуации не так...
на мегамозге статья без технических подробностей
неплохо бы (на самом деле обязательно) привести все слова в тексте к словарным формам или хотя бы лемматизировать

Вот так прям и обязательно. А потом система не может отличить фильм The Terminator от фильма The Terminal, потому что после портера они совершенно одинаковы. Я уж не говорю про добавление нового языка, к каждому из которых надо писать или искать свой стеммер.
Стемминг можно делать и более продвинутым способом, хотя бы тем же KStem (lexicalresearch.com/kstem-doc.txt) который и настраивается для локально важных слов, и вообще приводит слова к начальной форме вместо отрезания нескольких символов в конце.
Можно и нужно, но потом нужно каким-то образом бороться со снятием омонимии, то есть нужен еще синтаксический анализ.
нужно, но потом нужно каким-то образом бороться

То есть сами себе создаём сложности, а потом не всегда успешно их преодолеваем.
Каким образом можно привести слова к словарным формам без снятия омонимии? Как можно привести к нормализованной форме фразу: "у чудища было мыло, оно им мыло раму" без синтаксического анализа? Это не создание трудностей, а преодоление неоднозначностей естественного языка.
Так в том-то и дело, что можно обойтись без залезания в дебри. Просто разбить текст по пробелам и всё. При этом даже неважно, на каком языке текст (в некоторых пределах, конечно, с японским и китайским будет сложнее, там даже разбить текст на слова не так просто). Народная мудрость гласит, что more data beats better algorithms.
Вообще-то речи про обработку естественного языка в статье не идет: алгоритм Портера упоминается как отправная точка для тех, кто хочет об этом почитать (в основном из-за того, что он один из самых старых). По поводу обязательности: русский язык морфологически богатый, поэтому расчет tf-idf и или LDA или чего-либо еще на ненормализованных словах даст довольно плохие результаты, поскольку будут находиться распределения словоформ, а не лемм. Так что да, каким-то образом тексты перед вычленением тегов, ключевых слов, коллокаций и тому подобных штук, нужно приводить к какому-то нормализованному виду.
Излишняя лемматизация (over-stemming) это проблема, которую можно решать разными способами (включая добавление словарей и тому подобное), опять-таки в статье речи о лингвистических аспектах обработки текстов не идет.
Кстати, стеммер Портера (в своей базовой ипостаси) для русского языка, различит терминатора и терминал
val stemmer = new Stemmer
println(stemmer.stem("терминатор"))
println(stemmer.stem("терминал"))
import io.relap.Stemmer
scala> stemmer: Stemmer = Stemmer@62da83ed
scala> List(терминатор)
scala> List(термина)
​

суффикс актора "ор" в русском языке отсутствует и поэтому он сохранится. Ну и совсем уж занудно: терминал и терминатор — слова однокоренные от латинского terminus (конечная цель, межевой камень), так что и тут тоже все правильно — изначально Портер пытался сгруппировать однокоренные слова вместе.
Вы рассказываете про преимущества стеммера, а я рассказываю про его недостатки. Одно другому не противоречит.
То же самое касается и других аспектов статьи. Тот же tf, например — если у нас заголовки статей или твиты, то пользы от tf никакой. Слово или встречается раз, или не встречается вообще. Если слово встречается два раза в одном твите, то оно скорее всего из стоп-листа.
Или idf — слово этилоксиэтилпарафенилентриопечаткисделалнаверноедиаминсульфат встречается только в этом комментарии, поэтому idf у него отличный, но похожие комментарии нужно искать по другим словам, у которых idf хуже.
Это я всё к тому, что слово "обязательно" к подобным задачам неприменимо. На каждый случай, где разные падежи надо воссоединять, найдётся случай, где не надо. Например, потому что падежей вообще нет, или потому что данных столько, что слово во всех падежах встречается в товарных количествах.
Мы говорим о немного разных вещах: полнотекстовом анализе русскоязычного текста (в моем случае) и ситуациях, когда не требуется нормализация текста (в вашем).
В случае русскоязычного текста нормализация, все-таки необходима: случай текстов в которых важно распределение родительного падежа пассивного причастия глагола "сублимировать" (или какая-то другая ненормализованная словоформа) довольно маргинальны, ключевые слова нужны для некого обобщения содержания текста.
Опять-таки нормализацию и вычленение ключевых слов можно делать по-разному, приведенные методы, просто являются наиболее "очевидными" примерами.
Статья про рекомендации контента, поэтому и мои комментарии были про этот случай. Полнотекстовый анализ для решения этой конкретной задачи не только не нужен, но и зачастую вреден. По крайней мере если есть достаточно данных. А если недостаточно, то и полнотекстовый анализ вряд ли поможет.
Почему-то сначала показалось, что портер, в контексте вашего предложения, — это пиво. Задумался, сколько же нужно портера, чтобы фильмы стали совершенно одинаковы…
Хуже когда Passat и Tiguan становятся синонимами (привет, гугл!).
А по мне так старые новости на эту же тему должны быть в рекомендациях. Если новость "Рубль упал" повторяется каждый месяц, то это уже не такая уж и большая новость. Тоже самое и про шоссе — далеко не новость что снег зимой это всегда неожиданное событие и после снегопада, как правило, ехать трудней.
Ожидал где-то здесь увидеть дискуссию на тему exploration vs exploitation: например, если у нас есть новый раздел на сайте, нам нужно же как-то оценить насколько пользователи из разных групп хорошо на него реагируют, а данных по нему вообще нет — обычно приходится вводить "случайный" материал в выдаче итд для оценки реакции пользователей на этот новый контент (холодный старт, bootstrapping — вот это вот всё).
В общем, как здесь подобные проблемы решаются-то?
У вас очень красочные примеры с консультатом, за душу берут, но вот графики напротив — дают очень мало информации. Конечно, увеличение в 7х раз — это очень существенный рост, но если этот рост был с 0.01% любого показателя — это можно считать шумом. Хотелось бы видеть отправную точку роста показателей или реальные значения для осознания важности прогресса.
«Мир устроен чуть сложнее. На самом деле, всё работает так: пользователь приходит на сайт, смотрит курс доллара, обзор нового айфона и фотографии панд».
Да ладно? Приходит на сайт? Какая доля прямого трафика на главную у тех сайтов, с которыми вы работаете? Пользователь в большинстве случаев не «на сайт» приходит, он приходит на статью с определенной темой из поиска или соцсетей. И если он пришел читать, что из гречки можно приготовить, велика вероятность того, что он прочтет и про «что приготовить из круп и бобовых» и «список новых вегетарианских ресторанов». А про панд и курс доллара он в соцсети прочитает, не выходя из нее причем.
к сожалению, идеала нет = правильнее пытаться понять интересы посетителя
Хотел бы дополнить и увести немного в сторону, чтобы посмотреть со стороны.
Мне кажется, не корректно говорить, про запрет на предложение популярного контента, или рекомендацию по тегам. Тут главное понять где и когда это уместно или же даже необходимо.
  • новый или анонимный пользователь: не знаем предпочтения по контенту, не знаем на кого похож
    предложить, пожалуй, уместно только популярный контент
  • знаем о пользователе, однако новый контент
    будем рекомендовать content based, здесь нам пригодятся теги
  • пользователь и контент посчитаны
    отлично, коллаборативная фильтрация
Sign up to leave a comment.