CourseraのNLPのコースで一番有名な"Natural Language Processing Specialization"をやってみたので、メモ程度に学習したことを残していきます。メモ程度に残しているので、マジで見にくいですまじで。
このコースは4week × 4course = 16weekのコースです。
基本的には英語のコース(Courseraは全部そうか)で、オンデマンドの動画の字幕だけ日本語ありますが変な訳が割とあります。
途中からQiitaに書こうと一念発起したので、最初の方はまだないです。
今後書いていきます。多分。
筆者について
- 修士1年
- プログラミング歴4年程、一番得意なのはPython
- 機械学習歴は2年弱
- 自然言語処理は未経験、学校で自然言語処理の授業取りながら、Courseraを並行してやってる
Course1 - Natural Language Processing with Classification and Vector Spaces
Course2 - Natural Language Processing with Probabilistic Models
Course3 - Natural Language Processing with Sequence Models
Week3: LSTMs and Named Entity Recognition
この週は文章中から固有表現を引っこ抜いてみようという内容
RNNのデメリット
- 古典的なRNNのメリットは短い範囲の関係性の考慮、少ないRAMで済む。デメリットは長期の依存性は追えない、勾配消失・爆発。
- 勾配を計算するにあたって、偏微分係数が1より小さければ消失、1より大きければ爆発してしまう。
LSTM
- 勾配消失問題を解決する方法
- cell states and hidden states
- ゲートがそれぞれのセルの情報の取捨選択を行う
- ゲートの種類
- Forget Gate: どの情報を捨てるか
- Input Gate: どの情報を残すか
- Output Gate: どの情報を出力するか
- tanh gateによって-1~1の範囲に値が圧縮される
NER: Named Entity Recognition(固有表現認識)
テキストから固有表現を抽出することによって、素早く重要な情報を抽出できる。
Processing NER
- 各固有表現のクラスに数字を当てる
- 文章の各単語に数字を当てる
- 長さが最大の文章に合わせてパディングを行う
Training the NER
- 文章の書く単語に数字を割り当て、テンソルにする
- ジェネレータを作成して、バッチにする(バッチ数は大体2の累乗)
- LSTMに入力する
- 全結合層に入れる
- LogSoftmaxに入れる
Evaluation
- モデルで計算
- 予測結果の配列のどのポイントで値が最大になるかを計算
- パディングの考慮
- ラベルと出力を比較
Week4: Siamese Networks
Siamese Network
- 二つのNNからなる
- 分の類似性を算出する
- コサイン類似性(じゃなくてもいい)
- Applications
- Handwritten checks
- Question dupulicates
- Queries
- 2つのサブネットワークのパラメータは共通
Loss Function
- 基準の質問をAnchorと呼び、それに近ければPositive、遠ければNegativeと判定する。
- Triplets
- Anchor, Positive, Negative
- $diff = s(A, N) - s(A, P)$として、diffを小さくする方向に学習する
- diffが無限大の発散しないように、下限を設定する → α
- 難しいtripletsの組を作成して、損失関数を大きくすることでモデルは学習していく
Computing the Cost
- AnchorとPositiveのペアを複数用意して、バッチとする
- AnchorのバッチとPositiveのバッチをモデルに通して、それぞれの類似度を計算する
- ぞれぞれのペアは重複しない(互いにnegative)となることによって、ペア同士の類似度が低くなればnegativeのデータを使ったも同然であり、negativeのデータを用意しなくて済む
- それぞれのバッチの類似度を計算した行列を作成する
- 対角成分は1に近づく
- 非対角成分は低くなる(0を超えるものも出てくる)
- 非対角成分も計算に使おう!: Hard Negative Mining
- mean negative
- closest negative
- 上の二つを代入した損失関数を足し合わせることで最終的な損失関数となる
One Shot Learning
- モデルの再学習を必要としない学習
- Siamese Networkを使う
Course4 - Natural Language Processing with Attention Models
やっとAttentionまで来ました。実践的ですね。
Week1: Neural Machine Translation
Seq2Seq
- 系列から系列への変換
- 可変長の入力から固定長のメモリへのマッピング
- EncoderとDecoderがある
- 固定長の分しか情報が得られない
- EncoderからDecoderへの繋がりの部分
- 入力が長くなるにつれて性能が落ちる
Attention
- 入力文章中の大事な部分の情報のみを保管する機構
- Encoderの隠れ層に重みづけをして、Attention層に放り込む
- Decoderの隠れ層とEncoderの隠れ層を入力として、どの文脈かを出力する