참고

https://tech.kakao.com/2023/06/05/languagemodel-mlm-clm/

 

언어모델의 원리와 만들기

언어모델 언어 모델(Language model)은 주어진 단어들의 시퀀스에 대해 임베딩 표현(Embedding representation) 또는 벡터(Embedding vector)를 만들어 줍니다. 언어 모델을 통해 만든 임베딩 표현으로 주제 찾기,

tech.kakao.com

https://velog.io/@jieun9851/Tokenizer-%EC%A0%9C%EC%9E%91%ED%95%98%EA%B8%B0

 

[NLP] Tokenizer 제작하기

개요 현재 대부분의 NLP task는 PLM (Pre-trained Language Model)을 통한 전이 학습이 대세로 자리잡았다. 하지만 긴 Pretraining을 수행 전 vocab을 만드는 건 정말 중요하다. 좋은 vocab을 만드는 것이 곧 토크나

velog.io

 

참고링크에 있는 카카오 테크 글에서 Huggingface tokenizer 중 CharBPETokenizer를 사용한다고 하길래

이게 뭘까 궁금해서 찾아보게 되었다.

 

토크나이저는 단어들의 통계 수치로 우선순위를 구해 어휘사전을 만들고 텍스트롤 토큰으로 파싱(분해)한다.

쉽게말해 텍스트데이터(=corpus=말뭉치)에서 단어들을 뽑아내 단어사전을 구축하고 이 단어사전을 토대로 텍스트를 토큰으로 분해해주는 컴포넌트다.

 

Hugging face

허깅페이스는 기계 학습 모델을 구축, 배포 및 교육하기 위한 도구와 리소스를 개발하는 프랑스계 미국회자이자 오픈소스 커뮤니티다.

특히 자연어 처리를 위해 구축된 transformers 라이브러리와 커뮤니티 협업 및 접근성에 중점을 둔것으로 유명하다.

2016년에 만들어졌고 원래는 10대 챗봇 개발회사였다는데.. 대단하다

 

토크나이저의 종류

크게 두 가지가 있다.

  • word tokenizer
  • subword tokenizer

 

word tokenizer는 문장에서 단어를 분절한다.

분절의 결과는 '경찰복', '경찰관', '경찰차' 등의 단어들이다.

 

subword tokenizer는 단어를 나누어 단어 안의 단어들로 토큰화를 시킨다.

위 '경찰복', '경찰관', '경찰차'를 가지고 subword tokenizing을 하면

'경찰' #차 #복 #관 으로 나눠진다.

subword tokenizer는 사전에 없는 단어들에 대해서도 좋은 성능을 보여 OOV, 희귀단어, 신조어 문제 등을 완화한다. 물론 완벽하게 해결하진 못한다.

몇 번 이상 등장하지 않는 단어들은 사전에 포함시키지 않는 경우도 있다. 대표적인 예는 KoBERT. 5번 미만 등장하는 건 사전에 넣지 않았다고 한다.

 

Subword 분절 방식

Subword Tokenizer가 토크나이징 하는 방식은 3가지 정도가 있다고 한다.

  • BPE (Byte Pair Encoding)
  • SentencePiece
  • WordPiece

BPE (Byte Pair Encoding)

연속으로 가장 많이 등장한 글자의 쌍을 찾아 하나의 글자로 병합하는 방식이라고 한다.

 

장점

  • 말뭉치가 있으면 비교적 간단하게 만들 수 있음.
  • OOV를 최소화

단점

  • Subword의 분할이 의미가 기준이 되지 않기도 한다.
    • ex1) '포항에'가 '포항', '에'로 나뉘길 원했는데 '포', '항에'가 되는 경우
    • ex2) 빈도수가 적은 단어들이 나눠지지 않고 그대로 분류되는 경우

Huggingface의 Tokeninzers

크게 4가지를 제공한다고 한다.

  • CharBPETokenizer
  • ByteLevelBPETokenizer -> GPT, Roberta에 쓰임
  • SentencePieceBPETokenizer
  • BertWordPieceTokenizer -> BERT에 쓰임

+ Recent posts