개발자의 스터디 노트
한국어 위키백과 데이터베이스로 GloVe로 학습 본문
글로브(Global Vectors for Word Representation, GloVe)는 카운트 기반과 예측 기반을 모두 사용하는 방법론으로 2014년에 미국 스탠포드대학에서 개발한 단어 임베딩 방법론입니다. 카운트 기반의 LSA(Latent Semantic Analysis)와 예측 기반의 Word2Vec의 단점을 지적하며 이를 보완한다느 목적으로 나왔고, 실제로도 Word2Vec 만큼 뛰어난 성능을 보여줍니다.
앞서 실습했던 위키백과 데이터로 GloVe 학습을 진행하도록 하겠습니다.
우선 실습을 위해 GloVe 패키지를 설치 합니다.
pip install glove_python_binary
윈도우에서는 제대로 설치가 되지 않아 실습이 안돼서 리눅스 장비에서 실습을 진행하였습니다.
실습을 진행한 리눅스는 우분투입니다.
from tqdm import tqdm
from konlpy.tag import Mecab
mecab = Mecab()
f = open('data/output_file.txt', encoding="utf8")
lines = f.read().splitlines()
print(len(lines))
10071593
lines[:10]
['',
'지미 카터',
'',
'제임스 얼 카터 주니어(, 1924년 10월 1일 ~ )는 민주당 출신 미국 39대 대통령 (1977년 ~ 1981년)이며, 독재자의 사신이라는 별명을 가지고 있다.',
'생애.',
'어린 시절.',
'지미 카터는 조지아주 섬터 카운티 플레인스 마을에서 태어났다.',
'조지아 공과대학교를 졸업하였다. 그 후 해군에 들어가 전함·원자력·잠수함의 승무원으로 일하였다. 1953년 미국 해군 대위로 예편하였고 이후 땅콩·면화 등을 가꿔 많은 돈을 벌었다. 그의 별명이 "땅콩 농부" (Peanut Farmer)로 알려졌다.',
'정계 입문.',
'1962년 조지아 주 상원 의원 선거에서 낙선하나 그 선거가 부정선거 였음을 입증하게 되어 당선되고, 1966년 조지아 주지사 선거에 낙선하지만, 1970년 조지아 주지사를 역임했다. 대통령이 되기 전 조지아주 상원의원을 두번 연임했으며, 1971년부터 1975년까지 조지아 지사로 근무했다. 조지아 주지사로 지내면서, 미국에 사는 흑인 등용법을 내세웠다.']
result = []
for line in tqdm(lines):
# 빈 문자열이 아닌 경우에만 수행
if line:
result.append(mecab.morphs(line))
100%|██████████| 10071593/10071593 [13:49<00:00, 12148.10it/s]
from glove import Corpus, Glove
corpus = Corpus()
# 훈련 데이터로부터 GloVe에서 사용할 동시 등장 행렬 생성
corpus.fit(result, window=5)
glove = Glove(no_components=100, learning_rate=0.05)
# 학습에 이용할 쓰레드의 개수는 4로 설정, 에포크는 20.
glove.fit(corpus.matrix, epochs=20, no_threads=4, verbose=True)
glove.add_dictionary(corpus.dictionary)
Performing 20 training epochs with 4 threads
Epoch 0
Epoch 1
Epoch 2
Epoch 3
Epoch 4
Epoch 5
Epoch 6
Epoch 7
Epoch 8
Epoch 9
Epoch 10
Epoch 11
Epoch 12
Epoch 13
Epoch 14
Epoch 15
Epoch 16
Epoch 17
Epoch 18
Epoch 19
print(glove.most_similar("대한민국"))
[('정치인', 0.7029800426551882), ('재보궐선거', 0.7013516902957719), ('기업인', 0.6918421027571827), ('문화재청', 0.6789601134429393)]
print(glove.most_similar("어벤져스"))
[('Shock', 0.7629729334259101), ('Ghost', 0.7588580620102915), ('Hero', 0.7494800107126065), ('Their', 0.7492575011068187)]
print(glove.most_similar("반도체"))
[('석유', 0.749698712973714), ('제조', 0.7205756932425246), ('정유', 0.7004109373489426), ('정제', 0.6774257242339469)]
'파이썬 > 파이토치 자연어처리' 카테고리의 다른 글
한국어 버트(KoBERT) (0) | 2022.03.12 |
---|---|
사전 훈련된 임베딩을 사용한 문서분류 전이학습 (0) | 2022.03.10 |
한국어 위키백과 데이터베이스로 Word2Vec 학습 (0) | 2022.03.09 |
인공지능 참고 싸이트 - 학습 및 데이터 싸이트 모음 (0) | 2022.03.09 |
CBOW 임베딩 학습하기 (0) | 2022.03.05 |