SRA 産業第1事業部 鈴木真吾
正月中やってた
自然言語処理
https://medium.com/huggingface/benchmarking-transformers-pytorch-and-tensorflow-e2917fb891c2
PyTorch | TensorFlow | |
---|---|---|
HW | GPU | GPU, TPU |
モバイル | CoreML, PyTorch Mobile |
CoreML, MLKit |
Web | ONNX.js | TensorFlow.js |
import torch
# y = a x を記述する
x = torch.randn(100, 3)
# 微分の変数として扱うので requires_grad=True をつける
a = torch.tensor([1,2,3.], requires_grad=True)
# mv は Matrix x Vector の意
y = torch.mv(x, a)
class Net(nn.Module):
def __init__(self, n_in, n_units, n_out):
super(Net, self).__init__()
self.l1 = nn.Linear(n_in, n_units)
self.l2 = nn.Linear(n_units, n_out)
def forward(self, x):
h = F.relu(self.l1(x))
y = self.l2(h)
return y
専門化されたモジュール
構文解析
etc
構文木など中間的な状態を扱う必要
それぞれのモジュールをつなぎ合わせる作業が発生
End-to-End 学習
入力と出力を直接学習する
例) 機械翻訳なら直接翻訳前後の言語が入出力になる
中間的な状態を扱わずに済む
相変わらず必要なタスクも
形態素解析
単語埋め込み
最近の動向
Transformer
BERT
Q(クエリ) と K(キー) の内積のsoftmax と V(値) の積
辞書オブジェクトのようなと理解しておく
transformers で日本語を扱うために色々準備が必要で面倒だったが、最近日本語にも対応した
(最初は苦労した話を書きたかったが仕方ないね)
from transformers import BertJapaneseTokenizer
tokenizer = BertJapaneseTokenizer.from_pretrained('bert-base-japanese-whole-word-masking')
tokenizer.tokenize('お腹が痛いので遅れます。')
# ['お', '##腹', 'が', '痛', '##い', 'ので', '遅れ', 'ます', '。']
from transformers import BertForMaskedLM
model = BertForMaskedLM.from_pretrained('bert-base-japanese-whole-word-masking')
text = "僕は友達とXXXXをすることが好きだ"
# 色々処理して "XXXX"の部分を予測する
_, predicted_indexes = torch.topk(predictions[0, masked_index], k=5)
predicted_tokens = tokenizer.convert_ids_to_tokens(predicted_indexes.tolist())
print(predicted_tokens)
# ['話', 'ゴルフ', 'ゲーム', '仕事', '食事']
形態素解析
Masked Language Model による予測
BERTによる日本語構文解析の精度向上
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Attention is All You Need
現場で使える!PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装
つくりながら学ぶ!PyTorchによる発展ディープラーニング
BERT, Transformer について解析と実装あり
自然言語処理の基本と技術
Deep Learning with PyTorch
現在電子書籍版が無料で配布されている
この界隈の技術の変化が非常に速い
自宅マシンの非力さがよくわかった
Transformer のタスク実行中に異常停止が複数回
多分熱暴走
Google Colaboratory がやっぱり便利