딥러닝/자연어처리

gensim라이브러리로 학습한 doc2vec모델의 함수들

씩씩한 IT블로그 2020. 10. 1. 17:33
반응형

1. 모델 불러오기

불러온 모델은 문서별로 번호가 태그되여 있습니다.

from gensim.models import Doc2Vec

#모델 저장
doc2vec_model=Doc2Vec.load('model/doc2vec_morph.model')

 

2. 학습한 문서중 비슷한 문서 찾기

# a(태그번호 or 벡터화된 문서)문서와 비슷한 문서를 b개 리턴한다.
a="276"
b=5
for i in doc2vec_model.docvecs.most_similar(a,topn=b):
    print(i)
('76889', 0.8220891952514648)
('148', 0.816669762134552)
('52004', 0.8151654005050659)
('155489', 0.8135135769844055)
('41881', 0.8119889497756958)

 

3. 학습한 두 문서의 유사도 확인

# a(문서 태그번호)와 b(문서 태그번호)의 유사도를 계산한다
a="103"
b="236"
print(doc2vec_model.docvecs.similarity(a,b))
0.538234

 

 

4. 모델을 이용하여 학습하지 않은 문서를 백터화하기

# 모델을 이용하여 새로운 문서를 벡터화하기.
# 벡터화할 문서는 리스트형식이여야 한다.

script="안녕하세요 테스트할 문서입니다 이걸 리스트형식으로 바꿔야 해요".split()
scriptV=doc2vec_model.infer_vector(script)
print(scriptV)
[-0.00327514  0.05130272 -0.0138749   0.04372963 -0.00512122  0.03138907
 -0.00096444 -0.06583751  0.08467284  0.02423597 -0.04921922 -0.00416959
  0.03153152  0.05516767  0.01067735 -0.00387674  0.00295808 -0.00600146
 -0.01728936  0.07156083 -0.0315992  -0.00262125 -0.10894153  0.03468531
 -0.07515493 -0.00073162 -0.00219868 -0.0119686  -0.06951968 -0.0529214
 -0.04005764 -0.0513639  -0.02654418 -0.01002494 -0.02718319  0.02835939
  0.05189308  0.05188132 -0.00373439 -0.01167021 -0.02336784  0.0064334
 -0.09678392  0.07141719 -0.0198738  -0.07008288  0.04437367  0.09518006
  0.08590105  0.00152784 -0.0643006   0.08183958 -0.15110578  0.03587899
 -0.01834358 -0.08339152 -0.06904253  0.01067556 -0.0054931   0.06109114
 -0.00453817  0.01696747  0.03125173  0.03739777  0.00778466  0.06348123
 -0.00359077 -0.03985394  0.01984414 -0.03769772  0.08554987 -0.01537591
  0.03790262 -0.03593091  0.0501023  -0.08345606 -0.05962873  0.08422716
 -0.0183654   0.00879197 -0.04369652  0.08571155  0.0166194  -0.02330453
 -0.07905427  0.0881449   0.06098539 -0.05807172 -0.07954511  0.00566442
 -0.06211184 -0.12473015 -0.11473903  0.01424877  0.07737528  0.05009951
 -0.00599346  0.04084824 -0.01796856  0.06223436]

 

* 코사인유사도를 이용하여 학습하지 않은 두 문서의 유사도 측정하기

from gensim.models import Doc2Vec
from numpy import dot
from numpy.linalg import norm
import numpy as np

def cos_sim(A, B):
    return dot(A, B)/(norm(A)*norm(B))
    
script="안녕하세요 첫번째 문장입니다 그럼이만".split()
scriptV=doc2vec_model.infer_vector(script)

ppt="이것은 두번째 문장입니다 첫번째 문장과 유사도를 비교할껍니다".split()
pptV=doc2vec_model.infer_vector(ppt)

print(cos_sim(scriptV,pptV))

 

5. 모델을 이용하여 학습된 문서를 백터화하기

#학습 된 문서 a(문서의 태그번호)를 벡터화 하기
a="0"
print(doc2vec_model.docvecs[a])
[ 6.34783208e-01  4.36985403e-01  6.39528513e-01  3.12205195e-01
 -6.28383979e-02 -7.03532773e-04  8.25286508e-01  9.09643918e-02
  8.56671453e-01 -2.46328980e-01  9.73393202e-01 -1.55217275e-01
  1.18475519e-01 -4.35948849e-01  1.06747471e-01  3.37438226e-01
  2.57399291e-01 -7.61971354e-01 -2.92454839e-01 -2.83474233e-02
  1.83218531e-02 -9.21313688e-02 -4.47706968e-01  1.26919404e-01
 -7.13014781e-01 -4.29984719e-01  5.80976158e-02  2.87247151e-01
 -5.45287848e-01  2.67593712e-01 -3.63882124e-01 -7.84525871e-01
 -5.65545738e-01  7.01546133e-01  2.57224679e-01 -1.76045999e-01
 -5.60514405e-02 -5.28483212e-01 -3.57993841e-01 -3.70112538e-01
 -1.10812277e-01  1.48471460e-01  1.97391137e-02  1.91965148e-01
 -3.14353704e-01 -4.55272198e-01 -7.47207403e-01  1.32943895e-02
  1.15525164e-01  4.33484465e-01  2.61927005e-02  2.78143495e-01
  1.91637516e-01 -2.26347610e-01 -2.72743523e-01 -8.44446793e-02
  2.22425103e-01  6.32097185e-01 -1.27989486e-01  1.88408718e-01
  2.38360286e-01  3.21000338e-01  7.34187424e-01 -2.48936936e-01
  1.56024322e-01  7.24651456e-01  2.80328572e-01  5.76937497e-01
  3.23983133e-01  1.94432706e-01  3.50666553e-01 -2.47032404e-01
 -3.54588300e-01  4.71618772e-02 -1.23987041e-01 -7.20412254e-01
 -4.26439911e-01  1.12965375e-01  2.53726214e-01 -1.38900772e-01
  3.67346197e-01  5.83439946e-01 -6.03819862e-02 -5.24385870e-01
 -6.98272049e-01  6.56389967e-02  3.20473969e-01 -8.38054657e-01
 -1.04835957e-01 -2.28759438e-01 -2.65515059e-01 -1.74046271e-02
 -5.00029147e-01  3.37227255e-01  5.18529654e-01  1.02652632e-01
 -1.18646957e-01  1.14285159e+00 -2.47320235e-01  1.17150784e+00]

 

반응형