Kim Seon Deok
밑바닥부터 시작하는 딥러닝 2 : 2장 - 자연어와 단어의 분산 표현 본문
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로 차원 감소 - 단어의 분산 표현 - 의미가 비슷한 단어는 벡터 공간에서도 가까이 있다.
'AI > Deep Learning' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝 1 : 7장 합성곱 신경망(CNN) (0) | 2022.03.08 |
---|---|
밑바닥부터 시작하는 딥러닝 1 : 6장 - 학습관련 기술들 (0) | 2022.03.08 |
밑바닥부터 시작하는 딥러닝 1 : 5장 - 오차역전파법 (0) | 2022.03.08 |
밑바닥부터 시작하는 딥러닝 1 : 4장 - 신경망 학습 (0) | 2022.03.08 |
밑바닥부터 시작하는 딥러닝 1 - 3장 : 신경망 (0) | 2022.03.08 |