오디오와 이미지는 숫자로 이루어져 있다. 반면 텍스트는 문자다. 0과 1만을 인식하는 컴퓨터가 어떤 단어를 이해하도록 하려면 이 텍스트를 숫자로 변환해야 한다. 그러나 이 작업은 쉽지 않다. 그래서 이런 자연어를 컴퓨터가 잘 이해하도록 하고자 생겨난 연구 분야 중 하나가 바로 자연어 처리(natural language processing, NLP)다.
원-핫 인코딩(One-Hot Encoding)
원-핫 인코딩은 텍스트를 유의미한 숫자(벡터)로 바꾸는 가장 손쉬운 방법으로 N개의 단어를 각각 N차원의 벡터로 표현하는 방식이다. 단어가 포함되는 자리엔 1을 넣고 나머지에는 0을 넣는다. 사전이 ['나', '는', '자연어', '처리', '를', '배운다']라면 자연어를 표현하는 벡터는 [0, 0, 1, 0, 0, 0]이 되는 식이다. 단어 하나에 인덱스 정수를 할당한다는 점에서 '단어 주머니(bag of words, Bow)'라 부르기도 한다.
원-핫 인코딩 예제
'나는 자연어 처리를 배운다' 문장에 대하여 원-핫 인코딩 진행
from konlpy.tag import Okt
okt=Okt()
token=okt.morphs("나는 자연어 처리를 배운다")
print(token)
# ['나', '는', '자연어', '처리', '를', '배운다']
코엔엘파이의 Okt 형태소 분석기를 통해 토큰화 수행
word2index={}
for voca in token:
if voca not in word2index.keys():
word2index[voca]=len(word2index)
print(word2index)
# {'나': 0, '는': 1, '자연어': 2, '처리': 3, '를': 4, '배운다': 5}
각 토큰에 고유한 인덱스(index) 부여
def one_hot_encoding(word, word2index):
one_hot_vector = [0]*(len(word2index))
index=word2index[word]
one_hot_vector[index]=1
return one_hot_vector
토큰을 입력하면 해당 토큰에 대한 웟-핫 벡터를 만드는 함수
print(one_hot_encoding("자연어",word2index))
# [0, 0, 1, 0, 0, 0]
함수에 '자연어'라는 토큰을 입력했을 경우 [0, 0, 1, 0, 0, 0]라는 벡터가 나온다. '자연어'는 사전에서 인덱스가 2이므로, '자연어'를 표현하는 원-핫 벡터는 인덱스 2의 값이 1이며, 나머지 값은 0인 벡터가 나온다.
참고 자료
[1] 카카오브레인 블로그 - www.kakaobrain.com/blog/6
[2] 딥 러닝을 이용한 자연어 처리 입문 - wikidocs.net/22647
수정해야 할 부분이 있다면 알려주세요!
감사합니다!
'Dot > ML' 카테고리의 다른 글
Validation Dataset (0) | 2020.10.07 |
---|
댓글