Внутренние Проекты - achugr/GoodsReview GitHub Wiki
Достать из комментария его суть(тезисы)
тезис - связка "объект - свойство объекта", например "клавиатура удобная", "ноутбук шустрый"
Доставать из комментария связку "существительное-прилагательное" следующим образом:
-
создаем словарь "объектов" для каждой категории товаров(объект, это, например "клавиатура", "ноутбук"), при этом в словаре учитываются синонимы
-
проходим по комментариям, ищем слова из словаря объектов
-
найдя "словарное" слово, ищем рядом стоящее прилагательное (можно составить словарь прилагательных-свойств объектов данной категории, а можно по морфологическому признаку их искать)
-
вытаскиваем такую пару, считая ее тезисом
- сравнение со словарем с учетом edit distance, поскольку словарь не полон (тут еще нужно думать, чтобы это не отнимало кучу времени)
- можно попробовать на тестовом множестве посчитать распределение объектов в тексте комментария, если данные будут адекватны и мы сможем сделать вывод о том, что, например, человек чаще всего пишет не больше тезиса на строку - это ускорит поиск объектов в тексте (тут надо подумать еще)
- распределение свойств объекта относительно положения объекта, то есть, например, прилагательное находится в среднем в радиусе 4 слов от существительного
- При необходимости улучшить определение морфологических признаков слов
- Попробовать сделать добавление слов в словарь объектов на основе схожести с имеющимися там.(нужна проверка человеком) тут можно применить какой-нибудь алгоритм машинного обучения
- Интересно сделать разъяснение некоторых тезисов, а то выражения вроде "проц сильный", "вменяемая видяха" могут быть понятны далеко не всем.
- Смотрим url по которому расположен товар, чаще всего он содержит упоминание о категории, поскольку строится на основе карты сайта, которая включает категории
- Пытаемся по названию определить есть ли такой товар в базе и если есть такой же, или похожий - ставим ту же категорию * * * Если категория не определена, то есть несколько вариантов действий:
-
Ищем на странице упоминание об одной из категорий, определяем насколько она относится к товару(по расстоянию в тексте)
-
Смотрим на конфигурацию товара, по определенному алгоритму, вроде некой псевдо-хеш функции как в алгоритме k-grams определяем ближайшую категорию
-
Извлекаем тезисы из комментариев, ищем похожий по тезисам товар, берем его категорию
-
Ищем в комментариях слова из словаря "объектов", смотрим что за категория с такими словами
Интерфейс
Category getCategory(Product product, String categoryOnSite);
-
На основе каждой категории строим свойственные ей теги. (Проходим по продуктам из категории)
-
Считаем дистанцию между продуктом и разными категориями по метрике основанной на тегах. Также необходимо учитывать название категории на сайте.
-
Возможно улучшение на основе изменения метода:
Category getCategory(List<Product> product, String categoryOnSite);
в таком случае мы будем пытаться произвести маппинг между категориями на сайте и в бд. -
Также в этом методе смогут помочь продукты, собранные ранее с этого сайта.
Использовать машинное обучение для бинарной классификации отзывов (более релевантная выборка) и других задач. Следует отметить, что количество подходов очень велико и реализация требует обсуждения.
- Бинарная классификация (предлагаю использовать SVM http://habrahabr.ru/blogs/data_mining/105220/, ссылка очень интересная, особенно видео) отзывов на положительный/отрицательный, содержательный/несодержательный, достоверный/недостоверный.
- Также из интересного, но видимо пока не реализуемого: кластеризация по дискурсам (профильным сообществам) с помощью алгоритма CDC, supervised методы анализа сайтов, нахождение нечетких дубликатов-спама.
-
Корпус и индексация: ручная разметка (нужны еще люди?), очень много обсуждаемых технических моментов (буквально все! например документ можно представлять не только вектором), выкинуть стоп-слова (причем актуальные для нас), провести корректный стемминг (Видимо алгоритм Портера наше все), уменьшение размерности по необходимости (для этого думаю отработанный метод выделения информационно-значимых слов). Разделение множества на обучающее и тестовое - без изысков. Полезная ссылка на очень интересный блог (скорее правда БрендАналитикам): http://www.algorithmist.ru/2010/12/porter-stemmer-russian.html
-
Обучение: SVM - наше все (я так думаю сейчас, и так пишут в большинстве статей). Есть еще метод Preceptron+ядро SSK. Также специально заточенная под тексты программа SVM_light: http://svmlight.joachims.org/ и вообще надо будет использовать много других классификаторов, их комбинации и оптимизации. Оценки: полнота, точность, F-мера.
Очень много чего интересного на РОМИПе! http://romip.ru/ В частости, в этом году там Sentiment Analysis и одна из дорожек - отзывы с Яндекс Маркета. Труды их семинара могут оказаться очень полезными.