Kim Seon Deok

밑바닥부터 시작하는 딥러닝 2 : 2장 - 자연어와 단어의 분산 표현 본문

AI/Deep Learning

밑바닥부터 시작하는 딥러닝 2 : 2장 - 자연어와 단어의 분산 표현

seondeok 2022. 3. 9. 03:21

 

2-1. 자연어 처리란

자연어(Natural language) : 우리가 평소에 쓰는 말 > 살아있는 언어. 프로그래밍 언어와는 다르게 부드러운 언어

자연어 처리(Natural lanuage processing) : 우리의 말을 컴퓨터에게 이해시키기 위한 기술

목표 : 사람의 말을 컴퓨터가 이해하도록 만들어, 컴퓨터가 우리에게 도움이 되는 일을 수행하도록 함.

 

단어 : 의미의 최소단위

: 문자로 구성  & 말의 의미 : 단어로 구성

 

 * 단어의 의미를 컴퓨터에게 잘 파악하도록 하는 방법

1. 시소러스를 활용한 기법

2. 통계기반 기법

3. 추론 기반 기법(Word2Vec)

 

2-2. 시소러스

시소러스 : 사람이 직접 단어의 의미를 정의한 유의어 사전. 뜻이 같은 단어(동의어), 뜻이 비슷한 단어(유의어)가 한 그룹 으로 분류되어 있다.

단어의 상위와 하위 / 전체와 부분 등 세세한 관계까지 정의

모든 단어에 대한 유의어 집합을 만들고, 단어 간 관계를 그래프로 표현해 단어 사이 연결을 정의

 

WordNet : 자연어 처리 분야에서 가장 유명한 시소러스

- 유의어를 얻거나 '단어 네트워크'를 이용할 수 있다.

- 단어 네트워크를 사용해 단어 사이 유사도를 구할 수도 있다.

 

* 시소러스의 문제점

1. 시대 변화에 대응하기 어렵다.(시대에 따라 변하는 언어의 의미) > 수작업으로 끊임없이 갱신해주어야 함.

2. 사람을 쓰는 비용이 크다

3. 단어의 미묘한 차이를 표현할 수 x.

 

2-3. 통계 기반 기법

말뭉치 : 대량의 텍스트 데이터

           자연어 처리 연구 / 애플리케이션을 염두에 두고 수집된 텍스트 데이터 > 안에 담긴 문장은 사람이 쓴 글

말뭉치 전처리

1. 텍스트 데이터를 단어로 분할

2. 분할된 단어들을 단어ID 목록으로 변환

 

분산표현 : 단어의 의미를 정확하게 파악할 수 있는 벡터 표현

단어의 분산표현 : 단어를 고정길이의 밀집벡터로 표현

밀집벡터 : 대부분의 원소가 0이 아닌 실수인 벡터

맥락 : 특정 단어를 중심에 둔 주변 단어

맥락의 크기 : 윈도우 크기 

분포가설 : 단어의 의미는 주변 단어에 의해 형성된다.

              단어 자체에는 의미가 없고, 그 단어가 사용된 '맥락'이 의미를 형성한다.

 

통계기반 기법 : 어떤 단어에 주목했을 때, 그 주변에 단어가 몇 번이나 등장했는지 세어 집계하는 방법

 

동시발생 행렬 : 각 행이 해당 단어를 표현한 벡터가 된 경우 > 행렬의 형태

동시발생 행렬의 원소 - 두 단어가 동시에 발생한 횟수

동시발생 행렬은 단어의 단독출현 횟수에 영향을 받아, 두 단어가 유사하지 않더라도 유사도가 크게 나타나는 한계점을 지님.

 

* 벡터 사이 유사도를 구하는 방법

1. 벡터의 내적

2. 유클리드 거리

3. 코사인 유사도 : 두 벡터가 가리키는 방향이 얼마나 비슷한가. 완전히 같다면 1, 완전히 반대라면 0.

 

2-4. 통계 기반 기법 계산하기

1. 점별 상호정보량(PMI)

p(x) : 단어 x가 말뭉치에 등장할 확률

p(x,y) : 단어 x와 y가 동시에 일어날 확률

PMI가 커질수록 두 단어의 관련성 증가한다.

단어가 단독으로 출현하는 횟수를 고려시켜 동시발생 행렬의 단점을 개선시킴

PMI기법의 문제점 : 두 단어의 동시발생 횟수가 0이면 로그값이 마이너스 무한대

 

2. 양의 상호정보량(PPMI) - 동시발생 행렬과 PMI의 단점을 개선

                                    PMI가 음수일 땐 0으로 취급

차원감소

PPMI행렬 내 원소가 대부분 0일 때, 벡터의 원소 대부분이 중요하지 않다. 따라서 각 원소의 중요도가 낮아, 노이즈에 약하고 견고하지 못하다.

차원감소 (dimensionality reduction) : 벡터의 차원을 줄임 & 중요한 정보는 최대한 유지

데이터의 분포를 고려해 중요한 '축'을 찾음 - 데이터가 넓게 분포되도록 고려

희소 행렬/벡터(sparse matrix/vector) :  원소 대부분이 0인 벡터 / 행렬

 

희소벡터에서 중요한 축을 찾아 더 적은 차원으로 다시 표현 - 밀집벡터 > 궁극적 단어의 분산 표현

 

* 차원을 감소시키는 법 : SVD(singular value decomposition) : 특잇값 분해

                    임의의 행렬을 세 행렬의 곱으로 분해

 

U : 단어 공간

S : 대각 행렬, 특잇값이 큰 순서대로 나열, 특잇값 =  해당 축의 중요도

U,V는 직교행렬

 

SVD의 문제점 : 행렬의 크기가 N이면 SVD계산은 O

 

 

* 차원을 감소시키는 법 : Truncated SVD

                   특잇값이 작은 것은 버리는 방식. 특잇값이 큰 것만 계산

PTB(Penn Treebank) : 본격적인 말뭉치. 한 문장이 하나의 줄로 저장. 각 문장을 연결한 '하나의 큰 시계열 데이터'

 

 

 

<요약>

말뭉치 - 단어의 의미를 자동으로 추출 - 벡터로 표현

단어의 동시발생 행렬 - PPMI 행렬로 변환

SVD로 차원 감소 - 단어의 분산 표현 - 의미가 비슷한 단어는 벡터 공간에서도 가까이 있다. 

 

 

 

 

Comments