본문 바로가기

머신러닝/[기타]

Pointwise vs Pairwise vs Listwise, Learning to Rank

CDAE 논문에 따르면, 추천 시스템에서 Loss function은 보통 러프하게 2가지로 분류된다고 합니다.

Point-wise 와 Pair-wise.

더 심오하게 들어가면, WARP와 같은 Position-aware Pair-wise 등 또 여러 갈래로 나뉘는 모양입니다만, 그렇습니다.

그런데, DERRD 논문을 보면 List-wise 의 개념도 존재합니다.

해서, 구글에 검색해보니, 요약된 글이 하나 있어, 이 참에 한 번 정리해보려 합니다.

다만, 기존 글은 16년도에 쓰인, 나름 옛날 글이라 몇 가지를 추가했으니 적당히 필터링해서 읽어주시면 감사하겠습니다.


우선, Point-wise, Pair-wise, List-wise loss 들은 무엇을 기준으로 구분되어지는지 생각해봅시다.

그건, 모델을 학습할 시에, Loss function이 한 번에 고려하는 아이템 숫자입니다.

이를 생각하면서, 하나하나 살펴보도록 합시다.

1. Point-wise approaches

Point-wise는 Loss function에서 한번에 하나의 아이템만 고려합니다.

하나의 Query(=User)가 들어왔을 때, 이에 대응하는 하나의 Item만 가져와서,

Score(User, Item) 를 계산하고, 이를 Label score와 비교해서 최적화시키는거지요.

이렇게 각각의 (User, Item) 별 점수를 모두 업데이트시켜주고,

이런 점수들을 내림차순으로 정렬한 뒤, 그 인덱스를 그대로 Rank의 개념으로 표현합니다.

이런 학습 방식은, Item과 Item 사이의 순서 관계를 무시하고, 그냥 독립적인 개체로써 학습시키고,

결과만 정렬한다는 것에서 단점이 보이는 듯 합니다.

다만, 굉장히 직관적인, 그리고 일반적인 Loss이기 때문에

기존에 존재하는 다양한 분류, 회귀 모델을 그대로 사용할 수 있다는 장점이 있습니다.

이러한 Loss function으로는 LSE 등이 있습니다.

2. Pair-wise approaches

Pair-wise는 Loss function에서 한번에 2개의 아이템을 고려합니다.

더 구체적으로는, 1개의 Positive item, 1개의 negative item을 고려합니다.

이런 Pos, Neg item pair 가 들어오면, Pos item > Neg item 이라는 Rank가 자연스럽게 형성되고,

이를 이용해 학습과정에서부터 Rank를 고려할 수 있게됩니다.

Point-wise와 달리 Item을 2개로 사용하고 있으니,

Score를 계산할 때도 (User, Item)이 아닌 (User, Pos Item, Neg Item)이 들어가게 될 테고,

때문에 데이터셋을 Triplet으로 미리 바꿔두는 과정이 필요하겠지요.

추가로, 저희는 Dataset 안에서 Pos item보다 Neg item이 훨씬 많은 비율을 차지하고 있다는 것을 압니다.

그럼 Triplet을 구성할 때, 모든 조합을 활용하게되면 같은 Pos item이 과도하게 많이, 중복해서 활용될 것이라는 점을 알 수 있는데,

이를 해결하기 위해 여러 Sampling 기법이 활용됩니다. 만 여기서 구체적인 기법은 다루지 않도록 하겠습니다.

이렇게 Rank를 미리 고려해서 학습을 하고, Rank로 평가를 하니

일반적으로는 Point-wise 보다 성능이 좋은 편입니다.

이러한 Loss function으로는 BPR, WARP, CLiMF 등이 있습니다.

3. List-wise approaches

List-wise는 Loss function에서 한번에 전체의 아이템을 고려합니다.

Pair-wise는 두 개 아이템간의 상대적인 Rank만 학습한다면,

이 친구는 전체 아이템간의 Rank를 학습하려 듭니다.

그게 쉽고, 잘되면 당연히 List-wise가 가장 좋은 Loss function이라고 생각이 드는데,

다른 방법에 비해 꽤나 복잡합니다.

이런 방법론의 예시로는 아래와 같은 2가지가 존재합니다.

  1. NDCG 등의 IR measure을 직접적으로 최적화 하는 방법론.
    • SoftRank, AdaRank
  2. 자신이 필요한 Rank의 특성을 이해하고, 새롭게 정의한 Loss를 최적화하는 방법론
    • ListNet, ListMLE

이런 알고리즘 자체에 대한 설명은, 길어질 수 있으니 다른 페이지를 빌려 진행하겠습니다.

더 생각해보면 이런 List-wise 접근법이 되기만한다면 가장 최고일 것이다- 하는 생각은 들지만

제한된 데이터를 이용해 이렇게 많은 내용을 모델이 다 배워나갈 수 있을까- 하는 생각도 듭니다.

그래서 DERRD 에서는, List-wise를 base로 하되, 진짜 모든 List를 최적화하려들지말고,

적절한 Top-N 개의 Items를 최적화시키려는 시도를 하였습니다.

Pair와 List 사이 적절한 협의점을 찾은 것 같은데, 굉장히 그럴듯해보입니다.

 

참고 자료: 링크