今日は雨が降ったり雹が降ったり晴れたり曇ったり、山みたいな天気だった。
お魚の本 (ゼロから作る Deep Learning ② 自然言語処理編) 2.3 カウントベースの手法 を読んで書いてみる。
2.3.2~2.3.6 単語の共起行列、コサイン類似度を使った類似単語のランキング表示
メモ:大きい順にインデックスを取る
# common/util.py ... for i in (-1 * similarity).argsort(): ...
argsort()
は、配列の要素を小さい順にソートしたときのインデックスのリスト。配列にマイナスをかけて argsort()
を使うと、大きい順になる。
大きい順にソートした時のインデックスのリストは、[0 2 4 5 1 3 6]
。
いままで sort()
や sorted()
を使っていたけど、今回のようにリストのインデックスが他のリストのインデックスや辞書の key と共通する場合は、
argsort()
を使ってループを回すと便利そう。
全部表示してみた
# study_2_3_6.py import sys sys.path.append('.') from common.util import preprocess, create_co_matrix, cos_similarity, most_similar if __name__ == '__main__': text = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) co_matrix = create_co_matrix(corpus, len(word_to_id)) for idx in id_to_word: most_similar(id_to_word[idx], word_to_id, id_to_word, co_matrix)
↓
[query] you goodbye: 0.7071067758832467 i: 0.7071067758832467 hello: 0.7071067758832467 say: 0.0 and: 0.0 [query] say and: 0.7071067785348971 .: 0.4999999968750001 you: 0.0 goodbye: 0.0 i: 0.0 [query] goodbye i: 0.9999999949999999 you: 0.7071067758832467 hello: 0.49999999749999996 say: 0.0 and: 0.0 [query] and say: 0.7071067785348971 you: 0.0 goodbye: 0.0 i: 0.0 hello: 0.0 [query] i goodbye: 0.9999999949999999 you: 0.7071067758832467 hello: 0.49999999749999996 say: 0.0 and: 0.0 [query] hello you: 0.7071067758832467 goodbye: 0.49999999749999996 i: 0.49999999749999996 say: 0.0 and: 0.0 [query] . say: 0.4999999968750001 you: 0.0 goodbye: 0.0 and: 0.0 i: 0.0