목록전체 글 (40)
Zorba blog
pyannote audio 모듈을 실행하던 중 ModuleNotFoundError: No module named '_lzma' 에러가 발생하였다. yum install -y xz-devel를 설치 하면 해결된다고 하는데, yum 을 설치하려니 E: Unable to locate package yum 에러가 발생한다. 1. 에러 원인 해당 ubuntu에서 package를 다운받지 못하여서 그렇다. /etc/apt 위치로 이동해 주어 sources.list를 수정해주어야 한다. 2. 해결 방법 $ cd /etc/apt/ $ sudocp sources.list sources.list.back 을 실행하여 sources.list 를 백업한다. (혹시 모르니) $ sudo vi sources.list 을 실행하여..
구글 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. '사과'라는 단어..

10. 인코더에서 디코더로(From Encoder To Decoder) - 구현된 인코더는 총 num_layers 만큼의 층 연산을 순차적으로 한 후에 마지막 층의 인코더의 출력을 디코더로 전달. - 디코더 또한 num_layers 만큼의 연산을 하는데, 이때마다 인코더가 보낸 출력을 각 디코더 층 연산에 사용. 11. 디코더의 첫번째 서브층 : 셀프 어텐션과 룩-어헤드 마스크 - 디코더도 인코더와 동일하게 임베딩 층과 포지셔널 인코딩을 거친 후의 문장 행렬이 입력. - 트랜스포머 또한 seq2seq와 마찬가지로 교사 강요(Teacher Forcing) 을 사용하여 훈련. - 학습 과정에서 번역할 문장에 해당되는 je suis etudiant의 문장 행렬을 한 번에 입력 받음. 문장 행렬을 한 번에 입력..

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 사이즈는 보통 수백 이상의 차원을 가짐. - 인..
KoBart 를 사용해 모델을 전이학습 하려고 하는데, pytorch_lightning에서 계속 오류가 발생. optim_conf = model.configure_optimizers() File "train.py", line 101, in configure_optimizers data_len = self.setup_steps(self) File "train.py", line 84, in setup_steps train_loader = self.trainer._data_connector._train_dataloader_source.dataloader() AttributeError: 'Trainer' object has no attribute '_data_connector' 1. 에러 원인 pytorch_l..