반응형
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]
반응형