1. 단어 집합(vocabulary) 및 정수 맵핑
텍스트의 모든 단어의 중복을 배제한 집합을 단어 집합(vocabulary)이라고 합니다. 그리고 이 단어 집합에 고유한 숫자를 부여하는 정수 인코딩을 진행합니다. 이를 다른 말로 맵핑(mapping)이라고 합니다. 보통 인덱스는 빈도수가 높은 단어들만 사용하기 위해서, 단어의 빈도수를 기준으로 내림차순 정렬한 뒤에 부여합니다.2. 원-핫 인코딩(One-hot encoding)
원-핫 인코딩은 "범주형 데이터" 또는 "다중 클래스 분류" 문제를 처리할 때 레이블을 표현합니다. 원-핫 인코딩의 크기는 선택(Category or Class)개수이고, 정답은 1로 나머지는 0으로 표시하는 방법입니다.
원-핫 인코딩은 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스 즉, 정답에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다. 이렇게 표현된 벡터를 원-핫 벡터(One-hot vector)라고 합니다. 원-핫 인코딩을 위해서 먼저 해야할 일은 단어 집합을 만드는 일입니다. 원-핫 인코딩을 하기 위해서는 우선 각 선택지에 순차적으로 정수 인덱스를 부여합니다.
원-핫 인코딩 수행 과정
- 단어 집합 생성
- 각 단어에 고유한 인덱스를 부여
- 표현하고 싶은 단어의 인덱스의 위치에 1을 부여하고, 다른 단어의 인덱스의 위치에는 0을 부여
- 카테고리가 6개이므로 6차원 벡터로 표시
3. 원-핫 인코딩의 희소 표현(Sparse Vector)
희소 표현을 이용해 벡터 전체를 표기하지 않고, 숫자 하나(1의 값의 Index를 가지고 표현)로 표현할 수 있습니다.
4. 비용함수 MSE(Mean Square Error - 평균 제곱 오차)을 이용한 오차 계산
((1,0,0)−(0,1,0))2=(1−0)2+(0−1)2+(0−0)2=2
((1,0,0)−(0,0,1))2=(1−0)2+(0−0)2+(0−1)2=2
원-핫 인코딩은 순서의 정보를 가지지 않는다. 이는 모든 클래스에 대해서 원-핫 벡터들은 모든 쌍에 대해서 유클리드 거리를 구해도 전부 유클리드 거리가 동일합니다. 하지만 원-핫 벡터은 이러한 특징으로 단어의 유사성을 구할 수 없다는 단점이 있습니다.
5. 원-핫 인코딩(One-hot encoding)의 한계
원-핫 인코딩 방식은 단어의 개수가 늘어날 수록, 벡터를 저장하기 위해 필요한 공간이 계속 늘어난다는 단점이 있습니다. 즉, 원 핫 벡터는 단어 집합의 크기가 곧 벡터의 차원 수가 됩니다. 이 방법은 모든 단어 각각은 하나의 값만 1을 가지고, 999개의 값은 0의 값을 가지는 벡터가 되는데 이는 저장 공간 측면에서는 매우 비효율적인 표현 방법입니다.
또한 원-핫 벡터는 단어의 유사도를 표현하지 못한다는 단점이 있습니다. 단어 간 유사성을 알 수 없다는 단점은 검색 시스템 등에서 심각한 문제입니다.
EX) '삿포로 숙소' 검색하면 연관 검색어로 '삿포로 숙소', '삿포로 게스트 하우스', '삿포로 료칸', '삿포로 호텔' 등 보여주지 못 함.
원-핫 인코딩 한계점 해결 방법으로 다음과 같은 방법이 있습니다.
- 카운트 기반의 벡터화 방법: LSA, HAL
- 예측 기반으로 벡터화 방법: NNLM, RNNLM, Word2Vec, FastText
- 카운트 기반 and 예측 기반 방법: GloVe
감사합니다.
Reference
- https://wikidocs.net/31766
- https://wikidocs.net/22647
- https://miro.medium.com/max/1348/1*Dpvr1y_n_qlvSjLoqPxtww.png
- Fast Campus
- PyTorch로 시작하는 딥 러닝 입문
댓글
댓글 쓰기