문서 임베딩 임베딩이 잘 된 상황에서 단어 벡터들의 평균만으로 텍스트 분류를 수행할 수 있음 데이터 로드와 전처리 1) 리뷰가 긍정인 경우 1, 부정인 경우 0으로 구성된 IMDB 영화 리뷰 데이터를 다운로드 2) 첫 번째 리뷰와 첫 번째 리뷰의 레이블을 출력함 이 데이터는 이미 단어 집합을 만들고, 각 단어를 정수로 인코딩하는 전처리가 모두 진행되어 있음을 알 수 있음 3) 각 리뷰의 평균 길이를 계산한 후 평균보다는 큰 수치인 400으로 패딩함 모델 설계하기 1) Embedding() 다음에 입력으로 들어오는 모든 벡터들의 평균을 구하는 GlobalAveragePooling1D()를 추가하여 해당 문장의 모든 단어 벡터들의 평균 벡터를 구하도록 함 2) 이진 분류를 수행해야 하므로 시그모이드 함수를 ..
문서 벡터 문서들을 고정된 길이의 벡터로 변환한다면 벡터 간 비교로 문서들을 서로 비교할 수 있음 각 문서를 문서 벡터로 변환하기 위해서는 이미 구현된 패키지인 Doc2Vec이나 Sent2Vec 등을 사용해서 학습하거나 단어 벡터를 얻은 뒤 문서에 존재하는 단어 벡터들의 평균을 문서 벡터로 간주할 수도 있음 데이터 로드 문서 내 각 단어들을 Word2Vec을 통해 단어 벡터로 변환하고, 이들의 평균으로 문서 벡터를 얻어 선호하는 도서와 유사한 도서를 찾아주는 도서 추천 시스템을 만들기 위해 1) 책의 이미지와 책의 줄거리를 크롤링한 데이터를 다운로드 2) 데이터를 데이터프레임으로 로드하고 전체 문서의 수를 출력 3) 상위 5개의 행만 출력 4) 줄거리에 해당하는 열인 'Desc 열'이 중요하므로 해당 열..
ELMo ELMo(Emdeddings form Language Model)는 새로운 워드 임베딩 방법론으로 '언어 모델로 하는 임베딩'을 뜻함 ELMo의 가장 큰 특징은 사전 훈련된 언어 모델을 사용하며 같은 표기의 단어라도 문맥에 따라 다르게 워드 임베딩을 하여 자연어 처리의 성능을 올릴 수 있음 예) Bank Account(은행 계좌)와 River Bank(강둑)에서의 Bank는 Word2Vec나 GloVe 등으로 표현되면 같은 벡터를 사용하므로 제대로 반영하지 못함 biLM의 사전 훈련 ELMo는 순방향 RNN 뿐만 아니라, 반대 방향으로 문장을 스캔하는 역방향 RNN 또한 활용하므로 ELMo는 양쪽 방향의 언어 모델을 둘 다 학습하여 활용한다고 하여 biLM(Bidirectional Languag..
사전 훈련된 Word2Vec 임베딩 소개 자연어 처리 작업을 할 때 케라스의 Embedding()를 사용하여 갖고 있는 훈련 데이터로부터 처음부터 임베딩 벡터를 훈련시키기도 하지만, 반대로 방대한 데이터로 사전에 훈련된 워드 임베딩을 가지고 와서 해당 벡터들의 값을 작업에 사용할 수도 있음 훈련 데이터의 양이 부족하다면, Word2Vec, GloVe, FastText 등으로 사전 학습시킨 임베딩 벡터들을 가지고 와서 사용 가능 케라스 임베딩 층 케라스는 훈련 데이터의 단어들에 대해 워드 임베딩을 수행하는 도구인 Embedding()을 제공하며 Embedding()은 인공 신경망 구조 관점에서 임베딩층을 구현함 임베딩 층은 룩업 테이블 임베딩 층의 입력으로 사용하기 위해서는 입력 시퀀스의 각 단어들은 모두..
FastText 단어를 벡터로 만드는 또 다른 방법으로 페이스북에서 개발함 메커니즘 자체는 Word2Vec의 확장이라고 볼 수 있지만 Word2Vec은 단어를 쪼개질 수 없는 단위로 생각한다면, FastText는 하나의 단어 안에도 여러 단어들이 존재하는 것으로 간주 즉, 내부 단어인 서브워드를 고려하여 학습하게 됨 내부 단어의 학습 FastText에서는 각 단어는 글자 단위 n-gram의 구성으로 취급되므로 n을 몇으로 결정하는지에 따라서 단어들이 얼마나 분리되는지 결정됨 예) n을 3으로 잡은 트라이그램의 경우, apple은 app, ppl, ple로 분리하고 이들을 벡터로 만들고 시작과 끝을 의미하는 를 도입하여 5개 내부 단어 토큰을 벡터로 만들게 됨 그리고 여기에 추가적으로 기존 단어에 를 붙인..
기존 방법론에 대한 비판 LSA는 DTM이나 TF-IDF 행렬 같이 각 문서에서 각 단어의 빈도수를 카운트 한 행렬이라는 전체적인 통계 정보를 입력으로 받아 차원을 축소하여 잠재된 의미를 끌어내는 방법론으로 카운트 기반으로 코퍼스의 전체적인 통계 정보를 고려하기는 하지만 단어 의미의 유추 작업에는 성능이 떨어짐 Word2Vec은 실제값과 예측값에 대한 오차를 손실 함수를 통해 줄여나가며 학습하는 예측 기반의 방법론으로 예측 기반으로 단어 간 유추 작업에는 LSA보다 뛰어나지만, 임베딩 벡터가 윈도우 크기 내에서만 주변 단어를 고려하므로 코퍼스의 전체적인 통계 정보를 반영하지 못함 글로브는 기존의 카운트 기반의 LSA와 예측 기반의 Word2Vec의 단점을 지적하며 이를 보완하는 목적을 가지며 LAS의 메..
네거티브 샘플링 Word2Vec의 출력층에서는 소프트맥스 함수를 지난 단어 집합 크기의 벡터와 실제값인 원-핫 벡터와의 오차를 구하고 이로부터 임베딩 테이블에 있는 모든 단어에 대한 임베딩 벡터 값을 업데이트하게 됨 그러므로 Word2Vec은 연관 관계가 없는 단어들까지 업데이트하므로 비효율적이며 단어 집합의 크기가 수만 이상에 달한다면 굉장히 무거운 작업이 됨 네거티브 샘플링은 Word2Vec이 학습 과정에서 전체 단어 집합이 아니라 일부 단어 집합에만 집중할 수 있도록 하는 방법으로 하나의 중심 단어에 대해서 전체 단어 집합보다 훨씬 작은 단어 집합을 만들어놓고 마지막 단계를 이진 분류로 변환하도록 함 이는 주변 단어들을 긍정(positive), 랜덤으로 샘플링된 단어들은 부정(negative)으로 ..
워드투벡터 단어 벡터 간 유의미한 유사도를 반영할 수 있도록 단어의 의미를 수치화할 수 있는 대표적인 방법 중 하나인 워드투벡터 한국어 단어에 대해서 벡터 연산 예1) 한국 - 서울 + 도쿄 = 일본 예2) 박찬호 - 야구 + 축구 = 호나우두 희소 표현 벡터 또는 행렬의 값이 대부분 0으로 표현되는 방법을 희소 표현이라고 함 이러한 표현 방법을 각 단어 벡터간 유의미한 유사성을 표현할 수 없으므로, 대안으로써 단어의 의미를 다차원 공간에 벡터화하는 방법인 분산 표현이 존재 분산 표현을 이용하여 단어 간 의미적 유사성을 벡터화하는 작업을 워드 임베딩이라 부르며 이렇게 표현된 벡터를 임베딩 벡터라고 함 분산 표현 분산 표현은 기본적으로 '비슷한 문맥에서 등장하는 단어들은 비슷한 의미를 가진다'는 분포 가설..