Как смоделировать рекомендацию статьи как задачу Q-обучения в Python - PullRequest
0 голосов
/ 12 июля 2019

Я хочу реализовать рекомендацию статьи, используя Q-learning в Python. Наш набор данных содержит, например, четыре категории статей, в том числе о здоровье, спорте, новостях и образе жизни, и 10 статей для каждой категории (всего 40 статей). Идея состоит в том, чтобы показать пользователю несколько случайных статей (например, пять статей, и они могут быть из любой категории) и получить его / ее отзыв. Затем агент изучает предпочтения (то есть категорию статьи) пользователя и снова рекомендует некоторые соответствующие статьи.

Чтобы сформулировать это как проблему RL, я знаю, что должен определить действия, состояния и функцию вознаграждения. Изучив несколько статей, я придумал:

Действие: рекомендация статьи;

Состояние: мне не очень ясно об этом, но из других статей я узнал, что состояние может быть:

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

Награда: очень простая награда. Может быть +1, если пользователь изучает рекомендуемую статью, или -1 для бесполезной рекомендации.

Что касается Q-обучения, я не уверен, как мне создать Q-таблицу, содержащую состояния в виде строк и действий в качестве столбцов.

Для других простых проблем с RL, таких как MountainCar, разработка q-таблицы не так уж и сложна, но то, как здесь не очень ясны состояния, меня смутило.

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

1 Ответ

0 голосов
/ 15 июля 2019

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

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

Хотя вы можете использовать что-то подобное для обучения.

state = env.reset()
state_buffer = []
# now append the history of the user in state_buffer list
# so now state_buffer has the most recent five states observed
# here state can be a vector of size four with entries being one if that article was read by the user in that time-step
# if the previous article read by the user is health then [1,0,0,0]
# if the previous article read by the user is sports then [0,1,0,0]
# action is which article to show next

# run for 1000 episodes
for i in range(1000):
    action = policy.select_action(state_buffer)
    next_state,reward,done,info = env.step(action)
    policy.update()
    state_buffer.pop(0)
    state_buffer.append(next_state)
# NOTE: you will have to implement policy class which has a function approximator (neural-network)
# policy.update() does the Q-learning update

Также вы можетепройдите этот блог.

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