본문 바로가기
딥러닝(Deep Learning)/D&A Deep Session

[D&A Deep Session] 7차시 - 11. Tokenization

by rahites 2022. 5. 11.

 

#  NLP ( Natural Language Processing, 자연어 처리 )

: 텍스트 데이터를 분석하고 모델링하는 것을 의미하며 자연어 이해(NLU) 분야와 자연어 생성(NLG) 분야로 나뉜다.

 

- 자연어 이해 : 주어진 텍스트의 의미를 파악하는 것 ( Text -> Meaning )

- 자연어 생성 : 주어진 의미에 대한 자연스러운 텍스트를 만들어 내는 것 ( Meaning -> Text )

 

* NLP의 종류

: 감정 분석, 요약, 기계번역, 질문 응답 등이 존재한다.

 

* NLP 과정

 

1. 데이터 수집 및 전처리

: 웹 크롤링 등을 이용하여 task 수행에 필요한 data를 수집한다. '!, ?' 등의 문장 기호들을 제거하고 소문자화, 조사 분리 등의 전처리를 수행한다.

 

2. Vectorization

: 컴퓨터는 자연어 그 자체로 이해가 불가능하기 때문에 컴퓨터가 이해하기 쉽도록 문장의 형태를 변형해야 한다. 

-> Tokenization, Representation을 거친다.

 

 

#  Tokenization

: 문장을 의미 있는 부분으로 나누는 과정을 의미한다.

 

ex) 오늘은 / 하늘이 / 맑다 -> / 를 사용하여 문장을 token으로 나누었다.

 

Corpus : 대량의 텍스트 데이터, token을 모으기 위해 모아 놓은 문장의 모음

Token : 문장을 의미있는 부분으로 나눈 단위

Vocabulary : token들을 저장해 놓은 사전

OOV (Out of Vocabulary) : 처음 본 단어가 등장하는 현상으로 성능 저하의 원인이 된다. 

   - 특수한 토큰인 <unk>를 만들어 변환한다.

 

풍부한 사전 생성으로 OOV 문제를 해결할 수 있는 데, 이 때 corpus를 잘 만들어야 사전이 풍부해진다. 물론 corpus가 커지면 모델 사이즈가 커져 메모리에 부담을 주기 때문에 적절한 Tokenization 방법을 선정하여 token을 효율적으로 만들어야 한다.

 

* 띄어쓰기 기반 

: 띄어쓰기를 기반으로 Tokenization을 진행하는 방법이다.

 

- 조사가 다르면 다른 단어로 인식

- 동음이의어 처리 불가

- 매우 비효율적인 방법! ( 특히 한글은 단어 단위로 띄어쓰기를 하지않아 더더욱 비효율적이다 )

 

* Character based

: 글자 하나하나를 기반으로 Tokenization을 진행하는 방법이다.

 

- 글자 하나하나는 의미를 보유하고 있지 않기 때문에 (형태소가 X) 표현법에 대한 학습이 어렵다.

 

* n-gram

: 글자의 특정 연속성이 의미를 가진다고 보고 여러개의 연속된 윈도우를 단위로 살펴보기 위해 n-gram 방법을 사용한다.

 

n = 1 : uni-gram ( Character based 방법과 동일 )

n = 2 : bi-gramn = 3 : tri-gramn = 4 : n-gram

 

각 글자를 기준으로 윈도우가 이동하면서 token을 잡아내지만 쓸모없는 조합이 너무 많이 생성되어 사전이 과하게 커져 메모리에 부담을 준다는 단점을 지닌다.

 

* BPE ( Byte Pair Encoding )

: n-gram의 이점은 챙기면서 그 중 의미가 있는 것들만 골라 token으로 사용하는 방법으로 반복적으로 나오는 데이터의 연속된 패턴을 치환하는 방식을 사용해 데이터를 효율적으로 저장한다.

 

1. 단어 횟수를 기록한 사전을 만든다.2. 각 단어에 대해 연속된 2개의 글자와 숫자를 세어 가장 많이 나오는 글자 2개의 조합을 찾는다.3. 두 글자를 합쳐 기존 사전의 단어를 수정한다.4. 미리 정해 놓은 횟수만큼 2, 3 과정을 반복한다. ( 이 때 적절한 iteration을 지정하는 것이 중요하다. 무조건 많이 반복한다고 좋은 사전이 만들어 지지 않는다!! )

 

ex) abbcabcab

-> 많이 나온 조합인 ab=X로 치환

-> XbcXcX

-> 많이 나온 조합인 cX를 Y로 치환

-> XbYY

-> ab / b / cab 로 Tokenization

 

이러한 방법은 자주 등장하는 글자의 연속인 subwords를 찾을 수 있고, 잡을 수 없던 token을 잡아낼 수 있다 ( 동음이의어, 조사가 포함된 단어 등 ). 또한 OOV가 여전히 존재하지만 corpus의 크기를 키우면 극복이 가능하다. 

=> 최근 NLP의 대표적인 Tokenization 방법!! ( BPE의 변형 알고리즘인 WordPiece Tokenizer 방법도 존재한다. )

 

* Pretained

: 이미 잘 만들어진 Token Vocabulary를 이용해 Tokenization하는 방법

 

Sentencepiece : 구글에서 제공하는 BPE Tokenizer

BertTokenizer : 2018년에 구글이 공개한 사전 훈련된 모델

https://wikidocs.net/115055

 

02) 버트(Bidirectional Encoder Representations from Transformers, BERT)

* 트랜스포머 챕터에 대한 사전 이해가 필요합니다. ![](https://wikidocs.net/images/page/35594/BERT.PNG) BERT(Bid ...

wikidocs.net

 

 

댓글