훈련 대상 데이터의 크기에 비해 컴퓨팅 자원이 부족해, 여러 번 나누어 훈련하는 방법을 찾다가 fasttext train_unsupervised 함수에 pretrainedVectors argument를 추가할 수 있다는 것을 발견했다.
vector 파일 생성
import fasttext
from konlpy.tag import Mecab
from bs4 import BeautifulSoup
corpus1_path = './corpus1.txt'
vec_path = './vector.txt'
mecab = Mecab()
# 준비한 dataset으로 corpus 생성
with open('sejong-corpus/corpus-utf8/5BE99001.txt', 'r') as f:
source = f.read()
parsed = BeautifulSoup(source, 'html.parser')
p_list = parsed.findAll('p')
# corpus 1
with open(corpus1_path, 'w') as f:
for p in p_list:
for word, tag in mecab.pos(p.text):
# 임의의 tag만 추출해 저장한다.
if tag in ['NNG','NNP', 'VA', 'MAG']:
f.write(word + ' ')
f.write('\n')
# 생성한 corpus를 이용해 unsupervised train
fasttext_model = fasttext.train_unsupervised(corpus1_path, model='skipgram')
# 훈련한 단어 list
words = fasttext_model.get_words()
with open(vec_path, 'w') as f:
# vector 파일 상단에는 word수/vector size가 있어야 한다.
f.write(str(len(words))+' 100\n')
for w in words:
v = fasttext_model.get_word_vector(w)
vstr = ''
for vi in v:
vstr += ' ' + str(vi)
try:
f.write(w+vstr+'\n')
except:
pass
import fasttext
corpus2_path = './corpus2.txt'
vec_path = './vector.txt'
fasttext_model2 = fasttext.train_unsupervised(corpus2_path, model='skipgram', pretrainedVectors=vec_path)