各ドキュメントに複数のラベルが付いたテキスト データがあります。このデータセットに対して Theano を使用して LSTM ネットワークをトレーニングしたいと考えています。http://deeplearning.net/tutorial/lstm.htmlに出くわしましたが、バイナリ分類タスクを容易にするだけです。続行する方法について誰かが何か提案があれば、それは素晴らしいことです。最初の実行可能な方向性が必要なだけです。取り組むことができます。
ありがとう、アミット
各ドキュメントに複数のラベルが付いたテキスト データがあります。このデータセットに対して Theano を使用して LSTM ネットワークをトレーニングしたいと考えています。http://deeplearning.net/tutorial/lstm.htmlに出くわしましたが、バイナリ分類タスクを容易にするだけです。続行する方法について誰かが何か提案があれば、それは素晴らしいことです。最初の実行可能な方向性が必要なだけです。取り組むことができます。
ありがとう、アミット
1) モデルの最後のレイヤーを変更します。いえ
pred = tensor.nnet.softmax(tensor.dot(proj, tparams['U']) + tparams['b'])
シグモイドなど、他のレイヤーに置き換える必要があります。
pred = tensor.nnet.sigmoid(tensor.dot(proj, tparams['U']) + tparams['b'])
2) コストも変更する必要があります。
いえ
cost = -tensor.log(pred[tensor.arange(n_samples), y] + off).mean()
クロスエントロピーなど、他のコストに置き換える必要があります。
one = np.float32(1.0)
pred = T.clip(pred, 0.0001, 0.9999) # don't piss off the log
cost = -T.sum(y * T.log(pred) + (one - y) * T.log(one - pred), axis=1) # Sum over all labels
cost = T.mean(cost, axis=0) # Compute mean over samples
3) 関数build_model(tparams, options)
では、以下を置き換える必要があります。
y = tensor.vector('y', dtype='int64')
に
y = tensor.matrix('y', dtype='int64') # Each row of y is one sample's label e.g. [1 0 0 1 0]. sklearn.preprocessing.MultiLabelBinarizer() may be handy.
4)pred_error()
マルチラベルをサポートするように変更します (たとえば、精度や scikit-learn の F1 スコアなどのメトリックを使用します)。
モデルの最後のレイヤーを変更できます。ターゲットがあるかどうかに応じて、各要素が0または1であるターゲットのベクトルがあります。