-
Lv2. P-Stage 16Daily 2022. 4. 12. 02:31
오늘은 RecVAE를 data split을 하지 않고 학습을 할 수 있는 방법이 없을까 이것 저것 수정을 해보다가 혼자 구현하는 것은 어떻게 할지 감이 잘 오지 않아서 관련 내용을 찾아보았다.
https://github.com/RUCAIBox/RecBole/issues/1169
[🐛BUG] CUDA error when try to get predict result without valid/test data · Issue #1169 · RUCAIBox/RecBole
Describe the bug In my scenario, i need to use all of my data for training model, then get recommendation for all of users. So i don't need to create a valid data or test data, or test data/val...
github.com
결론은 test data가 없으면 model을 불러오는 것이 안되고, 관련 기능을 업데이트 할 계획이 없으니 필요하면 직접 구현하라 라는 답변이었고, 알고봤더니 질문자가 jupyter 파일로 만든 것이 내가 저번에 참고했던 H&M kaggle file(P-Stage 08번 회고 참조)였다.
이를 다시 파이썬 파일로 만드는 것은 그때 포기 했고 시간 상으로도 얼마 남지 않아서 다른 사용 가능한 파라미터들을 조정해 보려고 했다.
split을 하는 방법 중에 test_only 라는 방법이 있었는데, 아마 train,valid,test 비율이 0.9, 0, 0.1 으로 설정되어 있는 것 같고 학습이 제대로 되는 것인지 80 epoch과 200 epoch으로 학습해서 비교해보니 200 epoch일 때 성능이 잘 나오는 것을 확인했다.
좌측이 test data로 나온 성능, 우측이 실제 대회 제출 성능 그러면 test 비율을 낮춰서 train 데이터로 거의 다 쓰게 설정하면 잘 학습하지 않을까? 라고 생각해서 split 비율을 0.9999, 0, 0.0001로 설정해서 학습을 시켜봤는데 결과는 실패였다.
parameter setting 값 실패한 이유는 출력이 안되는 것은 아닌데, test_only로 설정했을 때와 결과 파일이 똑같이 나온다는 것이다.
그리고 recbole_extend에 있는 모델을 옮겨보려고 시도 해봤는데 설정 파일이 있지 않았고 모델을 넣어 봤을 때 동작하지 않아서 이는 포기했다.
Recbole에서 공식적으로 만든 것이 아닌 개인이 만든 repo이라서 따로 issue도 작성하지 않았다.
대신 Recbole에서 최근에 만들고 있는 https://github.com/RUCAIBox/RecBole-GNN/tree/main/recbole_gnn/model
GitHub - RUCAIBox/RecBole-GNN: Efficient and extensible GNNs enhanced recommender library based on RecBole.
Efficient and extensible GNNs enhanced recommender library based on RecBole. - GitHub - RUCAIBox/RecBole-GNN: Efficient and extensible GNNs enhanced recommender library based on RecBole.
github.com
Recbole-GNN 내용을 현재 Recbole에 옮겨볼 예정이다.
다만 social model 같은 경우 net이라는 파일이 필요한데 net 파일에 있는 source_id와 target_id가 무엇을 의미하는지 확실하지 않고, 아마도 현재 주어진 데이터로는 이 파일을 만들 수 없을 확률이 커서 먼저 다른 것 부터 해 볼 생각이다.
sequential model을 실행하는데 다음과 같은
ValueError : [timestamp] is not exist in interaction[The batch_size... 에러가 뜬다면 설정파일인 yaml 파일을 확인해봐야 한다.
recbole에서 그대로 받은 파일이라면 recbole/properties/quick_start_config/sequential.yaml 의 경로에 위치해있고, 여기에 load_col 항목을 아래 사진과 같이 추가해주면 된다.
지금은 위의 에러를 수정하고 sequantial model 중 하나인 bert4rec을 돌려보고 있는 중이다.
다음으로 할 것은 팀원 중 한 분이 발견한 rectorch 프레임워크를 사용해 보는 것이다.
https://github.com/makgyver/rectorch
GitHub - makgyver/rectorch: rectorch is a pytorch-based framework for state-of-the-art top-N recommendation
rectorch is a pytorch-based framework for state-of-the-art top-N recommendation - GitHub - makgyver/rectorch: rectorch is a pytorch-based framework for state-of-the-art top-N recommendation
github.com
비록 모델의 갯수는 작지만 최신 모델이 많이 들어가 있고, 이번 대회가 VAE기반이 성능이 잘 나오는데 VAE 기반의 모델들이 많이 있으며 이미 팀원 중 한 분이 사용해 봤는데 여기서는 data를 split하지 않고 100% 사용할 수 있다고 해서 이것도 사용하는 방법을 익혀보려고 한다.
팀원 중 한 분이 결과파일을 만드는데 성공한 프레임워크라 중간에 막히면 도움을 받을 수 있다는 점도 큰 장점이다.
rectorch를 공부하면서 recbole로는 hyperparameter setting을 해볼 생각이다.
recbole의 기능 중 하나를 hyperparameter tuning을 사용해서 학습시켜 볼 예정이다.
또 다른 해볼 일은 모델은 다르지만 비슷한 성능이 나온 output 파일들을 가지고 앙상블을 해보는 것이다.
이는 수요일 밤~목요일 사이에 마지막으로 점수를 높이는 방법으로 시도해 볼 생각이다.
오늘의 문제는 2문제인데 먼저
https://www.acmicpc.net/problem/1449
1449번: 수리공 항승
첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나
www.acmicpc.net
수리공 항승 문제이다.
아이디어는 먼저 정렬을 하고, 뒤에서 부터 값을 하나씩 뽑아서 앞서 뽑았던 크기와 차이값을 비교해주며 테이프의 길이보다 차이값이 크다면 결과값에 1을 더해주고 값을 업데이트를 해주는 방법으로 구현하면 된다.
두 번째 문제는
https://www.acmicpc.net/problem/20365
20365번: 블로그2
neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한
www.acmicpc.net
블로그2 문제이다.
아이디어는
1. 전부 B일 때 시작해서 for문으로 문자를 앞뒤로 비교해서 현재 문자가 R이고 그 전 문자가 B인 경우
2. 전부 R일 때 시작해서 for문으로 문자를 앞뒤로 비교해서 현재 문자가 B이고 그 전 문자가 R인 경우
위의 두 가지 중 최솟값을 출력하면 되는데
잘 구현하면 배열을 1번만 순회하고도 두가지 값을 비교해서 결과를 출력할 수 있다.
'Daily' 카테고리의 다른 글
Lv2. P-Stage 18 (0) 2022.04.14 Lv2. P-Stage 17 (0) 2022.04.13 Lv2. P-Stage 15 (0) 2022.04.10 Lv2. P-Stage 14 (0) 2022.04.08 Lv2. P-Stage 13 (0) 2022.04.07