[勉強会メモ] 「形態素解析とは?」から始める自然言語処理実践入門

カテゴリ: テック系

「形態素解析とは?」から始める自然言語処理実践入門
https://handsons.doorkeeper.jp/events/72427

日時と場所

日時:
2018-04-07(土)14:00 - 18:00

場所:
ピクスタ株式会社 
東京都渋谷区渋谷2-12-19 東建インターナショナルビル本館 5F

今回の勉強会のリポジトリ

https://github.com/hidetomasuoka/NLP-hands-ons

実行環境

https://colab.research.google.com/

作ったソースは、GoogleDriveに保存される

メモ

  • WebDB 100号に今回の勉強会の内容に類似した記事がある
    http://gihyo.jp/magazine/wdpress/archive/2017/vol100

  • 用語

    • 文章 Sentence
      1つの文

    • 文書 Document
      複数の文章の集まり

    • コーパス Coprus
      文書を構造化して集積したテキストデータ

    • 表層 surface
      活用された単語のこと <-> 原型

    • 原型 Original
      辞書に載っている単語のこと
      例: 原型=食べる, 表層=食べない、食べるとき、食べろ

    • 特徴 Feature
      文書から抽出された

    • 辞書 Lexicon

    • 固有表現抽出
        人名、地名などの情報のみ取得すること

  • 「東京都」問題
      - 「東京+都:とうきょうと」とも、「東+京都:ひがしきょうと」とも取れてしまう
      実際には「ひがしきょうと」という地名はないので、人なら「とうきょうと」だと理解することができる。

  • 特徴抽出
     文章を単語に分けて、単語の一覧を作る

  • 正規化
    データ処理の前に、データの正規化が必要

    • 文字コード
    • 改行コード
    • 全角・半角の統一
    • unicodeの正規化  (002d, 2011, 2012 -> 002d)
  • 英語を扱う上で面倒な点
    英語は分かち書きは簡単だが、イディオムの解析が面倒。イディオムというのは、"in front of"のように、複数の単語で1つの意味をなす表現のこと。

  • 形態素解析のエンジンたち

    • MeCab
    • Chasen
    • sudachi
    • Janome (jsで書かれている)
    • Kuromoji (Elastic Searchで使われている)

Colaboratoryで自然言語処理

詳細は前述のgithubリポジトリに書いてある。

  • mecabのインストール
!apt install aptitude
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3
  • mecabを使用してみる
import MeCab
m = MeCab.Tagger ("-Ochasen")
print (m.parse ("なのはちゃんかわいい"))

# なのは   ナノハ なのは 名詞-固有名詞-人名-一般       
# ちゃん   チャン ちゃん 名詞-接尾-人名        
# かわいい  カワイイ    かわいい    形容詞-自立  形容詞・イ段  基本形
  • 辞書を入れ替える

mecab-ipadic-NEologdという辞書があり、新語が多く採用されている。
Apache License, Version 2.0で、毎週2回更新されている。

git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
!xz -dkv mecab-ipadic-neologd/seed/mecab-user-dict-seed.*.csv.xz

# 日付はその時での最新のモノにする必要あり
!/usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic -u mecab-user-dict-seed.20180322.dic -f utf-8 -t utf-8 mecab-ipadic-neologd/seed/mecab-user-dict-seed.20180322.csv
!cp -p ./mecab-user-dict-seed.20180322.dic /usr/share/mecab/dic/
!echo "userdic = /usr/share/mecab/dic/mecab-user-dict-seed.20180322.dic" >> /etc/mecabrc

辞書を入れ替えてから再度試すと、分かち書きのされ方が変わる(特に流行語など)

Word2Vecを試す

詳細はhttps://github.com/hidetomasuoka/NLP-hands-ons/tree/master/word2vecのipynbを参照

gensimをインストールする

!pip install gensim

モデルをダウンロードする
※今回はビズリーチが作ったモデルを取り込む

!wget https://github.com/bizreach/ai/releases/download/2018-03-13/stanby-jobs-200d-word2vector.bin

ダウンロードできたかチェック

!ls /content

ダウンロードしたモデルをロードする

from gensim.models import KeyedVectors
import sys

w2v = KeyedVectors.load_word2vec_format("/content/stanby-jobs-200d-word2vector.bin", binary=True)

Javaと類似した単語を検索

w2v.most_similar('Java', topn=5)


# [(u'PHP', 0.9712682962417603),
#  (u'JAVA', 0.9526373147964478),
#  (u'C#', 0.9488359689712524),
#  (u'Ruby', 0.9369792938232422),
#  (u'.NET', 0.9361047744750977)]

cabochaを使って係り受けの解析を試して見る

下記のファイルをローカルに持ってくる
https://github.com/hidetomasuoka/NLP-hands-ons/blob/master/morphological_analysismecab/Dockerfile

以下のコマンドでDockerのコンテナを作って実行する

$ docker build -t webdb100 .
$ docker run -it -v `pwd`:/webdb100 webdb100:latest

コンテナが立ち上がったら、cabochaコマンドを実行する。
適当な文章を入力してEnterすると係り受けの解析がなされる。

(python3.6) [root@ae86f29c36a4 /]# cabocha
誕生日翌日にして、少し24歳の一年間を思い出しつつも、25歳へのバトンタッチにやや戸惑いを隠しながら、もはや目もはっきりしないままノソノソと行き着いた先に、私の開きもしない目に入って来たのがこのチラシでした
            誕生日-D                                              
              翌日に-D                                            
                して、-------D                                    
                    少し-D   |                                    
                    24歳の-D |                                    
                    一年間を-D                                    
              思い出しつつも、-------------------------------D    
                        25歳への-D                           |    
                    バトンタッチに-----D                     |    
                                やや---D                     |    
                              戸惑いを-D                     |    
                            隠しながら、---------D           |    
                                    もはや---D   |           |    
                                        目も-D   |           |    
                            はっきりしないまま---D           |    
                                      ノソノソと-D           |    
                                        行き着いた-D         |    
                                              先に、---------D    
                                                  私の-D     |    
                                                  開きも-D   |    
                                                    しない-D |    
                                                        目に-D    
                                                入って来たのが---D
                                                            この-D
                                                      チラシでした
EOS

出力を、下記の事例1と見比べると読み取り方がわかる。記号の"D"を下矢印と読み替えると良さそう。
-> 滝沢カレンの理解不能な文章を言語解析してみた。

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。