PyTorch DL for NLP -イントロダクション-
前回、PyTorchのインストールして簡単なネットワークで学習させ、最終的にはGPUマシンでも動作を確認しました。
今回は、公式のDeep Learning for NLP with Pytorchにそって自然言語処理を試してみます。
前回同様Jupyter Notebookが公開されているのでそれを使って学習します。
事前知識としてニューラルネットワークについて多少の理解が必要とのことですがそれなりに丁寧に解説がついているので英語が苦手でなければ問題ないでしょう。
英語が苦手な方はこちらの書籍を手元に置いて適宜参照すると理解が深まるかと思います。
また、筆者は自然言語処理に関してO’Reillyの「入門 自然言語処理」をさっと読んでいます。より深い内容や基礎をしっかり学習したい方にはオススメです。
あとは流し読み程度に最近のディープラーニングとNLPの潮流を以下の論文で把握しました。
環境
- MacBook Pro (Retina, 15-inch, Mid 2015)
- macOS High Sierra 10.13.5
- Python 3.6.3
- PyTorch 0.4.0
Introduction to PyTorch
前回のチュートリアル「60 Minute Blitz」ではPyTorchにはautogradシステムが実装されていて、forwardを定義すればbackwardは自動で定義されるという話をしました。
ここではその仕組みについて少しだけ深掘りします。
Tensor型の変数を宣言するとき、通常はList型を引数に取ります。
Listの次元によってベクトル、マトリクス、テンソルと呼び名が変わりますが、ここでは全てTensorと呼びます。
(正確にはテンソルの特殊な状況がベクトルやマトリクス)
x = torch.tensor([1., 2., 3]) y = torch.tensor([4., 5., 6]) z = x + y print(z.grad_fn)
この時xとyの和であるzに対して、grad_fnでどのような演算で作られたかを確認します。
通常はNoneが返るだけです。
しかしTensorの宣言時にrequires_grad=True
を引数に取ると以降の演算が記録されます。
x = torch.tensor([1., 2., 3], requires_grad=True) y = torch.tensor([4., 5., 6], requires_grad=True) z = x + y print(z.grad_fn)
z.grad_fn
でzがどのような演算で作られたかがわかりました。
このようにPyTorchでは演算の履歴が記録されることで自動的にbackwardが定義されるようです(あやふや)。
次回は実際にPyTorchを使ってNLPタスクを解いてみます。
bag-of-wordsを使って英語とスペイン語を分類する予定です。