다음 내용과 같이 분류하려는 Text 및 Label 을 가지고 계신다면 따라해보십시오.
개요
- DailyDialog 데이터 세트가 있습니다.
- 데이터는 대화 텍스트입니다.
- DailyDialog_act : 각 DailyDialog 의 각 행에 매치되는 대화 상자 동작 번호가 존재합니다.
{ 1 : 알림, 2 : 질문, 3: 지시, 4 : 공통 } - DailyDialog_emotion : 각 DailyDialog 의 각 행에 매치되는 대화 상자 감정 번호가 존재합니다.
{ 0 : 감정 없음, 1 : 분노, 2 : 혐오, 3 : 두려움, 4 : 행복, 5 : 슬픔, 6 : 놀라움 } - DailyDialog_text 를 Train과 Test로 나누고 전처리 합니다
- 전처리 후 Tokenize 후 ...
1. Data set 불러오기
text = []
with open('/home/dialogues_text.txt', 'r', encoding='utf-8') as f: text = f.readlines()
print("문장 갯수 : ", len(text))
#---output---
#문장 갯수 : 13118
2. 전처리 하기
각 데이터에 대한 Label 은 각 문단에 문장 단위로 되어 있으므로 문장을 추출하는 전처리 과정을 해줍니다.
Original Data :
train_text = []
for i in range(0, len(train_ori)):
train_pre = train_ori[i].replace("\n","")
train_pre = train_pre.replace("__eou__ ","&")
train_pre = train_pre.replace("__eou__","&")
train_text.append(train_pre)
train_data = []
train_con = train_text
count_v = 0;
for i in range(0, len(train_con)):
text_cut = train_con[i]
for i in range(0, len(train_con[i])):
if text_cut != "":
if count_v == 0:
x = train_con[i].index(" &")
train_data.append(text_cut[0:x])
text_cut = text_cut[x+2::]
count_v = 1
else:
x = text_cut.index(" &")
train_data.append(text_cut[0:x])
text_cut = text_cut[x+2::]
Preprocessed Data :
3. Make sentencepiece model
templates= '--input={} \
--pad_id={} \
--bos_id={} \
--eos_id={} \
--unk_id={} \
--model_prefix={} \
--vocab_size={} \
--character_coverage={} \
--model_type={}'
train_input_file = train_data
pad_id=0 #<pad> token을 0으로 설정
vocab_size = 20000 # vocab 사이즈
prefix = 'botchan_spm' # 저장될 tokenizer 모델에 붙는 이름
unk_id=1 #<unknown> token을 1으로 설정
bos_id=3 #<start> token을 3으로 설정
eos_id=2 #<end> token을 2으로 설정
character_coverage = 1.0 # to reduce character set
model_type ='word' # Choose from unigram (default), bpe, char, or word
cmd = templates.format(train_input_file,
pad_id,
bos_id,
eos_id,
unk_id,
prefix,
vocab_size,
character_coverage,
model_type)
import sentencepiece as spm
spm.SentencePieceTrainer.Train(cmd)
import sentencepiece as spm
sp = spm.SentencePieceProcessor()
sp.Load('botchan_spm.model')
with open('/home/choice/Desktop/abep/day1/botchan_spm.vocab', encoding='utf-8') as f:
Vo = [doc.strip().split("\t") for doc in f]
# w[0]: token name
# w[1]: token score
word2idx = {w[0]: i for i, w in enumerate(Vo)}
반응형
'Programming > (Python)(Ubuntu)' 카테고리의 다른 글
우분투 18.04 PyTorch 기초. Fashion MNIST 데이터를 이용한 Neural Networks 구현하기 (0) | 2020.02.19 |
---|---|
우분투 vi 에디터 사용법 (0) | 2020.02.15 |
구글: SentencePiece 사용법 Google: SentencePiece Tutorial (1) | 2020.02.14 |
파이썬 편집기 패키지 관리 프로그램 종류 Python Editor&Package Management Program (0) | 2020.02.13 |
우분투 18.04 주피터 노트북/랩 실행하기 및 외부 접속 Ubuntu 18.04 Jupyter Using Notebook/Lab and outside enter (0) | 2020.02.10 |