自然言語処理の仕組みと手順

31
自然言語処理の仕組みと手順 株式会社ウサギィ 五木田和也 @kazoo04

Transcript of 自然言語処理の仕組みと手順

Page 1: 自然言語処理の仕組みと手順

自然言語処理の仕組みと手順株式会社ウサギィ

五木田和也@kazoo04

Page 2: 自然言語処理の仕組みと手順

自己紹介

• 五木田 和也 (Twitter: @kazoo04)

• 株式会社ウサギィの機械学習エンジニア

• 画像認識、自然言語処理、音声認識が多め

• 人工知能がすき

• 人工知能アドベントカレンダーを書いたりしている

アルバイト募集中

Page 3: 自然言語処理の仕組みと手順

今日話すこと• 基本編

• 自然言語処理とは?

• 実例

• 基本技術

• 応用編

• Deep Learning ベースの手法

• 最先端の機械翻訳の例

• 弊社の取り組み

Page 4: 自然言語処理の仕組みと手順

自然言語処理とは?

• 機械翻訳

• かな漢字変換(IME)

• 感情推定

• 自動要約

• データマイニング(マーケティング)

• 検索エンジン

• スパムメールフィルタ

• OCR(光学文字認識)

• 音声認識、音声合成

• 質問応答システム etc.

自然言語(日本語や英語)をコンピュータで処理すること全般

Page 5: 自然言語処理の仕組みと手順
Page 6: 自然言語処理の仕組みと手順
Page 7: 自然言語処理の仕組みと手順
Page 8: 自然言語処理の仕組みと手順

自然言語処理の特徴• 離散的な入力(文字、単語)

• 単語が一方向にだけ流れていく(系列データ)

• 単語の順序には比較的強い制約(文法)がある

• 単語の数が非常に多い(数十万~)

• 入力が可変長

• 曖昧

このあたりが特に面倒くさい うまいこと処理したい

Page 9: 自然言語処理の仕組みと手順

検索エンジン

• 文書が増えても速度を落としたくない

• もっともらしい文書ほど上位に表示したい

• 表記ゆれを吸収したい(犬=イヌ=いぬ)

• タイプミスには柔軟に対応して欲しい

大量の文書の中から、指定したキーワード(クエリ)が含まれる文書を探したい

Page 10: 自然言語処理の仕組みと手順

機械翻訳

• 矢の速度を測るようにハエの飛ぶ速度を測れ

• 時間は矢のように(早く)過ぎる

• 時ハエは矢が好き

• 光陰矢の如し

• etc.

• ある言語を別の言語に変換する

• 日本語⇔英語 など色々

• 同じ単語でも別の意味を持つ(語義曖昧性)

• 「常識」を知らないと正しい翻訳は難しい

• 需要の割に精度はイマイチ→今後アツい分野

Time flies like an arrow.

Page 11: 自然言語処理の仕組みと手順

かな漢字変換

ひらがなのみからなる文字列を漢字仮名交じり文に変換したい

きしゃのきしゃがきしゃできしゃする

貴社の記者が汽車で帰社する

• Microsoft IME

• ATOK

• Anthy

• Google日本語入力 (Mozc)

• ことえり

• Wnn

帰社の記者が汽車で喜捨する

Page 12: 自然言語処理の仕組みと手順

よく出てくるアプローチ

データを扱いやすい形に変換してから、機械学習などで所望の結果を得る

例)

• ビタビアルゴリズムを扱う

• 隠れマルコフモデルを使う

• Bag of Words を使う

• Neural Network (Deep Learning) を使う

今日はこの2つを中心に

Page 13: 自然言語処理の仕組みと手順

自然言語処理の基本• 文をそのまま扱うのは難しいので、適当な部分列(単語)に区切る

• どうやって?

① 形態素解析

② N-gram

• 得られた単語列に対して様々な処理を行う

Page 14: 自然言語処理の仕組みと手順

形態素解析

文を解析して適切に分かち書きする

すもももももももものうち

• すもも(名詞,一般) • も(助詞,係助詞) • もも(名詞,一般) • も(助詞,係助詞) • もも(名詞,一般) • の(助詞,連体化) • うち(名詞,非自立)

代表的なソフトウェア: MeCab, ChaSen

Page 15: 自然言語処理の仕組みと手順

N-gram Model

東京都に行く

•  東 • 東京 • 京都 • 都に • に行 • 行く • く

• 辞書が不要で言語に依存しない

• 形態素解析と組み合わせても良い

(N=2)•   東 •  東京 • 東京都 • 京都に • 都に行 • に行く • 行く • く

(N=3)(N=1)• 東 • 京 • 都 • に • 行 • く

Page 16: 自然言語処理の仕組みと手順

Bag of Words (BoW)• 文章の構造はすべて無視して、どの単語が含まれているかだけ見る

• BoWで文章の特徴を表現して、1つのベクトルにする(特徴量)

• 固定次元ベクトルになる

→ 色々なアルゴリズムで扱いやすくなる

• 特徴量をNaive BayesやSVMなどの機械学習(教師あり学習)で学習/判定

とても単純だが、意外とうまくいく(該当する単語の箇所を1にしたベクトル:one-hot表現)

Page 17: 自然言語処理の仕組みと手順

さらに…‥(幅広くいろいろ必要)

適切な機械学習アルゴリズム

• 少ないデータで高い精度

• 学習/認識が早い

• ノイズに強い

→ SVM, Structured SVM, SCW,

  Random Forest, GBDT, CRF……

適切なデータ構造

• 参照(検索)が高速

• メモリやディスク容量を食わない

• 更新(追加、削除)が容易

→ Trie, FM-Index, Double Array,

  LOUDS, Bloom Filter……

Page 18: 自然言語処理の仕組みと手順

応用編

• Deep Learning ベースの手法

• 分散表現

• Recurrent Neural Network

• Seq2Seqによる機械翻訳

• 弊社の取り組み

torch

Page 19: 自然言語処理の仕組みと手順

最近はDeep Learningベースの手法が人気

既存手法の問題点

• 任意の長さ(可変長)のデータが扱いづらいので適当に打ち切るしかない

➡ 長い文脈情報が利用できない(せいぜい3単語くらい)

• それぞれの単語がどれくらい似ているかといったことを考慮していない

• one-hot表現はわかりやすいが扱いづらく、学習が難しい

Page 20: 自然言語処理の仕組みと手順

それ Neural Network でできるよ

①良い単語の表現方法(分散表現, Distributed Representation)

②任意の長さの文を扱える (Recursive Neural Network など)

Page 21: 自然言語処理の仕組みと手順

one-hot表現(再掲)• ある単語が含まれていたら、その単語IDのところを1にして、残りを0にしたベクトル

• 単語が増えたら次元数も増えてしまう

• ある単語とある単語は似ている、似ていないといった情報を考慮していない

(たとえば犬と猫は近いが、犬と時計は遠い)

Page 22: 自然言語処理の仕組みと手順

Distributed Representation(分散表現)

• ベクトルの次元数を固定して、似ている単語は似た値になるようにしたい

• たとえばイヌ=[0,1], 犬=[1,1]、猫=[2,3]、車=[15,68]、トラック=[18, 70], ……

• 発想自体はかなり昔(※)からあったが、うまくいってなかった

• SGNS(Skip-gram with Negative Sampling)という手法で良い分散表現が得られることがわかった(2013年頃)

→ Word2Vec 次元を固定&意味の埋め込みが可能に!※分布仮説(1954年), 潜在的意味解析(1990年), NNLM(2003年)

Page 23: 自然言語処理の仕組みと手順

Word2Vec• 単語を数百次元くらいのベクトルに変換する

• ベクトルに単語の意味が織り込まれている

• king - man + woman = queen のような計算ができるレベル

(単語の意味がベクトルでうまく表現されているということ)

右の図は2次元でWord2Vecの概要を示したもの

Page 24: 自然言語処理の仕組みと手順

Recurrent Neural Network (RNN)

• ニューラルネットワークの出力をまた入力に戻すと系列データが扱える

• 種類は色々

- Elman型, Jordan型, etc.

• 派生アルゴリズム

- LSTM, Seq2Seq, etc.

通常のネットワーク RNN(概略図)

Page 25: 自然言語処理の仕組みと手順

ここまでのまとめ:つまりなにが嬉しかったのか?• 単語数ぶんの次元のベクトルは扱いづらいし、表現力が低い

➡ Word2Vecである程度解決

• 文は長さが可変だが、従来は固定長のデータじゃないと扱いづらかった

➡ RNNである程度解決

いままで面倒だった部分がNeural Networkで結構解決できつつある (ちなみに元になる発想自体は数十年前からあった)

Page 26: 自然言語処理の仕組みと手順

Seq2Seq による機械翻訳(※簡略化した説明)

• 英語の単語列と、それを翻訳したフランス語の単語列を与えて、うまく変換できるモデルを学習する

• 単語辞書や文法情報、係り受けの情報は与えなくてもOK

• 対訳データさえあれば、あとは自動で学習してくれる!

Page 27: 自然言語処理の仕組みと手順

Seq2Seq による機械翻訳(入力)

Who is the president of the United States? を入力する

翻訳したい文を1単語ずつネットワークに入力する(出力はなし)

Page 28: 自然言語処理の仕組みと手順

Seq2Seq による機械翻訳

入力が終わったことを表す特殊な単語を入れて、翻訳文を得るモードにする

翻訳文が1単語ずつ出力されてくるので、入力に戻すと次の単語が出てくる

Page 29: 自然言語処理の仕組みと手順

Seq2Seq による機械翻訳

終了タグが出力されるまで繰り返し、それまでの出力をつなげたものが翻訳文

Qui est le président des États-Unis?

Page 30: 自然言語処理の仕組みと手順

Seq2Seq による機械翻訳(再掲)

実際は色々なテクニックを使って精度を上げるのでもっと複雑

Page 31: 自然言語処理の仕組みと手順

実用例筆者の気持ち考えるマン

http://usagee.co.jp/nlp/

• レビュー評価の良し悪しを推定

• 高速・高精度・省メモリ

• アルゴリズムはオリジナル

(社内フレームワーク)