fasttext 훈련 시 pretrainedVectors 추가하기

햄도·2020년 12월 3일
0

훈련 대상 데이터의 크기에 비해 컴퓨팅 자원이 부족해, 여러 번 나누어 훈련하는 방법을 찾다가 fasttext train_unsupervised 함수에 pretrainedVectors argument를 추가할 수 있다는 것을 발견했다.

  1. 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
  • 위 과정을 마치면 아래와 같은 vector 파일이 생성된다.

  1. 다른 데이터로 훈련 시 train_unsupervised 의 pretrainedVectors argument로 해당 파일 경로를 추가한다.
import fasttext
corpus2_path = './corpus2.txt'
vec_path = './vector.txt'

fasttext_model2 = fasttext.train_unsupervised(corpus2_path, model='skipgram', pretrainedVectors=vec_path)
profile
developer hamdoe

0개의 댓글