この記事について
G検定対策で自然言語処理の概要をまとめます。
自然言語処理とは
自然言語処理とは、人間が日常的に使用している言語をコンピュータで処理させる技術です。
自然言語処理のフロー
自然言語処理の主なフローは以下のようになります。
主な技術を併せて挙げます。
- 文書を単語などの最小単位に分ける(
形態素解析
) - データのクレンジングを行い、不要な文字列を取り除く
- データをベクトルの形式に変換する(
Bag-of-Words
) - 単語の重要度を評価する(
TF-IDF
)
形態素解析
言語で意味を持つ最小単位を形態素
と呼びます。
形態素の品詞を判定することを形態素解析
と言います。
形態素解析のイメージはこのような形になります。また、形態素解析は様々な解析エンジンがあります。
BoW(Bag-of-Words)
Bag of WordsはBoW
と省略されます。
ブレス・オブ・ザ・ワイルドではないです。
BoWは単語を数値に割り当て、one-hot表現
に変換します。
例として、以下の3つの文章を形態素解析します。
私はリンゴが好き
私はバナナが嫌い
私はみかんが好き
以下のような形態素が出きます。
私/は/リンゴ/バナナ/みかん/が/好き/嫌い
8個の形態素に番号を振ります。
0:私 1:は 2:リンゴ 3:バナナ 4:みかん 5:が 6:好き 7:嫌い
それぞれの単語をone-hot表現に変換するとこのような形になります。
私:[1,0,0,0,0,0,0,0]
は:[0,1,0,0,0,0,0,0]
リンゴ:[0,0,1,0,0,0,0,0]
...
文章にごとにベクトルを足し合わせます。
私はリンゴが好き
[1,1,1,0,0,1,1,0]
私はバナナが嫌い
[1,1,0,1,0,1,0,1]
私はみかんが好き
[1,1,0,0,1,1,1,0]
Word2Vec
BoWと同様に単語をベクトル化する手法です。
BoWとの違いは周辺語との関連性を考慮
できる点です。
例えば、ベクトル同士の足し算/引き算を行うと、
「王様」-「男」+「女」=「女王」
となることは広く知られています。
Word2VecにはCBOW
とSkip-gram
という2つのアーキテクチャが存在します。
両者の違いとして、CBOWは周辺単語から中心単語を予測
し、高速に学習
することが可能です。
逆に、Skip-gramは中心誤から周辺単語を予測
し、高い精度の学習
が可能です。
fasttext
名前の通り、Word2Vecをより高速にした手法をfasttext
と呼びます。
Word2Vecとの違いとして、Subword分割
という手法を採用しています。
Subword分割の考え方は類似している単語は関連性を高く学習する、というものです。
ELMo
ELMo
はLSTMを多層につなぎ合わせることで、文脈を考慮して単語表現を獲得
します。
例えば、Bankには「銀行」と「土手」という意味があります。
ELMoは文脈によってこの意味を解釈します。
BERT
BRET
は2018年
にGoogle
からArxiv
へ論文を公開しました。
(BRETと来たらGoogleということは覚えておくと良いです)
BRETの特徴として、Attentionという機構を用いています。
また、一部の単語をマスキング
して学習することも挙げられます。
Attentionの機構を簡潔にまとめます。
- 検索queryに一致するkeyを牽引する
- memoryから該当するvalueを取得する
Attentionについてはかなりざっくりした説明ですが、詳しくはこちらの記事で紹介されています。
XLNet
XLNet
はBERTの改良版として発表されました。
BERTではマスキングを行うことで学習を行いましたが、実際にタスクを解く場合はマスキングを行いません。
これがノイズになってしまいます。
XLNetはこれを回避するため、自己回帰言語モデルを採用しています。
また、自己回帰言語モデルの弱点である双方向の情報を同時に扱えない点を克服するため、単語の予測順序を入れ替える手法を用いています。
TF-IDF
TF-IDFは頻度が少ない単語が何度も出てきた場合、その単語の重要度を上げる
という概念です。
文章において、ある単語がどのくらい出現したのか考える概念であるTFと単語の頻度の低さ(どのくらいレアであるか)を表すIDFを組み合わせた概念です。
参考
- https://udemy.benesse.co.jp/ai/morphological-analysis.html
- https://www.pytry3g.com/entry/2018/03/21/181514
- https://qiita.com/halhorn/items/c91497522be27bde17ce
- https://mc.ai/bert%E3%82%92%E8%B6%85%E3%81%88%E3%81%9Fxlnet%E3%81%AE%E7%B4%B9%E4%BB%8B/
- https://dev.classmethod.jp/machine-learning/yoshim_2017ad_tfidf_1-2/
- https://deeplearning.sakura.ne.jp/