meetin.in

Поиск мест на основе:

  • предпочтений каждого пользователя (пожеланий, тэгов)
  • определения схожих мест с указанными пользователями
  • удаленности от пользователей и вариантов передвижения
  • и много чего еще

Кенжаев А.З.

Research

Проблема

  • С чем сравнивать, как считать baseline, точность и остальные показатели?
  • Как определять сходство?
  • Когда мы можем переобучиться и можем ли?
  • Как поддержать i18n?
  • Откуда взять данные для обучения на русском?

Research

Как проверять модель и как считать baseline?

  • Нет тестовой выборки с классификацией
  • Оценки пользователей слишком субъективны
  • Критерий оценки - действительная схожесть полученного места с искомым

 

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

Research

Как будем считать сходство?

  • Levenshtein distance?
  • Sørensen–Dice coefficient, Jaccard index?

 

Плохо тем, что

  • сложно переиспользовать
  • с каждым новым текстом нужно считать заново
  • не слишком точно: семантика сходит на нет, нет синонимизации, ассоциативности и тп
  • в отзыве могут быть ключевые слова, которые в итоге не будут учтены так, как должны

Research

Как будем считать сходство?

  • n-gram, частотность, индексация?

 

Лучше, но

  • есть любимый ресторан в Москве, хотим похожий в Нью Йорке. Как?
  • синонимизация, ассоциативность и тп

Research

Как будем считать сходство?

  • WMD, gensim, word2vec -> doc2vec
  • Берем обученную модель на русском языке
  • Считаем вектора документов
  • Для нового документа считаем вектор и ищем похожий из нашего пространства

Dev

Данные

  • На англ все здорово: датасет от yelp, в котором сотни тысяч отзывов и 488638908 слов
  • На русском не так все радужно.
  • Но для старта пойдет и выборка из 1000 отзывов (датасеты от SemEval разных годов, 120к слов)
  • Модели на русском - ruscorpora (374 526 ), web (744 652)
  • На английском - модель от google news

Dev

Токенизация:

  • стоп-слова из nltk.corpus
  • нам не нужны слова короче 3 букв
  • стоит ли нормализовывать?
  • а заглавные буквы?
  • может быть можем какие-то слова не учитывать?

Dev

[[-0.04444594 -0.06246424  0.00957219 ..., -0.13431096  0.01926297
  -0.04521775]
 [-0.02810104 -0.04290968  0.10330766 ...,  0.00981832 -0.01436669
   0.00946084]
 [-0.05742768 -0.00405013  0.02729615 ..., -0.09933545 -0.06166375
  -0.02606997]
 ..., 
 [-0.07348688 -0.0170173  -0.03300475 ..., -0.12253939  0.04225426
  -0.07492851]
 [-0.11580324 -0.090668    0.01744922 ..., -0.02902679  0.04930526
  -0.04590266]
 [-0.03395488 -0.09195844  0.08665104 ..., -0.0290185   0.05685253
  -0.04092621]]
CPU times: user 52.1 ms, sys: 7.94 ms, total: 60 ms
Wall time: 67.3 ms

Dev

'Интересный интерьер, вкусная еда, вежливый персонал'

 

word2vec

с кастомным average, scipy.spatial.KDTree

index = 287, dist = 0.92583346

'Была в этом ресторане уже четыре раза с декабря прошлого года. Прекрасное вино, вкусная еда с красивой подачей, спокойная атмосфера и замечательное обслуживание. Что касается оценок (от 1 - 10): - 7 ставлю за кухню потому, что хотелось бы больше разнообразия в меню по основным блюдам. - 5 за интерьер - не очень уютно на этих стульях, сумочку никуда не поставить, оптимальные места у окна (относительно комфортно) - 10 за сервис - всегда внимательный и в то же время незаметный персонал, что и должно соответствовать ресторанному обслуживанию.'

Dev

'Интересный интерьер, вкусная еда, вежливый персонал'

 

doc2vec

TaggedDocuments, TFIDF weighted Document-Token feature matrix.

index = 280, grade = 0.58622121

'Остались очень довольны. Хотим поблагодарить шеф повара за отменные салаты и горячее. Порции большие, а главное – ВКУСНО! Попробовали местное пиво – понравилось. Легкое и мягкое. Очень приятно, что цены не высокие, а обслуживание на 5 баллов. Официантки симпатичные девочки. В ресторане весело, гостей много. Еле припарковались. Все столы заняты. Не ожидали такого. Интерьер тоже очень оригинальный. Очень хорошо отдохнули, спасибо за прием! Олёк'

Dev

'Интересный интерьер, вкусная еда, вежливый персонал'

 

Кто лучше?

'Была в этом ресторане уже четыре раза с декабря прошлого года. Прекрасное вино, вкусная еда с красивой подачей, спокойная атмосфера и замечательное обслуживание. Что касается оценок (от 1 - 10): - 7 ставлю за кухню потому, что хотелось бы больше разнообразия в меню по основным блюдам. - 5 за интерьер - не очень уютно на этих стульях, сумочку никуда не поставить, оптимальные места у окна (относительно комфортно) - 10 за сервис - всегда внимательный и в то же время незаметный персонал, что и должно соответствовать ресторанному обслуживанию.'

 

'Остались очень довольны. Хотим поблагодарить шеф повара за отменные салаты и горячее. Порции большие, а главное – ВКУСНО! Попробовали местное пиво – понравилось. Легкое и мягкое. Очень приятно, что цены не высокие, а обслуживание на 5 баллов. Официантки симпатичные девочки. В ресторане весело, гостей много. Еле припарковались. Все столы заняты. Не ожидали такого. Интерьер тоже очень оригинальный. Очень хорошо отдохнули, спасибо за прием! Олёк'

Dev

Что дальше?

 

 

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

 

Модели на русском

http://ling.go.mail.ru/data/misc/dialogue_2015.html/

 

Датасет от YELP

https://www.yelp.com/dataset_challenge

 

Датасет на русском

http://metashare.ilsp.gr:8080/repository/download/d1cc80425c8311e58e46842b2b6a04d75287b54fb4f94ff5a26ba788d1b327b1/

 

Источники

meetin.in

By Artur Kenzhaev