반응형
1. 벡터화(Vectorization)란 무엇인가? (정의 및 핵심 아이디어)
가장 먼저 '벡터화'가 무엇인지 정확히 알아야 합니다.
정의
벡터화란 우리가 사용하는 자연어(예: 한국어, 영어 문장)를 컴퓨터가 이해할 수 있는 숫자의 나열, 즉 벡터(Vector)로 변환하는 과정입니다.
컴퓨터는 '사과'라는 단어의 의미를 직접적으로 이해하지 못합니다. 오직 숫자만을 처리할 수 있죠. 그래서 '사과'라는 텍스트 토큰(Text Token)을 [0.1, 0.7, -0.2, ...] 와 같은 고정된 차원(길이)을 가진 숫자 벡터로 바꿔주는 것입니다. 이렇게 해야만 컴퓨터 모델(예: 인공지능)이 텍스트 데이터를 입력받아 학습하고, 분석하고, 새로운 문장을 생성하는 등의 작업을 할 수 있습니다.
주요 아이디어 (핵심 원리)
벡터화가 그냥 단어를 숫자로 바꾸기만 하는 단순한 작업이 아닙니다. 여기에는 두 가지 매우 중요한 아이디어가 담겨 있습니다.
- 의미를 공간에 표현 (의미적 공간 매핑)
- 모든 단어(토큰)는 고유한 벡터 값을 가지며, 이 벡터는 고차원 벡터 공간(High-dimensional Vector Space)의 한 점으로 표현됩니다.
-
* **핵심:** 단어의 '의미'가 벡터 공간상의 '위치'와 '방향'으로 표현됩니다. 이미지에 나온 그래프처럼 'shark(상어)', 'animal(동물)'과 같이 의미가 비슷한 단어들은 벡터 공간에서 서로 가까운 곳에 위치하게 됩니다. 반면, 'dictatorship(독재)'처럼 의미가 전혀 다른 단어는 멀리 떨어져 있죠.
- 유사한 의미는 가까운 벡터로 (의미 유사도 계산)
- 단어들의 의미가 비슷할수록, 그 단어들의 벡터 값도 서로 유사해집니다.
- 이를 통해 컴퓨터는 단어 벡터들 간의 거리를 계산하거나(예: 유클리드 거리) 각도를 계산하여(예: 코사인 유사도) 두 단어가 얼마나 의미적으로 비슷한지를 수학적으로 판단할 수 있습니다.
- 가장 유명한 예시로 "킹" - "남자" + "여자" ≈ "퀸" 이라는 벡터 연산이 가능한 것도 바로 이 원리 덕분입니다.
🔢 2. 벡터화는 어떤 과정으로 이루어지는가? (프로세스)
그렇다면 텍스트를 벡터로 바꾸는 작업은 구체적으로 어떤 단계를 거칠까요? 총 4단계로 나눌 수 있습니다.
- Corpus(말뭉치) 형성
- 설명: 분석하고 싶은 전체 텍스트 데이터를 준비하는 단계입니다. 이 텍스트 묶음을 **'코퍼스(Corpus)'**라고 부릅니다.
- 예시: 위키피디아 전체 문서, 네이버 영화 리뷰 10만 건, 특정 소설책 한 권 등이 모두 코퍼스가 될 수 있습니다. 모델을 학습시키기 위한 '교과서'를 만드는 과정이라고 생각하면 쉽습니다.
- 어휘집(Vocabulary) 구축
- 설명: 준비된 코퍼스에 있는 모든 문서를 **토큰화(Tokenization)**하여, 중복을 제거한 고유한 토큰들의 집합을 만듭니다. 이것을 **'어휘집'**이라고 합니다. 토큰화란 문장을 의미 있는 최소 단위(보통 단어)로 자르는 것을 말합니다.
- 예시: "나는 사과를 먹는다. 너는 바나나를 먹는다." 라는 코퍼스가 있다면, 토큰화 후 어휘집은 {'나', '는', '사과', '를', '먹는다', '너', '바나나'} 가 됩니다.
- 벡터화 사전(Dictionary) 정의
- 설명: 어휘집에 있는 각 토큰(단어)에 고유한 벡터 값을 할당하는 단계입니다. 즉, 단어와 벡터를 짝지어주는 '사전'을 만드는 것입니다.
- 예시: 어휘집의 '사과'라는 단어에는 [0.1, 0.7, -0.2]를, '바나나'에는 [0.2, 0.8, -0.1]를 할당하는 식입니다. (실제 벡터는 이보다 훨씬 깁니다.)
- 텍스트 벡터화
- 설명: 이제 새로운 문장이나 문서가 들어오면, 위에서 만든 벡터화 사전을 참조하여 문장을 벡터로 변환합니다.
- 예시: "나는 바나나를 먹는다"라는 문장이 들어오면, '나', '바나나', '를', '먹는다' 각각의 토큰을 사전에서 찾아 해당 벡터로 바꾼 후, 이 벡터들을 합치거나 평균을 내는 등의 방법으로 문장 전체를 대표하는 하나의 벡터를 만들어 냅니다. 이 벡터가 모델의 최종 입력값이 됩니다.
📊 3. 벡터 표현의 종류 (매우 중요!)
벡터화를 하는 방법은 여러 가지가 있으며, 각각의 특징이 뚜렷해서 시험에 단골로 출제되는 부분입니다. 반드시 구분해서 암기해야 합니다.
1. 희소 표현(Sparse Representation) vs. 밀집 표현(Dense Representation)
- 희소 표현 (Sparse Representation)
- 정의: 벡터의 대부분의 값이 0으로 채워져 있는 표현 방식입니다.
- 대표적인 예: 원-핫 인코딩(One-Hot Encoding). 어휘집의 크기가 10,000개라면, 각 단어는 10,000차원의 벡터가 되고, 자신의 인덱스에만 1을, 나머지 9,999개는 모두 0을 가집니다. (예: '사과'가 3번 인덱스라면 [0, 0, 1, 0, ..., 0])
- 단점: **차원의 저주(Curse of Dimensionality)**에 걸리기 쉽습니다. 어휘집이 커질수록 벡터의 차원이 한없이 커져 메모리 낭비가 심하고 계산이 비효율적입니다. 또한, 모든 단어 벡터 간의 거리가 동일하여 단어의 의미적 유사도를 표현하지 못합니다.
- 밀집 표현 (Dense Representation)
- 정의: 벡터의 대부분의 값이 0이 아닌 실수로 채워져 있는, 저차원의 벡터 표현 방식입니다.
- 특징: 단어의 의미를 여러 차원에 분산하여 표현합니다. (예: 200~300차원). 따라서 적은 차원으로도 단어의 의미적, 문법적 관계를 풍부하게 담을 수 있습니다.
- 대표적인 예: Word2Vec, GloVe, FastText 와 같은 워드 임베딩(Word Embedding) 기법들이 여기에 속합니다. 우리가 위에서 말한 '의미가 비슷하면 벡터도 가깝다'는 개념은 바로 이 밀집 표현 덕분에 가능합니다.
2. 정적 임베딩(Static Embedding) vs. 문맥적 임베딩(Contextualized Embedding)
- 정적 임베딩 (Static Embedding)
- 정의: 한번 학습되고 나면, 단어의 벡터 값이 고정되어 변하지 않는 방식입니다. 어떤 문장에 쓰이든 같은 단어는 항상 같은 벡터를 가집니다.
- 예시: "금융 은행에 가다" 와 "강둑 은행에 앉다" 에서 '은행'은 서로 다른 의미지만, 정적 임베딩에서는 두 '은행'의 벡터가 완전히 동일합니다.
- 대표적인 모델: Word2Vec, GloVe, FastText
- 문맥적 임베딩 (Contextualized Embedding)
- 정의: 단어가 놓인 문맥에 따라 벡터 값이 동적으로 달라지는 방식입니다. 다의어(여러 의미를 가진 단어) 문제를 해결할 수 있습니다.
- 예시: "금융 은행에 가다" 에서의 '은행' 벡터와 "강둑 은행에 앉다" 에서의 '은행' 벡터는 주변 단어들('금융', '강둑')의 영향을 받아 서로 다른 값을 갖게 됩니다.
- 대표적인 모델: BERT, ELMo, GPT 와 같은 최신 트랜스포머(Transformer) 기반의 언어 모델들이 여기에 속합니다.
3. 규칙 기반(Rule-based) vs. 학습 기반(Learned) 표현
- 규칙 기반 표현 (Rule-based Representation)
- 정의: 사람이 정한 간단한 규칙에 따라 벡터를 생성하는 방식입니다.
- 대표적인 예: 단어의 등장 횟수를 세는 **Bag-of-Words (BoW)**나 TF-IDF 가 대표적입니다. 이 방법들은 단어의 의미를 학습하는 것이 아니라, 통계적인 정보(빈도수 등)를 벡터에 직접적으로 반영합니다.
- 학습 기반 표현 (Learned Representation)
- 정의: 대규모 코퍼스를 신경망 모델에 학습시켜, 데이터로부터 단어의 의미 관계를 스스로 '학습'하게 하여 벡터를 생성하는 방식입니다.
- 대표적인 예: Word2Vec, BERT 등 대부분의 밀집 표현, 문맥적 임베딩 방식이 여기에 해당합니다. 이 방법들은 예측과 같은 특정 과제를 수행하는 과정에서 최적의 벡터 표현을 찾아냅니다.
🎓 시험 대비 최종 요약
- 벡터화란? 텍스트를 컴퓨터가 이해하는 숫자 벡터로 바꾸는 것.
- 왜? 단어의 의미를 벡터 공간에 표현하고, 의미적 유사도를 수학적으로 계산하기 위해.
- 과정은? 코퍼스 준비 → 어휘집 구축 → 벡터 사전 정의 → 텍스트 벡터화
- 종류는? (★매우 중요★)
- Sparse (희소): 대부분 0, 차원 큼 (예: One-Hot Encoding)
- Dense (밀집): 실수로 꽉 참, 차원 작고 의미 풍부 (예: Word2Vec)
- Static (정적): 문맥 상관없이 단어 벡터 고정 (예: Word2Vec, GloVe)
- Contextualized (문맥적): 문맥에 따라 단어 벡터가 변함 (예: BERT, GPT)
반응형
'코딩공부 > 자연어처리' 카테고리의 다른 글
| 내가 시험공부하려고 만든 자연어처리-전처리 3탄(벡터화)-원핫인코딩 (0) | 2025.10.05 |
|---|---|
| 내가 시험공부하려고 만든 자연어처리-전처리 3탄(벡터화)-정수인코딩 (0) | 2025.10.05 |
| 내가 시험공부하려고 만든 자연어처리-전처리 3탄(후속처리) (0) | 2025.10.05 |
| 내가 시험공부하려고 만든 자연어처리-전처리 2탄(토큰화)-WordPiece (0) | 2025.10.05 |
| 내가 시험공부하려고 만든 자연어처리-전처리 2탄(토큰화)-SentencePiece (0) | 2025.10.05 |