Pythonで文章の近さを計算しよう1(形態素解析)
自然言語処理の初歩から解説していきます。初心者でもわかりやすいものにできたらいいなと思います。
文章の近さを計算する方針
以下の3つの文章の類似度を求めたい。
-
私はリンゴを食べる。
-
私はバナナを食べる。
-
私はリンゴを買う。
なんとなく「aとb」「aとc」が近そうなイメージを持つ。このイメージを数値で表すことを考えよう。
基本的な方針として、次の方法を考える。
-
単語を分かち書きする。(形態素解析)
-
文章を単語の頻度でベクトル化する。(bag-of-words/TF-IDF)
-
ベクトルの類似度を算出する。(cos類似度)
今回は1を解説する。
N-gramと形態素解析
機械学習ではデータをうまく特徴量に変換することが求められる。文章でも同様だ。文章をベクトル化するには文字、または単語に分解する必要がある(分かち書き)。N個の文字に分解する手法をN-gram、単語(形態素)を分割し、品詞等を特定する手法を形態素解析という。今回は形態素解析を取り上げる。

形態素解析の実装
日本語は英語のように単語ごとに区切りがないので、形態素解析器によって分割する必要がある。形態素解析器はたくさんあるが、汎用性を考えてMeCabを使用することにする。なお、辞書はneologdを使用すると精度がかなり上がる。
WindowsでのMeCabのインストール方法は以下のリンク先がわかりやすい。
Windowsの環境を壊したくなければ、Google Colaboratoryで試してみるとよい。Google Colaboratoryの詳細は以下を参照のこと。
Google Colabの知っておくべき使い方 – 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
これで、単語の分かち書きを作成することができた。次回で、この分かち書きした文章のベクトル化を試みる。
Comments
Loading comments...