After developing a Deep Neural Network model, I have decided to kick it up a notch by trying out with RNN. The RNN model is a regression model that predicts users’ next best items, either for browsing or purchasing. Since it’s a regressor, there’s no hard single item that would be recommended. Instead, it’s predicting values of the next best items features which could be compared against our inventory of items. This way similarity ( 1 – distance ) could be computed and items could then be ranked accordingly. The RNN model that I’ve designed is as follows and it was coded in Chainer.

### Schema

### Learning Curve

### Recurrent Unit

[python]

class RNN(chainer.Chain):

def __init__(self, itemEncoder, itemDecoder, n_feas, n_units, dropout_rate, use_gpu=False):

super(RNN, self).__init__()

with self.init_scope():

self.dropout_rate = dropout_rate

self.itemEncoder = itemEncoder

self.l1 = L.LSTM(n_units, n_units)

self.l2 = L.LSTM(n_units, n_units)

# self.l3 = L.GRU(n_units, n_units)

self.itemDecoder = itemDecoder

self.use_gpu = use_gpu

for param in self.params():

param.data[…] = np.random.uniform(-0.1, 0.1, param.data.shape)

def reset_state(self):

self.l1.reset_state()

self.l2.reset_state()

# self.l3.reset_state()

def __call__(self, xs):

if self.use_gpu:

xs = F.transpose(xs, (1, 0, 2))

else:

xs = np.transpose(xs, (1, 0, 2))

for x in xs:

h0 = self.itemEncoder(x)

h1 = self.l1(F.dropout(h0, self.dropout_rate))

h2 = self.l2(F.dropout(h1, self.dropout_rate))

y = self.itemDecoder(F.dropout(h2, self.dropout_rate))

return y

[/python]

Will continue on production infra later…