Wenn der Pytorch Toolchain reift, ist es Zeit, Repos wie dieses zu archivieren. Für jeden Teil dieses Toolkits können Sie mehr entwickelte Optionen finden:
Viel Spaß beim Entwickeln!
Sie können mich gerne kontaktieren, wenn jemand dieses Repo nicht anarchivieren möchte und sich weiterentwickelt. Sie können mich unter "Petrochukm [at] gmail.com" erreichen.

Pytorch-NLP oder kurz torchnlp ist eine Bibliothek mit grundlegenden Versorgungsunternehmen für Pytorch NLP. torchnlp erweitert PyTorch, um Ihnen grundlegende Textdatenverarbeitungsfunktionen bereitzustellen.
Logo von Chloe Yeo, Unternehmenssponsoring von Wellsaid Labs
Stellen Sie sicher, dass Sie Python 3.6+ und Pytorch 1.0+ haben. Sie können dann pytorch-nlp mit PIP installieren:
pip install pytorch - nlpOder um den neuesten Code zu installieren über:
pip install git + https : // github . com / PetrochukM / PyTorch - NLP . git Die vollständige Dokumentation für Pytorch-NLP ist über unsere Redethedocs-Website verfügbar.
In einer NLP -Datenpipeline möchten Sie diese grundlegenden Schritte implementieren:
Laden Sie den IMDB -Datensatz beispielsweise:
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'}Laden Sie zum Beispiel einen benutzerdefinierten Datensatz:
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 )Machen Sie sich keine Sorgen, dass wir das Caching für Sie bewältigen!
Tokenize und kodieren Sie Ihren Text als Tensor.
Zum Beispiel zerlegt ein WhitespaceEncoder den Text in Token, wenn er auf einen Whitespace -Charakter stößt.
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 ]Mit Ihren geladenen und codierten Daten in der Hand möchten Sie Ihren Datensatz stapeln.
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 baut auf Pytorchs vorhandener torch.utils.data.sampler , torch.stack und default_collate auf, um sequentielle Eingaben unterschiedlicher Längen zu unterstützen!
Mit Ihrem Batch in der Hand können Sie Pytorch verwenden, um Ihr Modell mit Gradientenabstieg zu entwickeln und zu trainieren. Schauen Sie sich beispielsweise diesen Beispielcode für das Training auf dem SNLI -Corpus von Stanford Natural Language (Stanford Natural Language Inference) an.
Pytorch-NLP verfügt über ein paar weitere NLP-fokussierte Dienstprogrammpakete, die Sie unterstützen! ?
Jetzt haben Sie Ihre Pipeline eingerichtet und möchten möglicherweise sicherstellen, dass einige Funktionen deterministisch ausgeführt werden. Wickeln Sie jeden Code ein, der zufällig ist, mit fork_rng und Sie können gut gehen, so:
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 ,))))Dies wird immer gedruckt:
Random: 224899943
Numpy: 843828735
Torch: 843828736
Nachdem Sie Ihr Wortschatz berechnet haben, möchten Sie möglicherweise vorgeborene Wortvektoren verwenden, um Ihre Einbettungen wie SO zu setzen:
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 ] Wenden Sie beispielsweise aus dem neuronalen Netzwerkpaket den hochmodernen LockedDropout an:
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)Berechnen Sie gemeinsame NLP -Metriken wie den BLEU -Score.
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 Vielleicht können Sie längere Beispiele bei examples/ helfen.
Benötigen Sie mehr Hilfe? Wir beantworten Ihre Fragen gerne über den Gitter -Chat
Wir haben Pytorch-NLP veröffentlicht, weil wir einen Mangel an grundlegenden Toolkits für NLP in Pytorch gefunden haben. Wir hoffen, dass andere Organisationen vom Projekt profitieren können. Wir sind dankbar für Beiträge der Gemeinschaft.
Lesen Sie unseren beitragenden Leitfaden, um über unseren Entwicklungsprozess zu erfahren, wie Sie Fehler und Verbesserungen vorschlagen und Ihre Änderungen an Pytorch-NLP erstellen und testen.
Torchtext und Pytorch-NLP unterscheiden sich in der Architektur- und Feature-Set. Ansonsten sind sie ähnlich. TorChtext und Pytorch-NLP bieten vorgebildete Wortvektoren, Datensätze, Iteratoren und Textcodierer. Pytorch-NLP bietet auch neuronale Netzwerkmodule und Metriken. Vom Architektur-Sicht ist Torchtext mit externer Kopplung objektorientiert, während Pytorch-NLP mit niedriger Kopplung objektorientiert ist.
Allennlp ist eine Plattform für die Forschung. Pytorch-NLP ist ein leichtes Toolkit.
Wenn Sie Pytorch-NLP für eine akademische Veröffentlichung nützlich finden, verwenden Sie bitte die folgende Bibtex, um sie zu zitieren:
@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}},
}