Pytorchツールチェーンが成熟していると、このようなリポジトリをアーカイブする時が来ました。このツールキットのすべての部分に対してより開発されたオプションを見つけることができます:
ハッピー開発!
誰かがこのリポジトリを除外して開発を続けたい場合は、私に連絡してください。 「Petrochukm [at] gmail.com」で私に連絡できます。

pytorch-nlp、または略してtorchnlp 、pytorch nlpの基本ユーティリティのライブラリです。 torchnlp Pytorchを拡張して、基本的なテキストデータ処理機能を提供します。
Chloe Yeoのロゴ、Wellsaid Labsによるコーポレートスポンサーシップ
Python 3.6+およびPytorch 1.0+があることを確認してください。その後、PIPを使用してpytorch-nlpをインストールできます。
pip install pytorch - nlpまたは以下を介して最新のコードをインストールするには
pip install git + https : // github . com / PetrochukM / PyTorch - NLP . git Pytorch-NLPの完全なドキュメントは、ReadTheDocs Webサイトから入手できます。
NLPデータパイプライン内で、これらの基本的な手順を実装する必要があります。
たとえば、IMDBデータセットをロードします。
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'}たとえば、カスタムデータセットをロードします。
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 )あなたのためにキャッシュを処理することを心配しないでください!
テキストをテンソルとしてトークン化してエンコードします。
たとえば、 WhitespaceEncoderは、Whitespace文字に遭遇するたびにテキストをトークンに分割します。
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 ]ロードされたデータとエンコードされたデータを手にすると、データセットをバッチする必要があります。
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は、Pytorchの既存のtorch.utils.data.sampler 、 torch.stack 、およびdefault_collateの上に構築され、さまざまな長さのシーケンシャル入力をサポートします。
バッチを手にすると、Pytorchを使用して勾配降下を使用してモデルを開発およびトレーニングできます。たとえば、スタンフォードの自然言語推論(SNLI)コーパスに関するトレーニングについては、この例コードをご覧ください。
Pytorch-NLPには、あなたをサポートするためにさらにいくつかのNLPフォーカスユーティリティパッケージがあります! ?
パイプラインをセットアップすると、一部の機能が決定論的に実行されるようにすることができます。ランダムなコードをfork_rngで包みます。
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 ,))))これは常に印刷されます:
Random: 224899943
Numpy: 843828735
Torch: 843828736
語彙を計算したので、事前に訓練された単語ベクトルを使用して、埋め込みを設定することをお勧めします。
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 ]たとえば、ニューラルネットワークパッケージから、最先端のLockedDropout適用します。
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)BLEUスコアなどの一般的なNLPメトリックを計算します。
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より長い例を見ると、 examples/であなたが役立つかもしれません。
もっと助けが必要ですか? Gitterチャットを介してあなたの質問に喜んでお答えします
Pytorch-NLPをリリースしました。これは、PytorchでNLPの基本的なツールキットが不足していることを発見したためです。他の組織がプロジェクトの恩恵を受けることができることを願っています。コミュニティからの貢献に感謝しています。
貢献ガイドを読んで、開発プロセス、バグフィックスと改善を提案する方法、Pytorch-NLPへの変更を構築およびテストする方法について学びます。
TorchTextとPytorch-NLPは、アーキテクチャと機能セットが異なります。そうでなければ、それらは似ています。 TorchTextとPytorch-NLPは、事前に訓練されたワードベクトル、データセット、イテレーター、テキストエンコーダーを提供します。 Pytorch-NLPは、ニューラルネットワークモジュールとメトリックも提供します。アーキテクチャの観点から見ると、TorchTextは外部結合でオブジェクト指向され、Pytorch-NLPは低カップリングでオブジェクト指向です。
Allennlpは、研究のプラットフォームになるように設計されています。 Pytorch-NLPは、軽量のツールキットになるように設計されています。
Pytorch-NLPがアカデミック出版物に役立つと思う場合は、次のBibtexを使用して引用してください。
@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}},
}