Slide 1

Slide 1 text

Makoto Hiramatsu <@himkt> University of Tsukuba ニューラル固有表現抽出 DLHacks 12/13 https://bit.ly/2HNHngs

Slide 2

Slide 2 text

自己紹介 2 Makoto Hiramatsu, himkt • Master student @Graduate School of Informatics, University of Tsukuba • Research Engineer @Cookpad Inc. • HQ @nlpaper.challenge (https://nlpaper-challenge.connpass.com/) • ex-Researcher @Retrieva Inc. Interests: Natural Language Processing, Named Entity Recognition @himkt or @himakotsu @himkt For more detail: https://himkt.github.io

Slide 3

Slide 3 text

Neural Architectures for Named Entity Recognition In Annual Conference of the North American Chapter of the Association for Computational Linguistics (NAACL2016) Guillaume Lample et al. (Carnegie Mellon University) (現在: Facebook AI Research) 書誌情報 3 著者実装: https://github.com/glample/tagger

Slide 4

Slide 4 text

選定理由 • 固有表現抽出 (Named Entity Recognition; NER) の タスクでベースラインとしてよく使われる • 2016年以降のニューラルNERの基礎となっている (ELMoとかBERTとか出てきて様子は変わり始めた感はある) • (自分の研究ツールを公開する外圧をかけたかった) 4

Slide 5

Slide 5 text

タスクの説明: 固有表現抽出 • テキストの中から人名や組織名のような固有表現 (NE) を抽出する • 固有表現の定義はほしい情報に基づいて柔軟に定義する • 情報抽出や検索エンジンのインデキシングなどで有用 https://explosion.ai/demos/displacy-ent 5 

Slide 6

Slide 6 text

タスクの説明: 固有表現抽出 •系列ラベリング問題として定式化されることが多い • 単語は離散のシンボル,文は単語の列: 自然言語処理の多くのタスクの定式化に使える •固有表現抽出を系列ラベリング問題として解く場合: 系列タグスキーマを利用: BIOES (BIO or IOB) (B: Begin, I: Inside, O: Outside, E: End, S: Single) George B-PER Washington E-PER Visited O England S-LOC PERSON: George Washington, LOCATION: England 6

Slide 7

Slide 7 text

•IOB (or IOB1): CoNLL 2003 のデータセットで使われている • 接頭辞 I を付与; NEが連続する場合,2番目以降のNEの開始単語に 接頭辞 B を付与(NERの場合にはほとんどBのprefixは出てこない) •BIO (or IOB2) • NEが連続するかどうかにかかわらずNEの開始単語に接頭辞 B を付与 •BIOES: BIOの拡張(今回の実験で採用) • BIO の拡張: NE の終端単語に接頭辞 E を付与 • ただし, NE が単一の単語である場合,その単語には接頭辞 S を付与 7 I-PER E-PER S-PER O S-LOC O B-PER I-PER I-PER B-PER O I-LOC O B-PER I-PER I-PER B-PER O I-LOC O I-PER IOB BIO BIOES 系列タグスキーマ

Slide 8

Slide 8 text

データセット •CoNLL 2003 データセット • ニュース記事に対して「人物」「組織」「場所」「その他」 の4種類のNEタグを付与 • 英語: Reuters Corpus(train, dev: 10日分の記事, test: 1日分の記事?) • ドイツ語: ECI Multilingual Text Corpus(train, dev, test: 1週間分の記事) •CoNLL 2003 ことはじめ 1. ロイターコーパスを入手する • http://trec.nist.gov/data/reuters/reuters.html 2. NEのアノテーションデータを入手する • https://www.clips.uantwerpen.be/conll2003/ner/ 3. NEタグ付与コーパスを生成する • 2で入手したデータの中に生成スクリプトが含まれている 8 https://www.clips.uantwerpen.be/conll2003/ner/

Slide 9

Slide 9 text

論文: Neural Architectures for Named Entity Recognition • 単語/文字 レベルの分散表 現をBi-LSTMを用いて エンコード • 条件付き確率場 (CRF) を 用いて遷移を考慮した タグ系列を予測 • CoNLL2003 (NERでよく使 われるベンチマーク タスク) でよい性能 9

Slide 10

Slide 10 text

単語の特徴量 の構成 •以下の特徴量を結合 • 単語の分散表現 • 文字の分散表現をBi-LSTMに 入力して得られる隠れ状態 10

Slide 11

Slide 11 text

Two types of Bi-LSTM • LSTM-CRF の内部の Bi-LSTM • 順方向LSTMと逆方向LSTM 各時刻の隠れ状態の結合 (chainer: NStepLSTMの出力の3番目) • Word encoder の内部の Bi-LSTM • 順方向LSTMと逆方向LSTM それぞれの最終時刻の隠れ状態の結合 (chainer: NStepLSTMの出力の1番目) 11 単語Bi-LSTM: 文字Bi-LSTM:

Slide 12

Slide 12 text

単語の特徴量の構 成 12 2016年のNAACLの段階でのstate-of-the-art • 現在は... TagLM [3]: 91.9, ELMo [4]: 92.2, BERT: 92.8... Lampleらの手法 (下2つは今回説明しなかったもの)

Slide 13

Slide 13 text

13

Slide 14

Slide 14 text

himkt/pyner 14

Slide 15

Slide 15 text

15 お世話になったライブラリ •ネットワークの記述: chainer/chainer •学習済み分散表現の取り扱い: RaRe-Technologies/gensim •モデルの評価: chakki-works/seqeval https://github.com/chainer/chainer https://github.com/RaRe-Technologies/gensim https://github.com/chakki-works/seqeval

Slide 16

Slide 16 text

Trainer Updater Iterator Extension Optimizer Dataset Model Trainerを使う場合に必要なモジュール see also: https://qiita.com/mitmul/items/1e35fba085eb07a92560#trainerを使ってみよう 16

Slide 17

Slide 17 text

使いまわせる Chainer モジュール 17 Trainer Updater Extension Optimizer Dataset Model Iterator

Slide 18

Slide 18 text

18 pyner が提供するモジュール • SequenceLabelingDataset • DatasetTransformer • NamedEntityEvaluator • (LearningRateDecayer) Transformer Trainer Updater Extension Optimizer Dataset Model Iterator

Slide 19

Slide 19 text

実験: 設定 •train, dev, test: CoNLL2003の分割に従う •パラメータ: 論文に従う • 単語・文字分散表現: 100 / 50 • 単語・文字レベルBiLSTMの次元: 2x100 / 2x25 • 勾配クリッピング: 5.0 • ドロップアウトのratio: 0.5 •ゼロ正規化(時間があれば後述): 有効 •学習済みの分散表現: Skip-N-Gram [5] を初期値として利用 19

Slide 20

Slide 20 text

実験: 比較条件 •単語の分散表現: ランダム or 学習済みの分散表現 •文字特徴: 使う or 使わない •ドロップアウト: 有効 or 無効 20

Slide 21

Slide 21 text

実験: 単語(ランダム初期化) 21

Slide 22

Slide 22 text

実験: 単語(ランダム初期化)+文字 22

Slide 23

Slide 23 text

実験: 単語(学習済み) 23

Slide 24

Slide 24 text

実験: 単語(学習済み)+文字 24

Slide 25

Slide 25 text

実験: 単語(学習済み) + Dropout 25

Slide 26

Slide 26 text

実験: 単語(学習済み)+文字+ドロップアウト 26

Slide 27

Slide 27 text

まとめ •Neural Architectures for Named Entity Recognition • 固有表現抽出のタスクにおいて人気のある手法 • BiLSTM-CRFによる高性能な抽出 • 文字ベース特徴を考慮 •実装 (PyNER) の公開 • Chainerによる実装 • 系列ラベリングタスクでTrainerを使うためのコンポーネントを提供 • 論文の性能が再現されることを確認 27

Slide 28

Slide 28 text

28 himkt/pyner

Slide 29

Slide 29 text

勾配のクリッピング • RNNは forward/backward を時系列方向に繰り返す • 系列長 T が大きくなるにつれて 勾配が爆発的に 大きく/小さく なることがある(勾配爆発) • 勾配のクリッピング: 勾配に対して上限値を与える • クリッピングには element-wise/norm の2通り存在するらしい • https://www.slideshare.net/tsubosaka/deeplearning-60419659 • 著者実装は Theano の grad_clip を呼んでいる; element-wise である • https://github.com/glample/tagger/blob/1c9618889fb89500cc5e70c45c27859b89d44449/optimization.py#L26 • https://github.com/Theano/theano/blob/d395439aec5a6ddde8ef5c266fd976412a5c5695/theano/gradient.py#L2187 29

Slide 30

Slide 30 text

ゼロ正規化 •テキスト中に出現する数字をすべて 0 に変換する • CoNLL2003データセットでは数字がたくさん出現する • これらを1つのシンボルにまとめてしまう • 語彙数: 246,679 -> 210,023 30 https://github.com/glample/tagger/blob/master/utils.py#L82

Slide 31

Slide 31 text

ちなみに: 処理を除いたり足したりすると? 31

Slide 32

Slide 32 text

One more thing 32

Slide 33

Slide 33 text

パラメータの初期化(論文) 33

Slide 34

Slide 34 text

パラメータの初期化(著者実装) https://github.com/glample/tagger/blob/master/utils.py#L44 34 Xavier initialization (=Glorot Normal) [7]

Slide 35

Slide 35 text

https://github.com/glample/tagger/blob/master/model.py#L281 35 CRFの重みの初期値 https://github.com/chainer/chainer/blob/master/chainer/links/loss/crf1d.py (until: 2018/12) (https://github.com/chainer/chainer/pull/5807 で修正完了)

Slide 36

Slide 36 text

36 • いろいろな初期化方法が使われている(Uniformベースが多い) • [-sqrt(6/(in+out)), sqrt(6/(in+out))] (Xavier initialization [7]) • Lample+ [1]: https://github.com/glample/tagger/blob/master/utils.py#L52 • [-sqrt(3/dim), sqrt(3/dim)] (LeCun initialization [8]) • Ma+ [2]: https://github.com/XuezheMax/NeuroNLP/blob/master/sequence_labeling.py#L161 • Liu+ [6]: https://github.com/LiyuanLucasLiu/LM-LSTM-CRF/blob/master/model/utils.py#L793 • (論文ではGlorotを引用している) • word2vec/word2vec: Uniform [-(0.5/dim), (0.5/dim)] • https://github.com/tmikolov/word2vec/blob/master/word2vec.c#L365 • facebookresearch/fastText: Uniform [-(1/dim), (1/dim)] • https://github.com/facebookresearch/fastText/blob/master/src/fasttext.cc#L734 • Chainer: Xavier initialization (= Glorot Normal; not Uniform!) がデフォルト) パラメータの初期化方法

Slide 37

Slide 37 text

おまけ: パラメータをすべて論文通りに初期化 37

Slide 38

Slide 38 text

One more thing 38

Slide 39

Slide 39 text

Recent cool optimizer: AdaBound [9] •Adam に対して,学習率の上界・下界を与える •学習が進むにつれて,SGD (w/ Momentum) に近づいていく (chainer: https://github.com/chainer/chainer/pull/6388)

Slide 40

Slide 40 text

[1] Neural Architectures for Named Entity Recognition. Lample et al. NAACL2016. [2] End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF. Ma et al. ACL2016. [3] Semi-supervised sequence tagging with bidirectional language models. Peters et al. ACL2017. [4] Deep contextualized word representations. Peters et al. NAACL2017. [5] Empower Sequence Labeling with Task-Aware Neural Language Model. Liu et al. AAAI2018 [6] Not all contexts are created equal: Better word representations with variable attention. Ling et al. EMNLP2016 [7] Understanding the difficulty of training deep feedforward neural networks. Glorot et al. AISTATS2010. [8] Efficient Backprop. LeCun et al. Neural Network: Tricks of the Trade. [9] Adaptive Gradient Methods with Dynamic Bound of Learning Rate. Luo et al. ICLR2019. 40