본문 바로가기
TIL

[23.03.13] 추천시스템과 Transformer

by rahites 2023. 3. 14.

# 갓생살기의 일환으로 TIL을 일기처럼 적어보려 한다

 

1. 추천 시스템 수업

Collaborative Filtering에 대해 배웠다. User, Item, Latent Factor based 방식이 있었고 전반적인 내용은 기존의 SKT 추천시스템 강의와 비슷했다. 추천시스템의 Task에는 Unkown rating을 어떻게 채우는지에 대한 Prediction과 어떤 상품을 유저에게 추천해야할 지에 대한 Ranking 2가지가 존재한다. Prediction은 실제값과 예측값의 차이를 계산하는 회귀 평가방식으로, Ranking은 모델이 추천한 것 중에 몇 개를 맞췄을 지를 계산하는 분류 평가방식으로 평가를 할 수 있다. 또한 현재 추천을 하려는 사람을 Active User로 두고 계산을 한다는 점, 일반적으로 상품보다 사용자가 많기 때문에 User-based보다 Item-based의 성능이 더 좋다는 점(덜 sparse하기 때문에)이 기억에 남았다. 

 

하지만 위 두 방식은 모두 Latent Factor based(Matrix Factorization based)의 성능이 뛰어나 이후로는 사용되지 않았다. MF방식의 아이디어는 두 Matrix의 곱으로 원래의 MxN 사이즈의 Rating Matrix를 복원하는데서 온다. MxK 사이즈의 P행렬과 KxN 사이즈의 Q행렬의 곱으로 Rating Matrix를 복원할 수 있기에, Rating Matrix에 존재하는 데이터에 맞도록 P, Q 행렬을 학습시켜 나가는 방식이다. 이 방식은 계산시에 0이 나오지 않아 성능이 좋다. 

 

손실함수에는 규제항이나 사람마다 주는 평점의 척도가 다르기 때문에 bias를 계산하는 함수가 들어가 있다. MovieLens 데이터를 주로 사용하며, 논문이 아닌 실제 데이터를 가지고 추천 시스템 모델을 돌릴 시 F1같은 점수는 0.1도 안되는 점수가 나온다고 한다. 평가지표로는 MAP, NDCG 등이 있고 Diversity, Novelty, Serendipity 같은 SKT 강의에서 들었던 지표들이 있지만 이는 기업 업무에서는 필요하지만 논문에서는 사용하지 않는다. Hold-out 방식을 사용하게 되면 머신러닝과 달리 train-test-split을 할 때 학습에 사용한 유저 데이터가 테스트에 존재해야지만 적절한 예측력을 보이며, 실제로는 Hold-out보다 k-fold 방식을 많이 사용한다. 

 

2. X:AI Transformer 코드 구현

https://github.com/Huffon/pytorch-transformer-kor-eng

 

GitHub - Huffon/pytorch-transformer-kor-eng: Transformer Implementation using PyTorch for Neural Machine Translation (Korean to

Transformer Implementation using PyTorch for Neural Machine Translation (Korean to English) - GitHub - Huffon/pytorch-transformer-kor-eng: Transformer Implementation using PyTorch for Neural Machin...

github.com

1주차 X:AI 코드 구현 과제로 위 코드를 Train, Inference 하는 것을 시도했다. 학교 서버에서 실행하기 위해 환경 설정하는데에 시간을 많이 사용하였고 결국 Train 하는데에 성공하였다. Python 3.8, cuda version 11.1, spacy는 requirements를 따랐고 나머지는 서버 환경 그대로 돌려 Train 시켜 두었다. epoch를 200, batch를 64로 줄였기 때문에 내일 정도면 완료되지 않을까.. 예상하고 있다. 

'TIL' 카테고리의 다른 글

[23.03.14] Android Studio와 Inception  (0) 2023.03.14
[22.03.08] 빅오 표기법  (0) 2022.03.08
[22.01.22] BFS와 DFS 알고리즘  (0) 2022.01.22

댓글