새소식

딥러닝/자연어 처리

NLP_Preprocessing : 4)Tokenization

  • -

Preprocessing Workflow

1. 코퍼스 수집 : 구입,외주,크롤링

2. 정제 : Task에 따른 노이즈 제거, 인코딩 변환

(3. 레이블링 : Task에 따른 문장 or 단어마다 labeling 수행)

4. Tokenization : 형태소 분석기 활용하여 분절 수행

(5.  Subword Segmentation : 단어보다 더 작은 의미 추가 분절 수행)

6. Batchify : 사전 생성 및 word2index 맵핑 수행, 효율화를 위한 전/후처리

 


1. Sentence Segmentation

보통 모델에 입력하는 데이터는 1 sentence/line의 형태이다.

그러나 수집한 corpus에는 한 라인에 여러 문장이 들어있거나, 한 문장이 여러 라인에 들어있는 경우가 있다.

따라서 Sentence Segmentation을 통해 원하는 형태로 변환하면 된다.

 

NLTK

from nltk.tokenize import sent_tokenize

한국어 문장 분리기인 KSS

from kss import split_sentences

 

2. Tokenization

Tokenization을 하는 이유
: 두 개 이상의 다른 token들의 결합으로 이루어진 단어를 쪼개어 Vocabulary 숫자를 줄이고, 희소성(sparseness)를 낮추기 위해서

: 한국어는 교착어(어근에 접사가 붙어 다양한 단어가 파생되는 특징)

 

Part of Speech Tagging (POS)

형태소 분석: 형태소를 비롯하여, 어근, 접두사/접미사, 품사 등 다양한 언어적 속성 구조를 파악하는 것

품사 태깅: 형태소의 뜻과 문맥을 고려하여 그것에 마크업을 하는 것

 

 


Mecab 윈도우 설치 방법: https://uwgdqo.tistory.com/363

 

Mecab Tokenizer로 Tokenization

import csv
import MeCab

mecab = MeCab.Tagger()


with open('review.sorted.uniq.refined.tsv', encoding='utf-8') as f:
    tr = csv.reader(f, delimiter='\t')
    data = list(tr)
f.close()

with open('review.sorted.uniq.refined.tok.tsv', 'w', encoding='utf-8', newline='') as f:
    tw = csv.writer(f, delimiter='\t')

    for row in data:
        row = mecab.parse(row[1])
        target = row.replace("EOS", "").rstrip()
        sent = ""
        for i in target.split('\n'):
            temp = i.split(',')[0].split('\t')
            sent += (temp[0] + " ")
        tw.writerow([row[0], sent])
f.close()

 

tokenize before
tokenize after

 

728x90

'딥러닝 > 자연어 처리' 카테고리의 다른 글

NLP_Preprocessing : +)Detokenization  (0) 2022.06.27
NLP_Preprocessing : 5)Subword Segmentation  (0) 2022.06.27
NLP_Preprocessing : 3)Labeling  (0) 2022.06.26
NLP_Preprocessing : 1)코퍼스 수집 & 2)정제  (0) 2022.06.26
RNN & LSTM  (0) 2022.06.25
Contents