Рейтинг документов на основе нейронной сети - PullRequest
13 голосов
/ 26 сентября 2011

Я планирую внедрить средство ранжирования документов, которое использует нейронные сети.Как можно оценить документ, принимая во внимание рейтинги подобных статей?Любые хорошие библиотеки Python для этого?Может ли кто-нибудь порекомендовать хорошую книгу для ИИ с кодом Python.

РЕДАКТИРОВАТЬ

Я планирую создать механизм рекомендаций, который также будет давать рекомендации от похожих пользователейкак с использованием данных, кластеризованных с помощью тегов.Пользователю будет предоставлена ​​возможность проголосовать за статьи.Там будет около ста тысяч статей.Документы будут сгруппированы на основе их тегов.По заданному ключевому слову статьи будут выбираться на основе их тегов и передаваться через нейронную сеть для ранжирования.

Ответы [ 6 ]

12 голосов
/ 12 октября 2011

Проблема, которую вы пытаетесь решить, называется «коллаборативная фильтрация».

Нейронные сети

Одним из современных методов нейронной сети является Deep Belief Networks и ограниченные машины Больцмана .Для быстрой реализации Python для GPU (CUDA) см. здесь .Другой вариант - PyBrain .

Академические статьи по вашей конкретной проблеме:

  • Это, вероятно, современный уровень нейронных сетейи совместная фильтрация (фильмов):

    Салахутдинов Р., Мних А. Хинтон Дж. Машины ограниченного действия Больцмана для совместной фильтрации. Появится в материалах 24-й Международной конференции по машинному обучению 2007 г.. PDF

  • Сеть Хопфилда, реализованная на Python:

    Хуан, З. и Чен, Х. и Цзэн, D. Применение ассоциативных методов поиска, чтобы облегчить проблему разреженности в совместной фильтрации.ACM транзакции по информационным системам (TOIS), 22, 1116-142, 2004, ACM. PDF

  • Диссертация о совместной фильтрации с использованием машин с ограниченным доступом Больцмана (говорят, что Python не подходит для этой работы):

    G.Louppe.Совместная фильтрация: масштабируемые подходы с использованием ограниченных машин Больцмана.Магистерская диссертация, Universite de Liege, 2010.
    PDF

Нейронные сети в настоящее время не являются современным средством совместной фильтрации,И это не самые простые, распространенные решения.Что касается вашего комментария о причине того, что в NN слишком мало данных, в этом случае у нейронных сетей нет присущих преимуществ / недостатков.Поэтому вы можете рассмотреть более простые подходы машинного обучения.

Другие методы машинного обучения

Лучшие методы сегодня сочетают k-ближайших соседей и Матричная факторизация .

Если вы заблокированы в Python, взгляните на pysuggest (оболочка Python для механизма рекомендаций SUGGEST) и PyRSVD (в первую очередь предназначенные для приложений в совместной фильтрации, в частности, конкурс Netflix).

Если вы открыты, чтобы попробовать другие технологии с открытым исходным кодом, взгляните на: Платформы с открытым исходным кодом для совместной фильтрации и http://www.infoanarchy.org/en/Collaborative_Filtering.

6 голосов
/ 11 октября 2011

Пакеты

Если вы не привержены нейронным сетям, мне повезло с SVM, и вам также может помочь кластеризация k-means.Оба из них предоставлены Молоко .Он также выполняет пошаговый дискриминантный анализ для выбора функции , который, безусловно, будет полезен вам, если вы пытаетесь найти похожие документы по темам.

Бог поможет вам, если вы выберете этот маршрут,но платформа ROOT имеет мощный пакет машинного обучения под названием TMVA , который предоставляет большое количество методов классификации, включая SVM, NN и Boosted Decision Trees (также, возможно, хороший вариант).Я не использовал его, но pyROOT предоставляет привязки Python к функциональности ROOT.Честно говоря, когда я впервые использовал ROOT, у меня не было знаний по C ++, и я был концептуально над головой, так что это может быть действительно удивительно для вас.ROOT имеет ОГРОМНОЕ количество инструментов обработки данных.

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

Хранилище против обработки

В своем вопросе вы упоминаете, что:

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

Так же, как и другой NB, одна вещь, которую вы должны знать о машинном обучении, состоит в том, что такие процессы, как обучение и оценка, обычно занимают , а .Вероятно, вам следует рассмотреть ранжирование всех документов по каждому тегу только один раз (при условии, что вы знаете все теги) и сохранить результаты.Для машинного обучения в целом гораздо лучше использовать больше памяти, чем больше обработки.

Теперь к вашему конкретному случаю.Вы не говорите, сколько тегов у вас есть, поэтому давайте предположим, что у вас есть 1000, для округлости.Если вы сохраняете результаты своего рейтинга для каждого документа в каждом теге, это дает вам 100 миллионов поплавков для хранения.Это много данных, и их вычисление займет некоторое время, но их получение очень быстро.Если вместо этого вы пересчитываете рейтинг для каждого документа по требованию, вы должны сделать 1000 проходов, по одному для каждого тега.В зависимости от типа выполняемых вами операций и размера ваших документов, это может занять от нескольких секунд до нескольких минут.Если процесс достаточно прост, чтобы вы могли дождаться, пока ваш код выполнит несколько из этих оценок по требованию, не скучая, тогда сделайте это, но вы должны рассчитать этот процесс за до принятия каких-либо проектных решений / написания кодаВы не хотите использовать.

Удачи!

5 голосов
/ 26 сентября 2011

Если я правильно понимаю, ваша задача связана с Коллаборативная фильтрация .Есть много возможных подходов к этой проблеме;Я предлагаю вам перейти на страницу википедии, чтобы получить обзор основных подходов, которые вы можете выбрать.

Для работы над проектом я могу предложить посмотреть введение на основе Python в нейронные сети с простым BackPropРеализация NN и пример классификации.Это не «то» решение, но, возможно, вы сможете построить свою систему из этого примера без необходимости в более крупной платформе.

4 голосов
/ 26 сентября 2011

Возможно, вы захотите проверить PyBrain .

1 голос
/ 12 октября 2011

Я не совсем уверен, что нейронные сети - лучший способ решить эту проблему.Я думаю, что Евклидово значение расстояния или показатель корреляции Пирсона в сочетании с фильтрацией по элементам или пользователям было бы хорошим началом.

Отличная книга на эту тему: Программирование Коллективного разума от Тоби Сегарана

1 голос
/ 11 октября 2011

Библиотека FANN также выглядит многообещающе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...