nlp
[NLP] Sentence-BERT 살펴보기
Sentence-BERT Sentence-BERT는 vanila BERT/RoBERTa를 fine-tuning하여 문장 임베딩 성능을 우수하게 개선한 모델이다. BERT/RoBERTa는 STS 태스크에서도 좋은 성능을 보여주었지만 매우 큰 연산 비용이 단점이었는데, Sentence-BERT는 학습하는 데 20분이 채 걸리지 않으면서 다른 문장 임베딩보다 좋은 성능을 자랑한다. 등장 배경 기존의 BERT로는 large-scale의 유사도 비교, 클러스터링, 정보 검색 등에 많은 시간 비용이 들어간다. BERT로 유사한 두 문장을 찾으려면 두 개의 문장을 한 개의 BERT 모델에 넣어야 유사도가 평가된다. 따라서 문장이 10000개 있으면 10C2 번의 연산 후에 유사도 랭킹을 얻을 수 있다. 클러스터링이나..
[NLP] ALBERT: A Lite BERT
구부정 스터디 4주차 발제 슬라이드입니다. GitHub - Gubuzeong/Getting-Started-with-Google-BERT Contribute to Gubuzeong/Getting-Started-with-Google-BERT development by creating an account on GitHub. github.com References ALBERT: A Lite BERT for Self-supervised Learning of Language Representations y-rok님 블로그 jeonsworld님 블로그 Myung Ha Kwon님 블로그
[NLP] Google의 BERT 이해하기
BERT란 무엇인가 BERT(Bidirectional Encoder Representation from Transformer) : Google에서 만든 문맥을 고려한 Transformer 기반 고성능 텍스트 임베딩 모델. 임베딩 모델이 문맥을 고려할 때의 장점 👉🏻 다의어∙동음이의어를 구분할 수 있다. A: He got bit by Python(파이썬이 그를 물었다). B: Python is my favorite programming language(내가 제일 좋아하는 프로그래밍 언어는 파이썬이다). Word2Vec: 정적 임베딩, A에서의 'Python' 임베딩 == B에서의 'Python' 임베딩 BERT: 동적 임베딩, 트랜스포머 모델 기반이므로 문장의 각 단어를 문장 내 모든 단어들과 연결시켜 문..
[NLP] Transformer 알아보기 - (1) Encoder
* 이 글은 구부정.. 스터디의 일환으로, '구글 BERT의 정석' 책을 읽고 정리한 글입니다. 트랜스포머 소개 NLP의 다양한 문제들을 해결하기 위해 주로 사용되었던 RNN과 LSTM 네트워크에는 장기 의존성 문제(long-term dependency)가 있다. 이런 RNN의 한계점을 극복하기 위해서 「Attention Is All You Need」 논문에서 '트랜스포머'라는 아키텍처를 제안했다. 트랜스포머는 RNN의 순환 방식 대신 순수하게 어텐션만 사용한 모델이다. 트랜스포머는 셀프 어텐션(self attention)이라는 특수한 형태의 어텐션을 사용한다. 기계번역에서의 사용 예시를 통해 트랜스포머의 작동 원리를 살펴보자. 트랜스포머는 인코더-디코더로 구성된 모델로, 인코더에 원문을 입력하면 인코더..
Stanford cs224n (Winter 2019) | Lecture 2: Word Vectors and Word Senses
Stochastic Gradient Descent 경사하강법(Gradient Descent)을 사용해 10억개의 단어를 가진 말뭉치에 크기 5의 윈도우를 사용해서 word2vec 모델을 만든다고 하면, 10억개의 중심 언어와 100억개의 주변 언어를 가질 것이다. softmax를 100억번이 넘게 계산해야 기울기를 구할 수 있는데, 그래이디언트 계산에서 작은 부분을 차지하는 연산에 어마어마한 시간이 걸리므로 학습이 느리게 진행될 거다. 따라서 사람들은 모든 파라미터를 한 번에 다 업데이트하는 경사하강법 대신 윈도우를 반복적으로 샘플링하고 업데이트하는, mini-batch를 사용하는 확률적 경사하강법(Stochastic Gradient Descent, SGD)를 사용한다. 보통 32 혹은 64개의 작은 묶..
Stanford CS224N (Winter 2019) | Lecture 1: Introduction and Word Vectors
2021.11.29-31 @청파맨션 이 강의의 학습 목표 딥러닝을 위한 효과적이고 현대적인 방법에 대한 이해 인간의 언어에 대한 큰 그림과 언어를 이해하고 생산하는 것에 대한 난관들 이해 PyTorch로 대부분의 NLP 문제를 해결할 수 있는 능력 우리가 언어의 의미를 표현하는 방법 언어학자들이 '의미'에 대해 생각하는 일반적인 방식은 denotational sementics, 표시론적 의미론으로, 의미를 사물이 나타내는 것으로 생각한다는 것이다. '의자'라는 단어는 의자와 같은 모든 것을 가리킨다. '달리기'라는 단어를 생각했을 때 떠오르는 일련의 행동이 '달리기'의 의미다. 이 '의미'에 대해 계산적으로(컴퓨터 상으로) 접근하는 ..
[파이토치로 배우는 자연어처리] 레스토랑 리뷰 감성 분류하기 - (3) 감성 분류 모델 만들기
이 글은 한빛미디어의 '파이토치로 배우는 자연어처리' 글을 읽고 정리한 것입니다. 저번 포스트까지 텍스트 데이터를 정제하고, 단어-인덱스를 매핑하는 사전을 만들고, 사전을 바탕으로 리뷰 문장을 벡터화하는 과정을 마쳤다. 이번 포스트에서는 이렇게 가공해 둔 문장을 가지고 모델을 만들어 학습시키고 성능을 측정해 보도록 하겠다. GitHub - mori8/NLP-Pytorch-practice: PyTorch Zero To All(by Sung Kim) 강의와 '파이토치로 배우는 자연어 처리' 책 PyTorch Zero To All(by Sung Kim) 강의와 '파이토치로 배우는 자연어 처리' 책을 읽고 정리하기 위한 저장소 - GitHub - mori8/NLP-Pytorch-practice: PyTorch ..
[파이토치로 배우는 자연어처리] 레스토랑 리뷰 감성 분류하기 - (2) 문장 토큰화와 Dataset
이 글은 한빛미디어의 '파이토치로 배우는 자연어처리' 글을 읽고 정리한 것입니다. 이어서, 전처리된 데이터셋을 가지고 본격적으로 분류 모델을 만들어볼 것이다. 전처리가 끝난 텍스트 데이터를 토큰화, 벡터화한 후 Dataset으로 만드는 과정을 코드로 작성해보자. 우리는 여기서 ReviewDataset, Vocabulary, ReviewVectorizer 클래스를 만들 것이다. ReviewDataset: csv 파일을 받아 데이터셋을 로드하고, 이 데이터셋을 바탕으로 ReviewVectorizer 객체를 만든다. ReviewVectorizer: 각각 리뷰와 별점 정보를 담고 있는 Vocabulary 객체 2개를 만들어 관리한다. Vocabulary: 객체는 매핑을 위해 텍스트를 처리하고 어휘 사전을 만드는..
[파이토치로 배우는 자연어처리] 레스토랑 리뷰 감성 분류하기 - (1)데이터 전처리
이 글은 한빛미디어의 '파이토치로 배우는 자연어처리' 글을 읽고 정리한 것입니다. 퍼셉트론과 지도 학습 훈련 방법을 사용해 옐프(Yelp) 의 레스토랑 리뷰가 긍정적인지 부정적인지 분류하는 작업을 해보자. 데이터를 로드하고 전처리하는 전체 코드는 여기서 확인할 수 있다. Dataset: 옐프 리뷰 데이터셋 이 실습에서는 2015년에 옐프가 주최한 레스토랑 등급 예측 대회에서 사용되었던 레스토랑 리뷰 데이터를 간소화한 뒤 훈련 샘플과 테스트 샘플로 분류해 둔 데이터셋 중 10%를 사용한다. 전체 데이터셋 중 일부만 사용하는 이유는 크게 2가지가 있다. 작은 데이터셋을 사용하면 훈련-테스트 반복이 빠르게 이루어져 실험 속도를 높일 수 있다. 전체 데이터를 사용할 때보다 모델의 정확도가 낮다. 낮은 정확도는 ..