Closed kimcando closed 2 years ago
저도 이 부분이 궁금해서 찾아보았는데, Skip-gram이 CBOW보다 semantic 성능이 높은 이유에 대해서는 아래내용으로 설명될 수 있을 것 같습니다. 예를 들어 'The boy is going to school.'을 context로 두고 CBOW와 Skip-gram을 실행하면 input과 output이 다음과 같이 구성된다고 합니다.
즉 CBOW 같은 경우는 한 단어에 대해 한 번 예측하고 학습하는 반면에, Skip-gram은 기준 단어로부터 여러 문맥의 단어를 예측 및 학습하기 때문에 한 단어를 여러번 예측 시도하고 배우게 됩니다. 그런 의미에서 Skip-gram이 전반적인 성능이 더 좋은 것 같습니다.
또한 semantic에 대해서는 CBOW는 문장의 각 단어와 예측 단어와의 차이를 보기 때문에 예측 단어를 제외한 단어들끼리의 연관성을 학습하지는 않는 것 같은데, Skip-gram은 한 단어로 문장의 다른 단어들을 예측하기 때문에 그 한 단어를 통해 문장의 다른 단어들 간의 연결점을 간접적으로라도 학습하는 것이 아닌가 하는 생각이 들었습니다. 그래서 문장의 의미적인 부분이나 문장에 같이 나올 확률이 높은 의미적 유사성이 높은 단어들을 더 잘 예측하는 것이라고 생각을 해보았습니다. ( 참고 : 논문 이미지 )
반면에 syntactic(문법적) 유사성이 높은 단어들은 대부분 한 문장에 나오는 경우가 별로 없기 때문에(big, biggest / go, went) 비교적 성능이 좀 떨어지지 않았나 하는 생각이 들었습니다.
제 추측이 많이 들어간 설명이라서..혹시 다른 의견 있으시면 말해주시면 감사하겠습니다! 이미지 출처 : https://wooono.tistory.com/244
추가적으로, skip-gram이 CBOW보다 전반적인 성능이 높은 이유를 back propagation 과정에서 추측해 볼 수 있습니다.
데이터를 feed하는 관점에서는 주변 단어 여러개를 사용해 단어 1개를 예측하는 CBOW가 단어 1개로 여러 단어를 예측하는 skip-gram보다 성능이 더 좋을 것 같습니다. 하지만, gradient flow 관점에서 보면 CBOW는 중심 단어 1개의 gradient를 주변 4개의 단어로 flow하는 반면에, skip-gram은 단어 4개의 gradient를 중심 단어로 flow합니다. 이런 관점에서 skip-gram의 전반적인 성능이 더 좋은 것 같습니다.
논문 4.3 section 3번째 문단입니다.
CBOW는 주변 단어를 참고해서 현재 단어를 예측하고, skip-gram은 현재 단어로 주변 단어를 예측하는 방식으로 학습되는데요. 이런 학습 방식의 syntactic, semantic 테스크의 성능 차이로 이어지는 것일까요?