Использование нейронной сети для предоставления рекомендаций

Поэтому я начал играть с FANN ( http://leenissen.dk/), чтобы создать простой механизм рекомендаций.

Например,

Пользователь X имеет отношение к записям с идентификаторами [1, 2, 3]

Другие пользователи имеют отношение к следующим идентификаторам:

  • Пользователь A: [1, 2, 3, 4]
  • Пользователь Б: [1, 2, 3, 4]

Вполне естественно, что есть шанс, что пользователь X будет заинтересован в записи с идентификатором 4 а также то, что это должен быть желаемый результат работы механизма рекомендаций.

Такое ощущение, что это было бы чем-то, что может сделать нейронная сеть. Тем не менее, судя по всему FANN и прибегая к поиску, кажется, что существует некоторая математическая связь с данными и результатами. Здесь с идентификаторами нет ни одного; идентификаторы также могут быть любыми символами.

Вопрос: возможно ли решить эту проблему с помощью нейронной сети и с чего начать поиск решения?

1 ответ

Решение

То, что вы ищете, это какая-то рекуррентная нейронная сеть; сеть, которая так или иначе хранит "контекст". Примерами таких сетей могут быть LSTM и GRU. В общем, вы должны вводить свои данные последовательно. На основе контекста и текущего ввода сеть предскажет, какая метка наиболее вероятна.

кажется, что должна быть некоторая математическая связь с данными и результатами. Здесь с идентификаторами нет ни одного; идентификаторы также могут быть любыми символами.

Существует определенная связь между данными и результатами, и это можно выразить с помощью весов и смещений.

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

Если у вас есть 5 меток: A, B, C, D, E, это означает, что у вас будет 5 входов и выходов: [0, 0, 0, 0, 0],

Если ваша метка A, массив будет [1, 0, 0, 0, 0], если это D, это будет [0, 0, 0, 1, 0],

Таким образом, ключ к LSTM и GRU в том, что данные должны быть последовательными. В общем, вы вводите все метки, которые вы просматриваете по очереди. Так что, если пользователь смотрел A, B и C:

activate: [1,0,0,0,0] 
activate: [0,1,0,0,0]

// the output of this activation will be the next predicted label
activate: [0,0,1,0,0]
// output: [0.1, 0.3, 0.2, 0.7, 0.5], so the next label is D

И вы должны всегда обучать сеть так, чтобы выход INt был INt + 1

Другие вопросы по тегам