プログラミングと機械学習のメモ
日付: カテゴリ: 自然言語処理
自然言語処理の初歩から解説していきます。初心者でもわかりやすいものにできたらいいなと思います。
以下の3つの文章の類似度を求めたい。
なんとなく「aとb」「aとc」が近そうなイメージを持つ。このイメージを数値で表すことを考えよう。
今回は1を解説する。
機械学習ではデータをうまく特徴量に変換することが求められる。文章でも同様だ。文章をベクトル化するには文字、または単語に分解する必要がある(分かち書き)。N個の文字に分解する手法をN-gram、単語(形態素)を分割し、品詞等を特定する手法を形態素解析という。今回は形態素解析を取り上げる。
日本語は英語のように単語ごとに区切りがないので、形態素解析器によって分割する必要がある。形態素解析器はたくさんあるが、汎用性を考えてMeCabを使用することにする。なお、辞書はneologdを使用すると精度がかなり上がる。
WindowsでのMeCabのインストール方法は以下のリンク先がわかりやすい。
Windowsの環境を壊したくなければ、Google Colaboratoryで試してみるとよい。Google Colaboratoryの詳細は以下を参照のこと。
ColaboratoryでMeCab+neologdを使用するには、以下のコマンドを打とう。(mecabの0.996.2以降のインストールはこちら)
#MeCab_install
!apt-get -q -y install sudo file git curl mecab libmecab-dev mecab-ipadic-utf8 swig
!pip install mecab-python3==0.996.1
# using neologd
!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n > /dev/null 2>&1
!echo "dicdir = "`mecab-config --dicdir`"/mecab-ipadic-neologd" > "/etc/mecabrc"
実際にMeCabをpythonから実行してみよう。
import MeCab
t=MeCab.Tagger()
print(t.parse("私はリンゴを食べる。"))
私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ は 助詞,係助詞,*,*,*,*,は,ハ,ワ リンゴ 名詞,一般,*,*,*,*,リンゴ,リンゴ,リンゴ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 食べる 動詞,自立,*,*,一段,基本形,食べる,タベル,タベル 。 記号,句点,*,*,*,*,。,。,。 EOS
これで、単語の分かち書きを作成することができた。次回で、この分かち書きした文章のベクトル化を試みる。