word2vec : 네거티브 샘플링 (일반 용어)?
아래 논문을 읽고 있는데 네거티브 샘플링의 개념을 이해하는 데 문제가 있습니다.
http://arxiv.org/pdf/1402.3722v1.pdf
누구든지 도와 주시겠습니까?
의 개념은 word2vec
텍스트에서 서로 가깝게 (서로의 맥락에서) 나타나는 단어에 대한 벡터 간의 유사성 (내적)을 최대화하고 그렇지 않은 단어의 유사성을 최소화하는 것입니다. 연결하는 논문의 방정식 (3)에서 지수를 잠시 무시하십시오. 당신은
v_c * v_w
-------------------
sum(v_c1 * v_w)
분자는 기본적으로 단어 c
(컨텍스트)와 w
(대상) 단어 사이의 유사성 입니다. 분모는 다른 모든 컨텍스트 c1
와 대상 단어 의 유사성을 계산합니다 w
. 이 비율을 최대화하면 텍스트에서 더 가깝게 나타나는 단어가 그렇지 않은 단어보다 더 유사한 벡터를 갖게됩니다. 그러나 많은 컨텍스트가 있기 때문에이를 계산하는 것은 매우 느릴 수 있습니다 c1
. 네거티브 샘플링은이 문제를 해결하는 방법 중 하나입니다. 몇 가지 컨텍스트 c1
를 무작위로 선택하기 만하면 됩니다. 최종 결과는 경우 cat
의 맥락에 나타나는 food
, 다음의 벡터 food
의 벡터에 더 비슷 cat
의 벡터 이상 (이들의 내적에 의해 측정 됨) 몇몇 다른 무작위로 선택된 단어(예를 들어 democracy
, greed
, Freddy
) 대신 언어의 다른 모든 단어 . 이것은 word2vec
훈련 을 훨씬 더 빠르게 만듭니다 .
Softmax (현재 대상 단어와 유사한 단어를 결정하는 함수)를 계산 하는 것은 일반적으로 매우 큰 V (분모)의 모든 단어를 합산해야하기 때문에 비용이 많이 듭니다 .
무엇을 할 수 있습니까?
소프트 맥스 를 근사화 하기 위해 다양한 전략이 제안되었습니다 . 이러한 접근 방식은 소프트 맥스 기반 및 샘플링 기반 접근 방식 으로 그룹화 할 수 있습니다 . Softmax 기반 접근 방식은 softmax 계층을 그대로 유지하지만 효율성을 향상시키기 위해 아키텍처를 수정하는 방법입니다 (예 : 계층 적 소프트 맥스 ). 반면에 샘플링 기반 접근 방식은 소프트 맥스 레이어를 완전히 없애고 대신 소프트 맥스에 근접하는 다른 손실 함수를 최적화합니다. 네거티브 샘플링).
Word2vec의 손실 함수는 다음과 같습니다.
다음으로 분해 될 수있는 로그 :
몇 가지 수학 및 그라데이션 공식을 사용하면 (자세한 내용은 3 참조 ) 다음과 같이 변환됩니다.
보시다시피 이진 분류 작업으로 변환되었습니다 (y = 1 포지티브 클래스, y = 0 네거티브 클래스). 이진 분류 작업을 수행하기 위해 레이블이 필요하므로 모든 컨텍스트 단어 c 를 참 레이블 (y = 1, 양성 샘플)로 지정하고 말뭉치에서 무작위로 선택된 k 를 거짓 레이블 (y = 0, 음성 샘플)로 지정합니다.
다음 단락을보십시오. 대상 단어가 " Word2vec " 라고 가정합니다 . 3 창, 우리의 상황에 맞는 단어는 : The
, widely
, popular
, algorithm
, was
, developed
. 이러한 문맥 단어는 긍정적 인 레이블로 간주됩니다. 부정적인 라벨도 필요합니다. 우리는 무작위로 코퍼스에서 일부 단어를 선택 ( produce
, software
, Collobert
, margin-based
, probabilistic
) 음의 샘플로 고려합니다. 우리가 말뭉치에서 무작위로 몇 가지 예를 뽑은이 기법을 음성 샘플링이라고합니다.
참조 :
- (1) C. Dyer, "노이즈 대비 추정 및 네거티브 샘플링에 대한 참고 사항" , 2014
- (2) http://sebastianruder.com/word-embeddings-softmax/
여기 에 네거티브 샘플링에 대한 튜토리얼 기사를 썼습니다 .
네거티브 샘플링을 사용하는 이유는 무엇입니까? -> 계산 비용 절감
바닐라 Skip-Gram (SG) 및 Skip-Gram 네거티브 샘플링 (SGNS)의 비용 함수는 다음과 같습니다.
p(w_t+j|w_t)
SG 의 확률 분포 는 V
다음을 사용하여 말뭉치의 모든 어휘에 대해 계산 됩니다.
V
Skip-Gram 모델을 학습 할 때 쉽게 수만을 초과 할 수 있습니다. 확률은 계산 V
시간이 필요 하므로 계산 비용이 많이 듭니다. 또한 분모의 정규화 인자에는 추가 V
계산이 필요합니다 .
반면 SGNS의 확률 분포는 다음과 같이 계산됩니다.
c_pos
는 양의 단어에 대한 단어 벡터이고 출력 가중치 행렬의 W_neg
모든 K
음의 샘플에 대한 단어 벡터입니다 . SGNS를 사용하면 확률 은 일반적으로 5 ~ 20 사이 인 K + 1
횟수 만 계산하면됩니다 K
. 또한 분모의 정규화 인자를 계산하기 위해 추가 반복이 필요하지 않습니다.
SGNS를 사용하면 각 학습 샘플에 대해 일부 가중치 만 업데이트되는 반면 SG는 각 학습 샘플에 대해 수백만 개의 가중치를 모두 업데이트합니다.
SGNS는이를 어떻게 달성합니까? -> 다중 분류 작업을 이진 분류 작업으로 변환하여.
With SGNS, word vectors are no longer learned by predicting context words of a center word. It learns to differentiate the actual context words (positive) from randomly drawn words (negative) from the noise distribution.
In real life, you don't usually observe regression
with random words like Gangnam-Style
, or pimples
. The idea is that if the model can distinguish between the likely (positive) pairs vs unlikely (negative) pairs, good word vectors will be learned.
위 그림에서 현재 양의 단어 컨텍스트 쌍은 ( drilling
, engineer
)입니다. K=5
네가티브 샘플되고 임의로 그린 로부터 잡음 분포 : minimized
, primary
, concerns
, led
, page
. 모델이 학습 샘플을 반복함에 따라 양수 쌍의 확률이 출력 p(D=1|w,c_pos)≈1
되고 음수 쌍의 확률 이 출력되도록 가중치가 최적화 됩니다 p(D=1|w,c_neg)≈0
.
참고 URL : https://stackoverflow.com/questions/27860652/word2vec-negative-sampling-in-layman-term
'Development Tip' 카테고리의 다른 글
더 효율적인 것 : System.arraycopy 또는 Arrays.copyOf? (0) | 2020.10.28 |
---|---|
Maven이 Java 1.8을 인식하도록 할 수 없습니다. (0) | 2020.10.28 |
Visual Studio에서 명명 규칙 위반 메시지를 제거하는 방법은 무엇입니까? (0) | 2020.10.28 |
Ruby에서 "콜백"을 구현하는 방법은 무엇입니까? (0) | 2020.10.28 |
NameValueCollection을 통해 C # 반복 (0) | 2020.10.28 |