Эффективное обновление косинус-подобия - PullRequest
0 голосов
/ 14 сентября 2010

Приложение для моего iPhone использует базу данных SQLite со следующей схемой:

  • элементов (id, name, ...) -> эта таблица содержит 50 записей
  • тегов (id, name) -> эта таблица содержит 50 записей
  • item_tags (id, item_id, tag_id, user_id)
  • сходства (id, item1_id, item2_id, Score)

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

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

Мой вопрос сейчас следующий: Какой самый эффективный способ сделать это? До сих пор при запуске приложения iPhone я вычислял матрицу терм-документа для всех элементов и тегов (которая отражает частоты тегов для каждого элемента) и сохранял эту матрицу в памяти до тех пор, пока приложение работает. Всякий раз, когда тег добавляется или удаляется, я использую эту матрицу для обновления сходства в базе данных. Однако это довольно неэффективно. У вас есть предложения?

Спасибо!

1 Ответ

1 голос
/ 14 мая 2011

Эта презентация может помочь вам:

http://www.slideshare.net/jnvms/incremental-itembased-collaborative-filtering-4095306

...