📚
自然言語処理入門
自然言語処理(Natural Language Processing: NLP)入門
目的
- 非エンジニアの人でも何となく自然言語処理の雰囲気を感じ取ってもらう
- お手軽に使えるツールの存在を知ってもらう
前置き
- 自然言語とは
- 人間が意思疎通のために日常的に用いる言語であり、文化的背景を持っておのずから発展してきた言語
- 人工言語(プログラミング言語、手話)と対比される
- https://ja.wikipedia.org/wiki/自然言語
- NLP100本ノックの紹介
NLP100本ノック
- 自然言語処理を体系的に学べる100個の演習
- 東工大岡崎研の勉強会で使われている
- 他のNLP系の研究室でも新入生の勉強用に使われる
- 2020年にアプデされてニューラル多めになった
形態素解析
- 形態素とは?
- 言語で意味を持つ最小単位
- もっと細かい単位だと音素とか(意味は持たない)
- 吾輩は猫である。→ 吾輩 / は / 猫 / で / ある / 。
- 形態素解析器
- MeCab
- 辞書:IPADic(IPAコーパス)、JumanDic(京大コーパス)、Unidic(BCCWJコーパス、細かい)、Neologd(ウェブクロール、現代語向き)
- 文を入力すると以下のようなフォーマットに分割してくれる
係り受け解析
- 係り受けとは?
- 言葉と言葉の関係性
- 以下のような有効グラフで表せる
- 係り受け解析器
- CaboCha/南瓜
- 毎日新聞記事データを使ってSVMを学習済み
単語ベクトル
- 単語ベクトルとは?
- イメージ
- 米国 = アメリカ
- 王様 - 男 + 女 = 女王
- 単語ベクトルの種類
- one-hot
- n次元のベクトルのうち、当てはまる1箇所にだけ数値が入るようなベクトルをone-hot vectorという
- 1-gramイメージ図
- n-gram (2-gram)イメージ図
- word2vec系
- word2vec
- 単語を300次元くらいのベクトルに変換する
- 学習では、Variational Auto Encoderを使用(Skip-gram, CBOW)
- Doc2Vec
- 単語ではなく文・文書をベクトル化する
- 記事間の類似度を測定するのとかに使える
- Universal Sentence Encoder
- 多言語を一つのモデルでベクトル化
- 埋め込みベクトル(embedding)
- ニューラルネットの最終層付近のベクトルを引っ張ってきて使用する
- 実際は可変長なので下図はイメージ
ニューラルネット
- RNN (Long Short Term Memory: LSTM)
- ニューラル初期に使用された手法
- 可変長の入力に対応できる
- BERT (Transformer)
- LSTMだと上図の右端で左側の情報が欠落してしまうという弱点がある
- Attention機構というのを使用し、前の層の全ての情報を読めるようにした
- Transformerのわかりやすい記事
- BERTは2018年に登場し、それまでのモデルを大幅に上回った
- 近年の研究はこれをどう改良するかばかり(3年で引用数16,000以上)
- 最近では画像処理もTransformerで良いのでは?という流れ
- そして世は混沌の時代へ(all you needではないだけで必要ではあるらし)
まとめ
- 以下のツールを覚えて帰って欲しい
- MeCab: 日本語を単語(形態素)区切りにできる
- CaboCha: 日本語の係り受け解析ができる
- word2vec: 単語の足し引きができる
- NLP100本ノックはいいぞ
- Python入門にも良い
- NLPのアルゴリズム実装ならNLPチュートリアルも良い