-
NLP05. 워드 임베딩NLP 2021. 12. 15. 20:47
NLP05. 워드 임베딩
01. 벡터화
02. 벡터화 실습 : 원-핫 인코딩 구현해보기
03. 워드 임베딩
04. Word2Vec
(1) 분포 가설
(2) CBoW
(3) Skip-gram과 Negative Sampling
(4) 영어 Word2Vec 실습과 OOV문제
05. 임베딩 벡터의 시각화
06. FastText
07. GloVe
=============================
01. 벡터화
[0] 용어 정리 및 준비사항
- 벡터화(vectorization) : 기계가 자연어 처리를 원활히 수행할 수 있도록 전처리 과정에서 텍스트를 벡터로 변환하는 과정
- BoW(Bag of Words) : 단어의 순서는 고려하지 않고, 단어의 등장 빈도만 고려해서 단어를 벡터화하는 방법. 내림차순 인덱스 부여
- OOV(Out Of Vocabulary) : 단어장에 없는 단어에 대처할 수 없어 난감한 문제
- DTM(문서 단어 행렬, Document-Term Matrix) : BoW를 사용하여 문서를 행으로, 단어를 열로 구성한 행렬. 문서 간 유사도를 비교하는 데 사용됨. 단어의 등장 빈도 반영됨
- 희소벡터(sparse vector) : BoW 또는 DTM과 같이 고차원 행렬에서 대부분의 값이 0인 벡터. 메모리 과다 사용 및 연산량 급증의 문제 야기함.
- 단어장(vocabulary) : DTM에서 중복을 배제한 단어들의 집합(set), 크기 V
- TF-IDF(Term Frequency- Inverse Document Frequency) : 모든 문서에 등장하는 단어는 중요도가 떨어지고, 특정 문서에 특정 단어가 빈번히 등장하면 중요도가 높은 단어임.
- One-hot encoding :
[2] Bag of Words/ DTM(Document Term Matrix)
[3] TF-IDF
[4] 원-핫 인코딩(one-hot encoding)
① 텍스트 데이터에서 단어장 작성
② 단어장의 단어들 고유 정수(인덱스) 부여(인덱스 부여 순서는 등장빈도의 내림차순)
③ 각 단어는 해당 인덱스 위치만 1이고 나머지는 0인 벡터 생성(one-hot vector, unit vector)
02. 벡터화 실습 : 원-핫 인코딩 구현해보기
[1] 벡터화 실습 프로세스
(Step1) 패키지 설치
(Step2) 전처리 이야기
(Step3) 토큰화 이야기
(Step4) 단어자 만들기
(Step5) 원-핫 벡터 만들기
[2] 케라스를 통한 원-핫 인코딩(one-hot encoding)
03. 워드 임베딩
[1] 희소 벡터의 문제점 :
(1) 자원의 저주(cusrse of dimensionality)
(2) 벡터 간 유사도 없음(내적이 0, orthogonal=독립적)
(3) 문제점 해결을 위한 제안
- 희소벡터인 원-핫 벡터의 문제 해결을 위해
단어장 크기 보다 작은 차원의 밀집 벡터를 학습 => 워드 임베딩
- 임베딩 벡터(embedding vector) : 워드 임베딩를 위한 실수값을 가진 밀집벡터(dense vector)
[2] 워드 임베딩(Word Embedding)
※ 원핫 벡터 vs 임베딩 벡터
구분 원-핫 벡터 임베딩 벡터 차원 고차원(단어장의 크기) 저차원 다른 표현 희소 벡터의 일종 밀집 벡터의 일종 표현 방법 수동 훈련데이터로부터 학습함 값의 타입 1과 0 실수 기반 이론 빈도 기반 분포가설/학습 알고리즘 인덱스부여, 원-핫 인코딩 함수 적용 keras.Embedding, Word2Vec, GloVe, LSA, FastText 04. Word2Vec
(1) 배경 지식
[1] 분포 가설
- 언어학자 존 루퍼트 퍼스(John Rupert Firth)
You shall know a word by the company it keeps
(곁에 오는 단어들을 보면 그 단어를 알 수 있다)- 분포 가설 : 비슷한 문맥에서 같이 등장하는 경향이 있는 단어들은 비슷한 의미를 가진다.
[2] Word2Vec 종류
- CBoW : 주변 단어를 통해 중심 단어 예측
- Skip-gram : 중심 단어를 통해 주변단어 예측
(2) CBoW(Continuous Bag of Words)
[1] 주요 용어
- 중심단어 center word : 예측해야 할 단어
- 주변단어(context word) : 예측에 사용되는 단어
- 윈도우(window) : 중심단어를 예측하기 위해 앞/뒤로 사용될 주변단어 수m. 총 2m의 단어
- 슬라이딩 윈도우 : 윈도우를 계속 움직여 주변단어와 중심단어를 바꿔가며 학습을 위한 뎅터 셋을 만드는 과정
[슬라이딩 윈도우] - 룩업테이블(lookup table) : 원-핫 벡터와 가중치 행렬과의 곱은 가중치 행렬의 i위치에 있는 행을 그대로 가져오는 것과 동일함.
- 투사층(projection layer) : Word2Vect에서의 은닉층을 기존 신경망의 은닉층과 구분하기 위한 명칭. 기존 신경망의 은닉층과 달리 활성화 함수가 존재하지 않고 단순히 가중행렬과의 곱셈만 수행하기 때문임.
- 비지도학습(unsupervised learning) : 중심 단어와 주변단어로 feature변수와 label변수를 직접 만들어 학습을 함.
- 셸로우 러닝(shallow learning) : 딥러닝은 여러 은닉층을 가지고 학습을 하는 반면, 셸로우 러닝은 1개 은닉층을 포함한 3개 층으로 구성하여 학습을 진행함.
[2] 데이터 셋 : 윈도우 슬라이딩, (주변단어, 중심단어, 주변단어)
[3] CBoW 작동 메커니즘
- V : 단어장(Vocabulary)의 크기
- N : 은닉층 노드 수(하이퍼파라미터)
[4] 은닉층 연산
[5] 은닉층에서 출력층으로 가는 과정과 출력층의 연산
- 출력층 활성화 함수 : 소프트맥스 함수
- loss함수 : cross entropy
- 학습방향 : 출력층의 벡터를 중심 단어의 원-핫 벡터와의 손실을 최소화하도록 학습
- 임베딩 벡터(선택) : ①W의 행벡터 또는 ②W'의 열벡터 또는 ③W와 W'의 평균치
= Wor2Vec representation vector
(3) Skip-gram과 Negative Sampling
[1] Skip-gram
(1) 데이터셋 (중심 단어, 주변 단어)
(2) 작동 메커니즘 : 학습 후 가중치 행렬 W의 행 또는 W'의 열로부터 임베딩 벡터 산출
[2] 네거티브 샘플링(Negative Sampling)
- 연산량을 줄이기 위해서 다중 분류 문제(소프트맥스 함수)를 이진 분류 문제(시그모이드 함수)로 바꿈
- 무작위로 단어장에 있는 아무 단어를 가져와 target word로 하는 '거짓 데이터셋'을 만들고 0으로 레이블링 해준다.
- 거짓 데이터셋을 만들기 때문에 이 방법을 negative sampling이라고 한다.
(4) 영어 Word2Vec 실습과 OOV문제
[1] 영어 Word2Vec 실습
[2] Word2Vec의 OOV문제
05. 임베딩 벡터의 시각화
[1] 필요한 파일 만들기
[2] 임베딩 프로젝터에 tsv파일 업로드하기
06. FastText
[1] FastText의 학습방법
[2] OOV와 오타에 대한 대응
[3] 한국어에서의 FastText
07. GloVe
[1] 잠재 의미 분석(LSA, Latent Semantic Analysis)
[2] 윈도우 기반 동시 등장 행렬(Window based Co-occurrence Matrix)
[3] 동시 등장 확률(Co-occurrence Probability)
[4] GloVe의 손실 함수 설계하기
[5] GloVe 실습
'NLP' 카테고리의 다른 글
[김성범]Data Augmentation (0) 2022.01.21 [Attention] 6. Self-Attention (0) 2022.01.18 NLP14 : BERT pretrained model 제작 (0) 2022.01.06 NLP01. 텍스트 데이터 다루기 (0) 2021.12.11 parsing과 parser (0) 2021.12.09