No.1 の活用場面 ノン・コーディングのデータ連携ツール .将 …...FTP入出力 PDF処理 仕様書出力 サブフロー処理 チェックポイント 優先実行
自然言語処理の仕組みと手順
-
Upload
kazuya-gokita -
Category
Engineering
-
view
4.201 -
download
0
Transcript of 自然言語処理の仕組みと手順
自然言語処理の仕組みと手順株式会社ウサギィ
五木田和也@kazoo04
自己紹介
• 五木田 和也 (Twitter: @kazoo04)
• 株式会社ウサギィの機械学習エンジニア
• 画像認識、自然言語処理、音声認識が多め
• 人工知能がすき
• 人工知能アドベントカレンダーを書いたりしている
アルバイト募集中
今日話すこと• 基本編
• 自然言語処理とは?
• 実例
• 基本技術
• 応用編
• Deep Learning ベースの手法
• 最先端の機械翻訳の例
• 弊社の取り組み
自然言語処理とは?
• 機械翻訳
• かな漢字変換(IME)
• 感情推定
• 自動要約
• データマイニング(マーケティング)
• 検索エンジン
• スパムメールフィルタ
• OCR(光学文字認識)
• 音声認識、音声合成
• 質問応答システム etc.
自然言語(日本語や英語)をコンピュータで処理すること全般
自然言語処理の特徴• 離散的な入力(文字、単語)
• 単語が一方向にだけ流れていく(系列データ)
• 単語の順序には比較的強い制約(文法)がある
• 単語の数が非常に多い(数十万~)
• 入力が可変長
• 曖昧
このあたりが特に面倒くさい うまいこと処理したい
検索エンジン
• 文書が増えても速度を落としたくない
• もっともらしい文書ほど上位に表示したい
• 表記ゆれを吸収したい(犬=イヌ=いぬ)
• タイプミスには柔軟に対応して欲しい
大量の文書の中から、指定したキーワード(クエリ)が含まれる文書を探したい
機械翻訳
• 矢の速度を測るようにハエの飛ぶ速度を測れ
• 時間は矢のように(早く)過ぎる
• 時ハエは矢が好き
• 光陰矢の如し
• etc.
• ある言語を別の言語に変換する
• 日本語⇔英語 など色々
• 同じ単語でも別の意味を持つ(語義曖昧性)
• 「常識」を知らないと正しい翻訳は難しい
• 需要の割に精度はイマイチ→今後アツい分野
Time flies like an arrow.
かな漢字変換
ひらがなのみからなる文字列を漢字仮名交じり文に変換したい
きしゃのきしゃがきしゃできしゃする
貴社の記者が汽車で帰社する
• Microsoft IME
• ATOK
• Anthy
• Google日本語入力 (Mozc)
• ことえり
• Wnn
帰社の記者が汽車で喜捨する
よく出てくるアプローチ
データを扱いやすい形に変換してから、機械学習などで所望の結果を得る
例)
• ビタビアルゴリズムを扱う
• 隠れマルコフモデルを使う
• Bag of Words を使う
• Neural Network (Deep Learning) を使う
今日はこの2つを中心に
自然言語処理の基本• 文をそのまま扱うのは難しいので、適当な部分列(単語)に区切る
• どうやって?
① 形態素解析
② N-gram
• 得られた単語列に対して様々な処理を行う
形態素解析
文を解析して適切に分かち書きする
すもももももももものうち
• すもも(名詞,一般) • も(助詞,係助詞) • もも(名詞,一般) • も(助詞,係助詞) • もも(名詞,一般) • の(助詞,連体化) • うち(名詞,非自立)
代表的なソフトウェア: MeCab, ChaSen
N-gram Model
東京都に行く
• 東 • 東京 • 京都 • 都に • に行 • 行く • く
• 辞書が不要で言語に依存しない
• 形態素解析と組み合わせても良い
(N=2)• 東 • 東京 • 東京都 • 京都に • 都に行 • に行く • 行く • く
(N=3)(N=1)• 東 • 京 • 都 • に • 行 • く
Bag of Words (BoW)• 文章の構造はすべて無視して、どの単語が含まれているかだけ見る
• BoWで文章の特徴を表現して、1つのベクトルにする(特徴量)
• 固定次元ベクトルになる
→ 色々なアルゴリズムで扱いやすくなる
• 特徴量をNaive BayesやSVMなどの機械学習(教師あり学習)で学習/判定
とても単純だが、意外とうまくいく(該当する単語の箇所を1にしたベクトル:one-hot表現)
さらに…‥(幅広くいろいろ必要)
適切な機械学習アルゴリズム
• 少ないデータで高い精度
• 学習/認識が早い
• ノイズに強い
→ SVM, Structured SVM, SCW,
Random Forest, GBDT, CRF……
適切なデータ構造
• 参照(検索)が高速
• メモリやディスク容量を食わない
• 更新(追加、削除)が容易
→ Trie, FM-Index, Double Array,
LOUDS, Bloom Filter……
応用編
• Deep Learning ベースの手法
• 分散表現
• Recurrent Neural Network
• Seq2Seqによる機械翻訳
• 弊社の取り組み
torch
最近はDeep Learningベースの手法が人気
既存手法の問題点
• 任意の長さ(可変長)のデータが扱いづらいので適当に打ち切るしかない
➡ 長い文脈情報が利用できない(せいぜい3単語くらい)
• それぞれの単語がどれくらい似ているかといったことを考慮していない
• one-hot表現はわかりやすいが扱いづらく、学習が難しい
それ Neural Network でできるよ
①良い単語の表現方法(分散表現, Distributed Representation)
②任意の長さの文を扱える (Recursive Neural Network など)
one-hot表現(再掲)• ある単語が含まれていたら、その単語IDのところを1にして、残りを0にしたベクトル
• 単語が増えたら次元数も増えてしまう
• ある単語とある単語は似ている、似ていないといった情報を考慮していない
(たとえば犬と猫は近いが、犬と時計は遠い)
Distributed Representation(分散表現)
• ベクトルの次元数を固定して、似ている単語は似た値になるようにしたい
• たとえばイヌ=[0,1], 犬=[1,1]、猫=[2,3]、車=[15,68]、トラック=[18, 70], ……
• 発想自体はかなり昔(※)からあったが、うまくいってなかった
• SGNS(Skip-gram with Negative Sampling)という手法で良い分散表現が得られることがわかった(2013年頃)
→ Word2Vec 次元を固定&意味の埋め込みが可能に!※分布仮説(1954年), 潜在的意味解析(1990年), NNLM(2003年)
Word2Vec• 単語を数百次元くらいのベクトルに変換する
• ベクトルに単語の意味が織り込まれている
• king - man + woman = queen のような計算ができるレベル
(単語の意味がベクトルでうまく表現されているということ)
右の図は2次元でWord2Vecの概要を示したもの
Recurrent Neural Network (RNN)
• ニューラルネットワークの出力をまた入力に戻すと系列データが扱える
• 種類は色々
- Elman型, Jordan型, etc.
• 派生アルゴリズム
- LSTM, Seq2Seq, etc.
通常のネットワーク RNN(概略図)
ここまでのまとめ:つまりなにが嬉しかったのか?• 単語数ぶんの次元のベクトルは扱いづらいし、表現力が低い
➡ Word2Vecである程度解決
• 文は長さが可変だが、従来は固定長のデータじゃないと扱いづらかった
➡ RNNである程度解決
いままで面倒だった部分がNeural Networkで結構解決できつつある (ちなみに元になる発想自体は数十年前からあった)
Seq2Seq による機械翻訳(※簡略化した説明)
• 英語の単語列と、それを翻訳したフランス語の単語列を与えて、うまく変換できるモデルを学習する
• 単語辞書や文法情報、係り受けの情報は与えなくてもOK
• 対訳データさえあれば、あとは自動で学習してくれる!
Seq2Seq による機械翻訳(入力)
Who is the president of the United States? を入力する
翻訳したい文を1単語ずつネットワークに入力する(出力はなし)
Seq2Seq による機械翻訳
入力が終わったことを表す特殊な単語を入れて、翻訳文を得るモードにする
翻訳文が1単語ずつ出力されてくるので、入力に戻すと次の単語が出てくる
Seq2Seq による機械翻訳
終了タグが出力されるまで繰り返し、それまでの出力をつなげたものが翻訳文
Qui est le président des États-Unis?
Seq2Seq による機械翻訳(再掲)
実際は色々なテクニックを使って精度を上げるのでもっと複雑
実用例筆者の気持ち考えるマン
http://usagee.co.jp/nlp/
• レビュー評価の良し悪しを推定
• 高速・高精度・省メモリ
• アルゴリズムはオリジナル
(社内フレームワーク)