레이블이 BPE인 게시물을 표시합니다. 모든 게시물 표시
레이블이 BPE인 게시물을 표시합니다. 모든 게시물 표시

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('스포츠브라 브라탑 스포츠브라탑 운동용브라 운동브라')  
#> ['▁스포츠브라', '▁브라탑', '▁스포츠', '브라탑', '▁운동용', '브라', '▁운동', '브라']