2.3 カウントベースの手法

「ゼロから作るDeep Learning ❷」で用意されている関数をそのまま使います。

2.3.1 Pythonによるコーパスの下準備

from ivory.common.util import preprocess

text = "You say goodbye and I say hello."
corpus, word_to_id, id_to_word = preprocess(text)
print(corpus)
print(word_to_id)
print(id_to_word)

[1] 2019-06-12 17:40:39 (203ms) python3 (203ms)

[0 1 2 3 4 1 5 6]
{'you': 0, 'say': 1, 'goodbye': 2, 'and': 3, 'i': 4, 'hello': 5, '.': 6}
{0: 'you', 1: 'say', 2: 'goodbye', 3: 'and', 4: 'i', 5: 'hello', 6: '.'}

2.3.4 共起行列

import pandas as pd
from ivory.common.util import create_co_matrix

C = create_co_matrix(corpus, 7)
v = list(id_to_word.values())
df = pd.DataFrame(C, index=v, columns=v)
df

[2] 2019-06-12 17:40:39 (31.2ms) python3 (234ms)

you say goodbye and i hello .
you 0 1 0 0 0 0 0
say 1 0 1 0 1 1 0
goodbye 0 1 0 1 0 0 0
and 0 0 1 0 1 0 0
i 0 1 0 1 0 0 0
hello 0 1 0 0 0 0 1
. 0 0 0 0 0 1 0

2.3.5 ベクトル間の類似度

from ivory.common.util import cos_similarity

c0 = C[word_to_id["you"]]
c1 = C[word_to_id["i"]]
cos_similarity(c0, c1)

[3] 2019-06-12 17:40:39 (15.7ms) python3 (250ms)

0.7071067691154799

2.3.6 類似単語のランキング表示

from ivory.common.util import most_similar

most_similar("you", word_to_id, id_to_word, C, top=5)

[4] 2019-06-12 17:40:39 (31.2ms) python3 (281ms)


[query] you
 goodbye: 0.7071067691154799
 i: 0.7071067691154799
 hello: 0.7071067691154799
 say: 0.0
 and: 0.0