自然言語処理の最近の記事

目次

  • 機械翻訳とは
  • 機械翻訳の手法
  • 現在の機械翻訳の欠点
  • 欠点が改善されると
  • 今後の展望


機械翻訳とは

機械翻訳という言葉を理解するために2つ言葉を定義する。

系列 : 記号の列のことで自然言語処理の世界だと文を構成する単語の列になる。
系列変換モデル : 系列を受け取り、それを別の系列に変換する際の確率をモデル化したもの。系列変換モデルはseq2-seqモデルとも呼ばれている。

この2つの言葉から機械翻訳は、ある言語の文章(系列)を別の言語の文章(系列)に変換する方法論の総称のことをいう。例えば、日本語の文章という系列を英語の文章という別の系列に変えることである。特に、系列変換モデルの考えを使った機械翻訳をニューラル機械翻訳と呼ぶことがある。


機械翻訳の手法

歴史的には、以下のような翻訳方法がある。


ルールベース翻訳

登録済みのルールを適応することで原文を分析し、訳文を出力する機械翻訳の方法。ここでいう「ルール」は、各言語の「文法」に置き換えられる。定めたルールに則っていなければ翻訳ができないが、則ってさえいればしっかりと翻訳可能である。現在は、旧時代的な機械翻訳方法として認識されている。 ルールに基づく機械翻訳の基本になるのはルールである。ルールによる構文解析の仕組みを、ツリーによる機械翻訳の例を挙げる。

まず以下のルール

NP → ART N (名詞句 は 冠詞 名詞 で構成される)
VP → V NP (動詞句 は 動詞 名詞句 で構成される)
S → NP VP (文 は 名詞句 動詞句 で構成される)


を使って以下の英文を解析してみる。

A client sent the form


ルールベース機械翻訳では、辞書もルールとして扱う。理論を考える場合だけでなく、実用的な機械翻訳システムを設計する場合にも辞書をルールとして扱うほうが良いとされている。ここでは、辞書として以下のルールも用意する。

ART → a (冠詞 は a で構成される)
ART → the (冠詞 は the で構成される)
N → client (名詞 は client で構成される)
N → form (名詞 は form で構成される)
V → sent (動詞 は sent で構成される)


まず、原文にある単語それぞれの品詞を判定する。

ART - a
N - client
V - sent
ART - the
N - form


次に、当てはまるルールを探して順次適用する。左端のARTとNに

NP → ART N (名詞句 は 冠詞 名詞 で構成される)


が当てはまるため、左端のARTとNからNPを作れる。

MT_01.png


同様に、右端のARTとNからもNPを作れる。

MT_02.png


次に、

VP → V NP (動詞句 は 動詞 名詞句 で構成される)


を当てはめることができ、VとNPからVPを作れる。

MT_03.png


最後に以下のルール

S → NP VP (文 は 名詞句 動詞句 で構成される)


が当てはまるため、NPとVPからSを作れる。

MT_04-1.png


これ以上適用できるルールはなく、最終的な目標としていた文 (S) を検出できたので、これで解析成功である。最終的に、原文の構造を表すツリーを作ることができる。


用例ベース翻訳

入力文の各部分に対して類似した用例を選択し、それを組み合わせて翻訳を行う。
この方法はほかの方法よりも自然な翻訳文の生成が可能であると考えられている。理由としては、人間も翻訳する際に様々な用例から翻訳をしているからである。また、用例の追加により容易にシ ステムを改善可能である。

しかし、用例ベース翻訳は入力文や用例を解析するのに高精度なものを必要としているが、十分な精度をもつものが存在しなく、用例ベース翻訳は実現されていなかった。現在は木構造により用例ベース翻訳は研究されている。

原文を解析して木構造を作り、その木を置き換えながら翻訳する。
下図のように木構造を作る。

原文: OK button sends the form to the remote server.
訳文: [OK] ボタンはフォームをリモート サーバに送信する。

MT_05.png


このようにして、様々な用例パターンを抽出している。この方法は、日本発祥である。

必ずしも文法に従って原文を解析する必要はないが、ツリー構造を使うと柔軟な翻訳が可能である。
この方法の長所は先ほどのルールベース翻訳のように膨大な量のルールを機械に覚えさせる必要がない点である。


統計翻訳

コンピュータに学習用のコーパスを与え、統計モデ ルを学習させることで訳文を出力させる方法。ルールベース機械翻訳の弱点をカバーするとして、注目された方法である。

具体的には、対訳コーパスという、例えば日本語でよくある言い回し

0001
日: Xではないかとつくづく疑問に思う
英: I often wonder if it might be X.
中: 难道不会是X吗,我实在是感到怀疑。
1000
日: 私はXを視野にしっかり入れています
英: I put more focus on X.
中: 我非常重视X。
2000
日: 彼がレストランで昼食をとる
英: He eats lunch at a restaurant.
中: 他在餐馆吃午饭。


を英語や中国語に翻訳した大量のコーパスから学習をし、評価対象の文を翻訳する方法である。 統計翻訳において統計的モデルを学習するアルゴリズムは、言語に依存しないため、大量の対訳データがあれば多言語化が容易であり、開発コストを抑えることが可能である。


現在の機械翻訳の欠点

系列変換モデルに基づくニューラル翻訳システムの弱点の1つに、語彙数の問題がある。扱う語彙数を多くすると計算量が大きくなりすぎて現実的な速度での学習や評価ができなくなる。
また、語彙数が多くなるということは、語彙選択問題がより難しくなるため、不用意に語彙を増やしても翻訳精度が低下するだけということも起こる。

さらに、イベント名など時間とともに新語が出現するので、本質的に未知語を完全になくすことは不可能である。機械翻訳タスクでは未知語をどのように扱うかは永遠のテーマとなっている。
統計翻訳時代の考え方から、未知語と判定されたものを後処理で何かの語に置き換えるという方法が用いられている。いくつかの論文の実験セクションでは「RnkRep」のような用語を使ってその結果を示して いる。

一方、ニューラル翻訳に移行してからは、新しい考え方も使われるようになった。
1つは、入出力の単位を「単語」ではなく「文字」にしてしまう方法である。「文字」であれば使われる文字集合は事前に網羅できかつ、新語に比べて新文字の出現は限りなく低いことから、増えることはないという仮定ができる。一方、個々の文字選択問題が簡単になっても、系列長は単語の時と比べて圧倒的に長くなるので、そちらで予測誤りが多くなる問題が発生する。

次に、文字単位はあまりにも細かすぎるという考え方から、文字単位と単語単位の丁度中間に相当する方法論として、バイト対符号化という方法も提案されている。この方法はニューラル翻訳を行う前処理とし て、与えられたデータを使い出現頻度が最も大きい文字ペアを1つの文字としてまとめるという処理を事前に決めた語彙数まで繰り返し処理する。これで得られた文字の結合ルールは、未知の文に対しても、得られた順番で適用していけば、必ず一意に同じ符号化された文を獲得するこ とができる。

文字単位、単語単位、バイト対符号化の 3 種類のうち、どれが総合的に優れているかは決着がついていないが、最近はバイト対符号化が良いのではないかということが言われている。


欠点が改善されると...

未知語に関しての欠点が改善されると、扱う語彙数をうまくコントロールした翻訳が可能になる。

扱い語彙数が多くなると計算量が多くなるため、現実的な速度で計算が不可能であったが、語彙数をうまくコントロールし翻訳をすれば、計算速度が速く、語彙選択問題も簡単になることから高精度に翻訳が可能であると考えられる。
さらに、翻訳をするために高性能なコンピューターを必要としていたが、計算量を減らすことで、安価なコンピューターを用いても高性能な翻訳が可能になるだろう。


今後の展望

機械翻訳タスクは、現在の自然言語処理分野の深層学習/ニューラルネットワーク研究の中心的な位置を占めていると考えられている。

多くの研究成果が報告されており、どの技術が最終的に生き残るか現状見極めるのが難しい。しかし、2015年、2016年で、系列変換モデルによるニューラル翻訳の基礎的な理論が出来上がり、統計翻訳よりも有意に良いと認められるに至っている。研究の余地は非常に多く残されている研究領域であり、独自技術を開発する必要があると考えられている。
機械翻訳がさらに発展すると以下のことが実現するだろう。

コストを抑えてスピーディーな翻訳が可能
機械翻訳の最大のメリットとして、よりスピーディーに、コストを抑えた翻訳が可能になったという点が挙げられる。翻訳速度が速い翻訳家に依頼しても、英文の日本語訳の場合、1日1500〜2000語が目安といわれている。しかし、人間が8時間かけて翻訳する作業を、Google翻訳は数十秒足らずで処理してしまう。さらに、翻訳家に翻訳サービスを依頼すると、一文字5円の場合、2000文字の英文の翻訳に10,000円かかるのに対し、Google翻訳なら、100を超える言語を無料で翻訳が可能である。


翻訳結果を文書として残せる
ビジネスの世界では、文書の配布や、保管、管理を行うために記録として残す必要があり、正確さも求められる。こうした場合、文書から別の言語の文書に翻訳できる機械翻訳が適している。ポストエディットという言葉があるが、これは機械翻訳を利用した後に行われる人間の翻訳者による修正作業のことである。機械翻訳が発展したらポストエディットの作業も徐々に減っていくと考えられ、人間が行う作業を効率的に減らすことが可能である。


参考文献

深層学習による自然言語処理 坪井祐太/海野裕也/鈴木 潤・著
ニューラル機械翻訳以前を支えた「ルールベース機械翻訳(RMT)」と「統計的機械翻訳(SMT)」
ルールベース機械翻訳の概要 (4)
用例ベース機械翻訳の概要 (1)
機械翻訳と自動翻訳に違いはある?使い分けはどうすればよい?

概要

 今回は、以前ブログで紹介したText-to-Text Transfer Transformer(T5)から派生したWT5(Why? T5)を紹介します。

 Text-to-Text Transfer Transformerとは、NLP(自然言語処理)のタスクをtext-to-text(テキストを入力して、テキストを出力する)形式として考えたもので、様々なタスクでSoTA(State of the Art=最高水準)を獲得しました。こちらの記事で詳しく紹介しています。Googleが発表した自然言語処理モデルText-to-Text Transfer Transformer(T5)とは?

 このT5を改良したWT5のポイントは、"Why T5?"という名前にもある通り、予測に対してその予測の根拠となる説明を与えるということです。

 近年、大規模な事前学習モデルをはじめとするニューラルネットワークをNLPタスクに使用することで、人間を超えるような性能を達成するようになってきました。しかし、ニューラルネットワークの問題点として、なぜモデルがそのような予測をしたのかが分からない、いわゆる「ブラックボックス」になっているということが挙げられます。この問題を解決するためにWT5では、タスクの答えに加えて根拠を説明する文も与えています。この背景には、人間も意思決定の理由もブラックボックスになってはいるが、求めると理由を説明できるため、機械にも同じことを求めています。


手法

解釈可能性と説明生成

 予測の根拠を与える方法として採用されている3つを紹介します。

ルールベース
予測をするルールをあらかじめ与えて、そのルールの基づいて予測をする手法です。たとえば、「ひどい」という単語が入っていたらnegativeと判定するとしたら、「あの選手のプレーはひどかった」という文はnegativeと判定されます。この方法はあらかじめルールがあるので、予測の根拠は明らかになっていて解釈可能性は高いです。ただ、「あの選手のプレーにひどく感動した」のような文までnegativeと返してしまうことがあるので性能としてはあまりよくありません。

説明抽出
判定の根拠となる説明を入力の文字列からそのまま抽出してくる手法です。上の例でいうと「ひどかった」「ひどく感動した」を説明として抽出するイメージです。この手法だと、英語での"they"や日本語での「あれ」というような単語を含む文を抽出すると、単語が何を指しているのかわからないという問題が起こる可能性があります。

説明生成
言葉の通り入力を受けて判定する根拠を「説明抽出」のような制限なしに生成します。直感的に分かるような説明生成を正確におこなうことにより、人間に近い判断ができるようになります。


  WT5では、基本的に説明生成を行いますが、説明抽出のタスクにも対応できるようにしています。

 ここで解釈可能性と性能について、ルールベースの手法・従来のニューラルネット・WT5(提案手法)・人間で比べた図を見てみます。上で紹介したようにニューラルネットワークは性能は高くても解釈可能性は低く、ルールベースは性能が低くも解釈可能性は高いことが分かります。説明生成のWT5は人間と同等の解釈可能性を持ちながら、人間を超える性能を出しています。この図を見るだけでWT5の良さが分かります。

Interpretability.png


モデルのフォーマット

 WT5モデルがテキストを入力してテキストを出力する様子を図を使って説明します。WT5のもととなったT5の入出力を見てみます。

T5.png

入力では先頭に"translate English to German"などタスクを表すテキストが与えられて、その後ろに"That is good."などのタスクを行う入力を与えています。出力は、単に入力に対しての答えのみを返します。

wt5.png

 それに対してWT5では、説明文を生成したい場合、入力の先頭に"explain sentiment"など、"explain"+タスクという形式のテキストを与えることで、出力では"negative explanation"+説明ような、タスクの答え+"explanation"+根拠となる説明という形式のテキストを返して、タスクの答えとともに根拠となる説明も同時に返します。  また、説明は出力せずにタスクの答えのみを出したい場合には、図の青い部分のように、入力の先頭にタスク名のみを与えればその答えのみを与えられるようにモデルを構築しています。

 説明生成だけでなく説明抽出のタスクにも対応でき、その場合は入力の先頭の"explain"の部分を"explanation"変えることで、説明文を抽出するように訓練されています。


訓練

訓練に使用するデータセットは次の4つです。

e-SNLI
SNLIデータセット(前提と仮説が与えられて、前提に対して仮説が正しいのかを判定。それぞれのデータに対して正しい(entailment)、矛盾(contradiction)、どちらでもない(neutral)の中からいずれかがラベルとしてついている)について、それぞれのラベルに対する根拠となる説明テキストをアノテーションしたデータセット

Cos-E
Commonsense Question-Answering(CQA)データセット(一般常識についての質問応答セットで、質問に対して選択肢とその中から回答が与えられている)に、選択の根拠となる説明テキストをアノテーションしたデータセット

Movie Reviews
映画レビューの感情分析データセット(一つの映画レビューに対して、positive/negativeのラベルがついている)に、判定の根拠となるテキストを説明抽出によりアノテーションしたデータセット

MultiRC
MultiRCデータセット(文章が与えられて、その文についての質問と答えの候補が与えられていて、候補それぞれTrue/Falseのラベルが与えられている)に、説明抽出による説明がアノテーションされている

モデルの学習は、2種類のT5モデルを使ってファインチューニングを行います。一つは2億個のパラメータを持つBaseモデルで、もう一つが110個のパラメータを持つ11Bモデルを使います。ファインチューニングの方法としてはT5モデルの際と同様のダウンストリームタスクにより行っています。

学習率・バッチサイズ等、訓練の詳しい設定については論文をご覧ください。


評価

評価に使用する指標は、分類精度に対してはMultiRCのみF1スコアを採用して、それ以外はAccuracy、生成された文に対しては量的な評価として、説明抽出を行うタスク(Movie Reviews, MultiRC)についてはF1スコア、説明生成を行うタスク(e-SNLI, CoS-E)についてはBLUEを使用しています。 また、量的は指標だけでは説明の質についてが十分に評価することができないので、質的な評価として人間による評価も行っています。NLPのタスク、特に対話や今回のような文章を生成する際には人間の評価が重要になることがあるので、そこも注意深く見ていく必要があります。


実験

まずは、それぞれのデータセットでどうなるのかを見ていきます。

table1.png

結果を見ると、WT5-11Bがかなり高い性能を出しており、分類精度では2つ、説明文の評価では3つのタスクでSoTAを獲得しています。また、WT5-Baseでもそれなりのスコアを出せています。この結果はT5のときと似たような感覚です。

説明文の評価を見てみると、説明生成というタスクの性質を考えると量的なスコアが低めに出るのは必然なのかなと思います。ただ、論文中でも述べられているように、Cos-Eタスクの値は他と比べてもかなり低くなっていて、これはアノテーションした説明文の質があまりよくないことが原因ではないかとされています。人間が生成した説明文に対する人手による評価も低めに出ているので、そもそも人による説明がブレるようなタスクに対しては、性能が上がりにくいのかもしれません。

MultiRCでも、人による評価については同じような傾向があるようにも見えるので、個人的には、一般常識や読解など人により考えが変わるようなタスクでは、説明が難しくなってくるのかなと思います。ただ、この辺の評価はどう捉えるのかが難しい部分も出てくるので一概には言えないと思います。

実際にWT5(11B)が生成・抽出した説明文です。

table2.png


説明文を減らしての実験

次に、教師データとなる説明文を減らした場合にモデルの性能がどうなるのかを評価しています。

目的は、アノテーションをして説明文を付与する手間が省けるのかどうかを確認するためです。もし性能が変わらなければ、他のデータセットも簡単に使うことができる可能性があります。

fig3.png

結果を見ると、e-SNLIについては、Accuracyはほとんど変わらず、BLUEに関しては説明文を減らしていくと値が低下するものの、100まで減らしても従来のSoTAよりも高い数値を出しています。

Cos-Eについてもほとんど値は変化せず、説明文を減らしても影響は見られません。

それに対して、Movie Reviewsに関しては説明文を減らしていくとかなり性能が落ちていることが分かります。

また、グラフにはないですが、MultiRCもMovie Reviewsと同じような性能の低下があることから、説明抽出を行うタスクには説明文の教師データがそれなりに必要であることが分かります。


データセット間での転移

説明生成のタスクでは説明文の教師データ説明文が少なくても性能が下がらないことが分かったので、同じタスクの説明文を持たない他のデータセットを合わせて使用してうまくいくかを見ていきます。

具体的にはe-SNLIデータセットとMNLIデータセットを合わせて使用した場合と、Movie ReviewsとIMDb、Amazon Reviewsを使用した場合を見ます。MNLIとIMDb、Amazon Reviewsはそれぞれe-SNLIとMNLIよりもより多くのドメインを含んでいます。

それぞれの場合について今までと同様に学習させて、タスクの分類精度は上と同様の評価で、生成した説明文については人による評価を行います。 分類精度は、MNLI:91.5%・IMDb:97.2%・Amazon Reviews:98.1%とかなり良く、説明文の評価もMNLI:82%・IMDb:94%となっていて説明文生成もうまくいっていることが分かります。このことから、ドメインの異なる文章に対しても対応できることが分かります。 このような説明文が生成・抽出されます。   table3.png


タスク間での転移

最後に、異なるタスクのデータセットに対して学習を行ってもうまくいくのかを見ていきます。

具体的には、説明文ありのe-SNLIデータセットと説明文なしのe-SNLIデータセット、説明文なしのCoS-Eデータセットを使ってファインチューニングして、CoS-Eに対して説明文が生成できるかを見ます。e-SNLIとCoS-Eは全く違うタスクで、CoS-Eについては説明文を一つも与えていないので"zero-shot"になっています。

結果としては、完全にうまくいったとは言えないようですが、下のようにうまくいったものもあるのでタスク間での転移も可能だろうとしています。この辺は残った課題としていますね。 また、詳細については述べませんが、"bean-search decoding"を使うと説明の信頼性が改善されたようです。

table4.png

まとめ

 今回はText-to-Text Transfer Transformer(T5)をもとにした、予測と説明文を生成するWT5(Why? T5)について紹介しました。

まだ改善の必要があるものの、説明文生成などができればブラックボックスなものが解消されますし、アプローチはかなり異なってきます。将来的にはNLPだけでなく、他の分野のタスクでも説明文生成することができれば説明可能なAIの開発につながっていくかもしれません。 これからもtext-to-textの広がりに注目したいです。

参考文献

WT5?! Training Text-to-Text Models to Explain their Predictions
WT5?! Text-to-TextモデルでNLPタスクの予測理由を説明する手法!


Twitter・Facebookで定期的に情報発信しています!

フェイクニュースは珍しいものではありません。
コロナウイルスの情報が凄まじい速さで拡散されていますが、その中にもフェイクニュースは混ざっています。悪意により操作された情報、過大表現された情報、ネガティブに偏って作成された情報は身近にも存在しています。
これらによって、私たちは不必要な不安を感じ、コロナ疲れ・コロナ鬱などという言葉も出現しました。

TwitterやInstagramなどのソーシャルメディアでは嘘みたいな衝撃的なニュースはさらに誇張な表現で拡散され、フェイクニュースは瞬く間に広がります。嘘を見破るのは難しく、見破られないまま多くの人に「正しい情報」として届けられています。
2017年に『Journal of Economic Perspectives』誌に掲載された記事では、アメリカの成人の62%がソーシャルメディア上でニュースを得ており、フェイクニュースサイトへの訪問は41.8%がソーシャルメディアのリンクを経由していることが示されています。

フェイクニュースの無い世界ではじめて、私たちは正しい情報に触れ健全な判断をすることができます。
しかし、膨大な情報が混在するソーシャルメディア上でフェイクニュースを発見する作業は人間が行うにはコストがかかりすぎるため現実的ではありません。

AIはフェイクニュースを発見できないでしょうか。


AIはフェイクニュースを発見できる?

ソーシャルメディアの登録者数が世界的に増えているにも関わらずソーシャルメディアのプラットフォームもこの新興市場に投資していないようで、技術検証に留まっています。

革新的なスタートアップが出現するかどうかは出資の有無にかかっているでしょう。 今後、ソーシャルメディアの世界を牽引するためにフェイクニュース検出への投資が出現するのではないでしょうか。

商品化はされていませんが、技術検証は進んでいます。


FEVERによる情報の正誤判定

マサチューセッツ工科大学では、Facebookが支援している研究者がフェイクニュースを発見するためにFEVER(Fact Extraction and Verification)を利用しています。 ※FEVER:大規模なファクトチェックのためのデータベース

しかし、FEVERでさえもバイアスがあり思うようにフェイクニュースを発見できていません。

FEVERは機械学習の研究者たちによって、ウィキペディアの記事を元に、情報に対して正誤を判定するために利用されてきました。しかし、そのデータセットにバイアスがありそれで学習したモデルが誤った結果を導いてしまったと研究チームは分析しています。

例えば、'did not''yet to'のような否定のフレーズが含まれた文章は「偽」の場合が多いため、FEVERで訓練されたモデルは、これらの文が実際に真実であるかどうかに関係なく、偽と判定してしまう可能性が高いことが課題です。

真実である"Adam Lambert does not not hide publicly his homosexuality "は、AIに与えられたデータから真実と導けるにもかかわらず、否定のフレーズが入っているので偽とされる可能性が高いです。

判定の根拠に主張の言語(どんなフレーズが入っているか)に焦点を当てており、外部の証拠(実際はどうであるか?)を考慮に入れていないことが問題でしょう。

証拠を一切考慮せずに主張を分類することのもう一つの問題点は、全く同じ主張が今日は真であっても、将来的には偽であると考えられる可能性があるということです。 例えば、女優のオリビア・コルマンがオスカーを受賞したことがないというのは2019年までは本当でしたが、現在では違います。情報は常に更新されていくのです。

これらの課題解決のため、研究チームはFEVERのバイアスを解消し一部を修正するデータセットを作成しています。


計算言語学と機械学習のハイブリッド手法

2018年に発表されたミシガン大学とアムステルダム大学の論文は、効果的にフェイクニュースと戦うために、計算言語学とファクトチェック(事実検証)を組み合わせるアイデアを発表しました。

計算言語学では、自動化された方法でフェイクニュース発見を実施できます。 本物と偽物のニュースを区別するために、言語学的特徴に注目してニュース内アイテムの語彙的、構文的、意味的なレベルを見て判断します。

開発されたシステムの性能は、このタスクにおいて人間の性能に近く、最大76%の精度でフェイクニュースを発見することができました。

しかし、考慮するのは言語学的特徴だけではなく、事実検証の要素も含めるべきと指摘されています。 例えば、記事へのリンク数やコメントなどのメタ特徴や、ニュースページの見栄えなどのモダリティ的な特徴のことです。これらは機械学習でアプローチすることができます。

これらを踏まえて今後の研究では、計算言語学や事実検証(AI・機械学習)のアプローチをハイブリッドにした予測と意思決定が必要だと考えられます。


実現に向けた課題

これらの例を見ただけでも課題があることがわかります。
イノベーターたちは様々な角度から問題を考えてきましたが、思うような改善には至っていません。

どちらの例でも言及されていない課題があります。
フェイクニュースがどのように作られているかご存知ですか。現在はAIがかなり精巧に作成していますが、問題は人間の作るフェイクニュースです。AIはルールに従ってフェイクニュースを作成するため、私たちも対抗することができますが、人間が作成したニュースを見破るためには難易度が一気に上がります。


たとえば、Twitter。


多くの情報を拡散したい時にTwitterは効果的なツールです。
Twitterでフェイクニュースを拡散したい時、複数のBotで自動投稿するでしょう。Botは単に「いいね!」や「フォロー」数を増やしたり、リンクを拡散したり、トレンドに入るために多くの投稿をしたり、反対派を荒らしたりするために構築されます。このように自動化されたアカウントの大部分は非常に単純なもので発見しやすく現在の技術でも対応できるでしょう。

これだけの対策でも、拡散されるフェイクニュースの効果を弱めることができます。 悪意のある情報の拡散は私たちの気持ちを落ち込ませるだけでなく、健全な判断をも奪います。

スクリーンショット 2020-03-26 16.52.10.png


フェイクニュース発見に尽力すべきは誰?

このようなソーシャルメディア上のフェイクニュースの発見は誰が行うべきでしょうか。

FacebookやGoogleなどは暴力やテロリストグループの情報を含むコンテンツの発見には投資していますが、フェイクニュースの発見にはそれほど熱心ではないようです。理由は先程のようにオンライン上には様々な表現、文脈で存在し、AIが独自に発見するは難しいためでしょう。 しかし、今後さらに大量のコンテンツが溢れ、有益な情報のみ吟味するためにはフェイクニュースを発見することは必須ではないでしょうか。


市場のチャンス?

今後、ソーシャルメディアのプラットフォームを牽引する企業は出現するでしょう。
利用ユーザー数を増やし、市場を獲得しするためにはユーザーの安全が確保されることが大切です。子供には使わせられないソーシャルメディアは大人も使いたくないですよね?

ソーシャルメディアの登録者数が世界的に増えているにも関わらず、どのソーシャルメディアのプラットフォームもフェイクニュースの発見に積極投資はしていないようで、技術検証に留まっています。

しかし、より安全で健全な世界のためにこの技術は凄まじい進歩を遂げていくのではないでしょうか。


Twitter・Facebookで定期的に情報発信しています!

Googleが発表したBERTは記憶にも新しく、その高度な性能はTransformerを使ったことで実現されました。
TransformerとBERTが発表される以前の自然言語処理モデルでは、時系列データを処理するRNNとその発展形であるLSTMが使われてきました。このLSTMには、構造が複雑になってしまうという欠点がありました。こうしたなか、2017年6月に発表された論文「Attention is all you need」で論じられた言語モデルTransformerとAttentionと呼ばれる手法は、LSTMのような複雑な構造を使わずに高性能を実現したのでその後の言語モデル開発に大きな影響を与えました。 今回は転移学習モデルTransformerを用いた新しいモデルのText-to-Text Transfer Transformerを紹介します。


Text-to-Text Transfer Transformer(T5)とは

 近年、自然言語処理の分野では、事前学習モデルを利用しfine tuningをする転移学習(transfer learning)が強力な技術として様々なタスクで少ないデータセットでも精度向上をもたらしています。特に2018年に発表されたBERT以降、研究が盛んに行われており、ベンチマーク(GLUEなど)のSoTAも頻繁に更新されています。この論文に「多様なアプローチ、手法、実践がなされている」と書かれているように、それぞれの研究によってアプローチのしかたも異なります。  その中で、この論文で紹介されているモデルT5は「Text-to-Text Transfer Transformer」の略で、Text-to-Textとある通り、入力と出力の両方をテキストのフォーマットに統一して、転移学習を行うモデルです。
Figure1.png

 上図にあるように、翻訳、質疑応答、分類、要約などすべてのタスクで入力をテキストで受けて、出力もテキストの形で返しています。また、このモデルの特徴は一つのモデルで上で挙げたようなタスクをすべてこなせることです。実際にタスクを行わせる際には上の図にあるように"translate English to German:"とPrefixを与えてどのタスクかを知らせています。T5のモデル構造のベースはTransformerとなっていて、論文中でも特別新しい手法を紹介しているわけではありません。転移学習における研究が盛んに行われ、異なる手法の比較が難しい中で、どんなモデル構造やデータセットなどを用いれば良いのかを、T5を用いて比較していくことがこの論文の中心となっています。


精度比較

 それでは論文中で行われている実証研究について見ていきます。


Baseline

 まずベースラインについて見ていきます。

 事前学習どの程度行ったなどの詳細はここでは述べませんが、基本的なモデルの構造としては一般的なTransformerを用いて、特徴的なのはすべてのタスクがtext-to-textの形式にされていることです。また事前学習にはC4(Colosal Clean Crawled Corpus)というデータセットを使っています。後にデータセットでの精度比較があるのでC4の詳細はそこで述べます。
Figure2.png

教師なし学習の目的関数ついては、BERTで用いられたMasked Language Modelingなどに倣った"denoiding objective"を使用しています。上の図を見るとイメージしやすいと思います。
Table1.png

 ベースラインの性能を簡単に表で見ていきます。一番上がベースラインの結果の平均、2番目が標準偏差、最後が事前学習を行っていないモデルの結果となっています。この結果の中で、GLUEとSQuADに関してはBERTのモデルと非常に近いスコアを出しているそうです。またEnFr(英語からフランス語への翻訳)に関しては、十分に大きな訓練データがあるために、事前学習で得られる情報が重要ではなくなっているため、ベースラインのスコアと事前学習をしなかったモデルのスコアがあまり変わらないという結果が出ています。

それではここからモデル構造などを変えての比較を見ていきます。


モデル構造

 モデルのベースは上でも述べたようにTransformerで、今回の比較は次の三つについて行っています。

  • Encoder-Decoder:基本的なTransformerで採用されているモデル  Encoderはfully-visible attention mask(全ての入力を出力の予測に用いるマスクになっている)で、 Decoderはcasual attention mask(予測する単語を見えないようにしている)を採用したモデル       
  • Language Model:Encoder-DecoderでのDecoder部分のみを使ったようなモデル
  • Prefix LM:Language Modelをベースに、Prefix部分はマスクしないという変更を与えたモデル

以下の図がそれぞれのモデル構造のイメージ図になっています。
Figure4.png

 また、attention maskのイメージ図は下のようになっています。
Figure3.png

Transformerの詳細については、【論文】"Attention is all you need"の解説をご覧ください。検証結果は以下のようになります。
Table2.png

ここで教師なし学習の目的関数として、ベースラインと同様のdenoisingだけでなく、LM(通常の言語モデルで予測)も採用しています。また、モデルの構造で上の三つの他に"Enc-dec,shared"と"Enc-dec,6 layers"があります。Enc-dec,sharedはencoderとdecoderでパラメータを共有したもので、Enc-dec,6 layersはencoderとdecoderの層をそれぞれ12から6にして、パラメータを半分にしたもので、計算コストも半分になっています。それぞれのイメージ図は以下のようになります。

  • Enc-dec,shared
    enc-dec_share.png

  • Enc-dec,6 layers
    enc_dec_6layer.png

 結果を見てみると、まず目的関数については全体を見てもDenoisingのほうが良い結果を得ています。モデル構造については、Encoder-decoderが一番良い精度を出しています。Enc-dec,sharedはほとんど変わらず、パラメータを共有するしないは精度にあまり影響を及ぼさないことが分かり、Enc-dec,6 layersはその2つと比べて性能が劣り、層の数はある程度影響を与えています。また、Language ModelとPrefix LMもEncoder-decoderよる精度はわるくなっていて、2つを比べるとPrefix LMのほうが良い結果になっていてます。


Objectives

 次に教師なし学習の目的関数について比較を行っていきます。
Figure5.png

ここでは、上の図の左から順にそれぞれ検証していきます。下のような目的関数の例も記載されているので、逐次見ていきます。この例の元の文は"Thank you for inviting me to your party last week."です。
Table3.png

High-Level Approaches
 ここで比較するのは次の三つの目的関数です。
Table3_1.png

  • Prefix language modeling :オリジナルの文章の途中までを入れて、その続きの文章を予測
  • BERT-style:一部の単語がマスクトークンに置き換えられた文章から、オリジナルの文章を予測
  • Deshuffling:単語がランダムにシャッフルされた文章から、オリジナルの文章を予測

Table4.png  結果をみると、BERT-styleが、翻訳タスクではPrefix language modelingと大差ないものの、全体で見ると一番優れていることが分かります。

Corruption Strategies
 上の結果から、BERT-styleが優れていることが分かりました。ここでは、そのBERT-styleをベースとして、下の例のような三種類のトークンの入れ方を比較します。
Table3_2.png

  • mask tokens:一部の単語がマスクトークンになっている文章から、全文を予測
  • replase tokens:一部の単語がマスクトークンになっている文章から、マスクされた部分のみを予測
  • drop tokens:一部分が抜かれた文章から、抜かれたところのみを予測

 また、下の表中のMASS-styleは、BERT-styleに似た方式のものだそうです。詳細はMASS: Masked Sequence to Sequence Pre-training for Language Generationをご覧ください。
Table5.png  結果を見てみると全体的に似たようなスコアを出していて、特別優れているものはありません。ただ、BERT-styleとMASS-styleは全文を予測する目的関数なのに対して、replace tokenとdrop tokenはマスクされた部分のみを予測するので、より短い時間で訓練可能となり、その点でいうと優れていると言えます。また単純に一番良いスコアを出した数でいうと、drop tokenを使用したものになりますが、SuperGLUEでは、replace tokenのほうが良い結果を出していて、この2つのことからreplace tokenを用いるのが一番良い手法だと結論付けています。

Corruption Rate
 次にマスクする割合を10%,15%,25%,50%と変えて比較します。
Table6.png  結果を見てみると、それぞれであまり大きな精度の違いは見られず、マスクする割合はモデルの性能に大きな影響を与えないということが分かります。ただし、50%に関しては特にGLUEとSGLUEで精度が悪くなっており、マスクする割合が大きすぎると、モデルの性能に悪影響を与えてしまうことが分かります。このことから、従来の研究に沿ってBERTでも採用されている15%が適切としています。

Corrupted Span Length
 次に、マスクするトークンの平均の長さを変えて比較します。
Table7.png

 結果を見ると、10の場合はあまり良くなっていないので、長すぎると性能が下がっていくことが分かります。ただ、それ以外は、あまり性能に差はなく、ベースラインのものをそのまま採用することにしています。

結論
 ここまで、目的関数に関する4つの項目について比較を見ました。結果的に上で示した図のフローになります。   この検証で一番モデルの性能に影響を与えたのは、最初に見た3つ目的関数の選択でした。性能だけを見ると他の要素はあまり重要でないように感じますが、マスクトークンの取り方で、予測する文・単語は短い方が学習にかかる時間が短く、計算コストも抑えられることも大切なポイントになります。


Dataset

 次に、使うデータセットを変えることでの性能の違いを見ていきます。まず、使用するデータセットについて、T5で重要となるC4について説明したいと思います。

C4(Colosal Clean Crawled Corpus)
C4はColosal Clean Crawled Corpusの略で、Webから取得できるCommon Crawlを元に以下の前処理したものです。

  • ピリオド、クエスチョンマーク、ビックリマーク、コーテーションマークで終わる文のみを使用する。
  • 汚い言葉、不適切な語を含むページは取り除く。
  • javascriptの単語を含む行は取り除く。
  • ダミーテキストがあるページは取り除く。
  • ソースコードなどは取り除く。
  • 重複文は取り除く。

C4の一番の特徴は、データのサイズがかなり大きいことです(データが多様)。Common Crawlが1か月に20TBになるようなデータで、ここでののC4は前処理をすることで、750GBにしたデータセットです。これは結果の表にも書いてありますが、他のデータセットに比べてかなり大きなデータとなっており、ここでの比較により、データサイズによりどんな違いが出るのかを見ることができます。

比較の結果は以下のようになります。
Table8.png

 まず、C4とC4,unfiltered(前処理をしていないC4データセット)を比べると、当たり前ですがC4のほうが精度が良く、前処理が重要であることが分かります。  次に、C4と他のデータセットを比べると、タスクによって精度の良いデータセットが違っているように感じます。まず分かることは、データのサイズが単純に大きいだけでは、必ずしも精度は上がらないことです。また、このような結果になった要因として、使ったデータセットがあるタスクに適応しやすいデータだったということが挙げられます。このことから、それぞれのタスクに対して適したデータセット、ドメイン固有のデータセットを使ったほうが精度が高くなることも確認できます。  また一般的にドメイン固有のデータセットのサイズは小さくなりますが、そういったサイズの小さいデータを繰り返し学習させるのと、より大きな多様性のあるデータを繰り返さずに学習させるのでは、どちらが良いのかを検証したのが、次の表とグラフです。
Table9.png

Figure6.png

 結果を見ると、データの大きさを小さくして、リピートの回数を増やすほど、Training lossの収束が速くなるものの、精度が低くなっていることが分かります。どんどん過学習になりやすくなっているということです。このことから、可能であればより大きなデータセットを使って、データに多様性を持たせたほうが良いことが確認できます。


Fine-tuning

 次に、fine-tuningの仕方について以下の3つを比較しています。

  • All parameters:モデルのすべてのパラメータをfine-tuningして調節する
  • Adapter layers:事前学習のモデルを壊さないで保持するために、Dense + ReLU + Denseの層からなるAdapter layerを各層の間に入れてfine-tuningする
  • Gradual unfreezing:徐々にチューニングするパラメータを増やして学習範囲を広げていく   結果は、下のようになり従来の手法の通り、全てのパラメータをfine-tuningしたほうが精度が高くなっています。
    Table10.png


Multi-task

 次に、Multi-taskという名の通り、まとめて一度に様々なタスクを学習させることにより、精度がどのように変化するかを検証していきます。つまり、普通はあるタスクに対してひとつの教師なし学習を行わせるのに対して、タスクをミックスさせることにより、全てのタスクで同じパラメータを共有するということになります。  ここで比較するのは、

  • Equal:全てのタスクを同じ割合で学習させる方法
  • Examples-proportional:各タスクのデータのサイズに上限Kを与えて、その中でランダム得たデータを学習させる方法
  • Tempereture-scaled:一番でデータの少ないタスクと一番データの多いタスクの差に制限をかけたデータで学習させる方法

Table11.png

 結果を見ると、タスクごとに教師なし学習により事前学習+fine-tuningしたのに比べて、全体的に性能は劣っていて、特にEqualのときが一番悪くなっていて、GLUE、SGLUEのタスクに関してはすべて良い性能が出ていません。ただし、Examples-proportionalとTempereture-scaledについては、パラメータをうまく調節できた場合に限って、CNNDM、SQuADなどで精度が良くなっていることが分かります。  次に、ここで分かった性能の差を埋めることができないかということで、multi-taskとfine-tuningの様々な組み合わせ方について検証していきます。 ここで比較する手法は、通常の事前学習+fine-tuningとMulti-task含めて5つあります。

  • Unsupervised pretrining + fine-tuning
    multi1.png

  • Multi-task
    multi2.png

  • Multi-task pre-training + fine-tuning:すべてのタスクを事前学習させる方法
    multi3.png

  • Leave-one-out multi-task training:1つのデータを除いたもので事前学習を行い除いたタスクでの性能を図る方法
    multi4.png

  • Supervised multi-task pre-training:教師あり学習のみを事前学習させる方法
    multi5.png

Table12.png  結果をみると、Multi-task pre-training + fine-tuningによって性能の差を埋めることは出来ました。また、Leave-one-out multi-task training性能がそこまで下がっていないことから、様々なタスクに対して事前学習+fine-tuningをすると新しいタスクに対して、ある程度対応できる可能性を示しています。そして、Supervised multi-task pre-trainingの結果を見ると、翻訳のタスクのみ良い性能を示していることから、教師なし学習による事前学習は、それ以外のタスクに重要な影響を与えていることが分かります。


Scaling

 最後に、学習ステップ数・バッチサイズ・モデルの大きさ・アンサンブルについて比較を行っています。
Table13.png  結果を見ると、ベースラインと比較して、それぞれ大きくすることで精度が良くなっていることが分かります。予想できた結果ですが、より大きなモデルを使って、学習もそれなりに行ったほうが良いことが確認できます。


実験のまとめ

 最後に、以上の実験から得た結果を反映したモデルの性能を、様々なベンチマークで検証した結果を見てみます。
Table14.png それぞれのモデルのパラメータ数はこちらです。

  • T5-Base : 220million
  • T5-small : 60million
  • T5-Large : 770million
  • T5-3B : 2.8billion
  • T5-11B : 11billion

 今までの検証からも予想できるように、パラメータ数の多いもののほうが性能が良くなっています。また、様々なベンチマークでSoTAを獲得できていることから、検証して得た結果は正しかったことが分かります。ただし、翻訳タスクに関しては、事前学習に英語のみのデータセットを使ったために、これまでのSoTAには届いていないようです。  それぞれのベンチマークによる考察は長くなるので省きますが、興味があれば是非論文を読んでみてください。


まとめ

 今回はT5の論文について紹介しました。T5モデルのポイントはText-to-Textの形式を採用したこととC4というかなり大きなデータセットを使ったことですが、NLP分野は研究が盛んで次々に新たなモデルが発表されているので、整理するという意味でも、こののように検証を行っていくことも今後重要になってくると思います。


参考文献

最近はGoogleを始めとする翻訳サービスにも機械学習が取り入れられ、翻訳精度が向上しています。

しかし、完璧な翻訳を求めるには精度が足りず、確認作業に時間がかかったり、翻訳されたものが正しいのか見極めるスキルが必要なケースがほとんどです。

このような課題がある中、高精度な翻訳ができる「DeepL」が、日本語と中国語の翻訳に新しく対応したので、日本語での翻訳機能を試してみました。


DeepLとは

DeepLはドイツのケルンで開発された深層学習(ディープラーニング)を用いた人工知能(AI)による翻訳システムです。以前から英語・オランダ語・フランス語・ドイツ語・イタリア語・ポーランド語・ポルトガル語・ロシア語・スペイン語などの言語に対応していましたが、2020年3月19日から日本語と中国語にも対応したと発表されました。

DeepL翻訳が日本語と中国語を習得
https://www.deepl.com/blog/20200319.html

2020年初めにDeepL翻訳はニューラルネットワークの大幅な改善を行い、日本語と中国語の翻訳精度が向上しました。日本語と中国語の翻訳精度を他翻訳と比較したグラフです。
DeepL


Google翻訳と性能比較

DeepLではどの程度の翻訳ができるのでしょうか。
AIができるコロナウイルス対策について紹介している文章の冒頭を翻訳しました。
Fighting the Spread of Coronavirus with Artificial Intelligence
https://tractica.omdia.com/artificial-intelligence/fighting-the-spread-of-coronavirus-with-artificial-intelligence/

DeepL

ほとんど完璧な翻訳です。Google翻訳と比較してみましょう。
前半はほぼ同様の訳のため割愛し、後半のHowever以下を掲載します。少し苦戦しているようです。
DeepL

Google翻訳では訳しきれていない部分があります。その他にも理解はできますが、やや首を傾げる箇所もあり、この文章ではDeepLの方がスムーズな翻訳ができていることが分かります。


機械学習、深層学習は学習のために翻訳前後をセットにして学習させ、精度を向上していきます。 今後も更に学習を進め、精度向上していくでしょう。


Twitter・Facebookで定期的に情報発信しています!

SNS、口コミでの評価と顧客満足度は深い関係があります。
今回は「ネガポジ判定」を用いて、顧客の要望を発掘していきます。


目次

  • ネガポジ判定とは
  • 実装方法
  • 今後の検討方針
  • 参考文献


1.ネガポジ判定とは

自然言語処理分野に関する文章のネガポジ判定とは、AIが文章の内容がネガティブかポジティブか判定するものです。

今回は食べログからスクレイピングによって口コミ(お店の評価)を抽出し、それらを実際にネガポジ判定します。
判定結果、特にネガティブと判定されたものは、顧客満足度向上に役立ちます。この技術は、既存のデータを分析し二次活用していくために有効な手法です。


Sentiment Analysisライブラリ oseti

今回のネガポジ判定には oseti というライブラリを使用しました。
osetiは日本語評価極性辞書を用いて文の評価極性(ネガポジ)のスコアを計算します。このライブラリのリンクは参考文献に載せておきます。
例えば、以下の3つの文章でosetiを使います。


import oseti
analyzer = oseti.Analyzer()
analyzer.analyze('店員の態度は悪かった。')
==>[-1.0]
analyzer.analyze('ここのラーメンは美味しかった。')
==>[1.0]
analyzer.analyze('店員の態度は悪かったが、ここのラーメンは美味しかった。')
==>[0.0]


このように、osetiは極性を判定するキーワードに対しポジなら「+1」、ネガなら「-1」とスコアリングします。キーワードが複数ある場合はそれらのスコアの和の平均を出力します。また、osetiは1文ごとにスコアを出力し、文章を入力した場合は1文ごとにスコアを出していきます。


2.実装方法

事前準備【食べログから口コミのスクレイピング(抽出)】

では本題に入る前に、実際に食べログから口コミをある程度スクレイピングします。
スクレイピングする対象として、今回は東京都の渋谷(恵比寿,代官山含む)と池袋(早稲田,高田馬場含む)にあるラーメン屋を選択しました。

理由は、2つあります。
1.他の店舗間で値段の差がほぼないため、シンプルに味で口コミの評価が二分されると感じた
2.弊社が渋谷にあるのでどういうお店が評価が高いのか興味がある

そこで渋谷と池袋それぞれ、 評価が3.5以上のお店40件、それぞれの店舗から20件ずつ 計1600件(800×2)の口コミをスクレイピングしました。

スクレイピングの結果の一部です。

blog131_5-1.png blog131_6.png


scoreは食べログの評価、reviewcntはその店舗の口コミの件数で、著作権の関係上、店舗の名前storename、評価reviewは消してあります。このような形でそれぞれのデータをcsvファイルとして保存します。

さて、準備は整ったので早速osetiを使ってネガポジ判定していきましょう。


判定

まず、csvファイルのreviewに入っている文章を全てosetiに入力します。


 #ネガポジ判定
 def negaposi(text):
     review = analyzer.analyze(text)
     re_view= np.average(review)
     return re_view
 #ネガポジ判定値追加
 shibuya_ramen_review ['negaposi'] = shibuya_ramen_review['review'].map(negaposi)
 ikebukuro_ramen_review ['negaposi'] = shibuya_ramen_review['review'].map(negaposi)


出力は次のようになります。一番右のnegaposiの欄が判定スコアで、1文ずつのスコアの平均値を出しています。値が1に近ければよりポジティブであると考えられます。

blog131_7.png blog131_9.png


しかし、上の結果を見てみるとスコアは正の値となっていますが、極端に1に近いとは言えません。
例えば渋谷の1番上のスコア0.19444のレビューを見てみると(著作権の関係上載せれませんが)、スコア0.5は超えてもいいかなと思います。

文章全体を見てポジティブな内容であると分かっても、やはり文全体の平均を取っているので1に大きく近づきはしませんでした。なので、BERTなど文脈を読み取れるようなライブラリを用いた方が精度が上がりそうです。
全体としてポジティブに厳しい判定ではあったものの、ネガティブな内容をポジティブと誤判定することはなく、冒頭であげた「ネガティブな評価を見つける」、といった目的は達成できます。


N-gramによる頻出単語の可視化

次に、N-gramによってテキストを単語ごとに分割し、頻出単語を見ていきます。

blog131_10.png blog131_11.png blog131_12.png
今回ポジティブ判定されたラーメン屋の傾向が何となく分かります。

1、2、3の比較

  • 1では、麺などラーメン屋の口コミとしては当たり前に出てくる単語が上位に来てしまっているところは問題だが、味、麺、具材の種類を表す単語からは、池袋と渋谷を比較しても多少傾向が見られるので、ストップワードを工夫することで大まかな傾向は掴めそう。
  • 1は2、3と比べて一単語ずつの出現数が保証できる。
  • 2、3は1より具体的な麺、味の種類が出てくるため、より特徴的なワードを掴める。また、1よりも池袋、渋谷の差を確認しやすい。
  • しかし、一つ一つの出現数は少なくなるので、データの吟味が必要。
  • 2と3で入れ替わるワードもあり、両方のデータを考察する必要がある。


3.今後の検討方針

今回感情分析の手法(ライブラリ)としてosetiを用いましたが、単語の極性だけを見てもかなりの精度でネガポジ判定ができることがわかりました。

しかし、このosetiにはいくつか問題点があります。

  • 日本語評価極性辞書に載っていない単語が出現した際、それらを定量的に評価できない。
  • 極性辞書の単語の評価には作成者の感情が入っているので、客観的な評価が完璧にできない。
  • 1文ごとにネガポジ判定を行うので、文章全体で見たときに文脈を読み取れない。


これらが原因で、ポジティブな口コミをネガティブ寄りと誤判定したり、その逆の判定をしてしまう時もありました。
日々日本語は増えていくし、ニュアンスもそれに伴って変化していきます。人手で作る極性辞書にも限界があるので、今回はそこがボトルネックとなっていました。

3の問題点を改善するために、今後の検討ではBERTを用いて文章の感情分析を行いたいと思います。
また、単語の出現数だけを見て、ある程度の傾向は感覚的に掴めますが、単語同士の繋がりや、その単語がポジティブへ関係しているか明確ではありません。そのため係り受け解析をするなどが必要だと考えています。
全部の文章からだとその店に対する評価をしている文以外も入ってくるので、そこの取捨選択ができれば、評価されている部分と批判されている部分がより明確になると思っています。


4.参考文献

日本語評価極性辞書を利用したPython用Sentiment Analysisライブラリ oseti
【初学者向け】TFIDFについて簡単にまとめてみた


Twitter・Facebookで定期的に情報発信しています!

機械学習を利用して「エントリーシート自己PR分析サービス」を作成しました。

エントリーシートの評価や言いたいことが伝わるか、心配ですよね。
また、企業の採用担当者は膨大な数のエントリーシートを確認することはかなりの業務量かと思います。

「エントリーシート自己PR分析サービス」では、自己PRの内容を入力すると点数や頻出単語を表示します。


[2020年2月21日追記:デモ動画]

機能追加しました!
・自己PRそのものの採点ができるようになりました。


スクリーンショット 2020-01-23 11.53.29.png

サービスのポイント

  • 文章の特徴を可視化する
  • キーワードとの適合度を判定
  • 文章のカテゴリーを判定
  • 過去合格した自己PRと比較して採点


サービス内容を紹介します。


エントリーシート自己PRの例

私は、アルバイトの中で最も時給がアップしたという実績を持っています。

コンビニエンスストアで3年間勤務していますが、ただ働くのではなく、計画性を持って働くことができるという点が時給アップにつながりました。

具体的には、3つのポイントがあります。

お店の繁忙期をプライベートの予定と照合し、あらかじめお店が忙しい時にはいつでも残業できるようにしていたことです。一緒に働くスタッフの性格を把握しておき、一緒にシフトに入る人によって、自分の立ち位置を変えていたことです。集中力が必要となる発注作業がある日の前後には、徹夜するなどの無理なことはせず、身体的にも余裕をもっておくことです。

これら3つをすべて実行することで、他のスタッフは通常1度に30円しか昇給しないところ、前例のない100円の昇給に成功しました。

この計画性を活かし、御社でも先を見据えたスケジューリングと自己管理で、生産性の向上だけではなく、業務のクオリティをあげることにもつなげて参りたいと考えております。

(【例文多数掲載!】自己PRで計画性を伝えるときのポイントをご紹介から引用したものを少し修正)


ワードクラウド


wordcloud


結果を見ると「時給」や「計画」「アップ」などの頻度が高いことがわかります。
ワードクラウドとは与えられた文章を元に、出現頻度が高い単語ほど大きなサイズで表示するものです。文章内使われた単語を視覚的に捉えることで、エントリーシートなどの文章作成でも役立ちます。


キーワードと自己PRの適合度を判定

キーワード: 計画性 昇給
点数:77.7 点

キーワード:真面目 研究
点数:24.9 点

言いたいことを表現しているか採点するために文章内の頻出単語と自分で付けたキーワードを照合します。

就活において自分の強みなどを記述する際は、「計画性」や「行動力」、「部活」や「研究」などキーワードとなる言葉を意識して文章を組み立てますよね。これがどれぼど的確に出来ているかを採点するために、ワードクラウドの結果 (単語の頻度) とキーワードとなる単語との類似度を点数化しました。

例えば先程の自己PRでは、計画性やアルバイトに関するキーワードを選ぶと点数が高くなり、部活や協調性など関係のないキーワードを選ぶと低い点数になります。


単語の分散表現

キーワードとの適合度を判定するために単語の分散表現を用いました。
分散表現とは簡単に言うと単語を200次元などの高次元のベクトルで表現したものです。分散表現では似た単語同士は類似度が高く算出されます。

さらに、単語の意味も捉えることもできるため、
king - man + woman = queen
といった分散表現の足し引きをすることも可能です。
分散表現を使って、入力文章中の上位10個の頻出単語とキーワードを比べ、最大の類似度から点数を算出しています。
より適切に採点するために、類似度は文章中の出現頻度によって重み付けをしています。例えば、最も頻度が高い単語とキーワードの類似度は計算結果の値をそのまま使い、単語の頻度が1位の半分の場合は、類似度も計算結果の半分の値を使います。
キーワードも複数設定できるようにし、ユーザーの意図を汲み取りやすくしています。


自己PRを100点満点で点数化

自然言語処理において強力なBERTを使って自己PRを点数化しました。
ざっくりとしたBERTの解説については以下の記事をご参照ください。

Googleを理解する!文脈を読み取る最新の機械学習(BERT, ELMo)

自己PRを点数化する方針は良い自己PRを1とラベル付けし、悪い自己PRを0とラベル付けした後に2値分類を行います。2値分類の結果は0以上1以下の連続値で得られるので、その値に100をかけて点数化しました。

このときBERTをいちから学習させようと思うと大量のデータが必要になります。しかし、手元にあるデータ量は限られていたため事前に学習されたモデル(BERT日本語Pretrainedモデル)を利用しました。

最終的なモデルの構成は以下のようになりました。
BERTのEncoder-12-FeedForward-Norm層までを取り出しBidirectional層とDropout層を加えた後、全結合層を追加し2値分類できるモデルを作成しました。

BERT model structure


自己PRの点数化

上で例示した自己PRの点数を出してみましょう。

点数:84 点


次に悪い自己PRの例を用いて点数を出してみましょう。

エントリーシート自己PRの悪い例

私の強みは辛いことも諦めずに立ち向かう粘り強さです。わたしは大学の時にコンビニエンスストアでアルバイトをしていました。

コンビニでは担当する業務が思ったより多く、なかなかすべてを覚えることができなかったので、最初は店長やアルバイトの先輩に叱られてばかりでした。何度も辞めてしまいたいと思うことがありましたが、せっかく始めたからには諦めたくないという気持ちが強く、もっと前向きに仕事に取り組もうと考えました。

そこで、家に帰ってからもアルバイト先で学んだことをしっかり復習し、どの仕事も任せてもらえるような知識を身に付けました。また、気持ちよくお客様に接する事を心掛けて、どんなに疲れている時でも、どんなに忙しい時でも笑顔を絶やさないようにしてきました。今では店長や他のアルバイトの人にも認めてもらえるようになり、そのアルバイトを続けていくことができています。

これからもどんな仕事も諦めずに取り組む姿勢を大事にしたいです。

(自己PRの例文【悪い例:400文字、コンビニでのアルバイト①】から引用)

この自己PRはマイナスなことを書いている部分が多かったり、数字や具体的な内容が欠けておい良くない自己PRだと言えます。実際に点数を出すと

点数:52 点

冒頭の自己PRと比べて30点以上も低い点数となりました。

今回は良い自己PRと悪い自己PRの例をそれぞれ約50件ずつしか用意できなかったにも関わらず、2値分類のAccuracyでは75%以上の良い性能を出すことができました。やはり自然言語処理においてBERTは強力ですね。


まとめ

まだデータ量が少ないので精度にバラツキはありますが、大量のデータがあれば更に実用的なサービスになります。
現在はMicrosoft社などが提供するAPIを利用すれば機械学習を用いた様々なサービスを作ることが可能です。今後も多くのサービスがリリースされていくと予想されます。


Twitter・Facebookで定期的に情報発信しています!

日々AIに関する技術は発展していき、その中でも自然言語処理に関するトピックには目が離せません。
Apple社のSiri、AmazonのAlexaなど人間と会話できる(対話型)AIを通して、そういった技術が私たちの身近な存在になってきました。
そのような中、2020年1月末にGoogleが凄まじいAIチャットボット「Meena」を発表しました。今回はこのMeenaから今後のチャットボットの可能性について考えていこうと思います。


そもそもチャットボットとは?何ができるのか?

一般にチャットボットとは、「音声やテキストを分析し、自動的に会話を行うロボット」のことを指します。
先ほど述べたSiriは、iPhoneの普及に伴ってその知名度は爆発的に上昇しました。

「明日の天気は?」「朝8時にアラームをセットして」など、話しかけるだけで応答してくれるシステムは確かに便利です。

しかしこのような技術を商業的に用いるとなると、どういったことが考えられるでしょうか?

例えば、「顧客からのメールや電話対応にチャットボットを用いて業務の効率化を図る」ことが挙げられます。 顧客からのサービスや製品についての疑問というものは、Web上のFAQを読めば分かるような事も多いでしょう。

そういった簡単な質問に対してチャットボットを活用すれば、実際の社員はそれ以外のクレーム対応など重要な対応に専念できます。

今後のAIの普及と共に「AIができること」と「人間が行うべきこと」の棲み分けが重要になってきます。


Meenaとは?既存のチャットボットとの違いは?

では本題の「Meena」について見ていきましょう。

SiriやAlexaは一問一答形式の応答には特化しています。しかし実際に"自然な"会話をしようとすると、 AIが答えやすいように人間側がちょっとした調整をしないといけません。

しかし今回紹介する「Meena」ですが、ディープラーニングの技術を用いて人間と"自然な"会話を行うことができます。

GoogleはこのMeenaの能力を定量的に評価するため、SSA(Sensibleness and Specificity Average)[整合度と特異度の平均] という新しい評価尺度を導入しています。

SSAは自然な会話に必要な特性を評価するための指標で、(AIの)応答が文脈において意味をなすか、 そしてそれまでの話に対して特有なものであるか(限定的なものか)を計測します。

一般に前者は既存のチャットボットなら可能ですが、後者を達成するのは難しいとされていました。

つまり、「私はテニスが好きです。」という発話に対して「私もです。」という応答はどんな話題にも当てはまりますが、 「私もです。ロジャー・フェデラーにはなれないけども!」という応答は当てはまる場面が限られてきます。 こういった応答ができるのがこのMeenaというわけです。

Googleはクラウドワーカーを使ってMeenaとの会話のサンプルを生成し、約100の会話で発話を評価しました。 このSSAに対して、Meenaは以下の好成績を叩き出しています。

meena1.png

[✳︎Google AI Blog より引用]

Humansは人間、Mitsuku、Cleverbot、DialoGPT、Xiaoiceは既存のチャットボットを指します。
Mitsukuはチューリングテストコンテストで有名な ローブナー賞 を過去4度受賞するほどのチャットボットでしたが、Meenaはこれに圧倒的差を付け、人間のスコアにかなり近い値を出しています。


Meenaとの会話

実際にMeenaと人間が対話しているテキストがGithub上に上がっているのでそれらの1つを見てみましょう。

まず比較のためにMitsukuと人間の対話を見てみます。

meena2.png

29行目で人間側が「遅刻した」と言っているのに、Mitsukuはその後3回も「あなたは遅刻したの?」と聞き返しています。ちゃんとした会話が成り立っていません。

ではMeenaと人間の対話はどうでしょうか。

meena3.png

論文のトピック(題名)について人間側が迷っているようですが、それに対しMeenaは「水中での呼吸法」とそこそこ的確な返答ができています。


チャットボットの今後の可能性

Meenaについて、今回Googleは「整合度と特異度にのみフォーカスしたが、今後の課題として他の属性(個性や事実性)にも注視していく」と述べています。

他にも、Meenaに安全性があるか、バイアス(偏見)を持たないかといった倫理的側面がチェックされるまで一般向けに公開しないとしています。

数年前 Microsoftが発表したチャットボット「Tay」が人種差別発言をしたことはまだ記憶に新しいです。 こういった差別的発言をしないようなチャットボットができる未来が楽しみです。

MeenaのSSAのスコアの高さには正直驚きを隠せませんでした。AIが人間の会話レベルに到達するのはそう遠くない未来かもしれません。

コールセンターでは、顧客からの製品に関する簡単な質問に答えるチャットボットを導入している企業もあるそうですが、 近い将来はクレーム対応など難しいタスクもこなせるようになるかもしれません。今回のMeenaの発表は、今後の技術発展への期待が止まらないものでした。


チャットボットを用いて改善できる業務

人間と同レベルもしくはそれに近いレベルのチャットボットが誕生したら何ができるようになるでしょうか。

先程述べたことも含め、以下のようなことが考えられます。

  • サービスや製品に関するお客様の疑問は全てチャットボットで対応できる(現時点で一部をAIに任せている企業もある)
  • 音声による感情分析と合わせれば、クレーム処理など高度な対応もできるようになる
  • お客様との会話データを全て残せるため、それらのデータからお客様のニーズをキャッチできる


こういったメリットはたくさんありますが、チャットボットと人間の応答を比較した時、ちょっとしたニュアンスの違いや倫理観のズレが生じる時もあるでしょう。
特にAIが犯したミスに関して、その責任の所在が「AI」にあるのか「AIを作った人間」にあるのかという議論も出てきます。
倫理的側面も含め、こういった問題との向き合い方がこれからの課題となってくるでしょう。


参考文献

Towards a Human-like Open-Domain Chatbot
Towards a Conversational Agent that Can Chat About...Anything


Twitter・Facebookで定期的に情報発信しています!

AIの進歩が目覚ましい近年、文章の文脈まで読み取ってくれるAIがあれば嬉しいですよね。
ビジネスの場面でも、クレームとお褒めの言葉を分類したり、議事録のアジェンダと中身が合っているかなど、文脈を判断できればAIの使える場はぐんと広がります。

文脈を機械が読み取るのは難しく、研究者も今まで苦労してきました。
しかし近年、ELMoとBERTという2つのAIが現れたことで、今機械学習は目覚ましい進歩を遂げています。
多くの解説記事は専門家向けに書いてあることが多く、要点だけをまとめたり、仕組みをわかりやすく説明した記事は多くありません。
今回の記事は、そういった「よくわからないけどもっと知りたい」「本質をつかみたい」という要望に答えるべく、最新のAIをできるだけわかりやすく説明することを目的としています。


目次

  • 今までのAI
  • ELMoとBERT ~新星の誕生~
  • 弱点と新たな新星


今までのAI

今までのAIは、単語一つ一つに対して数字を当てはめる方式をとってきました。
有名な例がWord2Vecの
「王」+「男」ー「女」=「女王」
という式です。上手に学習ができれば、このように単語ごとに数字を当てはめても他の単語との相関関係を表す事ができました。

しかし、大きな問題があります。
例えば、次の文を御覧ください。

「昨日から雨が降っている」

この文は、砂漠地域についての文章と熱帯地域の雨季についての文章では意味合いが違ってきます。
他にも、

「コストは2倍だが、利益は3倍だ。」

「利益は3倍だが、コストは2倍だ。」

の2つでは重点が違いますし、順番が違うだけで文章全体の意味合いが変わってきてしまいます。
つまり、単語ごとの数値だけではなく、文脈を考慮した数値を使わないとAIは文章を正確に判断できないのです。

ELMoとBERT ~新星の誕生~

そこで2018年に生まれたのがELMo、そしてその後継者のBERTです。
ELMoは文の単語を1語ずつ読み取り、単語の情報を徐々に蓄積させていく手法を使います。
以下の図を御覧ください。

image1.png

緑の箱はLSTMで、前の単語の情報を引き継いで新しい単語の情報を学習させています。(LSTMについてはこちらを参照
つまり「利益は3倍」というフレーズが、前に「コストは2倍だが」と書いてあるという情報をふまえた上でAIに学習されることになります。
当然、後ろ側が前を参照できるだけでは、前の単語にしっかりと文脈を反映させることはできません。そこで文章の単語を逆向きにして同じような学習をさせます。
image2.png シンプルなように見えますが、ELMoはこの手法を使うことで様々な記録を塗り替え、AIの進歩に大きく貢献しました。

その僅か数カ月後、2018年10月に今度はGoogleがELMoを改良したBERTを発表し、時代はBERTのものになりつつあります。
BERTが改良した点は、主な計算にLSTM(上図で緑の箱)の代わりにTransformer(下図でオレンジの箱)を採用したことです。

image3.png

Transformerとは強そう名前ですが、論文"All you need is Attention"において注目を浴びたAIの学習機で、Attentionと呼ばれるその名の通り「注意度」を考慮に入れた非常に強力なAIのモデルとされています。(Attention モデルについてはこちらを参照
LSTMより強力な部品を使っている分、BERTのほうがELMoよりも性能が高いというわけです。

BERTはコードが公開されているだけでなく、日本語を含めた104ヶ国語に対応しており、まさにGoogleの力を存分に発揮したAIとなっています。

文脈を読み取るとどのような課題に対応できるのでしょうか。
実際にBERTは

  • MNLI:含意関係の分類
  • QQP:質問内容が同じであるかを当てる
  • QNLI:質問と文が与えられ、文が質問の答えになるかを当てる
  • SST-2:映画のレビューに対する感情分析
  • CoLA:文の文法性判断
  • STS-B:2文の類似度を5段階で評価する
  • MRPC:ニュースに含まれる2文の意味が等しいかを当てる
  • RTE:小規模な含意関係の分類


で最高スコアを叩き出しています。


弱点と注意点

ここまで解説したように、BERTは文章の文脈を考慮に入れて文章を分類・生成できる強力なAIで、今後の応用が期待されています。
しかし弱点があるわけではなく、正しく理解しないとお金と時間の無駄になってしまいます。
今回の記事では要点のみを説明したので、細かい部分や数学は省略してあります。
また、BERTは文章をインプットし、文章を出力するAIです。なので実際の個別の課題を解く際はBERTの出力を更に分類したりするモデルが必要になってきます。
しかし言語全体の文脈感を反映させるにあたってやはり強力なAIと言えるでしょう。

また、BERTには弱点があります。
実際の学習では、文章の単語をランダムに隠し、そこを学習させることで精度を向上さています。
しかし実際の文章では文中の単語が隠されていることはなく、また複数の単語が隠されていた場合、それらの間の関係性を学習することができません。

例えば、
[単語]は2倍だが、[単語]は3倍だ。

というふうに隠されていた場合、文が正解として認識される単語の組み合わせは多数あります。なので本来の「コスト」「利益」という単語を学ぶよりも精度が下がってしまいます。
この弱点を克服したのが、今年(2019年)6月に発表されたXLNetなのですが、それはまた次回のブログ記事でご紹介致します。

以上、文脈を読み取ることができる最新のAIについて解説してきました。細かい部分は省略していますが、本質だけを突き詰めると意外とシンプルだという事がわかります。
文脈を読み取ることができれば、社会の様々な場面でAIがますます活躍することになるでしょう。
そのために複雑な数学を理解する必要はありませんが、AIの本質をしっかり把握しておくことで、変化の波に遅れることなく、AI活用の場を見出す事ができるのです。


アクセルユニバースの紹介

私達はビジョンに『社会生活を豊かにさせるサービスを提供する。』ことを掲げ、このビジョンを通して世界を笑顔にしようと機械学習・深層学習を提案しています。
例えば、現在人がおこなっている作業をシステムが代わることで、人はより生産性の高い業務に携わることができます。


当社ではみなさまの課題やお困り事を一緒に解決していきます。
下記にご興味がありましたら、問い合わせ口からご連絡ください。

  • 問い合わせ業務を自動化したい
  • 入力された文章を振り分けたい
  • 機械学習・深層学習は他になにが出来るのか興味ある


Twitter・Facebookで定期的に情報発信しています!

はじめに

 最近のAIは音声認識や翻訳においては高い精度を出すことができます。
例えばAIが英語から日本語に翻訳する時、私達日本人が読んで多少の違和感があったりもしますが英文がどんなことを言っているのか理解することはできます。  
もしも機械が言語を理解して、人間と違和感なく会話できたらどうでしょう。そのようなことが可能になると、機械がどのようにして言語を理解したかを見ることによって、人間には気づくことができなかった新たな言語に関する発見ができるかもしれません。
さらには私達が子供の頃、お母さんなどの周りの言葉を聞いて徐々に話すようになり言葉を理解し始めました。これがどのようなメカニズムで理解されているか発見できるかもしれません。また、極論を言えば人間が機械に言語理解を任せれば良いので人間は時間をかけて言語を勉強する必要もなくなるかもしれません。このブログでは機械が言語を理解するための学問に関して簡単に書きます。

目次

  • はじめに

  • 機械が言語を理解するためには

  • 自然言語処理とは

  • 自然言語処理でできること

  • まとめ

機械が言語を理解するためには

 機械が言語を理解するということは機械がただ翻訳できればよいというわけでわありません。機械が文から人間がどのようなことを伝えたいか理解するためにはどのような壁があるでしょう。

  • 人間が話したり書いたりした文章から意味を理解する

  • 意味を理解したら人間が必要としてる回答を見つける

  • 回答を見つけたら人間にわかるように伝える

などなど...

 上記で挙げたものは全て難しいです。このような壁を乗り越えるためにどうすればよいでしょう。そこで登場するのが自然言語処理です。

自然言語処理とは

 自然言語処理とは、先程箇条書きであげた壁を乗り越えるための学問で機械に言語を理解させることを目標にしています。自然言語というのは人工言語(人工的に作られた言語、プログラミング言語)と対比させた言い方で人間が普段使っている言語のことです。

Alt text

 簡単に自然言語処理の歴史を説明します。

 1940〜1960年ごろは黎明期と呼ばれ1946年に初めてコンピュータが誕生しました。当初の目的は、弾道計算や暗号解読などの軍事目的でした。このコンピュータが翻訳にも使えるのではないかとロックフェーラー財団のウィーバーが考えました。この考えをきっかけに米国内で機械翻訳への関心が高まり1952年ジョージタウン大学とIBMが共同で翻訳プロジェクトを立ち上げロシア語から英語への小規模な翻訳実験が始まりました。これが自然言語処理の始まりです。 

その後、米国はソ連の科学技術の実態を知るべくロシア語から英語の翻訳に関する研究に関して多額の研究予算を投入しました。これにより機械翻訳は進展していきました。この時代は、コンピュータの処理能力が十分でなかったことも関係し研究者が自由な発想で夢を膨らましていたそうです。
スクリーンショット 2019-12-20 18.35.10.png

 1960〜1990年頃は忍耐期と呼ばれ莫大な研究費をかけましたが、研究が進展するに連れ、問題の難しさが認識されるような状況になりました。
1966年には機械翻訳の現状と将来に関する調査結果をALPAC報告書と呼ばれる報告書にまとめ、そこには近い将来に機械翻訳をすることは困難であり、言語の理解を目指す基礎的な研究を行うべきである、という内容のものでした。この報告書を機に、米国では機械翻訳においてほとんど研究費が出なくなりました。
更にこの頃は、自然言語処理の研究の難しさが明確になり、チェスのような明確に定義された問題における探索などに興味の中心が移っていきました。

この頃の自然言語処理に関する重要な出来事といえば1967年のBrown Corpusの発表です。
これは米国の言語の使用を調査する目的で、電子化された文書として初の100万語規模のコーパス(簡単に言えばテキスト文書の集合にある種の情報を付与したものです)で、新聞、雑誌、書籍など様々なジャンルのテキストをバランスよく収集したものを発表しました。1970年頃からコンピュータの処理能力が向上し言語やテキストを扱う基本的な環境が整い出しました。しかし、機械翻訳に代表される知的処理についてはまだ実用には精度が足りない状況でした。
スクリーンショット 2019-12-20 18.54.35.png

 1990年頃から現在までは発展期と呼ばれ、この頃はインターネットが世界的に普及し、社会基盤になった時期です。Brown Corpusの経験に学び各地で数億語規模のコーパスが作られました。1993年にはBrown Corpusのテキストに解釈を与えたPenn Treebankが最初の論文として発表されました。これは今後の機械学習に基づく自然言語処理研究を牽引したデータになりました。機械翻訳においても1980年代後半から統計的機械翻訳の研究を行いました。しかし、当時のコンピュータの処理能力や対訳コーパスの不足により十分に研究は発展しませんでした。
ところが、1990年代後半あたりから計算環境や対訳コーパス環境が整い、米国が機械翻訳によって紛争地域の素早い情報収集をするなどの目的から再度、多額の研究費を出すようになったこともあり、2000年以降、機械翻訳研究の大きな進展が見られました。またこの頃は、音声自動翻訳システムいわゆる通訳システムの研究も始められました。日本では東京オリンピック・パラリンピックが開催される2020年を目標に実用システムの開発を目指しています。このような自然言語処理の発展を強く印象づける出来事として2011年、Watsonが米国の人気クイズ番組「Jeopardy!」で人間チャンピオンに勝利しました。Watsonは約3000個のCPUからなる並列コンピュータによって、自然言語による質問を理解し、ウィキペディアなどの大量の情報の中から適切な回答を選択するシステムでした。更に、自然言語処理に大きな技術革新として2015年頃から本格化し始めたニューラルネットワークです。ニューラルネットワーク自体は1940年代に提案されていましたが当時のマシンパワーでは計算力が足りず難しい状況でした。


2000年代に入り、マシンパワーの増大、ビックデータの利用、アルゴリズムの改良などから再び注目されました。2010年代に入り画像認識、音声認識などの様々なタスクで大きな精度向上が見られるようになりました。特に、ニューラルネットワークを用いた翻訳手法、ニューラル機械翻訳は大きな精度向上をもたらし、機械翻訳を一気に実用レベルの技術に押し上げました。
fabio-oyXis2kALVg-unsplash.jpg

 自然言語処理の現状としてDeepLearningの登場もあり、文章を単語単位に分割し単語がどのように並んでいるかパターンを捉えることや、似ている単語を把握する事ができます。これに関しては実用化もされていて有名なものだと新聞記事の単語の関係性などを機械が学習し記事の重要な部分を抜き出してまとめてくれる要約サービスがあります。しかし、機械が言語を理解することはDeepLearningを用いた最新モデルとされているBERT(バート)でさえ実現することはできませんでした。機械が言語を理解するにはまだまだ研究段階であり時間を必要としているのが現状です。

自然言語処理でできること

自然言語処理でできることを今回は3つ紹介します。

コールセンターの対応を自動化

コールセンターの業務はマニュアル通りに電話応対をし人間がマニュアルを参照し適切な回答を選択しています。マニュアルで対応できない質問に対しては後日回答や担当の者に電話をつなげるなどの対処が必要です。自然言語処理を用いれば今まで人がマニュアル通りに応対していたところを、機械で実現できます。音声認識により機械が質問を理解し、自然言語処理を用いて質問にあった適切な回答を選択します。

教育現場において生徒のSNSを分析しいじめ発見

SNS分析をする際も自然言語処理は有効です。自然言語処理の中の文書分類を用い、SNSに書き込まれた文章に対してこの文章はいじめに関係しそうな単語がどの程度含まれているか確率的に分析し、その確率が高いときはいじめに関係している文章とし、生徒のいじめ早期発見につなげます。

コンビニやスーパーでアンケートを自動で分類するシステム

コンビニやスーパー等においてアンケートを自動で分類する際もクラスタリングを用いることで可能です。大量のアンケートから項目ごとに似た回答をしているものをグループ化し、アンケートの分類を自動化する事が可能です。具体的な手法としてはK-means方というのがあり詳しくはこちらを参考にして下さい。

まとめ

最近の話題だと、東ロボくんというロボットが東大に入れるかというプロジェクトがあります。これは、機械が言語を理解できたら確実に合格できると言われています。あくまで想像ですが、入学後も常に成績トップで人間には到底かなわない存在になってしまうかもしれません。
それほど自然言語処理という学問はかなり難しいとされています。難しい分、研究が進み機械が言語を理解したら私達の常識が変わったり、人間の言語に対する理解が深まり様々な場面で応用できることが期待されており、私達はその難問に挑戦します。

参考文献

コンピュータで言葉を理解する言葉の意味を処理するとは?

人間と人工知能の違い

チャットボットAIの現状を解説!自然言語処理は今なにができるの?

自然言語処理〔改訂版〕 (放送大学教材) 黒橋禎夫著


Twitter・Facebookで定期的に情報発信しています!

※本記事の対象:自然言語処理という言葉は聞いたことはあるが、どういうアプローチで処理がされているかイメージが湧かない方(大学レベルの数学の知識は必要)
※内容はオーム社『ゼロから学ぶDeep Learning2』を参考にしている

目次


1. はじめに:自然言語処理(NLP)とは
2. シソーラスによる手法
3. カウントベースの手法( 統計的手法 )
4. カウントベースの手法の改善点
5. 【次回】word2vec( ←これがメイン )
6. まとめ
7. 参考文献

1.はじめに:自然言語処理(NLP)とは

まず一般に 自然言語 (Natural Language)とは、人間によって日常の意思疎通のために用いられる、文化的背景を持って自然に発展してきた言語(日本語、英語、中国語など)である。
そこで 自然言語処理 (Natural Language Processing: NLP )とは、一言で言うと「我々が普段用いてる言葉をコンピュータに理解させるための技術」である。
NLPの目標とするところは、人間が話す「同じような文章でも意味や表現が異なるような」言葉をコンピュータに理解させ、我々にとって有益なことをコンピュータに行わせることである。例えば機械翻訳、検索エンジン、文章の感情分析などが挙げられる。
我々の身の回りではそのような自然言語処理の技術がすでに数多く使われている。

我々の使う言葉は「文字」によって構成され、言葉の意味は「単語」によって構成されている。「単語」は、言わば意味の最小単位である。
つまるところ、自然言語をコンピュータに理解させるには、「単語の意味」を理解させることが重要であるといえそうだ。
そこで本記事では「単語の意味」をうまく捉えた表現方法について「シソーラス」による手法、「カウントベース」の手法の2つを見ていく。 

2.シソーラスによる手法

「単語の意味」を表すためには、人の手によって単語の意味を定義することが考えられる。例えば『広辞苑』のように、ひとつひとつの単語に対してその単語の意味を説明することである。
しかし自然言語の歴史を振り返ると、『広辞苑』のように人が使う一般的な辞書ではなく 、 シソーラス (thesaurus)と呼ばれるタイプの辞書が多く使われてきた。
シソーラスとは「類語辞書」のことで、「同義語」や「類義語」が同じグループに分類されている。例えば、「car」という単語に対して、
自然言語処理 のようにいくつかの同義語が存在することが分かる。
また、自然言語処理において利用されるシソーラスでは、単語間で「上位と下位(is a の関係)」、「全体と部分(part-of の関係)」などのより細かい関係性が定義されている場合がある。次のようなグラフ構造によって各単語の関係性が定義される。
自然言語処理 このグラフ構造だと、「car」の上位概念に「motor vehicle」という単語が、また「car」の下位概念に「SUV」などの具体的な車種があることが示されている。
このように全ての単語に対して類義語の集合を作り、それぞれの関係をグラフ構造で表現することで、単語間のつながりを定義できる。
自然言語処理のアプリケーションにおいてシソーラスをどのように利用するかというと、例えば検索エンジンにおいて、「automobile」と「car」が類義語であることを知っていれば、「automobile」の検索結果を「car」の検索結果に含めることができる。

WordNet

自然言語処理の分野において、最も有名なシソーラスは「WordNet」である。WordNetは1985年からプリンストン大学で開発がスタートされたシソーラスであり、様々な自然言語処理のアプリケーションにおいて大いに活躍してきた。
WordNetを使えば類義語を取得したり、「単語ネットワーク」を利用したりすることができる。また、「単語ネットワーク」を用いれば単語間の類似度を算出することも可能だ。
しかし既にお気付きの方もいるだろうが、このWordNetなどのようなシソーラスには、以下のような欠点がある。

時代の変化に対応することが困難
時とともに新しい言葉が誕生し、古い言葉は廃れていくように我々の使う言葉は「生きて」いる。
人の作業コストが高い
例えば、現存する英単語は1,000万語を超えており、それぞれの単語に対し定義付けを行うには大幅な人件コストがかかる。
単語の細かなニュアンスを表現できない
似たような単語であったとしてもそれぞれニュアンスは異なり、それを人間の手によって関連付けを行うのは至極困難。

このように、シソーラスなどの人手によって単語の意味を定義付けていく手法には大きな問題がある。
そこでこの問題を回避するために、続いて「カウントベースの手法」、ニューラルネットワークを用いた「推論ベースの手法【次回】」を紹介する。
これら二つの手法は、大量のテキストデータから自動的に「単語の意味」を抽出する、つまり、単語の関連付けに人が介入しなくても良いということだ。

3.カウントベースの手法【統計的手法】

これからカウントベースの手法を説明していくが、ここでは「コーパス」と呼ばれる大量のテキストデータを用いる。
このコーパスと呼ばれるデータは、自然言語処理の研究やアプリケーションのために目的を持って収集されたテキストデータである。
自然言語処理に関する分野で有名なコーパスといえば、WikipediaやGoogle Newsなどのテキストデータが挙げられる。

分散表現・分布仮説

さて、世の中には様々な「色」が存在するが、それらの色には「暗紅色」や「飴色」などの固有の名前が付けられている。
他方RGBの3成分がどれだけの割合で存在するかといった方法でも色は表現できる。つまり色を3次元のベクトルとして表現できるということである。
注目すべき点はRGBのようなベクトル表現の方がより正確に色を表現、指定できるということである。例えば先の飴色のようにどういう色なのか想像できない場合、飴色のRGBは(R, G, B)=(144, 103, 62)と表現できるので、明るい茶色っぽい感じがわかる。
また、色同士の関連性もこのベクトル表現の方が容易に判断しやすく、定量化も行えるので便利である。
このようなベクトル表現を、今議論している「単語」についても行えないだろうか?我々の目指すべきゴールは「単語の意味」を的確に捉えたベクトル表現である。
これは自然言語処理の分野では、単語の分散表現と呼ばれる。
自然言語処理の歴史において、単語をベクトルで表す研究は今まで数多く行われてきたが、その重要な手法の殆どがあるアイデアに基づいていることが分かる。
それは『単語の意味は、その周辺の単語によって形成される』という非常にシンプルなものである。
これは、分布仮説 (distributional hypothesis) と呼ばれている。つまり単語自体には意味がなく、その単語の「コンテキスト(文脈)」によって単語の意味が形成されるということだ。
例えば、「I drink water.」「You drink coffee.」などのように「drink」という単語の近くには飲み物が現れやすい。
また「I guzzle water.」「You guzzle coffee.」などの文章から、「drink」「guzzle」の意味は近そうだといった具合である。(guzzle: ガブガブ飲む という意味)
本記事では「コンテキスト」と言うとき、注目する単語に対してその周囲にある単語のことを指す。またコンテキストのサイズを「ウィンドウサイズ」という言葉で表すことにする。
例えばウィンドウサイズ2の場合、 自然言語処理
といったように、「goodbye」に注目したときその左右の2単語をコンテキストとして利用する。

共起行列

では、分布仮説に基づいて単語をベクトルとして表す方法を考えてみよう。
そのための素直な方法は、周囲の単語をカウントする「カウントベースの手法」である。
具体的には、或る注目している単語に対して、その周囲にどのような単語がどれだけ現れているのかをカウント、集計するのである。
では実際に、先の"You say goodbye and I say hello."という文章について、そのコンテキストに含まれる単語の頻度をカウントしていこう。ウィンドウサイズは1とする。
この文字列には全部で7つの単語(ピリオド含む)が含まれており、「You」という単語は[0, 1, 0, 0, 0, 0, 0]とベクトル表記できることがわかる。
なぜならばウィンドウサイズを1としているので、「You」の周辺単語は「say」のみであり、「say」にのみコンテキストの目印として共起した回数の1をカウントしているからである。
次に「say」については文字列中に2回現れていることに注意すると、[1, 0, 1, 0, 1, 1, 0]とベクトル表記できる。これらの作業を7つの単語について全て行うと、次のようなテーブルが得られる。
自然言語処理 このテーブルの各行が、該当する単語のベクトルに対応している。これは行列の形に対応していることから 共起行列と呼ばれている。
ここでは手動で共起行列を作成したが、もちろんこれはpythonなどを用いて自動化でき、コードはGithub上に上がっているので参照してもらいたい。

ベクトル間の類似度

今、共起行列で単語をベクトル化することに成功したが、続いてベクトル間の類似度を計測する方法を見ていこう。
ベクトル間の類似度を計測するのには、ベクトルの内積、ユークリッド距離などが代表例としてあげられるが、単語のベクトル間類似度を計測する際は コサイン類似度が主に使われる。コサイン類似度は以下の式で定義される。
\(\boldsymbol{x}=(x_1, x_2, \cdots ,x_n ), \boldsymbol{y}=(y_1, y_2, \cdots ,y_n )\)とした時、
$$ sim_{cos} = \dfrac{\boldsymbol{x} \cdot \boldsymbol{y}}{|\boldsymbol{x}| |\boldsymbol{y}|} = \dfrac{x_1 y_1 + x_2 y_2 + \cdots + x_n y_n}{\sqrt{x_1^2 + x_2^2 + \cdots + x_n^2} \sqrt{y_1^2 + y_2^2 + \cdots + y_n^2}} $$ 分子にベクトルの内積、分母に各ベクトルのL2ノルムの積を取っている。
注目すべきポイントはベクトルを正規化してから内積を取っているということである。2つのベクトルが同じ向きを向いているときにコサイン類似度は1、完全に反対向きだと-1になることは直感的に分かるだろう。

4.カウントベースの手法の改善点

さて、ここまでで我々は単語の共起行列を作れるようになり、それによって我々のゴールであった単語のベクトル化に成功した。
しかし、カウントベースの手法(特に共起行列の部分)には様々な改善点があり、今回はその改善点について取り組んでいくことにする。

相互情報量(Pointwise Mutual Information)

先程も述べたように共起行列の要素は、2つの単語が共起した回数を表している。
しかしこの回数は実際あまり良い性質を持っていない。というのも、例えばあるコーパスにおいて「the」と「car」の共起を考えてみることにする。「the」は冠詞なので「...the car...」などというフレーズは多数あり、共起回数は必然的に大きくなる。
他方、「car」と「drive」は明らかに強い関係があるが、「...drive car...」というフレーズの出現回数は低いと予想できる。つまり、単に共起回数だけを見てしまうと「drive」よりも「the」のほうが強い関連性があると評価してしまうことになる。
こういった問題を解決するために、 相互情報量(PMI) という指標が使われる。これはX、Yという確率変数に対して次の式で定義される。
$$ PMI(X,Y) = \log_2 \frac{P(X,Y)}{P(X)P(Y)}$$ このPMIの値が大きいほど関連性が高いことが示される。
この式より、単語単独の出現回数が考慮されたことになるので良い指標と言えそうだ。
しかし、このPMIの式には1つ問題がある。それは、2つの単語で共起する回数が0となるとき\(PMI =\log_2 0 = -\infty\)となってしまうことである。それに対応して、実際によく使われるのは次の 正の相互情報量(Positive PMI:以降PPMIと書く) である。
$$ PPMI(X,Y) = max(0, PMI(X,Y))$$ これは、PMIがマイナスのときは0を返す関数と見ることができ、単語間の関係性を0以上の実数値として表している。
これによって共起行列をPPMI行列に変換できるのだが、このPPMI行列にも大きな問題がある。例えば語彙数100万のコーパスを扱うとなると、ベクトルの次元数も必然的に100万にまで及び、このベクトルをそのまま用いるのは現実的でない。
さらに、PPMI行列の要素を見てみるとその多くが0であることが分かる(疎な行列)。これはベクトルの殆どの情報が重要ではない、つまり各要素の持つ重要度は低いと言える。このようなベクトルはノイズに弱く、頑健性に乏しいため次に説明する次元削減を行うのが一般的である。

次元削減(Dimensionality reduction)

次元削減とは、ベクトルの次元を削減することに他ならないが、ベクトルの持つ「重要な情報」をできる限り保持した上で削減することがポイントである。
次元削減を行う方法はたくさんあるが今回は特異値分解(SVD)を使った次元削減を行う。SVDは任意の行列を3つの行列の積として表せる。数式で書くと、
$$ X = \boldsymbol{US}\boldsymbol{V}^{T} $$ ここでUとVは直交行列でありその列ベクトルは互いに直行する。またSは対角行列である。
これらを視覚的に表すと次のようになる。(薄緑の部分にそれぞれ要素の値が入る)
自然言語処理 さて、上式においてUは直交行列であったがこの直行行列は何らかの基底を形成している。
つまりUという行列を単語空間として扱うことができる。またSは対角行列であり、その対角成分には特異値が大きい順に並んでいる。特異値は対応する基底の重要度とみなすことができる。つまり以下のように重要でない要素を削ることができるのである。
自然言語処理Wikipedia
ゼロから学ぶDeep Learning2

このアーカイブについて

このページには、過去に書かれた記事のうち自然言語処理カテゴリに属しているものが含まれています。

次のカテゴリは画像認識です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。