-
NLP 라이브러리 소개 - Document Embedding, Word Embedding / BERT, KoBERT, Word2Vec, Glove, FastText, ELMoBIG DATA & AI/NLP 2021. 4. 14. 20:48반응형
지난 글(아래 링크 참조)에서, NLP에 대한 전반적인 개념 및 embedding 종류에 관하여 알아보았다.
2021.04.08 - [PROGRAMMING/NLP] - 자연어 처리 개념 (NLP Bible)
개념을 습득하였으니, 어서 실습으로 들어가자! ... 고 하고 싶은데 또 다른 이론을 배워야 한다.
Embedding에는 여러 모델과 방법이 있는데, 우선 Document Embedding과 Word Embedding 위주로 어떤 pre-trained model들이 있는지 알아보자.
Embedding, 왜 할까?
Embedding은 '자연어'를 0,1만 알아들을 수 있는 기계가 이해할 수 있도록 벡터화 하는 과정에서 쓰이는 기술인데, 문법적 또는 의미적 정보에 따라 embedding 할 수 있다.
임베딩을 통해 단어, 문장, 단락 간의 유사도 계산이 가능하며, 다양한 task에 적용하여 Fine-tuning을 통한 전이학습 적용이 가능하다는 장점이 있다.
Document Embedding
BERT
BERT가 누구야?
Bert는 세서미 스트리트의 머펫 중 하나로, 노잼&너드 역할을 맡고 있는데도 불구하고 열렬한 사랑을 받고 있다. 나무위키에서는 심지어 이렇게 언급되고 있다.
극단적으로 재미없는 캐릭터를 추구한 결과 세서미 스트리트에서 가장 심도있는 개그 캐릭터가 되어버렸으며 일반인들에게까지 밈에 가까운 컬트적 사랑을 받고 있다.
성인층에서 가장 인기있는 캐릭터는 실은 쿠키 몬스터가 아닐지도 모른다.아니 이게 아니고.. 사실 BERT는 Bidirectional Encoder Representations from Transformers의 약자로, Cornell University에서 개발한 Google Search 데이터 기반 NLP deep learning 알고리즘으로, 특정 분야에 국한된 기술이 아니라 모든 자연어 처리 분야에서 좋은 성능을 내는 범용적인 model이다. 우연찮게 Bert와 같은 약자를 쓰게 되어 이렇게 귀여운 캐릭터와 함께하게 되었다. (역시 나무위키는 위험해..)
전 세계에서 가장 많은 데이터를 가지고 있는 Google에서 개발한 모델 답게 학습량도 어마어마하다. 무려 3.3억 단어(BookCorpus + Wikipedia Data)로 구성된 거대 corpus로 학습했다고 한다.
이 모델은 search query를 이용해서 자연어를 분석하여 화자의 의도를 파악한다.
예) "I love chicken" -> BERT 모델을 이용하면 당신이 chicken을 먹고 싶다는 것을 이해하고 KFC나 McDonalds를 검색해 줄 것이다. 여자친구에게 chicken을 선물하는 참사가 일어나지 않을 것이다!BERT의 내부 동작 과정
1. Input 단계
- Token Embeddings : Tokenizing 작업. Sub-word들을 하나의 단위로 만듬
- Segment Embeddings : Tokenized된 단어들을 다시 하나의 문장(segment)으로 만듬
BERT에서는 하나의 segment를 512 sub-words로 제한하고 있다. - Position Embeddings : Token 순서대로 encoding 하는 작업
2. Pre-trainning 단계
기존의 방법들은 보통 문장을 왼쪽에서 오른쪽으로 학습하여 다음 단어를 예측하는 방식이거나, 예측할 단어의 좌우 문맥을 고려하여 예측하는 방식을 사용한다. 하지만 BERT는 기존 방식과 다르게 아래 방식을 사용한다.
- MLM (Masked Language Model) : 입력 문장에서 임의의 토큰을 버리고 (mask), 그 토큰을 맞추는 방식으로 학습을 진행한다.
- NSP(Next Sentence Prediction) : 두 문장이 주어졌을 때, 두 문장의 순서를 예측하는 방식이다.
3. Transfer Learning 단계
학습된 언어모델을 전이학습시켜 실제 NLP Task를 수행하는 과정이다.
BERT의 한계
BERT는 일반 NLP모델에서 잘 작동하지만, Bio, Science, Finace 등 특정 분야의 언어모델에 사용하기에는 정확도가 떨어진다고 한다. 따라서 특정 분야에 대해 BERT를 적용하려면 특정 분야의 특성을 수집할 수 있는 언어 데이터들을 수집하고, 언어 모델 학습을 추가적으로 진행해주어야 한다.
BERT 논문 Download
언젠가 보겠지..?
arxiv.org/pdf/1810.04805v2.pdf
KoBERT
T-Brain (SKT AI Center) 에서 개발한 KoBERT는 기존 BERT의 한국어 성능 한계를 극복하기 위해 개발되었다고 한다. 한글 Wikipedia 기반 corpus로 학습했으며 약 8,000개의 사전을 가지고 있다. (21년 4월 14일 기준) 그 외에도 BERT기반 한국어 라이브러리에는 ETRI에서 개발한 KorBERT, 이준범님이 개발한 KcBERT가 있다.
대량의 데이터를 빠른시간에 학습하기 위해 링 리듀스(ring-reduce) 기반 분산 학습 기술을 사용하여, 십억 개 이상의 문장을 다수의 머신에서 빠르게 학습하는 특징이 있다.
PyTorch, TensorFlow, ONNX, MXNet을 포함한 다양한 딥러닝 API를 지원하여 확장성이 좋다.
Word Embedding
Word2Vec
Word2Vec 은 softmax regression을 이용한 방법으로, 의미공간이라는 고차원 공간에 각 단어의 좌표값을 부여한다. 이 공간에서 각 좌표값의 숫자는 절대적인 의미를 지니지 않으며 상대적이다. 즉 지구의 위도, 경도와 같으며 기준점이 달라지면 숫자도 달라지는 방식이다. 단어의 의미공간도 이와 비슷하게 비슷한 벡터좌표를 지니는 두 단어는 비슷한 느낌의 단어라고 설명할 수 있다.
Softmax regression은 A,B,C..., 여러개의 결과값으로 분류되는 데이터를 학습하기 위한 방법론으로 multi-class classification이라고 볼 수 있다.
Word2Vec 은 window classification 처럼, 긴 문장에 스캐너가 이동하며 스냅샷을 찍듯이 작동한다. 예를 들어 "A little cat sits on the table."이라는 문장이 주어졌을 때 [a, little, cat, sit, on, the, table]을 input으로, 크기 5인 (-2, 2) 의 스캐너를 이동하여 [a, little, cat, sit, on] 이라는 스냅샷을 하나 만든다. 그 후 스냅샷 양 옆의 [a, little, sit, on] 네 단어로 ‘cat’ 이라는 가운데 단어를 예측하는 regression 문제를 학습하는 방식이다.
Word2Vec은 처음 나왔을 때 혁신적이라는 평가를 많이 받았으며, 현재 성능 좋은 framwork들의 기반이 되고 있는 좋은(?) 방법론이다. Word2Vec은 대표적으로 2가지 모델을 사용한다.
Word2Vec으로 할 수 있는 것들
- 벡터 연산을 통한 유의어 추론
- Word Clustering
- Classification
GloVe
Glove (Global Vectors for Word Representation, GloVe) 는 카운트 기반(LSA, Latent Semantic Analysis)과 예측 기반(Word2Vec)을 모두 사용하는 방법론으로 2014년에 미국 스탠포드대학에서 개발한 단어 임베딩 방법론이다. 단정적으로 Word2Vec와 GloVe 중에서 어떤 것이 더 뛰어나다고 말할 수는 없고, 이 두 가지 전부를 사용해보고 성능이 더 좋은 것을 사용하는 것이 바람직하다고 한다.
LSA는 카운트 기반으로 코퍼스의 전체적인 통계 정보를 고려하기는 하지만, 왕:남자 = 여왕:? (정답은 여자)와 같은 단어 의미의 유추 작업(Analogy task)에는 성능이 떨어집니다. Word2Vec는 예측 기반으로 단어 간 유추 작업에는 LSA보다 뛰어나지만, 임베딩 벡터가 윈도우 크기 내에서만 주변 단어를 고려하기 때문에 코퍼스의 전체적인 통계 정보를 반영하지 못합니다. GloVe는 이러한 기존 방법론들의 각각의 한계를 지적하며, LSA의 메커니즘이었던 카운트 기반의 방법과 Word2Vec의 메커니즘이었던 예측 기반의 방법론 두 가지를 모두 사용합니다.
GloVe는 corpus를 대상으로 co-occurrence matrix (동시 발생 행렬) X를 만드는 것에서부터 학습을 시작한다. 단어 개수가 1만개 정도 되는 corpus라면 요소 개수가 1억(10000 x 10000)이나 되는 큰 행렬을 만들어야 하는데, 목적 함수를 최소화하는 임베딩 벡터를 찾기 위해 matrix factorization을 수행해야 한다. 즉 계산복잡성이 꽤 크다.
FastText
Facebook에서 개발했고, 개념 자체는 Word2Vec의 확장이라고 볼 수 있다. Word2Vec와 FastText와의 가장 큰 차이점이라면 Word2Vec는 단어를 쪼개질 수 없는 단위로 생각한다면, FastText는 하나의 단어 안에도 여러 단어들이 존재하는 것으로 간주한다. 즉 내부 단어(subword)를 고려하여 학습한다.
각 단어는 글자 단위 n-gram의 구성으로 취급되고, n을 몇으로 결정하는지에 따라서 단어들이 얼마나 분리되는지 결정된다.
# n = 3인 경우 <ap, app, ppl, ple, le>, <apple>
subword를 고려하여 학습하기 때문에, 기존 Word2Vec의 한계점이었던 OOV (Out Of Vocabulary), Rare Word (빈도 수가 적은 단어) 에 대한 대응이 좋아 단어의 유사도가 좀 더 개선되었다.
ELMo
아까는 Bert군이 왔다 갔는데, 이제 Elmo군이 왔다. 드디어 주인공이 왔다. 나무위키를 보니 엘모가 세서미 스트리트 원년멤버가 아니었는데 인기가 너무 많아서 리더격이 되었다고 한다. 역시 최초가 아닌 끝발이 중요한 세상이다.
다시, Elmo 말고 ELMo (Embeddings from Language Model) 는 2018년에 제안된 새로운 임베딩 방법론으로, 문맥 (context) 을 반영한 word embedding이라는 방법론에서 큰 의의가 있다.
Bank라는 단어를 예로 들면, Bank Account(은행 계좌)와 River Bank(강둑)에서의 Bank는 전혀 다른 의미를 가지는데, Word2Vec이나 GloVe 등으로 표현된 임베딩 벡터들은 이를 제대로 반영하지 못했다. ELMo는 단어를 임베딩하기 전에 전체 문장을 고려해서 임베딩하는 방식으로, Contextualized Word Embedding을 사용한다.
알고 보니 BERT보다 ELMo가 먼저 나왔다.
텐서플로우 2.0에서는 TF-Hub의 ELMo를 사용할 수 없다고 한다. 사용하려면 텐서플로우 버전을 1버전으로 낮추어야 한다.
RNN 언어 모델에서는 문장으로부터 단어 단위로 입력을 받는데, RNN 내부의 은닉층은 시점 (time-step) 이 지날수록 점점 업데이트 되어 문장의 문맥 정보를 점차적으로 반영하게 된다. ELMo는 위의 그림의 순방향 RNN 뿐만 아니라, 위의 그림과는 반대 방향으로 문장을 스캔하는 역방향 RNN 또한 활용한다. 그래서 ELMo는 양쪽 방향의 언어 모델을 둘 다 활용한다고하여 이 언어 모델을 biLM(Bidirectional Language Model)이라고 한다.
Refrences
namu.wiki/w/%EB%A8%B8%ED%8E%AB
dev.to/suvink/google-s-bert-in-2-minutes-2hp0
lovit.github.io/nlp/representation/2018/03/26/word_doc_embedding/
ratsgo.github.io/from%20frequency%20to%20semantics/2017/04/09/glove/
inspiringpeople.github.io/data%20analysis/word_embedding/
긴 글 읽느라 수고 많으셨습니다.
반응형'BIG DATA & AI > NLP' 카테고리의 다른 글
Stanford CS224N: Youtube Link and Materials (0) 2022.03.08 HCLT 2021 논문집 (0) 2021.11.16 BERTopic 이란? (1) 2021.06.24 자연어 처리 엔지니어의 역량 (0) 2021.05.24 자연어 처리 개념 (NLP Bible) (0) 2021.04.08