Upgrade to Pro — share decks privately, control downloads, hide ads and more …

『明日から君を自然言語処理案件にアサインだ!よろしくな!』 って言われる前に知っておきたかった...

『明日から君を自然言語処理案件にアサインだ!よろしくな!』 って言われる前に知っておきたかった自然言語処理分析のキホンのキ

このスライドは BrainPad AdventCalendar 2018 10日目の記事です。
自然言語処理の基本的な話を初心者向けにまとめました!

BrainPad AdventCalendar 2018はこちら↓
https://qiita.com/advent-calendar/2018/brainpad

吉田勇太 / ysdyt

December 10, 2018
Tweet

More Decks by 吉田勇太 / ysdyt

Other Decks in Technology

Transcript

  1. 自然言語処理(NLP)の主な流れ超オーバービュー MeCab・Juman・Chasen・Cabocha・Sudachi 品詞フィルター・ストップワード・名寄せ など one-hot, BOW, N-gram, TF-IDF, word embedding(word2vec)

    など 機械学習手法いろいろ, Topic model, Deep Learning 文書分類・感情分析・文書生成・文書要約・機械翻訳・bot作成 など • MeCab • One-hot/BOW • Word embedding (word2vec) • Topic model • Deep learning (RNN, LSTM, CNN) 文字列 単語・形態素列 数値化(ベクトル化) アルゴリズム計算 (前処理) このスライドで紹介する内容 キホンかつ、 有名どころの手法
  2. 文書分類 感情分析 文書生成 文書要約 機械翻訳 Bot・コンシェルジュ 自然言語処理で出来るタスク例 『ハーゲンダッツ八ツ橋味てマジヤバくない?なくない?』はポジティブか、ネガティブか? スポーツ? 芸能?

    その他? ホラー小説を書くAI「Shelley」の物語が「驚くほどに怖い」と話題に、14万ものRedditの投稿から研究者らが開発 https://gigazine.net/news/20171101-ai-shelley-writes-horror-stories/ グーグル翻訳の進化(Seq2Seqの発明) しゃべってコンシェル、Siri、 りんな etc... 謎の文書A ジャンル推定 のどれに分類できるか? ECサイトにおける商品紹介文の要約 など タスク例 例 (トピック分類・ジャンル推定) 特に、文書生成や文書要約はまだまだ技術的にも難しい...
  3. 自然言語処理分析の主な流れ MeCab・Juman・Chasen・Cabocha・Sudachi 品詞フィルター・ストップワード・名寄せ など one-hot, BOW, N-gram, TF-IDF, word embedding(word2vec)

    など 機械学習手法いろいろ, Topic model, Deep Learning 文書分類・感情分析・文書生成・文書要約・機械翻訳・bot など • MeCab • One-hot • Word embedding (word2vec) • Topic model • Deep learning (RNN, LSTM, CNN) 文字列 単語・形態素列 数値化(ベクトル化) アルゴリズム計算 (前処理) もくじ BPは人工知能の会社です。 [BP, は, 人工知能, の, 会社, です, 。] [BP, 人工知能, 会社] [[***], [***], [***]] 処理例 キホンかつ、 有名どころの手法
  4. (0. Python3を使う) 1. MeCabのインストール 2. Mecab-python3 (import MeCabでpythonから呼べるようになる) 3. mecab-ipadic-NEologd

    を入れる すべてのNLP初心者は、上記の3ステップをするためだけに 30分以上ググり続ける、というところからNLPは始まる Ubuntu 14.04 に Mecab と mecab-python3 をインストール https://qiita.com/elm200/items/2c2aa2093e670036bb30 形態素解析モジュール MeCab
  5. 自然言語処理分析の主な流れ MeCab・Juman・Chasen・Cabocha・Sudachi 品詞フィルター・ストップワード・名寄せ など one-hot, BOW, N-gram, TF-IDF, word embedding(word2vec)

    など 機械学習手法いろいろ, Topic model, Deep Learning 文書分類・感情分析・文書生成・文書要約・機械翻訳・bot など • MeCab • One-hot • Word embedding (word2vec) • Topic model • Deep learning (RNN, LSTM, CNN) 文字列 単語・形態素列 数値化(ベクトル化) アルゴリズム計算 (前処理) もくじ BPは人工知能の会社です。 [BP, は, 人工知能, の, 会社, です, 。] [BP, 人工知能, 会社] [[***], [***], [***]] 処理例 キホンかつ、 有名どころの手法
  6. あまり重要ではない情報は削除 • ストップワード(a, the, ある, いる など) • その他、出現頻度の高すぎる/少なすぎる単語 •

    数字(数字そのもの自体は処理上そんなに大切じゃない) ステミング 語形の変化を取り除き、同一の単語表現に変換す る処理(つまり原型に戻す、的な。) 例: Swimming, swims -> swim 美味しそう, 美味しかった -> 美味しい 自然言語処理における前処理の種類とその威力 https://qiita.com/Hironsan/items/2466fe0f344115aff177 テキストの前処理 自然言語処理のおいて、これらの前処理をどれだけ行えるかで精度がほぼ決まると言っても過言ではない
  7. 自然言語処理分析の主な流れ MeCab・Juman・Chasen・Cabocha・Sudachi 品詞フィルター・ストップワード・名寄せ など one-hot, BOW, N-gram, TF-IDF, word embedding(word2vec)

    など 機械学習手法いろいろ, Topic model, Deep Learning 文書分類・感情分析・文書生成・文書要約・機械翻訳・bot など • MeCab • One-hot • Word embedding (word2vec) • Topic model • Deep learning (RNN, LSTM, CNN) 文字列 単語・形態素列 数値化(ベクトル化) アルゴリズム計算 (前処理) もくじ BPは人工知能の会社です。 [BP, は, 人工知能, の, 会社, です, 。] [BP, 人工知能, 会社] [[***], [***], [***]] 処理例
  8. ある要素のみが1でその他の要素が0であるような表現方法 「ブレインパッド」 「人工知能」 「会社」 <良いところ> ・ シンプル。直感的。 <ダメなところ> ・ 単語が増えると無限に次元数が増える

    ・ ベクトル間の演算で何も意味のある結果を得られない 単語の数値化表現 「局所表現」(one-hot表現) 名詞だけ取り出す。名詞は3つ。 3つの名詞は三次元で表現できる [1, 0, 0] [0, 1, 0] [0, 0, 1]
  9. 文書A 「ブレインパッドは人工知能の会社です」 文書B 「深層学習は人工知能です」 「ブレインパッド」 [1, 1, 1, 0] [0,

    1, 0, 1] 文書の数値化表現 「bag of words(BOW)」 単語単位での数値化だけではなく、文書単位の数値化もある <良いところ> ・ シンプル。直感的。 ・ ベクトルで距離計算し”似ている”文書がわかる <ダメなところ> ・ 単語が増えると無限に次元数が増える 文書A, Bの両方にでてくる名詞をカウントして表現する 「人工知能」 「会社」 「深層学習」
  10. ビジネスコンサル [1,0,0,0,0,0] ブレインパッド [0,1,0,0,0,0] 人工知能 [0,0,1,0,0,0] 創業 [0,0,0,1,0,0] 13年目 [0,0,0,0,1,0]

    ブレインパッド, は, 人工知能, と, ビジネスコンサル, を, 行う, 創業, 13年目, の, 会社, です, 。 重みWe 重みW 重みW 重みW 重みW 対象単語のone-hotベクトルを入力とし、 前後2単語のone-hotベクトルが出力になるようニューラルネットで重みを学習 word2vecの学習 -2 -1 0 +1 +2
  11. ビジネスコンサル [0,0,1,0,0,0] ブレインパッド [1,0,0,0,0,0] 人工知能 [0,1,0,0,0,0] 創業 [0,0,0,1,0,0] 13年目 [0,0,0,0,1,0]

    重みWe 重みW 重みW 重みW 重みW (0,0,1,0,0,0) 0.3 0.2 0.4 0.5 0.6 0.1 0.6 0.6 0.5 0.2 0.4 0.9 0.5 0.4 0.4 0.1 0.9 0.5 =(0.6, 0.6, 0.5) 学習の結果得た重みWe のベクトル 0.3 0.2 0.4 0.5 0.6 0.1 0.6 0.6 0.5 0.2 0.4 0.9 0.5 0.4 0.4 0.1 0.9 0.5 「ビジネスコンサル」の ベクトル(分散表現)は 実質これ 「ビジネスコンサル」の one-hotベクトル word2vecの「重み」が「分散表現」になる
  12. - ❤️ ~= #goblue, #letsgoduke, #bleedblue, #ibleedblue, #worldautismawarenessday, #goduke, #beatduke,

    #autismspeaks, #autismawarenessday, #gobroncos, duke - ❤️ ~= #gogreen, loyals, #herballife, #happysaintpatricksday, , #stpats, , #jointhemovement, green, #hairskinnails, #happystpatricksday - ❤️ ~= , ,#springhassprung , ,#springiscoming ,#springishere, #aprilshowers, #thinkspring, #hellospring, , #wildflower, #happyearthday - ❤️~= ✨, , , , , , faldc, , brassy, topaz, peachy ,purple, #thinkpink,☁, sparkle, , shimmer, sparkles, kaleidoscope, periwinkle, , greenish -❤️ ~= gorl, , cwd, s4s, aynmalik, spvm, ulee, , , yulema, sfs, bvby, ɑnd, indirect, priv -❤️ ~= ulitzer, , peachy, february’s, tulle, mackz, kendall’s, curvy, faldc, #dancewear, strapless, , ◽, floral - ❤️ ~= , ℹ, , , ✉, , , , , paypal, , item, ⏬, , inquire, orders, payment, , , , deposit Word2Vec:発明した本人も驚く単語ベクトルの驚異的な力 https://deepage.net/bigdata/machine_learning/2016/09/02/word2vec_power_of_word_vector.html Word2vecを使ったネタ(2/2) Instagramのテキスト欄に書かれている絵文字やハッシュタグを学習してベクトル化(絵文字もテキストの一部なので学習ができる) → 絵文字の「価値」や「意味」を推測できる 絵文字同士の引き算をして得られるベクトルから絵文字の`価値`が 推測できる → 例: のほうが❤️よりも価値が高い絵文字っぽい、とか 似た絵文字はやっぱりベクトル空間上でも 同じような場所に位置する、など
  13. 「私はあなたのことが好きです」 「私はあなたのことが嫌いです」 • w2vは実際は単語の「意味」ではなく、「単語の位置関係」を学習しているだけ • なので、対義語は同じ出現位置に登場するため、w2vからみれば等価 単語感情極性対応表 http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html 「ポジティブな単語」「ネガティブな単語」の辞書 <ポジティブな単語(1に近い数が付く)>

    優れる:すぐれる:動詞:1 良い:よい:形容詞:0.999995 喜ぶ:よろこぶ:動詞:0.999979 褒める:ほめる:動詞:0.999979 めでたい:めでたい:形容詞:0.999645 賢い:かしこい:形容詞:0.999486 善い:いい:形容詞:0.999314 適す:てきす:動詞:0.999295 天晴:あっぱれ:名詞:0.999267 祝う:いわう:動詞:0.999122 功績:こうせき:名詞:0.999104 ・・・ <ネガティブな単語(-1に近い数が付く)> ・・・ 苦しむ:くるしむ:動詞:-0.999805 下手:へた:名詞:-0.999831 卑しい:いやしい:形容詞:-0.99986 ない:ない:形容詞:-0.999882 浸ける:つける:動詞:-0.999947 罵る:ののしる:動詞:-0.999961 ない:ない:助動詞:-0.999997 酷い:ひどい:形容詞:-0.999997 病気:びょうき:名詞:-0.999998 死ぬ:しぬ:動詞:-0.999999 悪い:わるい:形容詞:-1 word2vecは対義語に弱い 「好き」と「嫌い」は真反対の意味なのに、ベクトル的にはかなり 近くなってしまう、という問題がw2vにはある どうやって解決する?…よし!そういう単語だけ別にベクトルを作っとこう! という力技で解決 Word2vecの登場はかなりのインパクトがあったが、 まだこういったところが微妙…
  14. 自然言語処理分析の主な流れ MeCab・Juman・Chasen・Cabocha・Sudachi 品詞フィルター・ストップワード・名寄せ など one-hot, BOW, N-gram, TF-IDF, word embedding(word2vec)

    など 機械学習手法いろいろ, Topic model, Deep Learning 文書分類・感情分析・文書生成・文書要約・機械翻訳・bot など • MeCab • One-hot • Word embedding (word2vec) • Topic model • Deep learning (RNN, LSTM, CNN) 文字列 単語・形態素列 数値化(ベクトル化) アルゴリズム計算 (前処理) もくじ BPは人工知能の会社です。 [BP, は, 人工知能, の, 会社, です, 。] [BP, 人工知能, 会社] [[***], [***], [***]] 処理例
  15. 自然言語処理でよく使われる機械学習モデル トピックモデル(文書分類のモデル) • ある1つの文書を見ても、その内容は複数のトピック(話題)が様々な割合で含まれる、というアイデア • そのトピックや割合は、単語の分布や量に関係しているはず、というアイデア(力士の名前が出てくれば 「相撲」の話題だろうし、キャラクターの名前が出てくればアニメだろう、ということ) 遺伝子などに関する トピック 進化などに関する

    トピック 神経などに関する トピック 数字などに関する トピック ひとつの生物学論文でも、その中には複数のトピックがまちまちな割合で含まれている • 単語の分布から、その文書のトピックを推定しようというモデル(つまり、文書分類問題を解くモデル) 自然言語処理による文書分類の基礎の基礎、トピックモデルを学ぶ https://qiita.com/icoxfog417/items/7c944cb29dd7cdf5e2b1
  16. トピックモデルの詳細 • 「文書における単語の出現確率」を推定するモデル • アルゴリズム(Latent Dirichlet Allocation: LDA)はgensimというPythonパッケージがサポートしているのでお手軽に試すことが可能 • インプットデータはbag

    of words • そのため、文法規則などは考慮されない • 単語分布を元に計算を行うので正解ラベルなどは特に不要(教師なし学習) • 出力のトピック数はパラメータになる • 分類される単語はソフトクラスタリングとなる • 出力されたトピックは、出力された単語を見て人間が解釈しないといけない(←ビジネス案件でトピックモデルを使うとこれが厄介!) • 各文書の特徴量をトピック数の次元に削減していると言う意味では、topic model は次元削減の手法でもある • 各語もトピック次元で表現するということは、「語のベクトル化」の手法でもある 文書AのBOW 文書BのBOW 文書CのBOW 文書DのBOW 文書▪のBOW ・・・ LDA Topic 1 ITに関するトピック? Topic 2 旅行に関するトピック? Topic 3 農業に関するトピック? Topic 20 研究に関するトピック? トピックを推定したい 謎の文書 LDA ・・・ 学習 学習済みモデルで推論 Topic 1 Topic 2 ・・・ Topic 20 クラウド 0.5 0.2 ・・・ 0.1 ホテル 0.2 0.4 ・・・ 0.2 農業 0.1 0.05 ・・・ 0.1 ・・・ ・・・ ・・・ ・・・ ・・・ 研究 0.01 0.1 ・・・ 0.1 単語のベクトル化(分散表現)
  17. 画像分析のアルゴリズムをNLPに適応する • RNNは遅すぎる!もっと早く計算したい! • w2vの分散表現をインプットとして画像のように畳み込みを行って計算する • ウィンドウサイズ(カーネルサイズ)をある程度大きく取ることで、単語の前後関係(文脈)も少しは考慮できる • 時系列モデルよりは過去の情報を使えないが、“not amazing”

    と “amazing not“ など連続する文章は識別できる • CNNなので計算が早い Kim, Y. (2014). Convolutional Neural Networks for Sentence Classification Understanding Convolutional Neural Networks for NLP http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/