레퍼런스 삼았던 코드에서 랜덤시드가 고정이 안되어있었다.
이를 적용하니 실험 결과가 달라졌다.
레퍼런스 코드에서 np.random을 사용하면서 시드를 고정하지 않는 부분을 확인했다.
def sample_negatives(self, item_sequence):
negatives = self.all_items[~np.isin(self.all_items, item_sequence)]
if self.full_negative_sampling:
negatives = np.random.choice(
negatives,
size=self.num_negatives * (len(item_sequence) - 1),
replace=True,
)
negatives = negatives.reshape(len(item_sequence) - 1, self.num_negatives)
else:
negatives = np.random.choice(
negatives, size=self.num_negatives, replace=False
)
return negatives
위의 코드 외에도 여러 부분에 있어 np.random을 사용하면서 seed가 고정이 되지 않았다.
실험의 재현성을 위해 np.random.seed(42)
로 고정 후 진행하기로 했다.
고정 전 hitrate@10은 16epoch일때 0.194140625
고정 후 hitrate@10은 16epoch일때 0.19814453125로 변화가 있다.
고정 후 재 실험에서는 변화가 없다.