티스토리 뷰

먼저 토큰의 길이에 따라서 어떤 특징을 가지는 지 생각해보자. "나는 오늘 아침에 테니스를 치고, 시리얼을 먹었다."는 문장을 예시로 들자.

토큰의 길이가 길다는 것은 이 문장 자체를 유니크한 토큰으로 가정한다는 것이고, 그 만큼 전체 문서에서 등장할 가능성이 희박해진다. 반면에 토큰의 길이가 짧아지면 "나/는/오늘/아침/에/테니스/를/치/고/,/시리얼/을/먹/었다/." 와 같이 분절되는 것이고, 아침, 테니스 등의 명사와 조사등은 전체 문서에서 자주 등장하여 count가 올라갈 가능성이 높다(즉, 희소성이 낮아진다).

 

희소성이 높다는 뜻은 OoV(Out of Vocabulary)가 늘어난다는 뜻이다. 즉, 모델의 입장에서 "이게 뭐여? 처음보는 단어(문장)인데?" 라고 인식하게 될 것이다. 모델의 성능을 좌우할 수 있다.

 

가장 이상적인 형태의 토큰화는 빈도가 높을 경우 하나의 토큰으로 나타내고, 빈도가 낮을 경우 더 잘게 쪼개는 것이다.

 

Subword 분절

대부분의 언어는 더 작은 의미의 단어들이 모여서 새로운 단어가 된다. 예를 들면, '집중하다'라는 의미를 가진 영어 단어 'concentrate'를 보면 라틴어 기원의 'con(함께)', 'centre(중앙)', 'ate(하다)' 의 합성이다. 이를 쪼개는 방법이 필요하다.

BPE(Byte Pair Encoding)

압축 알고리즘이라 불리는 BPE 모델을 학습 코퍼스를 활용하여 학습하고, 추후의 새로 들어오는 코퍼스에 적용하는 방식을 사용한다(BPE의 알고리즘은 wikidocs를 참고하자). 이미 만들어진 알고리즘을 잘 사용하면 된다. Google에서 개발한 WordPiece Model(WPM)이나 SentencePiece가 대표적이다.

 

실습

BPE를 학습시키기 전에, sentence에 원래 들어있던 띄어쓰기와, 분절로 인해서 생기는 공백을 구분하기 위해 기존의 띄어쓰기를 언더스코어로 replace하였다.

기존에 실습했던 리뷰 파일에 BPE 모델을 생성시킨다.

python learn_bpe.py --input ./review.sorted.uniq.refined.tsv.text.tok --output ./model --symbols 30000

 BPE 모델

python apply_bpe.py --codes ./model < review.sorted.uniq.refined.tsv.text.tok > review.sorted.uniq.refined.tsv.text.tok.bpe

BPE apply한 결과

분리되었던 레이블을 다시 합쳐준다.

labeling pasted

정리하자면, 두 과정의 segmentation을 통해 학습이 가능한 코퍼스로 변형하였다.

  1. mecab을 통해서 정제되지 않았던 리뷰들을 segmentation
  2. subword segmentation 진행

Detokenization

자연어 생성을 하려면 분절화 이후에 다시 결합을 하는 Detokenize를 해야 사람이 이해할 수 있는 형태의 문장(sentence)이 된다.

Tokenization과 Subword Segmentation의 과정을 역순으로 진행하면 된다.

절차 결과
원문(sentence) There's currently over a thousand TED Talks on the TED website.
tokenization (_삽입) ▁There's▁currently▁over▁a▁thousand▁TED▁Talks▁on▁the▁TED
▁website .
subword segmentation 수행, (_삽입) ▁▁There▁'s▁▁currently▁▁over▁▁a▁▁thousand▁▁TED▁▁Talks▁▁on ▁▁the ▁▁TED ▁▁we b site ▁.
white space 제거 ▁▁There▁'s▁▁currently▁▁over▁▁a▁▁thousand▁▁TED▁▁Talks▁▁on▁▁the▁
▁TED▁▁website▁.
_ _ 를 whte space로 치환 There▁'s currently over a thousand TED Talks on the TED website▁.
_ 를 제거 There's currently over a thousand TED Talks on the TED website.

병렬 코퍼스(Parellel Corpus)

병렬 코퍼스란, 예를 들면 영어 문장에 대치되는 해석된 한국어 문장이 같이 있는 경우를 말한다. 대부분의 경우는 문서단위로 매치되는 경우는 있지만, 문장 단위로는 거의 없다. 영어와 한국어를 예로 들면 절차는 아래와 같다.

  1. 각각의 언어 코퍼스를 수집해서 노이즈를 제거한다.
  2. Tokenization
  3. Word Embedding(FastText 활용)
  4. MUSE를 활용하여 word translation dictionary 추출
  5. Champollion을 활용하여 align 수행
    : 서로 관련이 없는 두 언어에서 단어 사전에 기반해서 그 사전을 최대한 만족하는 문장 align을 찾는 방식
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함