2020년 11월 5일 목요일

Google, sentencepiece. (Word Piece Model package)

Google Github에 Word Piece Model package인 sentencepiece라는 코드(C++)가 공개되었다. 파이썬에서는 subprocess로 띄워 실행할 수 있다.

설치는 pip install 로 가능하다.

아래는 하위의 articles라는 디렉터리에 *.txt 파일들을 읽어와 학습하는 예제이다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# sentencepiece test
#!pip install sentencepiece

import os
import sentencepiece as spm
from datetime import datetime

fns = []

# 학습데이터 경로
prefix = 'data' 

# vocabulary size, e.g., 8000, 16000, or 32000
vocab_size = 32000

dir_name = 'articles'

for fn in os.listdir(dir_name):
    nm, ext = os.path.splitext(fn)
    if ext == '.txt':
        fns.append(os.path.join(dir_name, fn))

fns_txt = ','.join(fns)

cmd = '--input={} --model_prefix={} --vocab_size={}'.format(fns_txt, prefix, vocab_size)

st = datetime.now()
spm.SentencePieceTrainer.Train(cmd)
et = datetime.now()

print('#학습완료: {}'.format(et - st))

spm_train명령의 command-options은 여기를 참고. 


이후 prefix로 지정된 파일이 생긴다. → data.model & data.vocab

이제 다음과 같이 모델파일을 불러온다.

1
2
sp = spm.SentencePieceProcessor()
sp.Load('{}.model'.format(prefix)) # data.model

 

이제, 다음과 같이 테스트해 볼 수 있다.

1
2
sp.EncodeAsPieces('스포츠브라 브라탑 스포츠브라탑 운동용브라 운동브라')  
#> ['▁스포츠브라', '▁브라탑', '▁스포츠', '브라탑', '▁운동용', '브라', '▁운동', '브라']

 



댓글 없음:

댓글 쓰기