u++の備忘録

言語処理100本ノック 2020「64. アナロジーデータでの実験」

問題文

nlp100.github.io

問題の概要

言語処理100本ノック 2020「63. 加法構成性によるアナロジー」 - u++の備忘録 の処理を繰り返すのみです。for 文で回しても良いですが、ここでは pandas の progress_apply を使いました。時間がかかるので、tqdm で実行時間も表示しています。

import pandas as pd
from gensim.models import KeyedVectors
from tqdm import tqdm


def culcSim(row):
    global model
    return pd.Series(list(model.most_similar(positive=[row['v2'], row['v3']], negative=[row['v1']])[0]))


tqdm.pandas()
df = pd.read_csv('ch07/questions-words.txt', sep=' ')
df = df.reset_index()
df.columns = ['v1', 'v2', 'v3', 'v4']
df.dropna(inplace=True)

model = KeyedVectors.load_word2vec_format('ch07/GoogleNews-vectors-negative300.bin', binary=True)
df[['simWord', 'simScore']] = df.progress_apply(culcSim, axis=1)
df.to_csv('ch07/ans64.txt', sep=' ', index=False, header=None)