목록자연어처리 (11)
Zorba blog
1. 자연어 계산과 이해 - 임베딩에 자연어의 의미를 함축해 넣으려면, 자연어의 통계적 패턴 정보를 통째로 집어넣으면 된다. 구분 Bag of Words 가정 언어 모델 분포 가정 내용 어떤 단어가 많이 쓰였는가 단어가 어떤 순서로 쓰였는가 어떤 단어가 같이 쓰였는가 대표 통계량 TF-IDF - PMI 대표 모델 Deep Averaging Network ELMo, BERT Word2Vec 2. 어떤 단어가 많이 쓰였는가 1) Bag of Words 가정 - "저자가 생각한 주제가 문서에서의 단어 사용에 녹아 있다"는 가정 - Bag은 중복 원소를 허용한 집합. - 단어의 등장 순서에 관계없이 문서 내 단어의 등장 빈도를 임베딩으로 쓰는 기법. - 간단한 방법이지만 정보 거색 분야에서 여전히 많이 쓰이고 ..
1. 임베딩이란 - 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터(Vector)로 바꾼 결과, 또는 그 일련의 과정. - 단어나 문장 각각을 벡터로 변환하여 벡터 공간(Vector Space)으로 끼워 넣는다(embed)는 의미 가장 간단한 형태의 임베딩 -> 단어의 빈도를 그대로 벡터로 사용하는 것. 2. 임베딩의 역할 1) 단어-문장 간 관련도 계산 - 단어-문서 행렬은 가장 단순한 형태의 임베딩. - 현업에서는 이보다 복잡한 형태의 임베딩 사용(Word2Vec, Google. 2013.) ex. '희망'이라는 단어의 Word2Vec 임베딩 [-0.00209, -0.03918, 0.02419 ... 0.01715, -0.04975, 0.09300] - 이처럼 단어를 수치화하면 단어 ..
ELMo and BERT - 언어 모델의 성능 향상을 위하여 모델의 가장 핵심이라 할 수 있는 워드 임베딩(Word Embedding) 방식을 개선하려는 시도가 있었음. - 2018년, ELMo와 BERT가 제안되며 NLP(Natural Language Processing) 분야의 트렌드를 주도함. 기존 Word Embedding 방식의 문제점 - 주변 맥락 단어를 학습할 때만 고려하고, 이렇게 생성된 어휘 임베딩을 다른 모델의 입력으로 사용하는 상황은 가정하지 않음. - 즉, 학습이 완료된 후 어휘 임베딩 값은 불변. - 실제로 사용되는 어휘의 의미는 맥락에 따라 가변적임. "나는 머리를 끄덕였다." "나는 머리를 다시 잘랐다." "나는 머리가 좋아서 공부를 잘 한다." - 기존 임베딩 방식은 위의 세..
구글 BERT의 마스크드 언어 모델 1. 마스크드 언어 모델과 토크나이저 - BERT는 이미 누군가가 학습해둔 모델을 사용하는 것이므로 우리가 사용하는 모델과 토크나이저는 항상 맵핑 관계. - 아래 코드를 통해 마스크드 언어 모델과 토크나이저를 로드 from transformers import TFBertForMaskedLM from transformers import AutoTokenizer model = TFBertForMaskedLM.from_pretrained('bert-large-uncased') tokenizer = AutoTokenizer.from_pretrained("bert-large-uncased") 2. BERT의 입력 - "Soccer is a really fun [MASK]" 라는..
- 다양한 자연어 처리 테스크에서 사용되었던 RNN 계열의 신경망인 LSTM, GRU는 트랜스포머로 대체되어가는 추세. - 트랜스포머 계열의 BERT, GPT, T5 등 다양한 사전 훈련된 언어 모델들이 계속해서 등장하고 있음. 1. BERT의 개요 사진 첨부 - BERT는 2018년에 구글이 공개한 사전 훈련된 모델. - 트랜스포머를 이용하여 구현되었으며, 위키피디아(25억 단어)와 BooksCorpus(8억 단어)와 같은 레이블이 없는 텍스트 데이터로 사전 훈련된 언어 모델. - 레이블이 없는 방대한 데이터로 사전 훈련된 모델을 가지고, 레이블이 있는 다른 작업에서 추가 훈련과 함께 하이퍼파라미터를 재조정하면 성능이 높게 나옴. - 다른 작업에 대해서 파라미터 재조정을 위한 추가 훈련 과정을 파인 튜..
BERT를 배우기에 앞서 워드 임베딩에서부터 ELMo, 그리고 트랜스포머에 이르기까지 자연어 처리가 발전되어온 흐름을 정리해보자. 1. 사전 훈련된 워드 임베딩 - 어떤 테스크를 수행할 때, 임베딩을 사용하는 방법으로는 크게 두 가지가 있음. 1) 임베딩 층을 랜덤 초기화하여 처음부터 학습하는 방법. 2) 방대한 데이터로 Word2Vec 등과 같은 임베딩 알고리즘으로 사전에 학습된 임베딩 벡터들을 가져와 사용하는 방법. - 만약 테스크에 사용하기 위한 데이터가 적다면, 사전 훈련된 임베딩을 사용하여 성능 향상을 기대할 수 있음. - 그러나 위 2가지 방법 모두 하나의 단어가 하나의 벡터값으로 맵핑되므로, 문맥을 고려하지 못하고 다의어나 동음이의어를 구분하지 못하는 문제가 발생. (ex. '사과'라는 단어..
6. 인코더(Encoder) - 트랜스포머는 num_layers 개수의 인코더 층을 쌓음. - 인코더를 하나의 층이라고 생각한다면, 하나의 인코더 층은 총 2개의 서브층으로 나뉘어짐. 1) 셀프 어텐션 2) 피드 포워드 신경망 7. 인코더의 셀프 어텐션 1) 셀프 어텐션의 의미와 이점 - 어텐션 함수는 주어진 '쿼리(Query)' 에 대해서 모든 '키(Key)' 와의 유사도를 각각 구함. - 구해낸 이 유사도를 가중치로 하여 키와 맵핑되어있는 각각의 '값(Value)'에 반영. - 그리고 유사도가 반영된 '값(Value)'을 모두 가중합하여 리턴. - 여기까지는 이전에 학습한 어텐션의 개념. 셀프 어텐션과의 차이는? 셀프 어텐션은 어텐션을 자기 자신에게 수행. - seq2seq에서 어텐션을 사용할 경우의..
트랜스포머(Transformer) - 트랜스포머(Transformer)는 2017년 구글이 발표한 논문인 "Attention is all you need"에 나온 모델. - 기존의 seq2seq 구조인 인코더-디코더를 따르면서도, 어텐션(Attention)만으로 구현한 모델. - RNN을 사용하지 않고, 인코더-디코더 구조를 설계하였음에도 RNN보다 우수한 성능을 보여줌. 1. 기존 seq2seq 모델의 한계 - 기존의 seq2seq 모델은 인코더-디코더 구조로 구성되어져 있었음. - 인코더가 입력 시퀀스를 하나의 벡터로 압축하는 과정에서 입력 시퀀스의 정보가 일부 손실된다는 단점이 있음. - 이를 보정하기 위해 어텐션을 사용. - But. 어텐션을 RNN의 보정을 위한 용도로서 사용하는 것이 아니라 어..
어텐션 메커니즘 (Attention Mechanism) - seq2seq 모델의 경우 인코더에서 입력 시퀀스를 Context Vector 라는 하나의 고정된 크기의 벡터 표현으로 압축. - 이러한 RNN 기반의 seq2seq 모델에는 크게 두 가지 문제가 있음. 1. 하나의 고정된 크기의 Vector에 모든 정보를 압축하려고 하니까 정보 손실이 발생. 2. RNN의 고질적인 문제인 기울기 소실(Vanishing gradient) 문제가 존재. - 입력 시퀀스가 길어지면 출력 시퀀스의 정확도가 떨어지는 것을 보정해주기 위해 어텐션(Attention) 기법이 등장. 1. 어텐션 (Attention)의 아이디어 - 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점 마다, 인코더에서의 전체 입력 문장을 ..
시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq) - seq2seq 모델은 입력된 sequence로부터 다른 도메인의 시퀀스를 출력하는 모델. - 다양한 분야에서 활용. (ex. 챗봇, 기계 번역, 내용 요약, STT) - seq2seq는 크게 인코더와 디코더라는 두 개의 모듈로 구성. - 인코더는 입력 문장의 모든 단어들을 순차적으로 입력받고, 마지막에 모든 단어 정보들을 압축해서 하나의 벡터로 만듬. - 이때, 압축된 하나의 벡터를 Context Vector 라고 함. - 디코더는 Context Vector를 받아서 번역된 단어를 한 개씩 순차적으로 출력. - 실제 현업에서 사용되는 seq2seq 모델의 Context Vector 사이즈는 보통 수백 이상의 차원을 가짐. - 인..