AI

[AI] 레시피 추천 모델 만들기 9 - Inference (3) 정리

alsruds 2024. 10. 31. 19:11

1. 데이터셋 훈련이 끝났다

2024.10.16 - [AI] - [AI] 레시피 추천 모델 만들기 6 - RecBole 에 Datasets 훈련시키기

 

[AI] 레시피 추천 모델 만들기 6 - RecBole 에 Datasets 훈련시키기

지난 시간에 RecBole, RecBole-GNN 레포지토리 clone 했으니 이번엔 데이터셋을 연결해보겠다 준비한 데이터셋 : RecSysDatasets 에서 제공하는 Food 데이터셋준비한 데이터셋을 폴더에 넣어주자 - RecBole/data

alsrudalsrudalsrud.tistory.com

 

 

2. 추론 코드를 작성해야 한다 - run_inference.py

🐧 참고 문서 1 : https://hoon-bari.github.io/RS/Recbole

🐧 참고 문서 2 : https://mingchin.tistory.com/420

 

 

3. 코드 컴파일 사소한 오류 해결

🍁 오류 1 : IndexError
Traceback (most recent call last): File "C:\Users\alsrud\Downloads\Babal-Server\Babal-Server\RecBole\RecBole-GNN\run_inference.py", line 40, in <module> rating_pred[matrix[batch_user_index].toarray() > 0] = 0 IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
⛅ 오류 발생 원인 : RecBole 추천 시스템 추론 과정에서는 사용하고자 하는 모델의 full_sort_predict 함수를 이용한다. 나의 경우 RecBole/recbole/model/general_recommender/ngcf.py



여기서는 view(-1) : 1차원 배열을 반환하고 있는데, 나는 user_id, item_id 2차원 배열을 반환하려고 해서 인덱스 오류가 발생한 것이다
💡 오류 해결 방법 : 2차원 배열을 전달할 수 있도록 user_id, item_id 를 담은 interaction 객체 생성

 

🍁 오류 2 : RuntimeError
Traceback (most recent call last): File "C:\Users\alsrud\Downloads\Babal-Server\Babal-Server\RecBole\RecBole-GNN\run_inference.py", line 17, in <module> config, model, dataset, train_data, valid_data, test_data = load_data_and_model(args.model_path) File "c:\users\alsrud\downloads\babal-server\babal-server\recbole\recbole\quick_start\quick_start.py", line 263, in load_data_and_model model.load_state_dict(checkpoint["state_dict"]) File "C:\Users\alsrud\Downloads\Babal-Server\Babal-Server\venv\lib\site-packages\torch\nn\modules\module.py", line 2215, in load_state_dict raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format( RuntimeError: Error(s) in loading state_dict for NGCF: Missing key(s) in state_dict: "GNNlayers.0.linear.weight", "GNNlayers.0.linear.bias", "GNNlayers.0.interActTr ansform.weight", "GNNlayers.0.interActTransform.bias", "GNNlayers.1.linear.weight", "GNNlayers.1.linear.bias", "GNNla yers.1.interActTransform.weight", "GNNlayers.1.interActTransform.bias", "GNNlayers.2.linear.weight", "GNNlayers.2.linear.bias", "GNNlayers.2.interActTransform.weight", "GNNlayers.2.interActTransform.bias". Unexpected key(s) in state_dict: "GNNlayers.0.lin1.weight", "GNNlayers.0.lin1.bias", "GNNlayers.0.lin2.weight ", "GNNlayers.0.lin2.bias", "GNNlayers.1.lin1.weight", "GNNlayers.1.lin1.bias", "GNNlayers.1.lin2.weight", "GNNlayers .1.lin2.bias", "GNNlayers.2.lin1.weight", "GNNlayers.2.lin1.bias", "GNNlayers.2.lin2.weight", "GNNlayers.2.lin2.bias".
⛅ 오류 발생 원인 : RecBole 이 업데이트 되면서 변수명이 바뀐 것 같다 (ex. GNNlayers.0.lin1.weight → GNNlayers.0.linear.weight)
💡 오류 해결 방법 : state_dict 함수가 실행되는 파일에서 변수명을 수정해주는 코드를 추가했다 (module.py)
venv/Lib/site-packages/torch/nn/modules/module.py

 

 

4. 추론 코드 완성하기

📜 완성 코드 : 2024.10.29 - [AI] - [AI] 레시피 추천 모델 만들기 8 - Inference (2) user 기반, item 기반 추천 받기

1. user based 🌿 input : user_id

- 특정 user_id 가 좋아하는 item_id 를 기반으로 다른 사용자들의 item 을 추천해준다

2. item based 🌿 input : item_id

- 특정 item_id 에 대한 평가를 한 user_id 리스트를 기반으로 다른 item 을 추천해준다


 

성공 ^.^