ThLee
ThLee의 기록장
ThLee
전체 방문자
오늘
어제
  • 분류 전체보기 (137)
    • 정보처리기사 (13)
    • 알고리즘&문제 (5)
    • 인공지능 (4)
    • 자연어처리(NLP) (6)
    • 파이썬 (24)
    • 앱인벤터 강좌 (21)
    • 리눅스 (4)
    • 프로젝트 (1)
    • (App)톡분석AI (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정보처리기사 실기
  • 앱인벤터
  • 어플
  • 앱인벤터 블로그
  • 정처기
  • 앱인벤터 강좌
  • 정보처리기사 정리
  • 정보처리기사
  • 앱인벤터 무료
  • 딥러닝
  • 파이썬 넘파이
  • 블록코딩
  • AI
  • 정보처리기사 실기 정리
  • 인공지능
  • 판다스
  • 파이썬
  • Python
  • 블로그
  • 넘파이

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ThLee

ThLee의 기록장

자연어처리(NLP)

NLP에서 원-핫 인코딩(One-hot encoding)이란?

2022. 12. 16. 11:05
728x90

원-핫 인코딩을 해야하는 이유?

컴퓨터는 문자보다는 숫자를 더 잘 처리 할 수 있다. 그렇기에 NLP에서는 문자를 수자로 바꾸는 여러가지 기법들이 있다. 그 중 원-핫 인코딩(One-hot Encoding)이 가장 기본적인 표현 방법이며, 머신러닝과 딥러닝을 위해서는 반드시 배워야하는 방법이다.

단어 사전(vocabulary)란 ?

단어 사전은 서로 다른 단어들의 집합이다. book 과 books는 다른 단어로 간주되며, 텍스트의 모든 단어의 중복을 허용하지 않고 모아 놓은 것이다.

텍스트에 단어가 총 5,000개가 존재한다면, 단어 사전의 크기는 5,000이 된다. 5,000개의 단어가 있는 단어 사전은 각 단어들마다 1번~5,000번까지 인덱스를 부여한다. 예를 들어, book은 150번, dog는 171번, love는 192번, books는 212번과 같이 부여할 수 있다(인덱스는 임의로 지정한 것이다)


(1) 각 단어에 고유한 인덱스를 부여합니다. (정수 인코딩)
(2) 표현하고 싶은 단어의 인덱스의 위치에 1을 부여하고, 다른 단어의 인덱스의 위치에는 0을 부여합니다.

 

한국어 예제

konlpy 패키지 사용

pip install konlpy
  1. 입력 : 나는 자연어 처리를 배운다
  2. 처리 1(형태소분석(Okt)) : ['나', '는', '자연어', '처리', '를', '배운다']
  3. 처리 2(고유한 인덱스 부여) : {'나': 0, '는': 1, '자연어': 2, '처리': 3, '를': 4, '배운다': 5}
  4. 결과(자연어 단어찾기) : [0, 0, 1, 0, 0, 0]
# 1. 입력 : 나는 자연어 처리를 배운다
text = '나는 자연어 처리를 배운다'

# 2. 처리 1(형태소분석(Okt)) : ['나', '는', '자연어', '처리', '를', '배운다']
from konlpy.tag import Okt  
okt = Okt()  
token = okt.morphs(text)  
print(token) # ['나', '는', '자연어', '처리', '를', '배운다']

# 3. 처리 2(고유한 인덱스 부여) : {'나': 0, '는': 1, '자연어': 2, '처리': 3, '를': 4, '배운다': 5}
word2index = {}
for voca in token:
     if voca not in word2index.keys():
       word2index[voca] = len(word2index)
print(word2index) # {'나': 0, '는': 1, '자연어': 2, '처리': 3, '를': 4, '배운다': 5}

# 4. 결과(자연어 단어찾기) : [0, 0, 1, 0, 0, 0]
def one_hot_encoding(word, word2index):
       one_hot_vector = [0]*(len(word2index))
       index = word2index[word]
       one_hot_vector[index] = 1
       return one_hot_vector
one_hot_encoding("자연어",word2index) # [0, 0, 1, 0, 0, 0]

 

원-핫 인코딩(One-hot encoding)의 한계

  1. 벡터를 저장하기 위한 필요한 공간이 계속 늘어난다
    • 단어가 1,000개인 코퍼스를 가지고 원핫 벡터를 만들면 하나의 값만 1를 가지고, 999개는 0값을 가지게 됨으로써 매우 비효율적인 방법이다
  2. 단어의 유사도를 표현하지 못한다
    • 강아지, 개, 냉장고 라는 3개의 단어가 있을 때, 강아지라는 단어가 개와 냉장고 중에 뭐가 더 유사한지 알 수 없다
    • 위 단점은 검색 시스템에서 심각한 문제이다. 만약, "숙소"를 검색하면 비슷한 의미의 게스트하우스, 호텔, 모텔 등 유사 단어와 같이 검색이 되야하는데, 검색이 안된다는 것이다.

원-핫 인코딩의 단점을 보완한 것이 "워드 임베딩(Word Embedding)"이다.


출처 : https://wikidocs.net/60853

 

01. NLP에서의 원-핫 인코딩(One-hot encoding)

컴퓨터 또는 기계는 문자보다는 숫자를 더 잘 처리 할 수 있습니다. 이를 위해 자연어 처리에서는 문자를 숫자로 바꾸는 여러가지 기법들이 있습니다. 원-핫 인코딩(One-hot e…

wikidocs.net

 

728x90

'자연어처리(NLP)' 카테고리의 다른 글

TF-IDF 해석 방법(+ 예제, 실험)  (0) 2023.01.05
Skip-gram  (0) 2022.12.16
CBOW(Continuous Bag of Words)  (2) 2022.12.16
워드투벡터(Word2Vec)  (0) 2022.12.16
워드 임베딩(Word Embedding)  (0) 2022.12.16
    '자연어처리(NLP)' 카테고리의 다른 글
    • Skip-gram
    • CBOW(Continuous Bag of Words)
    • 워드투벡터(Word2Vec)
    • 워드 임베딩(Word Embedding)
    ThLee
    ThLee
    # 포트폴리오 https://thleewave.notion.site/ThLee-1fef9e057dbf40d5b7b851ab0abccf36?pvs=4 #Github - https://github.com/git-ThLee #IoT 스타트업 -Full-stack -2021.01~2021.07 -사용기술 : fluterr, arduino, node.js #코딩학원 강사 - 2019.11 ~ 진행중 - 언어 : python, 블록 코딩 - 플랫

    티스토리툴바