T아카데미에서 오픈된 토크ON세미나 강연 동영상을 보고 정리해보았다.
Word2Vec
- TF-IDF와 같은 통계기반의 방법의 세 가지 문제점을 해결하기 위해 제시된 모델
- 통계기반의 방법의 단점
- 대규모 말뭉치를 다룰 때 메모리상의 문제가 발생 : 높은 차원을 갖고, 매우 sparse한 형태의 데이터
- 한번에 학습 데이터 전체를 진행함 : 큰 작업을 처리하기 어렵고, GPU와 같은 병렬처리를 기대하기 힘들다.
- 학습을 통해서 개선하기가 어렵다.
- 통계기반의 방법의 단점
- 추론기반의 방법 (Word2Vec)
- 추론 : 주변 단어(맥락)이 주어졌을 때 "?"에 무슨 단어(중심단어)가 들어가는지를 추측하는 작업
- CBOW 모델 : 앞 뒤 단어로 가운데 단어를 유추할 수 있을지 ( you ? goodbye and I say hello. )
- skip-gram 모델 : 가운데 단어를 통해 앞 뒤 단어를 유추할 수 있을지 ( ? say goodbye and I say hello. )
- 추론 : 주변 단어(맥락)이 주어졌을 때 "?"에 무슨 단어(중심단어)가 들어가는지를 추측하는 작업
- Word2Vec은 단어간 유사도를 반영하여 단어를 벡터로 바꿔주는 임베딩 방법론이다. 원-핫벡터 형태의 sparse matrix이 가지는 단점을 해소하고자 저차원의 공간에 벡터로 매핑하는 것이 특징이다. Word2Vec은 '비슷한 위치에 등장하는 단어들은 비슷한 의미를 가진다' 라는 가정을 통해서 학습을 진행한다. 저차원에 학습된 단어의 의미를 분산하여 표현하기에 단어 간 유사도를 계산할 수 있다.
추천시스템에서는 단어를 구매 상품으로 바꿔서 구매한 패턴에 Word2Vec을 적용해서 비슷한 상품을 찾을 수 있다.
Word2Vec - CBOW
- 주변에 있는 단어들을 가지고, 중간에 있는 단어들을 예측하는 방법이다.
- you ? goodbye and I say hello.
- 주변 단어 : 주변에 있는 단어 (you, goodbye)
- 중심 단어 : 중간에 있는 단어 (? = say)
- 윈도우 크기 : 주변을 몇 칸까지 볼 지에 대한 크기 (1)
[알고리즘]
1. One Hot Vetor 형태의 입력값을 받는다.
2. One Hot Vector 형태의 입력값을 W_in (initial Weight 적용)과 곱한다. W_in의 평균 낸 것이 은닉층.
3. Hidden state의 값을 W_out과 곱해서 Score를 추출한다.
4. Score에 Softmax를 취해서 각 단어가 나올 확률을 계산한다.
5. 정답과 Cross Entropy Loss를 계산한다.
6. 5에서 계산한 Loss를 가지고 Backpropagation 과정을 통해서 Weight를 업데이트한다. (softmax의 pi - yi 공식 & learning_rate)
7. 위의 과정을 다른 문맥에 대해서도 수행
Word2Vec - skip-gram
- 중간에 있는 단어들을 가지고, 주변에 있는 단어들을 예측하는 방법이다.
- skip-gram이 CBOW보다 성능이 더 좋고, skip-gram을 많이 사용한다. (알고리즘은 비슷하다)
- skip-gram이 더 어려운 딥러닝 task를 진행한다.
- ? say ? and I say hello.
- 주변 단어 : 주변에 있는 단어 (you, goodbye)
- 중심 단어 : 중간에 있는 단어 (? = say)
- 윈도우 크기 : 주변을 몇 칸까지 볼 지에 대한 크기 (1)
[알고리즘]
1. One Hot Vector 형태의 입력값을 받는다.
2. One Hot Vector 형태의 입력값을 W_in과 곱
3. Hidden state의 값을 W_out과 곱해서 Score를 추출한다.
4. Score에 Softmax를 취해서 각 단어가 나올 확률을 계산한다.
5. 정답과 Cross Entropy Loss를 계산한다. (W_out이 여러개이므로, summation을 해줌)
6. 5에서 계산한 Loss를 가지고 Backpropagation 과정을 통해서 Weight를 업데이트한다.
7. 위의 과정을 다른 문맥에 대해서도 수행한다.
컨텐츠 기반 모델
[장점]
- 협업필터링은 다른 사용자들의 평점이 필요한 반면에, 자신의 평점만을 가지고 추천시스템을 만들 수 있다.
- item의 feature를 통해서 추천을 하기에 추천이 된 이유를 설명하기 용이하다.
- 사용자가 평점을 매기지 않은 새로운 item이 들어올 경우에도 추천이 가능하다.
(item들어올 때마다 임베딩 값 계산해서 유사도 구하면 되기 때문에 가능.)
[단점]
- Item의 feature을 추출해야 하고 이를 통해서 추천하기때문에 제대로 feature을 추출하지 못하면 정확도가 낮다. 그렇기에 Domain Knowledge가 분석시에 필요할 수도 있다. - 데이터가 충분해야 한다.
- 기존의 item과 유사한 item위주로만 추천하기에 새로운 장르의 item을 추천하기 어렵다.
- 새로운 사용자에 대해서 충분한 평점이 쌓이기 전까지는 추천하기 힘들다.
[실습 링크]
https://www.kaggle.com/chocozzz/00-word2vec-1
https://github.com/yoonsungsong/TIL/blob/main/RecommenderSytem/Word2Vec.ipynb
Reference :
https://www.youtube.com/watch?v=3jfHP0Rq1Gg&t=727s
'Data Analysis > Recommender System' 카테고리의 다른 글
[Recommender System] 5. 평가함수 (Accuracy, MAP, NDCG) (0) | 2021.11.08 |
---|---|
[Recommender System] 4. 협업 필터링 (KNN, SGD, ALS) (0) | 2021.11.08 |
[Recommender System] 2. 컨텐츠 기반 모델 (유사도 함수, TF-IDF) (0) | 2021.11.06 |
[Recommender System] 1.추천시스템의 이해 (연관분석, Apriori, FP-Growth) (0) | 2021.11.04 |