데이터 한 그릇

자연어 처리 개요_단어 표현 본문

NLP/텐서플로2와 머신러닝으로 시작하는 자연어처리

자연어 처리 개요_단어 표현

장사이언스 2022. 1. 9. 14:11

자연어 처리 개요_단어 표현

자연어 처리 장에서는 총 4개의 문제에 대해서 알아볼 예정

  • 텍스트 분류
  • 텍스트 유사도
  • 텍스트 생성
  • 기계 이해


단어 표현

결론부터, 단어를 수치화 할 때, 벡터화 해서 주로 표현

 

 

단어 표현은 모든 자연어 처리 문제의 기본 바탕이 되는 개념.

`자연어를 어떻게 표현할지 정하는 것`이 각 문제를 해결하기 위한 출발점.

즉, 어떻게 자연어를 컴퓨터에게 인식시킬 수 있을까?

이런 질문의 답을 찾는 게 "단어 표현(Word Representation)" 분야다.

언어적인 특성을 반영해서 단어를 수치화 하는 방법을 찾는다.

주로 단어를 수치화할 때 `단어를 벡터` 로 표현한다.

(다시 강조, 단어를 벡터로 표현!)

그래서 `단어 표현` 을 단어 임베딩(word embedding), 단어 벡터(word vector) 로 표현하기도 한다.

 

원-핫 인코딩

 

단어를 수치화해서 표현할 때, 벡터화 해서 표현한다고 했는데, 벡터화 해서 표현할 때 많이 사용하는 기법이 `원-핫 인코딩` 방식.

예를 들어서 ['엄마', '아빠','형] 과 같은 단어들이 있을 때, 이 단어들에 인덱스를 부여한다. 그리고 각 단어에 해당하는 인덱스를 1 값으로 채우고 그렇지 않은 인덱스엔 0값을 부여한다.

따라서 단어 `엄마` 는 다음과 같이 벡터로 표현된다. [1,0,0], `아빠`는 [0,1,0], `` 은 [0,0,1] 로 표현된다.

즉, 원-핫 인코딩으로 단어를 벡터화 해서 표현하는 방식은 1. 단어들의 인덱스를 정한 이후에 2. 그 단어에 해당하는 인덱스를 1로 채우고 나머지를 0으로 채워서 표현하는 방식.

단점:

  1. 불필요한 공간을 너무 많이 차지한다.
  2. 단어가 무엇인지만 알려줄 수 있고 어떤 의미나 특성을 알려줄 수 없다.

 

따라서 원-핫 인코딩 방식의 문제를 해결하기 위해서 만들어진 인코딩 방법들이 제안됐다. (벡터의 크기가 작으면서도 단어의 의미나 특성을 알려줄 수 있는.)

이러한 방식들은 주로 `분포 가설(distribution hypothesis)` 에 따른다.

분포 가설은 비슷한 위치에 출현하는 단어들은 서로 유사성을 가지며 비슷한 의미를 가진다고 생각한다.

이는 `카운트 기반` 방식과 `예측 방법` 으로 나뉜다.

 

 

카운트 기반

 

어떤 글의 문맥 안에 단어가 동시에 등장하는 횟수를 세는 방법.

A단어, B단어 동시 등장.

그니까 어떤 문장에서 어떤 X라는 단어가 Y라는 단어와 '동시에' 출현하는 횟수를 의미하는데, 여기서 헷갈리는 지점은 문장안에 그 두 단어가 포함되면 카운트를 하는가 안하는가인데, 단어가 붙어서 나오는 횟수를 의미한다.

  1. 성진과 창욱은 야구장에 갔다.
  2. 성진과 태균은 도서관에 갔다.
  3. 성진과 창욱은 공부를 좋아한다.

같은 문장속에서 각 단어별로 같이 출연한 횟수를 세는 것.

먼저 모든 단어들을 속성과 행으로 배치해서 행렬 만들고, 각각의 단어 짝끼리 동시에 출현한 횟수를 값으로 가진다.

 

 

예측 방법

 

신경망 구조 혹은 어떠한 모델을 사용해,

특정 문맥에서 어떤 단어가 나올지 예측하면서 단어를 벡터로 만드는 방식.

다음과 같은 것들이 있다.

  1. Word2vec
  2. NNLM(Neural Language Model)
  3. RNNLM(Recurrent Neural Network Language Model)

 

Word2vec 가장 많이 사용

Word2vec은 CBOW(Continuous Bag of Words) 와 Skip-Gram 두 가지 유형의 모델로 나뉜다.

(둘 은 주로 상반)

  • CBOW : 어떤 단어를 문맥안의 주변 단어들을 통해 예측하는 방법
    • 창욱은 냉장고에서 ( ) 를 꺼내서 먹었다.
    • ()를 채우는 모델
    • 입력값이 여러 개(주변 단어들을 원-핫 인코딩해서 입력값으로 받는다.)
    • 학습 결과를 비교하기 위해서 하나의 단어와 비교한다.
  • Skip-Gram : 어떤 단어를 통해서 그 주변 단어들을 예측하는 방법
    • ( ) ( ) 음식을 ( ) ( )
    • 입력값이 1개, 학습을 위해 주변의 여러 단어들과 비교한다.

 

 

주로 Word2vec 을 사용하면 Skip-Gram 을 더 많이 사용하지만 절대적인 것은 아니다.

Word2vec 는 단어간 유사성을 잘 측정할 수 있다.

https://wikidocs.net/22660 (Word2vec 의 학습 과정을 상세하게 설명한 블로그, 특히 CBOW 을 상세히 설명)

다시 공부할 때 꼭 참조

 
Comments