38
Построение поиска объявлений об одинаковых товарах с помощью opensource-технологий Александр Кузнецов Grid Dynamics, Саратов

Kuznetcov

Embed Size (px)

Citation preview

Page 1: Kuznetcov

Построение поиска объявлений 

об одинаковых товарах с помощью 

opensource-технологий

Александр Кузнецов Grid Dynamics, Саратов

Page 2: Kuznetcov

Поиск объявлений об одном и том же товаре

• NEW Haier 10.2" Portable LCD Digital TV with A/V Remote • Haier HLT10 Portable 10.2" Digital LCD TV NIB• NEW Haier HLT10 10'' LCD Television Portable• Sharp AQUOS LC-20SH4U 20'' LCD Television w/ wall mount• Sony Bravia KDL-V32XBR1 LCD 32" QU Mount

 

Page 3: Kuznetcov

Этапы обработки

Page 4: Kuznetcov

Выделение брэнда

• NEW Haier 10.2" Portable LCD Digital TV with A/V Remote • Sharp AQUOS LC-20SH4U 20'' LCD Television w/ wall mount• Sony Bravia KDL-V32XBR1 LCD 32" QU Mount

 

 

Page 5: Kuznetcov

Размер экрана

• NEW Haier 10.2" Portable LCD Digital TV with A/V Remote • Haier HLT10 Portable 10.2" Digital LCD TV NIB• Haier LCD 7in Portable Tv new in the box w/ remote

 

Page 6: Kuznetcov

Объект объявления

• Sony Bravia KDL-V32XBR1 LCD 32" QU Mount • Haier HLT10 Portable 10.2" Digital LCD TV NIB• Sharp AQUOS LC-20SH4U 20'' LCD Television w/ wall mount

 Словарь синонимов.Удалить лишние слова, оставить суть. • Mount • TV • TV with mount

 

  

Page 7: Kuznetcov

Hiden Markov Model для выделения объекта

Page 8: Kuznetcov

Обучение Hiden Markov Model

Дан набор последовательностей.  Определяются вероятности в модели.

Page 9: Kuznetcov

Библиотека для HMM

jahmm Java реализация алгоритмов, относящихся к Hidden Markov Model (HMM).  Алгоритмы: Viterbi, Forward-Backward, Baum-Welch  http://code.google.com/p/jahmm/ 

  

Page 10: Kuznetcov

Нахождение объекта объявления

1. Проверить, попадает ли наше объявление в уже размеченные образцы. Такие объявления составляют около 80-90 процентов.

2. Если нет, использовать HMM.  

Page 11: Kuznetcov

Поиск Lucene

Используется Lucene. Почему?• Free and open source• Написана на Java и перенесена на другие языки • Зрелый проект

Page 12: Kuznetcov

Кто использует Lucene?

Page 13: Kuznetcov

Lucene

Doug Cutting - создатель Lucene, Hadoop.  • Март 2000 - первый публичный релиз на  SourceForge. • Сентябрь 2001 - проект присоединяется к Apache

Software Foundation. • Февраль 2005 - становится top-level Apache project.• Июнь 2010 - выпущена последняя стабильная версия

3.0.2.  

Page 14: Kuznetcov

Логическая структура Lucene

Page 15: Kuznetcov

Добавление документа в Lucene

Page 16: Kuznetcov

Lucene Analyzer

Page 17: Kuznetcov

Обратный индекс

Page 18: Kuznetcov

Запросы

title:extreme–subject:sports

title:"junit action"~5

java* java~

Page 19: Kuznetcov

Boolean and Term Query

Page 20: Kuznetcov

Ранжирование

Модель векторного пространства для ранжирования.Документ и запрос - векторы.   

Page 21: Kuznetcov

Не все так просто

Boost может быть для: o Documento Fieldo Queryo Term в запросе

Вложенные запросы

Page 22: Kuznetcov

Реальная формула

Page 23: Kuznetcov

Поиск объявлений

Page 24: Kuznetcov

Формирование запроса

Page 25: Kuznetcov

Почему не подходит Lucene score

Проблема с отсечением результатов - нужно понять, какие совпадения оставить, а какие убрать.  Запрос состоит из нескольких BooleanQuery. Поэтому  значение ранга в значительной степени зависит от их количества. Нужно подбирать формулу для каждой комбинации параметров. 

Page 26: Kuznetcov

Отбор правильных совпадений

Можно написать множество условных выражений, но есть способ лучше - машинное обучение.  if(p1.size() == p2.size()){   if(dist(p1.brands() ,p2.brands()) < 0.7){        return false;    }}

Для этого нужно сделать обучающую выборку. Около 1000 объявлений будет достаточно для наших целей.

Page 27: Kuznetcov

Weka

Weka (Waikato Environment for Knowledge Analysis) — это cвободное программное обеспечение для анализа данных, которое было написано на Java в университете Уайкато (Новая Зеландия) и распространяется по лицензии GNU GPL.

Page 28: Kuznetcov

Weka

• 1993 - Университет Уайкато начал разработку первой версии Weka на Tcl/Tk и C.

• 1997 - Принято решение переписать весь код с нуля на языке Java.

• 2005 - Weka получила награду Data Mining and Knowledge Discovery Service Award от SIGKDD.

• 2006 - Pentaho Corporation приобрела эксклюзивную лицензию на использование Weka в своих продуктах для анализа данных.

• Июль 2010 - последняя стабильная версия 3.7.2.

Page 29: Kuznetcov

Weka Instances

Данные - картежи ( a , b , c , d , e) Типы данных:• Натуральные числа;• Действительные числа;• Строки;• Значения из некоторого конечного множества, например,

класс объекта;• Дата; • Композитный тип.

   

Page 30: Kuznetcov

Входной формат данных arff

@RELATION iris

@ATTRIBUTE sepallength    REAL@ATTRIBUTE sepalwidth     REAL@ATTRIBUTE petallength    REAL@ATTRIBUTE petalwidth      REAL@ATTRIBUTE class     {Iris-setosa,Iris-versicolor,Iris-virginica}

@DATA5.1,3.5,1.4,0.2,Iris-setosa4.9,2.5,4.5,1.7,Iris-virginica5.4,3.0,4.5,1.5,Iris-versicolor

Page 31: Kuznetcov

Weka filters

Решают задачи по:  • дискретизации данных,• изменению атрибутов,• разбиению исходной выборки на обучающую и тестовую

 и многое другое

Page 32: Kuznetcov

Weka Classifiers

Набор алгоритмов для классификации:• J48  алгоритм C4.5 Desion Tree• RandomForest• NaiveBayes• SMO

Набор для кластеризации: • Expectation Maximization• K-Means

Алгоритм Apriori и много других.

Page 33: Kuznetcov

Представление кандидатов в совпадающие объявления как векторов

Одно свойство - одно измерение.Число сопоставляется по следующей формуле: 

Page 34: Kuznetcov

SVM

Page 35: Kuznetcov

SVM SMO

Точность алгоритма составляет около 75-90 процентов, в зависимости от категории.  Пример для компьютеров:

-1.3665 * brand-0.9833 * voltage-1.3506 * setQuantaty-0.9969 * inchSize-2.4578 * numberinfo-2.9749 * all+3.5519

Page 36: Kuznetcov

Desion trees J48

Page 37: Kuznetcov

Dession tree

Точность алгоритма составляет около 79-95 процентов, в зависимости от категории.  Пример для телевизоров: brand <= 0: not a match (133.0/2.0)brand > 0|     numberinfo <= 0|     |     goodType <= 0.333333|     |     |     type <= 0.3: not a match (48.0/1.0)|     |     |     type > 0.3 ..............

Page 38: Kuznetcov

Выводы

• Используя open-source библиотеки можно быстро построить систему поиска объявлений;

• На категории не нужно много ассесерских данных• Если процент ошибок велик, то есть не выделенный 

фактор