Machine Learning

    [NLP] Transformer 알아보기 - (1) Encoder

    [NLP] Transformer 알아보기 - (1) Encoder

    * 이 글은 구부정.. 스터디의 일환으로, '구글 BERT의 정석' 책을 읽고 정리한 글입니다. 트랜스포머 소개 NLP의 다양한 문제들을 해결하기 위해 주로 사용되었던 RNN과 LSTM 네트워크에는 장기 의존성 문제(long-term dependency)가 있다. 이런 RNN의 한계점을 극복하기 위해서 「Attention Is All You Need」 논문에서 '트랜스포머'라는 아키텍처를 제안했다. 트랜스포머는 RNN의 순환 방식 대신 순수하게 어텐션만 사용한 모델이다. 트랜스포머는 셀프 어텐션(self attention)이라는 특수한 형태의 어텐션을 사용한다. 기계번역에서의 사용 예시를 통해 트랜스포머의 작동 원리를 살펴보자. 트랜스포머는 인코더-디코더로 구성된 모델로, 인코더에 원문을 입력하면 인코더..

    텐서플로우 자격증(TensorFlow Developer Certificate) 준비 과정과 취득 후기, 미응시 시 환불 방법

    텐서플로우 자격증(TensorFlow Developer Certificate) 준비 과정과 취득 후기, 미응시 시 환불 방법

    🤷🏻‍♀️ 서론 계기 작년 DSC의 ML 담당 Core Member 분께서 슬랙에 텐서플로우 자격증 취득 후기와 공부 방법에 대해 자세하게 적어주신 적이 있었다. 그 때는 머신러닝에 관심이 1도 없을 시절이라 그냥 신기하고 대단하다고 생각하며 넘어갔지만, 머신러닝을 공부하고 있는 지금 한 번 ML 관련 자격증에 도전해 보면 좋을 것 같았다. 또, 나는 PyTorch만 쓸 줄 알고 TensorFlow는 하나도 모르는데, 이번에 자격증 취득을 목표로 텐서플로우를 한 번 공부해 보고 싶었다. 머신러닝 엔지니어를 대상으로 최근에 한 설문조사 결과를 보니 약 70% 정도가 PyTorch를 사용하고, 나머지 30% 정도가 TensorFlow를 사용한다고 답변했지만, 현업에서 머신러닝 엔지니어로 일하고 계신 분들의 ..

    Stanford cs224n (Winter 2019) | Lecture 2: Word Vectors and Word Senses

    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

    Stanford CS224N (Winter 2019) | Lecture 1: Introduction and Word Vectors

    2021.11.29-31 @청파맨션 이 강의의 학습 목표 딥러닝을 위한 효과적이고 현대적인 방법에 대한 이해 인간의 언어에 대한 큰 그림과 언어를 이해하고 생산하는 것에 대한 난관들 이해 PyTorch로 대부분의 NLP 문제를 해결할 수 있는 능력 우리가 언어의 의미를 표현하는 방법 언어학자들이 '의미'에 대해 생각하는 일반적인 방식은 denotational sementics, 표시론적 의미론으로, 의미를 사물이 나타내는 것으로 생각한다는 것이다. '의자'라는 단어는 의자와 같은 모든 것을 가리킨다. '달리기'라는 단어를 생각했을 때 떠오르는 일련의 행동이 '달리기'의 의미다. 이 '의미'에 대해 계산적으로(컴퓨터 상으로) 접근하는 ..

    [파이토치로 배우는 자연어처리] 레스토랑 리뷰 감성 분류하기 - (3) 감성 분류 모델 만들기

    [파이토치로 배우는 자연어처리] 레스토랑 리뷰 감성 분류하기 - (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

    [파이토치로 배우는 자연어처리] 레스토랑 리뷰 감성 분류하기 - (2) 문장 토큰화와 Dataset

    이 글은 한빛미디어의 '파이토치로 배우는 자연어처리' 글을 읽고 정리한 것입니다. 이어서, 전처리된 데이터셋을 가지고 본격적으로 분류 모델을 만들어볼 것이다. 전처리가 끝난 텍스트 데이터를 토큰화, 벡터화한 후 Dataset으로 만드는 과정을 코드로 작성해보자. 우리는 여기서 ReviewDataset, Vocabulary, ReviewVectorizer 클래스를 만들 것이다. ReviewDataset: csv 파일을 받아 데이터셋을 로드하고, 이 데이터셋을 바탕으로 ReviewVectorizer 객체를 만든다. ReviewVectorizer: 각각 리뷰와 별점 정보를 담고 있는 Vocabulary 객체 2개를 만들어 관리한다. Vocabulary: 객체는 매핑을 위해 텍스트를 처리하고 어휘 사전을 만드는..

    [파이토치로 배우는 자연어처리] 레스토랑 리뷰 감성 분류하기 - (1)데이터 전처리

    이 글은 한빛미디어의 '파이토치로 배우는 자연어처리' 글을 읽고 정리한 것입니다. 퍼셉트론과 지도 학습 훈련 방법을 사용해 옐프(Yelp) 의 레스토랑 리뷰가 긍정적인지 부정적인지 분류하는 작업을 해보자. 데이터를 로드하고 전처리하는 전체 코드는 여기서 확인할 수 있다. Dataset: 옐프 리뷰 데이터셋 이 실습에서는 2015년에 옐프가 주최한 레스토랑 등급 예측 대회에서 사용되었던 레스토랑 리뷰 데이터를 간소화한 뒤 훈련 샘플과 테스트 샘플로 분류해 둔 데이터셋 중 10%를 사용한다. 전체 데이터셋 중 일부만 사용하는 이유는 크게 2가지가 있다. 작은 데이터셋을 사용하면 훈련-테스트 반복이 빠르게 이루어져 실험 속도를 높일 수 있다. 전체 데이터를 사용할 때보다 모델의 정확도가 낮다. 낮은 정확도는 ..

    [kaggle courses] Pandas - Renaming and Combining

    [kaggle courses] Pandas - Renaming and Combining

    https://www.kaggle.com/residentmario/renaming-and-combining 이름 바꾸기 - rename, rename_axis rename()은 인덱스나 열의 이름을 바꿀 때 사용한다. 아래의 예제처럼 dictionary 안에 key 값은 기존 이름, value 값은 바꾸고자 하는 이름을 넣어 columns 파라미터에 할당하면 된다. rename()은 다양한 방법의 입력 포맷을 지원하지만, 보통 dictionary를 사용하는 게 가장 편하다. reviews.rename(columns={'points':'score'}) 인덱스 이름을 바꾸는 방법은 열 이름을 바꾸는 방법처럼 dictionary에 기존 이름과 바꾸고자 하는 이름의 쌍을 만든 뒤 index 파라미터에 할당하면 ..

    [kaggle courses] Pandas - Data Types and Missing Values

    [kaggle courses] Pandas - Data Types and Missing Values

    https://www.kaggle.com/residentmario/data-types-and-missing-values Dtypes - dtype, dtypes, astype DataFrame이나 Series의 각 column의 데이터 타입을 가리켜 dtype이라고 부른다. 특정 column의 타입을 가져오기 위해 dtype 속성을 사용할 수 있다. 예를 들어, reviews DataFrame의 price 열의 데이터 타입을 알고 싶다면, 아래와 같이 작성하면 된다. reviews.price.dtype # output: dtype('float64') DataFrame 전체 columns의 데이터 타입 또한 알 수 있다. reviews의 dtypes 속성을 찍어보면, DataFrame의 각 column의 ..

    [kaggle courses] Pandas - Grouping and Sorting

    [kaggle courses] Pandas - Grouping and Sorting

    https://www.kaggle.com/residentmario/grouping-and-sorting 그룹별 분석 - groupby, agg groupby()로 같은 값끼리 하나의 인덱스로 묶을 수 있다. reviews.groupby('points').points.count() points 80 397 81 692 ... 99 33 100 19 Name: points, Length: 21, dtype: int64 groupby()로 같은 포인트 값을 갖는 와인 리뷰끼리 그룹을 생성한 뒤, points column으로 묶고 count()로 각 그룹별 빈도수를 체크했다. 위 결과는 value_counts()와 동일한 결과이기도 하다. groupby()는 기준에 따라 같은 값을 갖는 레코드끼리 DataFra..