T아카데미 추천시스템 강의를 듣고 작성한 리뷰 포스팅입니다.
tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=194
기존 비즈니스에서는 파레토의 법칙에 따라 상위 20%의 고객에게 집중했지만,
인터넷의 발전에 따라 롱테일의 법칙이 등장하였다.
롱테일의 법칙은 하위80%가 상위20%의 가치보다 크다는 법칙이다.
파레토의법칙 | 롱테일의 법칙 |
상위 20% >> 하위 80% | 상위 20% << 하위 80% |
이러한 이유로 온라인을 기반으로 하는 아마존, 넷플릭스는 롱테일의 법칙에 더 집중한다고 한다.
연관분석의 예시 : 월마트) 맥주 - 기저귀
평가지표
여러가지 유사도함수
유클리안 유사도
유클리디안 유사도 = 1 / (유클리디안 거리 + 1e-05)
[장점]
계산하기가 쉬움
[단점]
p와 q의 분포가 다르거나 범위가 다른 경우에 상관성을 놓침
코사인 유사도
: 두 특성 벡터간의 유사 정도를 코사인 값으로 표현, -1에서 1까지의 값을 가진다.
[장점]
벡터의 크기가 중요하지 않은 경우에 거리를 측정하기 위한 메트릭으로 사용한다.
(예 : 문서내에서 단어의 빈도수 : 문서내에서 얼마나 나왔는지라는 비율를 확인하기 때문에 상관없음. )
[단점]
벡터의 크기가 중요한 경우에 대해서 잘 작동하지 않는다
피어슨 유사도
: 두 벡터의 상관계수를 의미한다.
TF-IDF
TF-IDF를 사용하는 이유
-
Item이라는 컨텐츠를 벡터으로 "Feature Extract" 과정을 수행해준다.
-
빈도수를 기반으로 많이 나오는 중요한 단어들을 잡아준다. 이러한 방법을 Counter Vectorizer 라고한다.
-
하지만, Counter Vectorizer는 단순 빈도만을 계산하기에
조사, 관사처럼 의미는 없지만 문장에 많이 등장하는 단어들도 높게 쳐주는 한계가 있다.
이러한 단어들에는 패널티를 줘서 적절하게 중요한 단어만을 잡아내는 게 TF-IDF 기법이다.
(출처: chan-lab.tistory.com/24)
[장점]
직관적인 해석이 가능하다.
[단점]
대규모 말뭉치를 다룰 때 메모리상의 문제가 발생한다.
- 높은 차원을 가짐 , 매우 sparse한 형태의 데이터임
- 예) 100만개의 문서를 다루는 경우 : 100만개의 문서에 등장한 모든 단어를 추출해야하고 이때 단어의 수는 1문서당 새로운 단어가 10개면, 1000만개정도의 말뭉치가 형성됨. 즉, 100만 x 1000만의 매트릭스가 형성
- 한번에 학습 데이터 전체를 진행함
- 큰 작업을 처리하기 어려움
- GPU와 같은 병렬처리를 기대하기 힘듬
- 학습을 통해서 개선하기가 어려움
위에서 처럼 TF-IDF는 모든 말뭉치를 사용하기때문에 메모리가 많이 사용된다.
이러한 문제를 해결하기 위해 신경망 기반의 Word2Vec사용한다.
말뭉치의 단어들을 의미기반으로 바꾸고
한번에 학습이 아닌 배치 기반의 딥러닝에 도움을 받아 학습
Word2Vec
[정의] Word2Vec은 단어간 유사도를 반영하여 단어를 벡터로 바꿔주는 임베딩 방법론입니다.
원-핫벡터 형태의 sparse matrix 이 가지는 단점을 해소하고자 저차원의 공간에 벡터로 매핑하는 것이 특징입니다. Word2Vec은 “비슷한 위치에 등장하는 단어들은 비슷한 의미를 가진다“ 라는 가정을 통해서 학습을 진행합니다. 저차원에 학습된 단어의 의미를 분산하여 표현하기에 단어 간 유사도를 계산할 수 있습니다.
추론기반의 방법 (Word2Vec) 추론
-> 주변 단어(맥락)이 주어졌을 때 “?”에 무슨 단어(중심단어)가 들어가는지를 추측하는 작업
예) you say goodbye and I say hello.
알고리즘 ( CBOW , Skip-Gram)
CBOW는 주변에 있는 단어들을 가지고, 중간에 있는 단어들을 예측하는 방법입니다.
반대로, Skip-Gram은 중간에 있는 단어로 주변 단어들을 예측하는 방법입니다.
일반적으로 Skip-Gram가 CBOW보다 많이 사용한다고 합니다.
그 이유는 Skip-Gram이 성능이 더 좋고, 실제 논문에서 결과 차이가 크기 때문입니다.
CBOW 알고리즘
- One Hot Vector 형태의 입력값을 받는다.
You -> [Say] 예측 - Goodbye -> [Say] 예측
주변 단어 : 주변에 있는 단어 (you, goodbye)
중심 단어 : 중간에 있는 단어 (say)
윈도우 크기 : 주변을 몇 칸까지 볼 지에 대한 크기(1)
만일, 윈도우 크기가 2이면 you, goodbye, and를 통해서 [Say]를 예측한다. - One Hot Vector 형태의 입력값을 Win과 곱
- Hidden state의 값을 W_out과 곱해서 Score를 추출한다.
- Score에 Softmax를 취해서 각 단어가 나올 확률을 계산한다.
- 정답과 Corss Entropy Loss 를 계산
- 계산한 Loss를 가지고 Backpropagation 과정을 통해서 Weight를 업데이트
- 위의 과정을 다른 문맥에 대해서도 수행
Skip-Gram 알고리즘
- One Hot Vector 형태의 입력값을 받는다. - [say]-> [you] 예측 - [say]-> [goodbye] 예측 - 주변 단어 : 주변에 있는 단어 (you, goodbye) - 중심 단어 : 중간에 있는 단어 (say) - 윈도우 크기 : 주변을 몇 칸까지 볼 지에 대한 크기 (1), 만일, 윈도우 크기가 2이면 [say]를 통해 you, goodbye, and를 예측
- One Hot Vector 형태의 입력값을 Win과 곱
- Hidden state의 값을 W_out과 곱해서 Score를 추출한다.
- Score에 Softmax를 취해서 각 단어가 나올 확률을 계산한다.
- 정답과 Corss Entropy Loss 를 계산
- 5에서 계산한 Loss를 가지고 Backpropagation 과정을 통해서 Weight를 업데이트
- 위의 과정을 다른 문맥에 대해서도 수행
'2021 > 추천' 카테고리의 다른 글
내가 보려고 정리하는 [A/B 테스트] (0) | 2021.02.01 |
---|
댓글