Multilabel de la Classification de textes à l'aide de TensorFlow

Les données de texte est organisé comme vecteur avec 20 000 éléments, comme [2, 1, 0, 0, 5, ...., 0].
i-ème élément indique la fréquence de la i-ème mot dans un texte.

La vérité du terrain les données de l'étiquette est également représenté comme un vecteur de 4 000 éléments, comme [0, 0, 1, 0, 1, ...., 0].
i-ème élément indique si la i-ème de l'étiquette est un positif de l'étiquette de texte.
Le nombre d'étiquettes pour un texte qui diffère selon les textes.

J'ai un code pour un seul texte de l'étiquette de classement.

Comment puis-je modifier le code suivant pour multilabel de la classification de textes?

Surtout, je voudrais savoir points suivants.

  • Comment faire pour calculer la précision à l'aide de TensorFlow.
  • Comment définir un seuil au-delà duquel les juges que l'étiquette soit positif ou négatif. Par exemple, si la sortie est [0.80, 0.43, 0.21, 0.01, 0.32] et la vérité du terrain est [1, 1, 0, 0, 1], les étiquettes avec des scores de plus de 0.25 devrait être jugé comme positif.

Merci.

import tensorflow as tf
# hidden Layer
class HiddenLayer(object):
def __init__(self, input, n_in, n_out):
self.input = input
w_h = tf.Variable(tf.random_normal([n_in, n_out],mean = 0.0,stddev = 0.05))
b_h = tf.Variable(tf.zeros([n_out]))
self.w = w_h
self.b = b_h
self.params = [self.w, self.b]
def output(self):
linarg = tf.matmul(self.input, self.w) + self.b
self.output = tf.nn.relu(linarg)
return self.output
# output Layer
class OutputLayer(object):
def __init__(self, input, n_in, n_out):
self.input = input
w_o = tf.Variable(tf.random_normal([n_in, n_out], mean = 0.0, stddev = 0.05))
b_o = tf.Variable(tf.zeros([n_out]))
self.w = w_o
self.b = b_o
self.params = [self.w, self.b]
def output(self):
linarg = tf.matmul(self.input, self.w) + self.b
self.output = tf.nn.relu(linarg)
return self.output
# model
def model():
h_layer = HiddenLayer(input = x, n_in = 20000, n_out = 1000)
o_layer = OutputLayer(input = h_layer.output(), n_in = 1000, n_out = 4000)
# loss function
out = o_layer.output()
cross_entropy = -tf.reduce_sum(y_*tf.log(out + 1e-9), name='xentropy')    
# regularization
l2 = (tf.nn.l2_loss(h_layer.w) + tf.nn.l2_loss(o_layer.w))
lambda_2 = 0.01
# compute loss
loss = cross_entropy + lambda_2 * l2
# compute accuracy for single label classification task
correct_pred = tf.equal(tf.argmax(out, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, "float"))
return loss, accuracy
  • Je pense qu'il y a peut-être une meilleure perte de fonction à utiliser en plus d'entropie croisée.
  • Il ya beaucoup de différentes mesures de précision pour un multilabel classification problème: une erreur de précision, grade, la perte, la moyenne de la précision, etc. Je suis encore à apprendre TensorFlow moi-même et je n'ai pas réussi à mettre correctement en œuvre l'un d'eux encore. Mais peut-être que ce livre vous aidera à: arxiv.org/pdf/1312.5419v3.pdf Laissez-moi savoir si vous faites des progrès!
  • Pour avoir une meilleure idée de la précision envisager de calculer la précision et le rappel.
  • qu'est-ce que y_ je ne vois pas défini
InformationsquelleAutor Benben | 2016-02-15