自然言語処理という単語をご存知でしょうか?あまりなじみのないように思えるこの単語ですが、翻訳やマーケティングの分野や、身近で言うとSiriやAlexa、検索エンジンなどで使われています。この技術を自分で体験してみたいと思って勉強しました。その流れの1部をまとめようと思います。
pythonコードを載せていますが、単純にそういう技術があるんだ、という読み物的感覚でも見て頂ければ幸いです。
加えて、自然言語処理を勉強してみたいけど、何から学べばいいかわからないという人向けにもなっていると思います。流れだけでも参考にしてみてください。
勉強のハードルを下げるためにサムネ用画像を適当にしてみました…逆効果ですかね?
はじめに
自然言語処理=言語をコンピュータで解析すること
自然言語処理でできることは、
- テキストデータの解析・分類
- 翻訳
- 対話
- 感情分析
- 検索エンジン
などがある。
人間には簡単に読めている文章でも、コンピュータにとっては文字の意味や文脈を捉えることは困難なことである。といったことを様々な記事で読んだり、思ったりしたことはないでしょうか? だからこそ、研究されている分野であり、天才たちが日々頭を悩ませている分野の1つであるのでしょうか。
そのため、「自然言語処理=難しい」と思い、やめようと思ったことがある人も多いのではないでしょうか?やってみたいと思う気持ちより、難しい印象が勝ってしまう。自分自身も毛嫌いしていたため、なかなか手を出せずにいました…。 そのため、自分が学んだ内容の流れをまとめてみます。
加えて、自分が再確認する(備忘録の活用)のための記事でもあります(笑)。
自然言語処理を自分が学んだ流れ
- テキストの前処理
- トピックモデル
- word2vecなどの単語分散系
- RNNやLSTM、CNNなどのNN系
- transformer
- bert関連
テキストの前処理
自然言語処理では前処理は必須である。
ただ単に羅列した文章をコンピュータが読み取ることはほぼ不可能である。加えて、ノイズや大文字小文字で別の文字判定されてしまうことも・・・。
そのため、前処理・特徴量作製することでコンピュータが読み取れる形にし、学習をおこなう。
この記事で英文に対する前処理について学んでいます。
- ノイズ除去・クリーニング処理
- アルファベット以外をスペースに置き換え
- 単語長が短いものものは削除(中身による)
- 形態素解析
- ステミング
- stopword除去
など、様々な手法があり、文章のデータセットによって組み合わせて使う必要がある。簡単なコードであれば上記記事でも書いてあるので、ぜひ見てみてください。
トピックモデル
※画像…大きすぎましたね
「文書が潜在的なトピック(話題)」から生成される」という考え方がベースになっている古典的な統計モデル。
※文書内の各単語はあるトピックが持つ確率分布(トピック分布)に従って出現すると仮定
トピックモデルを用いて文章を特徴量に振り分けたりし、分類を行うことが可能になったり、文章を何個かのグループに分け、どのような単語が大事なのか?などを調べたりすることが可能になる。
この2記事ではトピックモデルを活用するため、pythonコードを作ったり、wordcloudにしてみたりしています。
この記事ではテキスト分類まで行っています。良かったら見てみてください。
word2vecなどの単語分散系
www.scielo.org.mx
より一部引用、および勉強させていただきました。
単語の分散表現とは、、、
- 単語を固定長のベクトルで表現することを「単語の分散表現」と呼びます。
- 単語をベクトルで表現することができれば単語の意味を定量的に把握することができるため、様々な処理に応用することができます。
推論ベースにおける主要な考え方
- 「単語の意味は周囲の単語によって形成される」というアイデアに基づく分布仮説が採用されている
代表: Word2Vec
自然言語処理をやってみようとするとほぼほぼ出てくるこのword2vec…NNなどでうまく活用したりします。そのためにはまず、Word2Vec自体を勉強した方がいいのではと思いまとめています。
RNNやLSTM、CNNなどのNN系
代表例のLSTMの図
RNN
「再帰型ニューラルネットワーク」と呼ばるもので、時系列データや音声データなどの過去の情報が大事になってくるようなデータに強力なモデルとなっている。
過去に入力された単語列から次に来る単語を予測するなどのパターンを認識するように設計されたニューラルネットワークのモデルともいえる。
LSTM
時系列データを解析・分析する際にRNNで十分なのでは?と思ったりしたことはないでしょうか?しかし、RNNには欠点があります。
勾配消失問題
→誤差を逆伝播する際、過去に遡るにつれて勾配が消えていってしまうという問題が発生
時系列を扱う上での固有問題-重み衝突
→NNの重みは、重要なものは大きく、不必要なものを小さくするべきである。
つまり
RNNは、入出力を等しく記憶しているために、長期的な依存性を考慮することを苦手としているモデルとなっている。
↓
LSTMは重要なことを記憶し、いらんのは忘れることができるため、RNNよりも長期の依存性を考慮できるモデルとなっている。
CNN
- 日本語では「畳み込みニューラルネットワーク」
- 通常のNeural NetworkにConvolutional層を追加したもの
- 主に画像認識の分野において代表的なNN
「畳み込み層」「プーリング層」といった特殊な機能を備えた層を積み重ねて構成されている
画像に強いモデルではあるが、しばしば自然言語処理タスクの1部に採用されたりもしているため、勉強してみました。
NNまとめ
3種類のNNを自然言語処理のテキスト分類に活用してみた記事をまとめてみました。単純にRNNやLSTM、CNNの参考にもなると思います。また、word2vecを埋め込みで活用していたりもします。
transformer
attention機構
Transformerを知りたいと思った際に立ちはだかるAttention機構について色々調べて自分なりにまとめてみました。
Attention 機構は、深層学習の最近の根幹部分とも言える仕組みだと思われます。特に自然言語処理などでよく使われると思われる方もいらっしゃるかもしれません。いや、自分はそう思っていました。ですが、入力されたデータのどこに注目すべきか・重要視すべきかを考える仕組みであり、t画像認識や時系列データにも応用されたりもしています。
Transformer
RNN系NNは今の時刻の隠れ層の出力が次の時刻の隠れ層に影響するような構造をしているため、前の状態を受け取らなければいけない
→計算の並列化は本質的に難しく、計算が遅いのが最もクリティカルな課題。
→計算効率が低く、たくさんのデータで学習しにくいのが問題よね
+
先頭の影響が次第に薄れるため、入力が長いと離れた単語間の関係が捉えきれない
↓
CNNって使えそうじゃない?いや無理か、、、
CNN等はエンコーダとしては優れているが、時間情報を埋め込むことは不可能である。単語の並びが無視され、翻訳などの自然言語処理系では使用に対して課題が多い。
↓
周囲の単語に対する重み付けをする機構が必要
↓
Attention機構の登場とともに、これ使えるな
↓
新たなニューラルネットワーク構造として、2017年にトランスフォーマー(Transformer)という、Attention機構をベースとした構造
Bert等の最新の高性能モデルにもつながる大事なモデルであるらしいため、勉強してみました。
BERT
最前線の自然言語処理タスクで用いられるBERTについて学びたいと思い、自分なりに解釈してまとめて記事です。
BERTは、自然言語処理の事前学習用の Transformer ベースの機械学習手法、Google が2018年に公開した論文で、現在、Google は BERT を活用して、ユーザー検索の理解のため、検索エンジンの向上のために活用しているそうです。
まとめ
BERTにも様々な種類があり、まだまだ勉強することはたくさんあります。加えて技術の進歩がすさまじく、もう何を学べばいいのかわかりません状態になっています(笑)。少しずついろんな技術に触れ、視野を広げていきたいと思います。
コメント