개요
LLM 서비스 준비로 인해 NLP의 기본 개념인 토큰화, 임베딩에 대해서 학습한 내용을 정리 하였습니다.
토큰화의 개념
- tokenization (토큰화)
- 텍스트 데이터를 컴퓨터가 처리할 수 있도록 변환하는 과정
- 문장이나 문서를 모델이 처리할 수 있는 작은 단위(토큰)로 분할하는 과정
토큰화 주요 종류
- N-gram: 연속된 n개의 아이템을 하나의 토큰으로 취급합니다. 이는 텍스트 내에서 아이템의 연속성을 포착하는 데 유용합니다.
- Character: 개별 문자를 독립적인 토큰으로 취급합니다. 이 방법은 언어의 구조적 특성을 덜 고려하며, 매우 세밀한 수준의 분석이 가능합니다.
- Word: 공백이나 구두점 등을 기준으로 분리된 ‘단어’를 토큰으로 사용합니다. 가장 일반적이고 직관적인 방법입니다.
- Morpheme: 형태소 분석을 통해 언어의 가장 작은 의미 단위를 토큰으로 취급합니다. 특히 굴절 언어 처리에 적합합니다.
- Subword: ‘Byte Pair Encoding (BPE)’ 또는 ‘WordPiece’와 같은 방법을 사용하여 자주 사용되는 문자의 조합이나 단어의 부분을 토큰으로 분리합니다. 이는 효율적인 어휘 크기 관리와 더 나은 일반화를 가능하게 합니다.
언어권별 선호하는 토큰화
- 로마 언어권: 단어(word) 기반 토크나이제이션이 일반적으로 사용되었습니다. 이는 라틴계 언어의 구조상 단어 간 구분이 명확하기 때문입니다.
- 중국어 언어권: 문자(character) 기반 토크나이제이션이 주로 사용되었습니다. 중국어는 각 문자가 고유한 의미를 가지고 있기 때문에 이 방식이 효과적입니다.
- 한국어: 형태소(morpheme) 기반 토크나이제이션이 선호되었습니다. 한국어는 굴절 언어의 특성을 가지고 있어 형태소 분석이 중요합니다.
- 굴절 언어란?
- 단어의 형태가 문법적 역할에 따라 변화하는 언어 ex) 단어의 끝부분이 변해서 문법적 의미(예: 시제, 격, 수 등)를 나타내는 경우
- 일본어: 역시 형태소 기반 토크나이제이션이 흔히 사용되었습니다. 일본어 역시 복잡한 굴절을 가진 언어이기 때문입니다.
최근 사용되는 토큰화 방법
- BPE (Byte Pair Encoding):
- 원리: 자주 함께 나타나는 문자 쌍을 병합하여 단어를 더 작은 단위로 분할합니다.
- 사용: 자주 등장하는 패턴을 병합해 희귀 단어를 처리하는 데 유용합니다.
- WordPiece:
- 원리: 자주 나타나는 하위 단위(subword)로 단어를 분할합니다.
- 사용: BERT와 같은 모델에서 사용되며, 어휘를 작은 단위로 쪼개어 희귀 단어를 처리합니다.
- SentencePiece:
- 원리: BPE나 WordPiece처럼 작동하지만, 공백 처리 없이 문장을 직접 분할할 수 있습니다.
- 사용: 비영어권 언어 처리에 적합하며, 모든 문자를 포괄하는 방식입니다.
어휘 표현이란?
- 텍스트 데이터를 수치 데이터로 변환하는 방식
- 기계가 자연어를 이해하기 위해서 임베딩 하는 과정
어휘 표현 종류
- 희소 표현 → 원한 인코딩 (One-Hot Encoding)
- 원-핫 벡터들은 표현하고자 하는 단어의 인덱스의 값만 1이고, 나머지 인덱스에는 전부 0으로 표현되는 벡터 표현 방법
- 이러한 벡터 표현은 공간적 낭비
- 원-핫 벡터들은 표현하고자 하는 단어의 인덱스의 값만 1이고, 나머지 인덱스에는 전부 0으로 표현되는 벡터 표현 방법
- 밀집 표현
- Word Embeddings: 단어를 고정된 크기의 벡터로 표현하는 방법으로, 단어 간의 유사성을 벡터 공간에서의 거리로 나타냅니다.
- 예: Word2Vec, GloVe, FastText 등.
- Sentence Embedding: 문장을 고정된 크기의 벡터로 변환하여 문장의 의미를 수치적으로 표현하는 방법입니다.
- 비슷한 의미를 가진 문장은 벡터 공간에서 가까운 위치에 임베딩됩니다.
- 예: Universal Sentence Encoder, Sentence-BERT 등.
- 밀집 표현은 차원이 낮고 연속적이기 때문에 원한 인코딩과 달리 효율적이며, 단어들 간의 의미적 관계를 내포할 수 있습니다.
- Word Embeddings: 단어를 고정된 크기의 벡터로 표현하는 방법으로, 단어 간의 유사성을 벡터 공간에서의 거리로 나타냅니다.
Word Embedding
대표적인 Word Embeddings 방법으로는 다음이 있습니다:
- Word2Vec: 특정 단어를 주변 단어들에 의해 예측하는 방법을 통해 단어의 벡터 표현을 학습합니다.
- GloVe: 전역적인 통계 정보를 이용해 단어의 벡터를 학습합니다.
- FastText: 단어를 부분 단위로 쪼개어 벡터로 표현하여, 새로운 단어에 대해서도 의미를 추정할 수 있습니다.
- BERT 등과 같은 최신 Transformer 기반의 방법들도 밀집 표현을 생성하는 데 사용됩니다.
Sentence Embedding
문장 임베딩은 단어가 아닌 문장 전체를 하나의 벡터로 변환하는 방식입니다. 이 방식은 단어 임베딩과 달리, 문장 내 단어들 간의 문법적, 의미적 관계를 반영하여 임베딩을 생성합니다. 문장의 의미를 보존하는 벡터 표현을 얻기 위해 다양한 방법론이 사용됩니다.
- Universal Sentence Encoder (USE): 문장 전체의 의미를 반영하여 고정된 크기의 벡터를 생성하는 구글의 모델입니다.
- BERT 기반 문장 임베딩: BERT는 문맥을 이해할 수 있는 트랜스포머 모델로, 문장 임베딩을 생성하기 위해 BERT의 최종 층이나 CLS 토큰의 출력을 사용합니다.
단어 임배딩과의 비교 분석:
특성 | Word Embedding (단어 임베딩) | Sentence Embedding (문장 임베딩) |
단위 | 단어 | 문장 |
차원 | 고정된 크기의 벡터(보통 50-300차원) | 고정된 크기의 벡터(보통 512차원 이상) |
문맥 반영 여부 | 문맥 반영 안 함 | 문맥 반영 |
계산 비용 | 상대적으로 낮음 | 상대적으로 높음 |
사용 사례 | 단어 간 유사성 평가, 단어 기반 작업 | 문장 유사도 평가, 텍스트 분류, 정보 검색 |
주요 알고리즘/모델 | Word2Vec, GloVe, FastText | USE, BERT, Doc2Vec |
결론
- 최근 토큰화는 Subword 토큰화를 사용하며, SentencePiece는 비영어권인 우리에게 적합한 토크나이제이션이라고 생각됨
- 트랜스포머 모델로 추세가 변환되면서 Word2Vec과 같은 임베딩은 추가적으로 필요가 없음