화요일, 9월 10, 2024
HomeDL 컴퓨터에게 단어의 의미를 어떻게 이해시킬까? | 동시발생행렬이란? | 시소러스란? | PMI는...

[밑시딥2] 컴퓨터에게 단어의 의미를 어떻게 이해시킬까? | 동시발생행렬이란? | 시소러스란? | PMI는 왜 사용할까?

자연어를 컴퓨터에게 어떻게 이해시킬까? 이책에서는 3가지 큰 분류로 방법을 설명한다.

  • 시소러스(유의서사전)
  • 통계기밥기법(동시발생행렬)
  • 추론기반기법(Word2vec)

시소러스(유의어사전) 란?

시소러스는 사람이 직접 단어의 의미를 정의한 사전이다. 컴퓨터가 이해하기 쉽게 말이다. 뜻이 같은 단어나 비슷한 단어를 묶어놓았다. 상위-하위, 전체-부분, 이렇게 연관지어서.

위 그림처럼 비슷한 뜻을 가진 단어들을 그래프로 연결해서 컴퓨터가 이해하기 쉽게 사람이 직접 처리했다.

WordNet이라는 유명한 시소러스가 그 예이다.

통계기반기법(동시발생행렬) 이란?

corpus라고 부르는 말뭉치를 수집해서, 단어의 의미를 추출하는 방법이다.

이 방법은 단어의 의미는 주변 단어에 의해 결정된다는 분포가설에 기반해서 만들어진 기법이다.

주변단어라 함은 Window size라고 부르고, 해당 단어의 앞 뒤 몇단어만큼을 주변단어로 볼것이냐를 뜻한다.

you are smart boy. 라는 문장이 있고, window size을 1로 한다면, are라는 단어의 주변단어는 you와 Smart가 되는 것이다.

이렇게 주변단어를 직접세서 동시발생행렬을 만들어서, 해당단어를 벡터로 변환한다.

you라는 단어는 [0, 1, 0, 0, 0, 0, 0] 이라는 벡터로 표현된다.

이렇게 말뭉치에 있는 모든 단어를 벡터로 바꾸고 나면, 단어들사이에 유사도가 얼마인지 구해야한다.

이 유사도는 코사인 유사도라는 식을 활용한다.

x, y는 어떤 단어의 벡터를 말하는 것이다.

위의 식을 해석하자면 분모에는 각 벡터의 크기(L2 norm1), 분자에는 두 벡터의 내적을 해서 유사도를 구한다.

두 벡터가 방향이 같으면 1, 완전 반대방향이면 -1이라는 값이 나오게 된다.

위 식의 핵심은 두 벡터를 정규화하고 내적을 구하는 것이다.

PMI는 왜 사용할까?

이러한 통계기반기법에도 단점이 있다. 말뭉치의 크기가 작으면 실제 자연어의 유사도를 정확히 반영하지 못하고, the, car 처럼 전혀 상관없는 단어들도 많이 출현한다고 관련있는 단어로 인식해버린다.

이문제를 해결하기 위해 PMI라는 점별상호정보량이 나오게 된다.

쉽다. 분모에 출현빈도를 취해줘서 출현빈도가 많으면 유사도를 줄여주는 것이다.

p(x)는 X가 출현할 확률, P(x, y)는 x, y단어가 동시에 출현할 확률이다.

C(x, y)는 동시발생하는 갯수이다. 해당 갯수에 N이라는 말뭉치 전체 단어 갯수를 나눠주면 된다.

위 방법은 다 좋은데, 저렇게 동시발생행렬을 만들면 단어가 매우 많아서, 행렬의 원소가 대부분 0인 희소행렬(sparse matrix)가 된다. 벡터는 0이 많으면 질안좋은 벡터다. 따라서 차원감소를 해줘야한다.

SVD라는 특이값분해로 유명한 차원감소 알고리즘으로 동시발생행렬을 차원감소해주면, 우리가 사용할 단어가 질좋은 벡터로 바뀐다. 여기까지가 통계기반기법으로 단어를 컴퓨터가 이해하기 쉽게 벡터로 만드는 방법 중 2가지를 설명했다.

다음 포스팅에서는 가장 중요한 추론기반기법인 Word2Vec을 설명해보겠다.

  1. L2 norm은 벡터의 크기 제곱을하고 다 제곱근을 해줘서 구한다. ↩︎
RELATED ARTICLES

Leave a reply

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments