web-dev-qa-db-fra.com

Processeur de vocabulaire Tensorflow

Je suis le blog wildml sur la classification de texte en utilisant tensorflow. Je ne suis pas en mesure de comprendre l'objectif de max_document_length dans l'instruction de code:

vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length)

Aussi, comment puis-je extraire le vocabulaire du vocab_processor

16
Nitin

J'ai compris comment extraire le vocabulaire d'un objet de processeur de vocabulaire. Cela a parfaitement fonctionné pour moi.

import numpy as np
from tensorflow.contrib import learn

x_text = ['This is a cat','This must be boy', 'This is a a dog']
max_document_length = max([len(x.split(" ")) for x in x_text])

## Create the vocabularyprocessor object, setting the max lengh of the documents.
vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length)

## Transform the documents using the vocabulary.
x = np.array(list(vocab_processor.fit_transform(x_text)))    

## Extract Word:id mapping from the object.
vocab_dict = vocab_processor.vocabulary_._mapping

## Sort the vocabulary dictionary on the basis of values(id).
## Both statements perform same task.
#sorted_vocab = sorted(vocab_dict.items(), key=operator.itemgetter(1))
sorted_vocab = sorted(vocab_dict.items(), key = lambda x : x[1])

## Treat the id's as index into list and create a list of words in the ascending order of id's
## Word with id i goes at index i of the list.
vocabulary = list(list(Zip(*sorted_vocab))[0])

print(vocabulary)
print(x)
27
Nitin

pas en mesure de comprendre le but de max_document_length

Le VocabularyProcessor mappe vos documents texte en vecteurs, et vous avez besoin que ces vecteurs soient d'une longueur cohérente.

Vos enregistrements de données d'entrée peuvent ne pas (ou ne seront probablement pas) tous de la même longueur. Par exemple, si vous travaillez avec des phrases pour l'analyse des sentiments, elles seront de différentes longueurs.

Vous fournissez ce paramètre au VocabularyProcessor afin qu'il puisse ajuster la longueur des vecteurs de sortie. Selon la documentation ,

max_document_length : longueur maximale des documents. si les documents sont plus longs, ils seront rognés, s'ils sont plus courts - rembourrés.

Découvrez le code source .

  def transform(self, raw_documents):
    """Transform documents to Word-id matrix.
    Convert words to ids with vocabulary fitted with fit or the one
    provided in the constructor.
    Args:
      raw_documents: An iterable which yield either str or unicode.
    Yields:
      x: iterable, [n_samples, max_document_length]. Word-id matrix.
    """
    for tokens in self._tokenizer(raw_documents):
      Word_ids = np.zeros(self.max_document_length, np.int64)
      for idx, token in enumerate(tokens):
        if idx >= self.max_document_length:
          break
        Word_ids[idx] = self.vocabulary_.get(token)
      yield Word_ids

Notez la ligne Word_ids = np.zeros(self.max_document_length).

Chaque ligne de la variable raw_documents Sera mise en correspondance avec un vecteur de longueur max_document_length.

2
Kirk Broadhurst