전체 글 310

[Pytorch] Neural Graph Collaborative Filtering (NGCF) 구현하기

Contents Neural Graph Collaborative Filtering (NGCF)는 기존의 협업 필터링(Collaborative Filtering)이 고차-연결성(High-Order Connectivity)을 고려하지 못한다는 단점을 극복하고자 그래프를 협업 필터링에 도입 시킨 기법이다. 전통적인 협업 필터링은 user-item interaction만을 고려하게 된다. 대표적인 Neural Collaborative Filtering (NCF)를 생각해보면 사용자 ID와 제품 ID를 내적하거나 연결(Concatenate)하여 사용자의 제품에 대한 구매 확률을 도출한다. 그렇기 때문에 제품과 다른 사용자 간의 관계 즉, 고차-연결성을 고려하지 못한다는 것이다. 예를 들어 $u_1 \leftarr..

Python/Pytorch 2023.01.01

[Pytorch] Transformer 구현하기

Contents Transformer는 자연어 처리(Natural Language Processing, NLP) 분야에서 성능이 우수한 것으로 검증된 대표적인 Self-Attention 모델이다. 기존 Sequential Based 모델인 RNN, LSTM, GRU 등과 같은 모델에 비해 매우 우수한 성능을 보여주고 있으며, BERT, GPT 등의 사전 학습 기반 모델이 Transformer의 골조를 활용하였다. 이번 글에서는 Transformer의 Encoder와 Decoder가 어떻게 구성되어 있는지 짧은 코드를 통해 알아보자. Import Package Transformer는 HuggingFace 에서 지원하는 transformers 패키지와 PyTorch를 이용하여 구현할 것이다. 따라서, 구현에..

Python/Pytorch 2022.12.20

[Pytorch] RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling

CUBLAS_STATUS_NOT_INITIALIZED 에러는 nn.Embedding에 원래 값보다 큰 값이 들어갔을 때 발생하는 에러다. 예를 들어, 사용자의 수는 100명이고, 제품의 수는 50개라고 하자. 그렇다면 아래와 같은 코드로 nn.Embedding을 생성할 수 있을 것이다. class Model(nn.Mudule): def __init__(self, num_users, num_items, latent_dim): self.num_users = num_users self.num_items = num_items self.latent_dim = latent_dim self.user_embedding = nn.Embedding(self.num_users, self.latent_dim) self.ite..

Python/Pytorch 2022.12.05

[Transformers] Bert Tokenizer 알아보기

Contents Transformers 패키지는 자연어처리(NLP) 분야에서 엄청 많이 사용되는 패키지 중 하나이다. BERT 등과 같은 모델을 구축할 때 Transformers 패키지를 사용하면 매우 편하게 구축할 수 있다. 이번 글에서는 Transformers에 존재하는 BERT에서 사용하는 tokenizer 함수를 뜯어본다. BertTokenizer BertTokenizer는 PreTrainedTokenizer를 상속받는다. PreTranedTokenizer는 나중에 알아보도록하고, 단순히 사전 학습된 tokenizer 정도로 이해하면 된다. BertTokenizer 내에는 vocab_file, do_lower_case, unk_token 등 다양한 파라미터들이 존재하는데, 중요한 파라미터 위주로 ..

Python/Transformers 2022.12.04

[Pytorch] BERT로 감성 분석하기. 기초 설명까지

Contents BERT(Bidirectional Encoder Representation from Transformers)는 Transformer를 기반으로 양방향 학습을 하는 사전학습 모델이다. 사전학습 모델이란 미리 사전에 많은 양의 코퍼스를 학습하고, 그 후 파인튜닝(Fine-tuning)을 통해 본인이 사용하고자 하는 도메인에 적용하는 모델이다. Transformer가 나오기 이전에도 Bi-LSTM 등과 같이 양방향 학습 모델이 존재했지만, 사전 학습 모델은 아니었으며, BERT는 Self-supervised Learning 중 하나인 Making 기법을 사용하여 학습의 성능을 향상시키고, 지금까지도 많이 사용된다. 이번 글에서는 BERT를 사용하는 방법에 대해서 알아보고, 각 코드가 어떤 의미..

Python/Pytorch 2022.12.03

[Pandas] set_categories 사용하기.

추천 시스템을 구축할 때 데이터를 학습 데이터와 검증 데이터 그리고 테스트 데이터로 분할하여 사용한다. 이때 학습 데이터는 모델을 학습하기 위한 용도로 사용하고 검증 데이터는 모델의 하이퍼 파라미터를 최적화하기 위해 사용한다. 마지막으로 테스트 데이터는 최종 모델의 성능을 확인하는 용도로 사용한다. 추천 시스템을 구축할 때 만약 검증 데이터와 테스트 데이터에는 존재하지만 학습 데이터에는 존재하지 않는 사용자의 경우 학습한 데이터가 없기 때문에 실제 사용자에게 제품을 추천할 수 없게 된다. 따라서, 학습 데이터에 존재하는 사용자를 기반으로 실험을 진행하는 것이 중요하다. 이때 사용되는 것이 바로 Pandas에 set_categories 함수이다. sample = pd.DataFrame({'user_id':..

Python/Pandas 2022.12.03

[Set Theory] 명제란 무엇인가?

Contents 집합론에서는 명제(Statement)라는 개념을 다룬다. 이번 글에서는 집합론에서 언급하는 명제에 대해서 간단한 예제를 통해서 알아보고자 한다. 1.1.명제(Statement) Definition 1.1.1 시간이나 지식에 상관없이 참(True) 혹은 거짓(False)이 분명한 문장이나 식을 명제(Statement)라고 한다. 명제는 참이나 거짓이 분명해야 한다. '2+3은 5이다' 라는 문장은 2+3이 5인 것이 확실하다. '2의 소수10100 번째 자리 숫자는 3이다.' 라는 문장은 계산을 하든 하지 않든 3이거나 아니거나 참과 거짓이 분명하다. 그러나, '벚꽃길이 예쁘다' 와 같은 문장은 추상적이기 때문에 명확하게 정답이 존재하지 않는다. 따라서, 명제가 아..

[Pytorch] Learning Rate Scheduler 사용하기

Contents 학습률(Learning Rate)은 모델을 학습하기 위해서 필수적인 요소다. 학습률을 너무 크게 설정한다면, 최솟값에 도달하는 것이 어려우며, 너무 작게 설정하면, local minimum에 빠지거나 학습에 진전이 없을 수 있다. 이번 글에서는 학습률에 Schedular를 설정해서 학습률을 감쇠(Decay)하는 패키지를 다루어볼 것이다. Import Packages import torch import torch.nn as nn from torch.optim.lr_scheduler import StepLR import torch.optim as optim from torch.utils.data import DataLoader import torchvision.transforms as tra..

Python/Pytorch 2022.11.17

Convolutional Neural Network (CNN) 밑바닥부터 구현하기

Contents CNN은 이미지처리, 자연어처리 등 다양한 분야에서 각광받는 기술이다. 파라미터를 공유하는 개념을 통해서 기존의 연구에서 제안된 단순한 Linear 수준을 넘어서서 매우 우수한 성능을 발휘한다. 이번 글에서는 CNN을 밑바닥부터 구현하는 것을 다룬다. Import Packages from sklearn.datasets import fetch_openml from sklearn.utils import check_random_state from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import pand..

A Review-aware Graph Contrastive Learning Framework for Recommendation (SIGIR'22)

Contents 해당 논문은 SIGIR'22 6월에 발표된 논문이다. 제목에서도 알 수 있듯 리뷰를 사용하여 추천 시스템을 구축하고자 하는데, Graph Mining과 Contrastive Learning을 사용하는 것으로 보인다. Contrastive Learning은 대조학습으로 최근 Data augmentation 관점으로 추천 시스템이 가지고 있는 Sparsity 문제를 완화하기 위해 주로 사용되곤 한다. Introduction 추천 시스템에서는 Sparsity 문제 즉, Cold Start 문제를 해결하기 위해 리뷰를 사용하여 사용자가 선호할 만한 제품을 추천하기 위한 연구를 진행하고 있다. 예를 들어, 사용자가 한 리뷰에 대해서 평점을 부여한 경우 하나의 평점으로 사용자의 선호도를 예측하는 것..

Graph Convolutional Matrix Completion (KDD'18)

Contents GCMC는 추천 시스템에 그래프를 접목한 연구 중 하나다. auto-encoder framework를 사용하여 link prediction을 수행한다. SoTA 성능까지 달성한 모델로 추천 시스템과 그래프를 접목한 연구 중 널리 알려진 모델이다. Introduction 논문의 제목에서도 알 수 있듯 Matrix Completion 관점에서 link prediction task를 수행하는 모델이다. 기본적으로 Interaction data는 사용자와 제품 간의 관계로 이루어진 Bipartitle Graph 형태로 구성되어 있다. 본 논문에서는 Bipartitle Graph를 위한 auto-encoder framework인 GC-MC(Graph Convolution Matrix Complet..

[Graph] Measuring Network

Contents 네트워크에는 밀집(Density), 차수(Degree), 길이(Length) 등 다양한 지표가 존재하며, 이를 측정하기 위한 방법도 다양하게 존재한다. 본 글에서는 이를 측정하는 방법에 대해서 알아본다. Density Density는 그래프의 밀집 정도를 의미한다. 예를 들어, 완전 연결 그래프의 경우 Density는 1이 될 것이다. 완전 연결 그래프는 Complete Graph 혹은 Clique로 부르기도 한다. 이때 평균 차수는 다음과 같이 계산할 수 있다. m=(n2)=n(n1)2 \[ \left \langle k \right \rangle = \frac{2m}{n} = \frac{n(n..

[Statistics] Power Law Distribution

Power Law Distribution은 다양한 이름으로 불린다. Long Tail Distribution으로도 들어본 적 있을 것이다. 이 그래프는 사회의 현상을 가장 잘 매핑할 수 있는 함수이며, 어떤 식으로 유도되는지 알아보자. Power Law Distribution은 Real-World 네트워크 구조를 가장 잘 설명할 수 있다고 한다. 이 분포는 오른쪽으로 긴 꼬리를 가진 형태를 띄고 있어서 가독성이 많이 떨어진다. 이때 Power Law Distribution에 아래와 같은 Log-Log 수식을 취하면 Log-Log plot을 그릴 수 있고, 유의미한 패턴을 찾을 수 있다. \[ \begin{equation} \begin{split} \ln p(x) & = -\alpha \ln x + c \..

Bootstrapping User and Item Representations for One-Class Collaborative Filtering (SIGIR'21)

Contents One-Class Collaborative Filtering (OCCF)은 user-item 쌍에서 positively-related를 식별하는 것을 목적으로 한다. positively-related 는 긍정적인 관련성을 의미하고, 사용자가 선호할 만한 제품을 찾는 것을 의미한다. 기존 연구에서는 Negative Sampling (NS)에 의존하여 이를 추출하였으나, 다양한 문제점이 존재한다. 본 논문에서는 NS의 문제점을 해결하기 위해 새로운 OCCF 기법인 BUIR을 제안한다. 1. Introduction 최근 Implicit Feedback만 사용하는 추천 시스템 연구에서 사용자의 선호도를 정확하게 예측하기 위해 OCCF에 초점을 둔 연구가 많이 진행되고 있다. OCCF는 적은 수의..

반응형