Con la cadena de herramientas Pytorch madurando, es hora de archivar reposuras como este. Podrá encontrar opciones más desarrolladas para cada parte de este kit de herramientas:
¡Feliz desarrollo!
No dude en ponerse en contacto conmigo si alguien quiere desarchive este repositorio y continúe desarrollándolo. Puedes comunicarme conmigo en "PetroChukm [at] gmail.com".

Pytorch-NLP, o torchnlp para abreviar, es una biblioteca de utilidades básicas para Pytorch NLP. torchnlp extiende Pytorch para proporcionarle funciones básicas de procesamiento de datos de texto.
Logotipo de Chloe Yeo, patrocinio corporativo de Wellsaid Labs
Asegúrese de tener Python 3.6+ y Pytorch 1.0+. Luego puede instalar pytorch-nlp usando PIP:
pip install pytorch - nlpO para instalar el último código a través de:
pip install git + https : // github . com / PetrochukM / PyTorch - NLP . git La documentación completa para Pytorch-NLP está disponible a través de nuestro sitio web ReadThEDOCS.
Dentro de una tubería de datos NLP, querrá implementar estos pasos básicos:
Cargue el conjunto de datos IMDB, por ejemplo:
from torchnlp . datasets import imdb_dataset
# Load the imdb training dataset
train = imdb_dataset ( train = True )
train [ 0 ] # RETURNS: {'text': 'For a movie that gets..', 'sentiment': 'pos'}Cargue un conjunto de datos personalizado, por ejemplo:
from pathlib import Path
from torchnlp . download import download_file_maybe_extract
directory_path = Path ( 'data/' )
train_file_path = Path ( 'trees/train.txt' )
download_file_maybe_extract (
url = 'http://nlp.stanford.edu/sentiment/trainDevTestTrees_PTB.zip' ,
directory = directory_path ,
check_files = [ train_file_path ])
open ( directory_path / train_file_path )¡No te preocupes, manejaremos el almacenamiento en caché por ti!
Tokenize y codifica su texto como tensor.
Por ejemplo, un WhitespaceEncoder divide el texto en tokens cada vez que encuentra un personaje de espacio blanco.
from torchnlp . encoders . text import WhitespaceEncoder
loaded_data = [ "now this ain't funny" , "so don't you dare laugh" ]
encoder = WhitespaceEncoder ( loaded_data )
encoded_data = [ encoder . encode ( example ) for example in loaded_data ]Con sus datos cargados y codificados en la mano, querrá un conjunto de datos.
import torch
from torchnlp . samplers import BucketBatchSampler
from torchnlp . utils import collate_tensors
from torchnlp . encoders . text import stack_and_pad_tensors
encoded_data = [ torch . randn ( 2 ), torch . randn ( 3 ), torch . randn ( 4 ), torch . randn ( 5 )]
train_sampler = torch . utils . data . sampler . SequentialSampler ( encoded_data )
train_batch_sampler = BucketBatchSampler (
train_sampler , batch_size = 2 , drop_last = False , sort_key = lambda i : encoded_data [ i ]. shape [ 0 ])
batches = [[ encoded_data [ i ] for i in batch ] for batch in train_batch_sampler ]
batches = [ collate_tensors ( batch , stack_tensors = stack_and_pad_tensors ) for batch in batches ] ¡Pytorch-NLP se basa en torch.stack parte superior de torch.utils.data.sampler default_collate Pytorch.
Con su lote en la mano, puede usar Pytorch para desarrollar y capacitar a su modelo con descenso de gradiente. Por ejemplo, consulte este código de ejemplo para capacitar en el corpus de inferencia del lenguaje natural de Stanford (SNLI).
¡Pytorch-NLP tiene un par de paquetes de utilidad centrados en la PNL más para apoyarlo! ?
Ahora ha configurado su tubería, es posible que desee asegurarse de que algunas funciones funcionen de manera determinista. Envuelva cualquier código aleatorio, con fork_rng y estará listo para comenzar, así:
import random
import numpy
import torch
from torchnlp . random import fork_rng
with fork_rng ( seed = 123 ): # Ensure determinism
print ( 'Random:' , random . randint ( 1 , 2 ** 31 ))
print ( 'Numpy:' , numpy . random . randint ( 1 , 2 ** 31 ))
print ( 'Torch:' , int ( torch . randint ( 1 , 2 ** 31 , ( 1 ,))))Esto siempre imprimirá:
Random: 224899943
Numpy: 843828735
Torch: 843828736
Ahora que ha calculado su vocabulario, es posible que desee utilizar vectores de palabras previamente capacitados para establecer sus incrustaciones, así: así:
import torch
from torchnlp . encoders . text import WhitespaceEncoder
from torchnlp . word_to_vector import GloVe
encoder = WhitespaceEncoder ([ "now this ain't funny" , "so don't you dare laugh" ])
vocab_set = set ( encoder . vocab )
pretrained_embedding = GloVe ( name = '6B' , dim = 100 , is_include = lambda w : w in vocab_set )
embedding_weights = torch . Tensor ( encoder . vocab_size , pretrained_embedding . dim )
for i , token in enumerate ( encoder . vocab ):
embedding_weights [ i ] = pretrained_embedding [ token ] Por ejemplo, desde el paquete de la red neuronal, aplique el LockedDropout de última generación:
import torch
from torchnlp . nn import LockedDropout
input_ = torch . randn ( 6 , 3 , 10 )
dropout = LockedDropout ( 0.5 )
# Apply a LockedDropout to `input_`
dropout ( input_ ) # RETURNS: torch.FloatTensor (6x3x10)Calcule las métricas comunes de PNL, como la puntuación BLEU.
from torchnlp . metrics import get_moses_multi_bleu
hypotheses = [ "The brown fox jumps over the dog 笑" ]
references = [ "The quick brown fox jumps over the lazy dog 笑" ]
# Compute BLEU score with the official BLEU perl script
get_moses_multi_bleu ( hypotheses , references , lowercase = True ) # RETURNS: 47.9 Tal vez mirar ejemplos más largos puede ayudarlo a examples/ .
¿Necesitas más ayuda? Estamos felices de responder a sus preguntas a través del chat de Gitter
Hemos lanzado Pytorch-NLP porque encontramos la falta de kits de herramientas básicos para PNL en Pytorch. Esperamos que otras organizaciones puedan beneficiarse del proyecto. Estamos agradecidos por cualquier contribución de la comunidad.
Lea nuestra guía contribuyente para aprender sobre nuestro proceso de desarrollo, cómo proponer las correcciones de errores y las mejoras, y cómo construir y probar sus cambios en Pytorch-NLP.
TorchText y Pytorch-NLP difieren en la arquitectura y el conjunto de características; De lo contrario, son similares. TorchText y Pytorch-NLP proporcionan vectores de palabras previamente capacitados, conjuntos de datos, iteradores y codificadores de texto. Pytorch-NLP también proporciona módulos de red neuronales y métricas. Desde el punto de vista de la arquitectura, TorchText está orientado a objetos con un acoplamiento externo, mientras que Pytorch-NLP está orientado a objetos con bajo acoplamiento.
Allennlp está diseñado para ser una plataforma para la investigación. Pytorch-NLP está diseñado para ser un kit de herramientas ligero.
Si encuentra útil Pytorch-NLP para una publicación académica, utilice el siguiente bibtex para citarlo:
@misc{pytorch-nlp,
author = {Petrochuk, Michael},
title = {PyTorch-NLP: Rapid Prototyping with PyTorch Natural Language Processing (NLP) Tools},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/PetrochukM/PyTorch-NLP}},
}