前回は「画像認識」の研究を中心に学習してきました。
今回からは、画像認識と同様に研究が盛んな分野である「自然言語処理」について学習していきます。
Google翻訳やYouTubeの同時翻訳などは、「自然言語処理」の研究が進んだことによって可能になった技術です。
しかもその精度は日々進化し続けています。
AIを語る上では避けては通れない部分でもあるでしょう。
このブログは底辺フリーランサーの筆者がG検定を取得して人生を変えようと努力する日記です。
目次
自然言語処理の概要
自然言語処理(Natural Language Processing:NLP)は、人間が日常的に用いる言語をコンピューターで処理する技術です。
しかし、コンピューターは人間の様に言語を理解して、会話ができるわけではありません。
そのため、様々な要素に分解してコンピューター処理させるのです。
主な解析方法としては以下の4つがあります。
まずは簡単に4つの解析方法の例文を紹介して、後に詳しく解説します。
以下の4つの概要を把握して詳しい解説で分からなくなったら、何度もここに戻りましょう。
「彼は筋トレをします」という例文を元に、解析方法別に文節していきます。
形態素分析(品詞付け):彼/は/筋トレ/を/し/ます
構文分析(構造化):彼は/筋トレをします
意味解析(意味付け):筋トレ=動作対象、します=現在の動作
文脈解析(文章全体の意味付け):彼は筋トレをします=彼は佐藤さんです
形態素解析
形態素解析とは、自然言語が意味を持っている表現要素の最小単位である「形態素」まで分割して解析する方法です。
国語の授業では「品詞に分ける」と習ったことと同じです。
例文は先述した通りで、辞書に書かれている単語の情報と照らし合せながら形態素の品詞の種類などを判別して解析します。
形態素分析で分割した単語を活用するためには、表記が違っている場合に、表記ゆれの統一や不要な文字の削除を行います。
このことを「データクレンジング」と呼びます。
また、「BOW(bag-of-words)」などの手法によってデータをベクトル化します。
文章を分割した後に、それぞれの重要度を評価する場合に「TD-IDF」なども用います。
構文解析
構文分析とは、定義に従って形態素間の関連付けを解析する手法の事です。
例文は先述の通りです。
形態素解析によって最小単位にまで品詞を分解後、文章の主部と述部に分けて「句構造」や「係り受け構造」を推定する事が可能になります。
構文解析の解析器
日本語の構文的依存関係構造解析器としては、大学の研究者らが考案した「CaboCha」や「KNP」などがあります。
CaboCha:アルゴリズムとして、SVMやCRF(Conditional Random Fields:条件付確率場)といった「線形分類器」が使用されます。
KNP:コスト最小法などのアプローチ。海外の構文的依存関係構造解析器の代表で「Stanford Parser」などがあります。
線形分類器のアプローチとして、FFNN(Feedforward Neural Network)やRNNなどのディープラーニングのネットワークを適用する例もあります。
効率的な探索方法としては、CYK(Cocke-Younger-Kasami)法やチャート法などの「動的計画法」「最優先探索」「A探索(エースター)」などのヒューリスティックな探索手法もあります。
意味解析
意味解析とは、形態素解析と構文解析を行った後に、文が表す意味構造を認識するために意味解析を行います。
意味解析は単語と単語の関連性を注視します。
文法として正しいかだけではなく、意味が通じる正しい文章であるかどうかも解析します。
例えば、「高い山と海が美しい」という文章がある場合は、「高い」が「海」にかかる形態素の関連は低いため、「高い」が「山」にだけかかることを識別できます。
意味解析では、「感情解析(Sentiment Analysis)」「含意関係解析(Recognizing Textual Entailment:RTE)」も可能です。
感情解析(Sentiment Analysis)
感情解析(Sentiment Analysis)とは、文が肯定的(ポジティブ)であるのか否定的(ネガティブ)であるかの分析をする技術です。
テキストマイニング機能を使って、コメントの内容を「肯定的・中立的・否定的」の3パターンに分類するという使い方が主流です。
感情解析(Sentiment Analysis)は意味解析の評価型ワークショップである「SemEval」でのタスクにも採用されて、多くの手法が提案されています。
SNSなどの解析にも使用されています。
含意関係解析(Recognizing Textual Entailment:RTE)
含意関係解析(Recognizing Textual Entailment:RTE)は、ある2つの文があった場合に、一方の文が他方の文の意味を含むかを解析する問題です。
例えば、「イチローがホームランを打った」という文が成立する時に、「イチローが野球選手である」という文も成立する関係のことです。
人間にとっては常識に思えるかもしれませんが、コンピューターはこういった解析モデルを取り込むことも大事です。
文脈解析
文脈解析は単体の文だけではなく、文章全体の意味を解析する自然言語の処理です。
文脈解析の方法には大きく分けて2つあります。
それぞれ「照応解析」「談話構造解析」と呼びます。
照応解析
照応解析は、文章内に存在している代名詞などの照応表現が示す場所を推定する手法です。
自然言語の中には「コレ」「アレ」といった代名詞が多く含まれます。
照応解析は、これらの代名詞が指す名詞を推定します。
談話構造解析
談話構造解析は、文章内の文と文の間の意味的構造を明らかにする解析手法です。
2つの文のどちらが理由文なのか推定します。
分散表現
自然言語処理の研究において、「分散表現(Word Embedding)」は必ず覚えなければいけない手法です。
分散表現とは、単語の意味をベクトルで表現することです。
「埋め込みモデル(embedding models)」とも呼びます。
色を表現する際には、RGB(Red/Green/Blue)の3次元で表現します。
この表現方法だと「黄色」は(255.255.0)と表現します。
この表現方法によって黄色は、赤色と緑色との相関が高いことが理解できます。
単語の意味においても定量的なベクトル表現をする研究は行われています。
しかし、自然言語の分散表現には、大量の計算が必要であるという問題がありました。
なぜなら、統計的なカウントベースの手法では、「コーパス」と呼ばれる自然言語処理のための大量のテキストデータを扱う際にコーパス全体の統計データを利用して、「得意値分解:SVD(Singular Value Decomposition)」等の処理を1回で行い分散表現をします。
つまり、大量の学習データを一度にまとめて処理する必要がありました。
この問題を解消するためにニューラルネットワークを用いた推論ベースの手法を用いることで、少量(ミニバッチ)の学習サンプルをみながら重みをくり返し更新することで、逐次的に学習することが可能となりました。
自然言語処理の研究では、推論ベースの手法に対してディープラーニングを用いることが、言語の分散表現の学習の成功でした。
単語の分散表現は一般的に高次元で表現されますが、ディープラーニングを活用し、低次元の密なベクトルで表現する手法を活用することが可能となります。
Word2Vec
「Word2Vec」は、Googleのトーマス・ミコロフが提案したディープラーニングを用いた分散表現の代表的なモデルです。
Word2Vecは、文章中の単語を記号として捉えて、文章を記号の集まりとすることで、記号のベクトル表現をします。
このことで、ベクトル間の距離や関係としての単語の意味が表現可能になります。
例えば、「王様」-「男」+「女」=「女王」という関係性も表現可能です。
Word2Vecには、2つの手法があり、それぞれ「スキップグラム(Skip-Gram)」「CBOW(Continuous Bag-of-Words)」です。
スキップグラム(Skip-Gram)
スキップグラム(Skip-Gram)は、ある単語から周辺の単語を予測するモデル。
CBOW(Continuous Bag-of-Words)
CBOW(Continuous Bag-of-Words)は、周辺の単語からある単語を予測するモデル。
Word2Vecの後継モデルとして、「fastText」「ELMo(Embedding Language Modeling)」などがあります。
トピックモデル
トピックモデルとは、自然言語処理のアプロ―チであり、文章中のトピックやテーマを抽出するモデルです。
文章がどういった内容であるか、文書の抽象度を上げることで概念を特定させます。
トピックモデルには主に3つの手法があります。
潜在的意味解析
確率的潜在意味解析
潜在的ディリクレ配分法
それぞれの方法について詳しく解説していきます。
潜在的意味解析
潜在的意味解析は、トピックモデルを代表する手法です。
特異値分解を用いた潜在的意味解析:LSI(Latent Semantic Index)やLSA(Latent Semantic Analysis)があります。
潜在的意味解析は、文章の類似性を見出すために、同じ意味を持つ単語をグルーピングして文章の情報量を凝縮します。
確率的潜在意味解析
確率的潜在意味解析(PLSA:Probabilistic Latent Semantic Analysis)は、潜在的意味解析のLSAを確率的に発展させたアルゴリズムです。
LSAは1つの文章に1つのトピックしか持つことができないのに対して、PLSAは複数のトピックに割り当てられていることを確率的に表現を可能にします。
潜在的ディリクレ配分法
潜在的ディリクレ配分法(LDA:Latent Dirichiet Allocation)とは、確率的潜在意味解析(PLSA:Probabilistic Latent Semantic Analysis)の応用手法です。
潜在的ディリクレ配分法(LDA:Latent Dirichiet Allocation)は、ディリクレ分布という確率分布を仮定して確率を生成します。
このことによって過学習を防ぐことが可能になります。
機械翻訳
自然言語処理の生成技術の代表として「機械翻訳」もあげられます。
Google翻訳などように、異なる言語の翻訳の手法も日々成長しています。
機械翻訳の手法は主に3つの手法に分けられていて、進化し古い手法が新しい手法へと移り変わっています。
ルールベース機械翻訳
統計的機械翻訳
ニューラル機械翻訳
それぞれの手法を詳しく解説します。
ルールベース機械翻訳(RMT:Rule Based Machine Translation)
ルールベース機械翻訳(RMT:Rule Based Machine Translation)とは、登録してあるルール(文法)を適用する事で、原文を分析し、訳文を出力する機械翻訳の方法であり、古くからある翻訳方法でもあります。
しかし、ルールベース機械翻訳(RMT:Rule Based Machine Translation)には、大量のルール登録が必要であることが問題となり、「統計的機械翻訳(SMT:Statistical Machine Translation)」へと変更されていきます。
統計的機械翻訳SMT:Statistical Machine Translation)
統計的機械翻訳SMT:Statistical Machine Translation)とは、n-gramに代表される機械翻訳手法です。
コンピューターに学習用の「対訳文体(パラレルコーパス)」を与えて、統計モデルを学習させることで訳文を出力させます。
統計的機械翻訳SMT:Statistical Machine Translation)には大量のコーパスが必要ですが、学習データさえあれば低コストで高性能な翻訳機を作ることが可能になります。
しかし、この統計的機械翻訳SMT:Statistical Machine Translation)もニューラル機械翻訳に置き換わりつつあります。
ニューラル機械翻訳(NMT:Neural Machine Translation)
ニューラル機械翻訳(NMT:Neural Machine Translation)とは、ニューラル言語モデルのリカレントニューラルネットワーク言語モデル(RNNLM:Recurrent Neural Network Language Model)に代表される機械翻訳手法です。
リカレントニューラルネットワーク言語モデル(RNNLM:Recurrent Neural Network Language Model)は、RNNを内部状態に採用している言語モデルです。
例えば、エンコーダ・デコーダモデルがあります。
機械翻訳で日本語から英語に翻訳する場合には、エンコーダが日本語の文を読み込んでベクトル化し、そのベクトルに対してデコーダを通して英文を作成します。
機械翻訳の生成モデルとして、2014年に発表された系列変換モデル(seq2seq:Sequence-to-Sequence)があります。
系列変換モデル(seq2seq:Sequence-to-Sequence)によって、時系列データを別の時系列データへ変換できるようになります。
注意機構(Attention Mechanism)
系列変換モデル(seq2seq:Sequence-to-Sequence)はデコーダのインプットにかかわらず、エンコーダの出力が一定の大きさのベクトルになってしまい、長文の翻訳精度が向上しないのが問題点でした。
この問題を解消するために、「注意機構(Attention Mechanism)」というメカニズムを用いて、エンコーダの固定長ベクトルの制約を無くし、人間と同じように必要な情報だけに注意を向けさせることができるようになりました。
また、エンコーダとデコーダの層を深くすることで、表現力も高められます。
エンコーダとデコーダの層を深くする際に「スキップコネクション」という技術を用いることで、層をまたぐ接続が可能となり、勾配消失を防ぎ、学習率の向上が期待できます。
注意機構(Attention Mechanism)の応用事例
Attentionの応用事例として、2016年にGoogleが発表したGNMT(Google Neural Machine Translation)があります。
GNMT(Google Neural Machine Translation)は、エンコーダとデコーダの機械翻訳モデルにLSTMやスキップコネクションを取り入れています。
複数のGPUを用いて分散学習を行います。
多くの人が使用しているGoogle翻訳は、GNMT(Google Neural Machine Translation)を取り入れてアップデートすることで、更なる高精度の翻訳を提供する事が出来るようになりました。
Transformer
系列変換モデル(seq2seq:Sequence-to-Sequence)やGNMT(Google Neural Machine Translation)には、RNNが利用されていますが、RNNには並列化処理の欠点が存在します。
RNNは、前時刻の算出結果を用いて逐次的に処理を行うために、時系列での並立は難しく、GPUでの並列演算との親和性が高くない問題があります。
「Transformer」は、RNNを用いずに処理する手法です。
Transformerは、注意機構(Attention Mechanism)によって構成されています。
1つの時系列データに対してAttentionすることで、各要素が他の要素とどのように関連しているのかを見ることを可能にします。
このことをSelf-Attentionと呼びます。
Attentionの基本は、クエリ(query)とメモリ(key,value)であり、クエリによって必要な情報(memory)を抽出します。
Attentionの性能向上を図るために、マルチヘッドアテンション(Muti-Head Attention)と呼ばれる並列化処理などを行う手法もあります。
ちなみに、Transformer向けに自然言語処理のデータセットを使ってマルチタスク学習させて得られたエンコーダである「ユニバーサルセンテンスエンコーダ」は、TensorFlow Hubなどに公開されていて、誰でも利用可能です。
BERT(Bidirectional Encoder Representations from Transformers)
BERT(Bidirectional Encoder Representations from Transformers)は、2018年にGoogleが公開したTransformerを活用した、自然言語処理モデルです。
BERT(Bidirectional Encoder Representations from Transformers)は、マスク化モデル(Masked Language Model)や次文予測(Next Sentence Prediction)というアイデアが採用されています。
学習済みの汎用言語モデルであり、自然言語処理の各種タスクで最高のスコアを出して有名になりました。
BERT(Bidirectional Encoder Representations from Transformers)は、事前学習のタスクとして、次の単語を予測するのではなくランダムにマスクされた単語を周辺情報から予測する事を特徴とします。
MT-DNN(Multi-Task Deep Neural Networks)
MT-DNN(Multi-Task Deep Neural Networks)は、2019年にMicrosoftが公表した自然言語処理モデルです。
GPT(Generative Pre-Training)
GPT(Generative Pre-Training)は、イーロン・マスクが共同会長を務めている人工知能研究企業(Open AI)が発表しています。
GPT(Generative Pre-Training)は日々進化していて、GPT-2も既に発表されています。
GPT-2はリアルなフェイクニュースなどの生成もできる恐れがあり、オープンソース化はされていません。
GPGPU(GPU汎用計算:General-purpose computing on graphics processing units)
ディープラーニングを使った自然言語処理の実装の工夫として、画像認識と異なる工夫もあります。
主な例としては、GPUの演算資源を画像処理以外の目的に応用するGPGPU(GPU汎用計算:General-purpose computing on graphics processing units)と呼ばれる技術が利用されています。
これまでの自然言語処理の機械学習の場合は、高次元ベクトルと扱うため、必ずしもGPUとの相性がいいわけではなかったのですが、ディープラーニングを使用すると低次元のベクトルになるため相性が良くなりました。
ライブラリ
画像認識と同様に自然言語処理の分野でもライブラリが提供されています。主なライブラリは以下の通りです。
『日本語の形態解析器』
MeCab
JUMAN
『構文解析器』
CaboCha
KNP
『その他』
NLTK(Natural Language Toolkit)
spaCy
OpenNLP
Stanford CoreNLP
GiNZA
今回のテスト結果
自然言語処理の学習は専門用語ばかりが目立ち、途中で何の話をしているのか分からなくなります。
この分野は、「どのような目的を持って」研究と開発が続けられていて、「どのような問題」に突き当たったか、そして「どのように解決」したかを概要として知っておくと全体的な把握が可能になります。
という事で今回のテスト結果の発表です。
・「ディープラーニング G検定 要点整理テキスト&問題集」
第7章 ディープラーニングの研究分野
16問中7問正解(正答率43%)
⇒自然言語処理に関しては新しい手法と古い手法の移り変わりと、どこがどのように変化したのかを意識して学習していくと分かりやすいです。
とは言え、もう少し勉強します。
次回は、「音声処理」と「強化学習」について学んでいきます。
これまでの学習についてはこちらを参考にしてください。