$30 off During Our Annual Pro Sale. View Details »

B3ゼミ 自然言語処理におけるCNN

Ayumu
March 21, 2019

 B3ゼミ 自然言語処理におけるCNN

2019/03/21
長岡技術科学大学 自然言語処理研究室
学部4年 守谷 歩

Ayumu

March 21, 2019
Tweet

More Decks by Ayumu

Other Decks in Technology

Transcript

  1. 自然言語処理における
    CNN
    2019/03/21
    長岡技術科学大学 自然言語処理研究室
    学部4年 守谷 歩
    単語埋め込み表現(Word
    embedding),CNN,QRNN

    View Slide

  2. 単語共起行列
    ⚫I like apple
    ⚫He like banana
    ⚫He like fruit
    I Like Apple He Banana Fruit
    I 0 1 0 0 0 0
    Like 1 0 1 2 1 1
    Apple 0 1 0 0 0 0
    He 0 2 0 0 0 0
    Banana 0 1 0 0 0 0
    Fruit 0 1 0 0 0 0

    View Slide

  3. SVD 特異値分解
    ⚫任意のM*Nの行列Cに対して以下のような分解を行う
    = Σ
    ⚫左特異行列UはM*Mの正方行列で各列はと直行する固有ベ
    クトル
    ⚫右特異行列VはN*Nの正方行列で各列はと直行する固有ベク
    トル
    ⚫ΣはN*M行列で対角行列成分が特異値によって表現(それ以外は
    0)
    ⚫特異値はの固有値の平方根で求まる

    View Slide

  4. Word2Vec Skip-Gram
    ⚫単語の前後に大きさCのウィンドウをといったものを考える。ウィン
    ドウ内単語に対して出現確率を考え、総和を目的関数にし、最尤推
    定する。
    ⚫直観的なイメージとしては “Do Androids Dream of Electric Sheep?”
    のDreamの単語に注目したとき、ウインドウサイズC=2として考える
    ときDreamの周辺2単語がNNの出力される確率が高くなるように学
    習を行う。
    ⚫上の注目する単語をすべての単語に対して行うと1単語に対する
    次の単語の生成確率と単語数の行列を作ることができる。

    View Slide

  5. Glove
    ⚫Word2VecとSVDの利点を取ったもの
    ⚫単語の共起カウントを行列
    とする
    ⚫以下の式を最小二乗法にて単語ベクトルを求めるための損失関数として定義する。
    = ෍
    ,=1

    ,


    ~ +
    +
    ~ − log
    2
    ⚫この時関数fは重みをつけるための関数で以下のように定義される
    = ൞



    <
    1 ℎ

    View Slide

  6. CNN
    ⚫入力が文書の場合、各行を単語を表現するベクトルで考える。例として、
    200次元の単語埋め込みを行った10単語の文書があった場合、10*200
    の行列として扱うことができる。
    ⚫NLPタスクでは一般的に行列の行全体をスライドするフィルタを使う。
    ⚫CNNではハイパーパラメータとして畳み込み幅のサイズ、ストライド数、
    プーリング層の数、チャンネルといった点でCNNはハイパーパラメータを
    取りうる。
    ⚫分類問題を解くCNNを実装すると考えると畳み込みや、プーリングの操
    作を適用すると単語の局所的な位置情報は失われる

    View Slide

  7. QRNN Quasi Recurrent neural network
    ⚫RNNを並列処理しようとすると、RNNが前回の隠れ層からの入力を重み
    をかけて受け取るため、順番に処理する必要がある。
    ⚫QRNNではCNNを連続的なデータに対して適用する。また、重みを使わ
    ずに伝搬させるため隠れ層の中の各要素を他要素からの影響から独立
    した状態で留める。
    ⚫LSTMでいうinput,forget,outputといったものをZ,F,Oといった関数を用い
    て計算する。
    = tanh


    =

    = (

    ∗ )

    View Slide

  8. QRNN Quasi Recurrent neural network
    ⚫また畳み込み処理ではプーリングをよく使うが、これは4領域あった場合にそ
    の最大値や平均値をとるといった手法であった。ここにFの割合で過去の情報h
    と合成したものをプーリングする。F-poolingといった手法として以下の手法が挙
    げられている。

    = ⨀ℎ−1
    + 1 − ⨀
    ⚫ほかにも、コンテキストcを経由するfo-poolingとして以下の変形も提案されて
    いる。
    ct
    = ⨀−1
    + 1 − ⨀

    = ⨀
    ⚫また、インプットを書き込む割合を考える変形としてifo-poolingが提案されてい
    る。

    = ⨀−1
    +


    = ⨀

    View Slide

  9. 参考文献
    ⚫QUASI-RECURRENT NEURAL NETWORKS https://arxiv.org/pdf/1611.01576v1.pdf
    ⚫自然言語処理における畳み込みニューラルネットワークを理解する
    http://tkengo.github.io/blog/2016/03/11/understanding-convolutional-neural-
    networks-for-nlp/
    ⚫畳み込みニューラルネットワークによるテキスト分類を TensorFlow で実装する
    http://tkengo.github.io/blog/2016/03/14/text-classification-by-cnn/
    ⚫A Sensitivity Analysis of (and Practitioners’ Guide to) ConvolutionalNeural Networks for
    Sentence Classification https://arxiv.org/pdf/1510.03820.pdf
    ⚫高速かつ高性能な分散表現Gloveについて(PyTorch実装)
    https://qiita.com/GushiSnow/items/e92ac2fea4f8448491ba
    ⚫いますぐ使える単語埋め込みベクトルのリスト
    https://qiita.com/Hironsan/items/8f7d35f0a36e0f99752c

    View Slide