hanpy_lt_bert_transformer
BERTちょっと調べてみた
自己紹介
おがわ ひでゆき
合同会社長目(ちょうもく)経営
はんなりPythonの会 オーガナイザ
背景
引きこもっている間に手軽にディープラーニング人材になろうと思いました。
衛星画像データを扱おうかと思っていたら、SAKURAさんのTellusの登録が間に合いませんでした。Tweet そういや今日の19時からあったBERT勉強会に参加しようと思っていました。しかしBERT全く知らん。
BERTってよく聞くし、知ったかぶりできるようになりたかった。ビジネスマンは知ったかぶり重要。
3日間、時間を作って調べましたが、英語はもちろん日本語で読んでもわけわからなかった。
とりあえず、調べて役立った資料からちょいちょいとメモしたものを話します。
コードはなしで、精神論だけです。
次はもうちょっと基礎から勉強します。
https://gyazo.com/7de39548227518d73cb32a89cb1c6a25
資料
「つくりながら学ぶ!Pytorchによる発展ディープラーニング」
名著と聞いたので1月に購入。ちょっとやって放置していた・・・
自然言語処理の流れを簡略に解説していてくれてて、超分かりやすい。
Misreading Chat / CSの論文を読むPodcast。最近更新がないので復活してほしい。日本語
解説記事 論文は読んでもわからんぞ。難しいらしい。 解説を書いているJay AlammerさんのBlogが分かりよいとのこと オプトテクノロジーズさんありがとう!!
Qiita
BERTの前に自然言語処理って?
画像データ
ピクセルデータの集まりを一度に脳に入力して処理する
言語データ
前から順に脳にためて逐次的に脳に入力し処理する
RNNやLSTMなど再帰的な処理を行うニューラルネットワークが用いられた
データ1step(1単語)ずつ読み込む
一気にデータを読み込む画像処理に比べて時間がかかる
もう単語の順番いらん!!
Bag-of-Wordsから拡張しCNNを使う。隣接する数単語の情報を1つの特徴量として表現する
離れた単語問題!!
CNNの問題。離れた位置にある情報との関係性を上手く特徴量に落とし込めない
Attentionが導入された / 離れた位置のピクセルとの関係性を考慮した特徴量をつくり活用
これが言語データに使用されたのがTransformer
Transfomer / 翻訳のモデルとして提案。エンコーダ / デコーダ
Attentionが分かるとわかりそうだが、分からない。全然わからない。
https://gyazo.com/2ee18b0169bb7ed3f7ae6d8e640ba299
画像は「つくりながら学ぶ!Pytorchによる発展ディープラーニング」より Transformerのエンコーダ部分で、デコーダ部分はない。
BERTの概観
自然言語処理のディープラーニングモデル
サイズがたくさんある。本ではBERT-BaseモデルというTransformerを12層重ねたものを取り上げる
Embeddingsモジュール。単語IDを単語ベクトルに変換する。
BertレイヤーモジュールはTransformer
最後の部分に言葉をマスクするして当てるモジュール(MaskedWordPredictionsModule)と、次の分とのつながりを試すモジュール(SeqRalationshipModule)をくっつける
https://gyazo.com/c1426fa22dd674d6e23f67525f3b4296
画像は「つくりながら学ぶ!Pytorchによる発展ディープラーニング」より
pre-trainedなモデルをいくつか使えるようにした
Bidirectional Encoder Representations from Transformer
Transformerからの双方向エンコーダ表現
文字通りTransferのEncoder部分を使う
Transformerが分かってな分からない。が難しすぎてよくわからない
現在性能が一番なわけではない
性能ランキング見てると中国強い・・・
事前に鍛えたパラメータを使う
ランダムに文字を隠して文章の単語を予測する / Masked Language Model / word2vecのCBOWの拡張タスク
2つの文章を入れてつながりがあるかどうかを当てる / Next Sentence Predictionhttps://gyazo.com/4941459bc6bbff009fb2bc18a30fab67
画像は「つくりながら学ぶ!Pytorchによる発展ディープラーニング」より
良い点
文脈に依存した単語ベクトル表現が作れる
Embedding同じ並びの違う単語は同じベクトルになっているが、Transformerの中で文脈に沿ったベクトル表現にしてくれる。周辺の単語を見てチャットやってくれる。
自然言語処理タスクでファインチューニングが可能になった
自分のやりたいタスクのデータでチューニングできる。
実行したいタスクに合わせたアダプターモジュール(1つの全結合層)を投入して、タスクに応じた出力を得る
転移学習とファインチューニングの違い / あとから調べる
Attentionにより説明性と可視化が簡便 ==> 本ではどの単語が影響しているとか可視化している
BERTの実装
https://gyazo.com/f065d7b77c8f84af8122bd2b3c420413
Attentionの可視化 画像は「つくりながら学ぶ!Pytorchによる発展ディープラーニング」より
https://gyazo.com/ab2ba07bcd6ec1079a1d866417e673ca
BERTをためすなら
よさそうなライブラリ
昨日のStapyで辻先生が取り上げられてたとやおいさんに聞いた
簡単に機械学習できる。チュートリアルもColabである
もとはRのCaret
まとめ
3日で理解するとか無理
でもどういう流れで発展してきたかというのはよくわかった。分かりやすくまとめてくださっている方たちありがとうございます。
自然言語処理の用語
自然言語処理用語
コーパス 集めた文書データ
形態素解析、分かち書き 単語分割
ツール: Janome / nagisa / Mecab + NEologd /
ちなみに前処理めちゃ大変
language modeling
次の単語を予測する
Pytorch向け自然言語処理パッケージ
tourchtext
自然言語処理
単語を前処理したあと、数値に変換する(ベクトルで表現する)。
数値に変換するために、ボキャブラリー(単語の集まり)を準備する必要がある
単語のベクトル表現
word2vec / fastText
単語を特徴量次元のベクトルで表現
特徴量次元が適切なら単語の関係性も考慮される
CBOW(Continuous bag of words)とskip-gramという2つのベクトル作成法がある。
Pytorch用語
DataLoader
データ生成器 torchtext.data.Iteratorを用いる
IDをふる。表現が長くなり、単語間の関係性を考慮できない
1万語だとone-hot表現に1万の長さが・・・
概要
ディープラーニングによる自然言語処理の最近の流れのおおもとにはTransformerがある
TransformerはNLP以外でも大活躍
翻訳競争で出てきた
Transformer
NLPはRNN+エンコーダ・デコーダモデルが主流だった
RNN
メモ
RNN Recurrent Neural Network
時系列データの予測でよく使われる
CNN Convolutional Neural Network
LSTM Long short-term memory
時系列データに活用
Attention
Encoder-Decoderアプローチ
最近のDeep Learning (NLP)界隈におけるAttention事情
マルチモーダル情報と機械翻訳
ニューラルネットワークによる構造学習の発展