본문 바로가기

Deep Learning/NLP

(5)
BERT 자료 출처 1. BERT의 개요 BERT(Bidirectional Encoder Representations from Transformers)는 트랜스포머를 이용하여 구현되었으며, 위키피디아(25억 단어)와 BooksCorpus(8억 단어)와 같은 레이블이 없는 텍스트 데이터로 사전 훈련된 언어 모델이다. BERT가 높은 성능을 얻을 수 있었던 것은 레이블이 없는 방대한 데이터로 사전 훈련하고 레이블이 있는 다른 작업에서 Fine-tuning을 하였기 때문이다. 2. BERT의 크기 BERT의 기본 구조는 트랜스포머 인코더를 쌓아올린 구조이다. Base에서는 12개, Large에서는 24개를 쌓았다. 그 외에도 Large는 Base보다 $d_{model}$의 크기나 멀티 헤드 어텐션의 헤드 수가 더 크다..
ELMo(Embeddings from Language Model) 자료 출처 paper 1. ELMo Bank라는 단어는 Bank Account와 River Bank에서 전혀 다른 의미를 가진다. 그러나 Word2Vec이나 GloVe는 Bank라는 단어를 예를 들어 [0.2, 0.8, -1.2]와 같이 동일한 임베딩 벡터로 표현한다. 같은 표기의 단어라도 문맥에 따라서 다르게 단어 임베딩을 할 수 있다면 자연어 처리의 성능을 올릴 수 있을 것이다. 단어 임베딩 시 문맥을 고려하여 임베딩을 하겠다는 아이디어가 문맥을 반영한 워드 임베딩(Contextualized Word Embedding) 이다. 2. biLM(Bidirectional Language Model)의 사전 훈련 아래 그림은 다음 단어를 예측하는 작업을 수행하는 일반적인 단방향 RNN 언어 모델을 보여준다...
트랜스포머 자료 출처 그 유명한 "Attention is All You Need" 논문에서 제안한 구조로 아이디어는 "어텐션만으로 인코더와 디코더를 만들어보면 어떨까?"이다. 1. 트랜스포머의 주요 하이퍼파라미터 아래에서 정의하는 수치는 트랜스포머를 제안한 논문에서 사용한 수치로 사용자가 모델 설계시 임의로 변경할 수 있다. $d_{model} = 512$ : 트랜스포머의 인코더와 디코더에서의 정해진 입력과 출력의 크기를 의미한다. 임베딩 벡터의 차원 또한 $d_{model}$이며, 각 인코더와 디코더가 다음 층의 인코더와 디코더로 값을 보낼 때에도 이 차원을 유지한다. num_layer = 6 : 트랜스포머에서 하나의 인코더와 디코더를 층으로 생각하였을 때, 인코더와 디코더가 총 몇층으로 구성되었는지를 의미한다...
어텐션 메커니즘 자료 출처 어텐션 함수(Attention Function) 어텐션을 함수로 표현하면 주로 다음과 같이 표현된다. Attention(Q, K, V) = Attention Value 어텐션 함수는 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구한다. 그리고 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영해준다. 그리고 유사도가 반영된 '값(Value)'을 모두 더해서 리턴합니다. 여기서는 이를 어텐션 값(Attention Value)이라고 하겠다. 지금부터 배우게 되는 seq2seq + 어텐션 모델에서 Q, K, V에 해당되는 각각의 Query, Keys, Values는 각각 다음과 같다. Query : t 시점의 디코더 셀에서의 은닉 상태 Keys :..
서브워드 토크나이저 (Subword Tokenizer) 예를 들어 텍스트를 분류하는 문제를 다룬다고 하였을 때 토크나이저가 모든 단어에 대해서 알 필요가 없는 것은 사실이다. 그래서 vocabulary size를 정하고 빈도가 낮은 단어들은 OOV(out-of-vocabulary) 또는 UNK로 표현한다. 그렇지만 만약에 OOV로 표현된 단어가 분류 작업에 결정적인 단서인 경우엔 어떨까? 예를 들어 어떤 카테고리로 분류할 때 quit이라는 동사가 영향이 크다고 가정해보자. 그런데 이의 현재 진행형인 quitting은 출현 빈도가 낮아 OOV 처리가 되었다. 이럴 때 사용하는 것이 서브워드 분리 작업이다. 하나의 단어가 더 작은 단위의 의미있는 여러 서브워드(quit + ing)들로 구성되어 있는 경우가 많아, 이를 분리해서를 단어를 인코딩 및 임베딩 하겠는다..