自然言語処理編 - 単語のベクトル化 その弐
自然言語処理の単語のベクトル化の続き。 ここでは、Meta(旧 Facebook)社が開発した分散表現を構築する手法である、fastText を試す。 fastText は、gensim から利用できる。
モデルの読み込み
日本語モデルを読み込む。 以下のようなログに大量のエラーが出るが、読み込みはできているようだ。
ERROR : failed to decode invalid unicode bytes
追加学習をする場合は、以下のようにモデルを読み込む必要がある。
import logging
from gensim.models.fasttext import load_facebook_model
# ログ出力設定
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
# モデルを読み込む
model = load_facebook_model('/home/ubuntu/models/cc.ja.300.bin')
追加学習が不要な場合は、以下のようにベクトルのみ読み込む。 以後の処理は、ベクトルのみ読み込むこととする。
import logging
from gensim.models.fasttext import load_facebook_vectors
# ログ出力設定
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
# ベクトルのみ読み込む
model = load_facebook_vectors('/home/ubuntu/models/cc.ja.300.bin')
モデルの場合と、ベクトルのみの場合では、利用できるメソッドが異なる場合があるので注意。 ベクトルを取得する場合などで異なる。
# ベクトルを取得(モデルの場合)
print(model.wv['コンピュータ'])
# ベクトルを取得(ベクトルのみ読み込みの場合)
print(model['コンピュータ'])
Word Mover Distance による文章間距離
tokens1 = tokenize(nlp('私は、猫である。'))
tokens2 = tokenize(nlp('私は、犬である。'))
print(model.wmdistance(tokens1, tokens1))
print(model.wmdistance(tokens1, tokens2))
以下のような結果となる。 一つ目は、同じ文章なので、距離は 0 となる。
0.0
0.11943071491413972
以前の chiVe モデルでの結果と比較すると、多少異なる事が分かる。
0.0
0.10580116662522744
- 前の記事:自然言語処理編 - 単語のベクトル化
- 次の記事:自然言語処理編 - 文章のベクトル化