Natural Language Processing with PyTorch
  • 소개글
  • 서문
  • Index
  • 딥러닝을 활용한 자연어 처리 개요
    • 자연어 처리란 무엇일까?
    • 딥러닝 소개
    • 왜 자연어 처리는 어려울까?
    • 무엇이 한국어 자연어 처리를 더욱 어렵게 만들까?
    • 자연어 처리의 최근 추세
  • 기초 수학
    • 서문
    • 랜덤 변수와 확률 분포
    • 쉬어가기: 몬티 홀 문제
    • 기대값과 샘플링
    • Maximum Likelihood Estimation
    • 정보 이론
    • 쉬어가기: MSE 손실 함수와 확률 분포 함수
    • 마치며
  • Hello 파이토치
    • 딥러닝을 시작하기 전에
    • 설치 방법
    • 짧은 튜토리얼
    • 쉬어가기: 윈도우즈 개발 환경 구축
  • 전처리
    • 전처리란
    • 코퍼스 수집
    • 코퍼스 정제
    • 분절
    • 병렬 코퍼스 정렬
    • 서브워드 분절
    • 분절 복원
    • 토치텍스트
  • 유사성과 모호성
    • 단어의 의미
    • One-hot 인코딩
    • 시소러스를 활용한 단어 의미 파악
    • 특징
    • 특징 추출하기: TF-IDF
    • 특징 벡터 만들기
    • 특징 유사도 구하기
    • 단어 중의성 해소
    • Selectional Preference
    • 마치며
  • 단어 임베딩
    • 들어가며
    • 차원 축소
    • 흔한 오해 1
    • Word2Vec
    • GloVe
    • Word2Vec 예제
    • 마치며
  • 시퀀스 모델링
    • 들어가며
    • Recurrent Neural Network
    • Long Short Term Memory
    • Gated Recurrent Unit
    • 그래디언트 클리핑
    • 마치며
  • 텍스트 분류
    • 들어가기
    • 나이브 베이즈를 활용하기
    • 흔한 오해 2
    • RNN을 활용하기
    • CNN을 활용하기
    • 쉬어가기: 멀티 레이블 분류
    • 마치며
  • 언어 모델링
    • 들어가며
    • n-gram
    • 언어 모델의 평가 방법
    • SRILM을 활용한 n-gram 실습
    • NNLM
    • 언어 모델의 활용
    • 마치며
  • 신경망 기계번역
    • 들어가며
    • Sequence-to-Sequence
    • Attention
    • Input Feeding
    • 자기회귀 속성과 Teacher Forcing 훈련 방법
    • 탐색(추론)
    • 성능 평가
    • 마치며
  • 신경망 기계번역 심화 주제
    • 다국어 신경망 번역
    • 단일 언어 코퍼스를 활용하기
    • 트랜스포머
    • 마치며
  • 강화학습을 활용한 자연어 생성
    • 들어가며
    • 강화학습 기초
    • 정책 기반 강화학습
    • 자연어 생성에 강화학습 적용하기
    • 강화학습을 활용한 지도학습
    • 강화학습을 활용한 비지도학습
    • 마치며
  • 듀얼리티 활용
    • 들어가며
    • 듀얼리티를 활용한 지도학습
    • 듀얼리티를 활용한 비지도학습
    • 쉬어가기: Back-translation을 재해석하기
    • 마치며
  • NMT 시스템 구축
    • 파이프라인
    • 구글의 NMT
    • 에딘버러 대학의 NMT
    • MS의 NMT
  • 전이학습
    • 전이학습이란?
    • 기존의 사전 훈련 방식
    • ELMo
    • BERT
    • GPT-2
    • XLNet
    • 마치며
  • 이 책을 마치며
  • 참고문헌
Powered by GitBook
On this page
  1. 유사성과 모호성

마치며

5장에서는 단어의 의미에 대해서 살펴보고, 의미의 유사성이나 모호성을 다루어보았습니다. 단어는 겉의 불연속적인 형태와 달리 내부적으로는 불연속적이지 않은 '의미sense'를 가집니다. 따라서 우리는 단어의 겉모양이 다르더라도 의미가 유사할 수 있음을 알고 있습니다. 이렇게 의미가 유사한 단어들 간의 유사도를 계산할 수 있다면, 코퍼스로부터 분포나 특징들을 훈련할 때 더 많은 정보를 얻고 정확한 훈련을 할 수 있습니다. 예를 들어 꼭 소스source 단어가 아니더라도 해당 소스 단어와 유사한 단어들로부터 정보를 얻어올 수 있고, 그 정보를 소스 단어와 유사한 만큼만 사용하면 될 것입니다.

이러한 자연어 처리의 염원 아래, 사람이 직접 한 땀 한 땀 정성 들여 만든 워드넷이라는 사전 이 등장했고, 워드넷을 활용하여 단어 사이의 유사도(거리)를 계산할 수도 있게 되었습니다. 하 지만 워드넷과 같은 시소러스를 구축하기란 너무나도 엄청난 일이므로, 사전 없이 유사도를 구할 수 있으면 더 좋을 것입니다.

사전 없이 코퍼스만 가지고 특징을 추출하여 단어를 벡터로 만든다면, 워드넷의 정교한 지식은 이용할 수 없겠지만 훨씬 간단한 작업이 될 것입니다. 게다가 코퍼스의 크기가 커질수록 추출 된 특징들은 점차 정확해질 것이고, 특징 벡터도 더 정확해질 것입니다. 특징 벡터가 추출된 후에는 코사인 유사도나 L2 거리 등의 매트릭metric을 통해서 유사도를 계산할 수 있습니다.

하지만 앞서 보았듯이, 단어 사전 내의 단어의 수가 30,000~50,000개가 넘는 현실에서 이렇게 추출된 특징 벡터의 차원은 단어 사전의 크기와 맞먹습니다. 단어 대신 문서를 특징으로 사용하더라도 주어진 문서의 숫자만큼 벡터의 차원이 만들어질 것입니다. 벡터가 큰 문제는 차치하고라도, 더 큰 문제는 그 차원의 대부분 값이 0으로 채워진다는 것입니다. 즉, 각 차원에 숫자가 나타나는 경우는 0이 나타나는 경우에 비해서 현저히 적습니다. 따라서 이런 0으로 가득한 희소 벡터를 통해 무엇인가 배우고자 할 때 큰 장애로 작용합니다. 특히, 앞서 배운 코사인 유사도의 경우에는 직교한 경우가 생겨 코사인 유사도의 값을 0으로 만들기 쉽습니다. 즉, 정확한 유사도를 구하기 어렵습니다.

이러한 희소성 문제는 자연어 처리의 가장 큰 특징입니다. 단어는 불연속적인 심볼로 이루어지기 때문입니다. 전통적인 자연어 처리에서는 이러한 희소성 문제로 인해 정말 큰 어려움을 겪었습니다. 많은 분이 이미 잘 알고 있듯이, 요즘 딥러닝에서는 단어의 특징 벡터를 이런 희소 벡터로 만들기보다는 임베딩 기법을 통해 0이 잘 존재하지 않는 덴스dense 벡터로 만들어 사용합니다. 이런 차이점이 바로 딥러닝에서의 자연어 처리가 전통적인 방식의 자연어 처리에 비해 성능이 월등한 이유입니다. 앞으로 다룰 장에서는 딥러닝을 통해 이런 자연어 처리의 문제를 잘 해결하는 방법들을 소개해보고자 합니다.

PreviousSelectional PreferenceNext단어 임베딩

Last updated 5 years ago