kakao / buffalo

TOROS Buffalo: A fast and scalable production-ready open source project for recommender systems
Apache License 2.0
575 stars 106 forks source link

LightFM Warp Comparison #29

Closed ummae closed 4 years ago

ummae commented 4 years ago

@ita9naiwa 이기, WARP 구현과 벤치마크를 추가했어요. 공유도 하고, 한가지 찜찜한 부분이 있어서 이슈 생성했는데요. 벤치마크를 수행해보니 BPRMF와의 수행시간이나 정확도 차이는 납득할 수 있는 반면에 LightFM 쪽이 정확도가 너무 낮게 나와서 애매하네요. 혹시 이상해보이는거 있나요?

https://github.com/kakao/buffalo/blob/dev/benchmark/accuracy_warp.md https://github.com/kakao/buffalo/blob/dev/benchmark/models.py#L337

validation 코드의 문제일까 싶기도 했는데, LightFM도 BPR 최적화로 실행하면 납득가능한 수치가 나오긴 합니다.

ita9naiwa commented 4 years ago

한번 확인해볼게요. 제가 구현할 때는 ml-100k,1m,20m에서 lightFM보다 대강 5퍼센트 정도 일관되게 좋았었습니다. 그리고 이 성능차이는 buffalo에서는 adam optimizer를 써서 생기는 것 같았어요.

저렇게 차이가 나는 건 이상하네요. 한번 확인해 볼게요.

ita9naiwa commented 4 years ago
  1. validation 부분에 오타가 있습니다. https://github.com/kakao/buffalo/blob/411aecdd3485721314748826fd1c438d8298143b/benchmark/models.py#L351-L363 no_components=kwargs.get('d')이 되야 할 것 같습니다.

  2. buffalo warp는 default regularization이 있고, epoch 100은 너무 큰 값인 것 같습니당.

이걸 수정해도 이유는 모르겠는데, 여전히 잘 되지 않네요...; buffalo/benchmark/test_accuracy.py 말고 따로 돌려봤을 때는 lightFM도 잘 됩니다. 버팔로는 scipy.sparse_matrix를 입력으로 받기 힘들어서 같은 데이터로 비교는 못 해봤습니다.

ummae commented 4 years ago

확인 고마워요. BPR로 돌리면 정상적인 수준의 정확도가 나와서 더 이상하네요. 제가 더 살펴보겠습니다.

ummae commented 4 years ago

@ita9naiwa 문제 수정했습니다. https://github.com/kakao/buffalo/commit/d07475706d47a403ff5f664ff25f22106dd9253c

https://github.com/kakao/buffalo/commit/d07475706d47a403ff5f664ff25f22106dd9253c#diff-8e34054f85758613e7b359c945ef4c8cR361

data를 두 번 전달해서 fit이 이상하게 호출된 것 같아요. 수정하고 정상적인 범주로 학습이 되는거 확인했습니다.

ummae commented 4 years ago

LightFM에 대한 BPRMF 퍼포먼스 측정도 다시 해서 교정했습니다. https://github.com/kakao/buffalo/commit/b5e862130700e3017b5ef4141e96f34dedcaf5f3

이슈 종료할께요.