Подтвердить что ты не робот

Рейтинги документов на основе нейронной сети

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

ИЗМЕНИТЬ

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

4b9b3361

Ответ 1

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

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

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

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

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

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

  • Сеть Hopfield, реализованная в Python:

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

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

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

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

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

Лучшие методы сегодня смешивают k-Nearest Neighbors и Matrix Factorization.

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

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

Ответ 2

Пакеты

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

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

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

Хранение и обработка

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

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

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

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

Удачи!

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

Я не уверен, что нейронные сети - лучший способ решить эту проблему. Я думаю, что Euclidean Distance Score или Pearson Correlation Score в сочетании с фильтрацией элементов или пользователей будет хорошим началом.

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