<jupyter_start><jupyter_text>単語間の演算単語ベクトルを使って、単語間の演算を行います。  ライブラリのインストール必要なライブラリをインストールします。<jupyter_code>!pip install gensim==4.1.2<jupyter_output><empty_output><jupyter_text>データの読み込み、及びword2vecによる学習これまでと同様に、データの読み込み及びword2vecによる学習を行います。<jupyter_code>import pickle
from gensim.models import word2vec

with open('wagahai_words.pickle', mode='rb') as f:
    wagahai_words = pickle.load(f)

print(wagahai_words[:10])

# size : 中間層のニューロン数
# min_count : この値以下の出現回数の単語を無視
# window : 対象単語を中心とした前後の単語数
# iter : epochs数
# sg : CBOWを使うかskip-gramを使うか 0:CBOW 1:skip-gram
model = word2vec.Word2Vec(wagahai_words,
                          vector_size=100,
                          min_count=5,
                          window=5,
                          epochs=20,
                          sg = 0)<jupyter_output><empty_output><jupyter_text>単語同士の演算word2vecにより、単語同士の足し算、引き算が可能になります。  以下は単語同士の演算の例ですが、単語のベクトル同士で演算が行われ、結果に最も近い単語が表示されます。<jupyter_code>model.wv.most_similar(positive=["猫", "人間"])<jupyter_output><empty_output><jupyter_text>positiveは足し合わせる単語のリストです。  従って、上記は**猫 + 人間**を計算しています。以下では、  **人間 + 猫 - 夢**  を演算しています。<jupyter_code>model.wv.most_similar(positive=["人間", "猫"], negative=["夢"])<jupyter_output><empty_output><jupyter_text>negativeは引く単語のリストです。  課題:以下に示す単語同士の演算を行い、結果に最も近い単語を表示しましょう。  **教師 - 夢**<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12080536912751678, 'fraction_numerical': 0.015659955257270694, 'mean_word_length': 4.964444444444444, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '434311', 'license': 'MIT', 'n_tokens_mistral': 794, 'n_tokens_neox': 778, 'n_words': 50, 'path': 'lecture_09/06_word_vector.ipynb', 'repo_name': 'yukinaga/ai_programming', 'size': '1341'}