Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LightFM Warp Comparison #29

Closed
ummae opened this issue Jul 2, 2020 · 5 comments
Closed

LightFM Warp Comparison #29

ummae opened this issue Jul 2, 2020 · 5 comments

Comments

@ummae
Copy link
Contributor

ummae commented Jul 2, 2020

@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
Copy link
Collaborator

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

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

@ita9naiwa
Copy link
Collaborator

  1. validation 부분에 오타가 있습니다.

    buffalo/benchmark/models.py

    Lines 351 to 363 in 411aecd

    def warp(self, database, **kwargs):
    from lightfm import LightFM
    opts = self.get_option('lightfm', 'warp', **kwargs)
    data = self.get_database(database, **kwargs)
    warp = LightFM(loss='warp',
    learning_schedule='adagrad',
    no_components=kwargs.get('num_workers'),
    max_sampled=100)
    elapsed, mem_info = self.run(warp.fit, data, data, **opts)
    if kwargs.get('return_instance'):
    return warp
    bpr = None
    return elapsed, mem_info

    no_components=kwargs.get('d')이 되야 할 것 같습니다.

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

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

@ummae
Copy link
Contributor Author

ummae commented Jul 11, 2020

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

@ummae
Copy link
Contributor Author

ummae commented Jul 11, 2020

@ita9naiwa 문제 수정했습니다. d074757

d074757#diff-8e34054f85758613e7b359c945ef4c8cR361

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

@ummae
Copy link
Contributor Author

ummae commented Jul 12, 2020

LightFM에 대한 BPRMF 퍼포먼스 측정도 다시 해서 교정했습니다.
b5e8621

이슈 종료할께요.

@ummae ummae closed this as completed Jul 12, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants