오답노트

[NLP/RS] Negative Sampling 본문

Python/DL

[NLP/RS] Negative Sampling

권멋져 2023. 3. 3. 23:33

Negative Sampling

네거티브 샘플링은 다중 분류 문제에서 이진 분류 문제로 바꾸는 것에 초점을 준다.

다중 분류에서 이진 분류로 문제를 바꾸므로 임베딩 벡터 값을 업데이트 시킬 때, 원하는 벡터 값만 업데이트 한다. 이 과정에서 연산량이 크게 줄어든다.

 

NLP에서의 Negative Sampling

Skip-gram에서 Negative Sampling를 사용할 수 있다.

Skip-gram은 주변 단어를 예측하기 위해 중심 단어를 활용하는 모델이다. 즉, Skip-gram은 중심 단어를 input으로 주변 단어들 중 1개를 맞추는 다중 분류 문제인 것이다. 하지만 Skip-gram에 Negative Sampling을 사용하여 이진 문제로 바꿀 수 있다.

 

위는 기존의 Skip-gram의 모델을 도식화했다. 그림과 같이 cat(중심 단어)을 입력하면 여러 단어 중 sat(주변 단어)을 예측하게 된다.

 

위는 Skip-gram에 Negative Sampling을 사용 모델을 도식화했다. 그림에서 cat(중심 단어)과 sat(주변 단어)을 둘 다 입력하면 cat의 주변 단어가 sat이 맞는지 틀린지 이진 분류로 변하게 된다.

위 그림은 Negative Sampling의 결과다. 왼쪽 테이블은 cat의 주변 단어의 조합에는 레이블을 1로 입력했다. 여기에 cat의 주변 단어가 아닌 임의의 단어를 추가해 레이블에 0으로 입력한다. 이런식으로 Negative Sampling을 진행한다면, cat의 주변 단어들에 더 집중해서 학습하게 될 것이다.

 

RS에서의 Negative Sampling

NLP에서의 Negative Sampling의 아이디어를 그대로 사용하면 RS에서도 연산량을 충분히 줄일 수 있다.

사용자를 중심 단어, 아이템을 주변 단어라고 생각했을 때, 사용자가 사용한 아이템은 레이블을 1로 둘 수 있고, 사용자가 사용하지 않은 아이템 중에 임의의 아이템을 추가해 레이블에 0으로 입력하면 아이템-사용자의 Negative Sampling 완성 된다.

그림으로 살펴보면 다음과 같다.

위 그림에서 왼쪽 테이블은 A라는 사용자가 사용했던 아이템들이고 사용했으므로 레이블에 1로 입력했다.

이를 Negative Sampling을 통해 사용자 A가 사용하지 않았던 아이템들 중 임의의 아이템을 입력하고 레이블에 0으로 입력한다. 이렇다면 NLP에서와 마찬가지로 사용자가 이용했던 아이템에 더 집중해서 학습학게 될 것이다.

'Python > DL' 카테고리의 다른 글

[RS] Neural Collaborative Filtering 정리  (0) 2023.03.05
[DL] Embedding  (0) 2023.03.04
[밑딥] 합성곱 신경망 (CNN)  (0) 2023.02.27
[밑딥] 학습 관련 기술들  (0) 2023.02.27
[밑딥] 오차역전파법  (0) 2023.02.27