LoginSignup
0
1

More than 3 years have passed since last update.

言語処理100本ノック-96(Gensim使用):国名に関するベクトルの抽出

Posted at

言語処理100本ノック 2015の96本目「国名に関するベクトルの抽出」の記録です。
ノック90本目で保存したGensim版の単語ベクトルから国名に関するものだけを抽出します。技術的には簡単ですが、国名に関する部分が少し面倒です。

参考リンク

リンク 備考
096.国名に関するベクトルの抽出.ipynb 回答プログラムのGitHubリンク
素人の言語処理100本ノック:96 言語処理100本ノックで常にお世話になっています

環境

種類 バージョン 内容
OS Ubuntu18.04.01 LTS 仮想で動かしています
pyenv 1.2.15 複数Python環境を使うことがあるのでpyenv使っています
Python 3.6.9 pyenv上でpython3.6.9を使っています
3.7や3.8系を使っていないことに深い理由はありません
パッケージはvenvを使って管理しています

上記環境で、以下のPython追加パッケージを使っています。通常のpipでインストールするだけです。

種類 バージョン
gensim 3.8.1
numpy 1.17.4
pandas 0.25.3

課題

第10章: ベクトル空間法 (II)

第10章では,前章に引き続き単語ベクトルの学習に取り組む.

96. 国名に関するベクトルの抽出

word2vecの学習結果から,国名に関するベクトルのみを抜き出せ.

課題補足(国名に関して)

「言語処理100本ノック-81(一括置換):複合語からなる国名への対処」で使った国名ファイルを使おうと考えたのですが、そのファイルには1単語の国名("England"など)がありません。ステップ「4. 単一名削除」で消してしまったからです。
もう一度、ステップ「4. 単一名削除」で削除した国名を追加して使いました。

回答

回答プログラム 096.国名に関するベクトルの抽出.ipynb

import numpy as np
import pandas as pd
from gensim.models import Word2Vec

model = Word2Vec.load('./090.word2vec.model')
print(model)

index = []
vector = []

with open('./096.countries.txt') as file_in:
    for line in file_in:
        country = line.rstrip().replace(' ', '_')
        try:
            vector.append(model.wv[country].tolist())
            index.append(country)
        except KeyError:
            pass

pd.DataFrame(vector, index=index).to_pickle('096.country_vector.zip')

回答解説

ファイルを1行ずつ読んで、国名のベクトルを取得しリストに追加しています。スペースをアンダーバーに置換しているのは「言語処理100本ノック-81(一括置換):複合語からなる国名への対処」で同じことをやったからです。
中にはコーパスに含まれていないものや出現回数が少なく除外したものもあるので、except KeyErrorでエラー捕捉しています。

for line in file_in:
    country = line.rstrip().replace(' ', '_')
    try:
        vector.append(model.wv[country].tolist())
        index.append(country)
    except KeyError:
        pass

あとはDataFrameに国名をインデックスとして入れてあげてファイル出力です。238ヶ国が出力されます。元ファイルには416ヶ国だったので6割弱の単語ベクトルが存在しています。

pd.DataFrame(vector, index=index).to_pickle('096.country_vector.zip')
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1