# numpy의 경우 spacy간에 word간의 semantic similarity를 계산할때 필요함.
# 없어도 계산은 되는데, 값이 매우 이상하게 나옴
import numpy
# 라이브러리를 가져오고.
import spacy
spacy_nlp = spacy.load('en_core_web_lg')
# 간단히 값들의 유사도를 비교해봄.
words_lst =['dog', 'cat', 'banana']
for a in words_lst:
for b in words_lst:
spacy_a = spacy_nlp(a)
spacy_b = spacy_nlp(b)
spacy_sim = spacy_a.similarity(spacy_b)
print(f"{a}, {b} ==> spacy nlp: {spacy_sim}")
print("=="*20)
# 지금까지는 en_core_web_lg에 이미 학습된 벡터를 가지고 진행한 것임.
# 그러나, 만약 우리가 원하는 워드와 거기에 해당하는 벡터 값이 없는 경우가 있을 수 있음.
# 따라서, 특수한 vocab에 대해서 추가로 넣어주는 것이 필요함.
# 값을 워드와 벡터(300차원)으로 딕셔너리로 구성하고,
new_vector_data_dict = {
'dog': numpy.random.uniform(-1, 1, (300,))
}
# 아래와 같은 방식으로, vocab에 하나씩 값을 업데이트해줌.
for word, vector in new_vector_data_dict.items():
spacy_nlp.vocab.set_vector(word, vector)
for a in words_lst:
for b in words_lst:
spacy_a = spacy_nlp(a)
spacy_b = spacy_nlp(b)
spacy_sim = spacy_a.similarity(spacy_b)
print(f"{a}, {b} ==> spacy nlp: {spacy_sim}")
print("=="*20)
dog, dog ==> spacy nlp: 1.0
dog, cat ==> spacy nlp: 0.8016855517329495
dog, banana ==> spacy nlp: 0.24327647954195658
cat, dog ==> spacy nlp: 0.8016855517329495
cat, cat ==> spacy nlp: 1.0
cat, banana ==> spacy nlp: 0.28154364860188125
banana, dog ==> spacy nlp: 0.24327647954195658
banana, cat ==> spacy nlp: 0.28154364860188125
banana, banana ==> spacy nlp: 1.0
========================================
dog, dog ==> spacy nlp: 1.0
dog, cat ==> spacy nlp: 0.06367532184777439
dog, banana ==> spacy nlp: -0.010021774106347485
cat, dog ==> spacy nlp: 0.06367532184777439
cat, cat ==> spacy nlp: 1.0
cat, banana ==> spacy nlp: 0.28154364860188125
banana, dog ==> spacy nlp: -0.010021774106347485
banana, cat ==> spacy nlp: 0.28154364860188125
banana, banana ==> spacy nlp: 1.0
========================================
댓글남기기