토픽모델링이란 문서의 집합에서 토픽을 추출하는 분석 기법이다. 이 기법은 특정 주제에 관한 문서에서는 특정 단어가 많이 등장할 것이라는 직관에서 시작된 기술이다.
ex) LDA(Latent Dirichlet Allocation), PLSA, LSA(Latent Semantic Analysis)
이 중에서 LDA(잠재 디리클레 할당)에 대해 공부해보고자 한다.
LDA는 주어진 각 문서가 어떤 토픽을 가지는지 확률 모형을 통해 토픽별 단어의 분포, 문서의 토픽별 분포를 디리클레 분포로 가정하고 표현한다.

문서가 1-3까지 총 3개가 존재할 때
문서1: 나는 추천을 공부한다
문서2: 나는 영화 아이언맨을 봤다
문서3: 추천을 통해 영화를 봤다
토픽의 개수 k=2로 선정 => 이때 토픽의 개수는 사용자가 직저 선정한다.
결과적으로 문서의 토픽별 분포, 토픽별 단어 분포가 나온다.
문서의 토픽별 분포
문서1: topic A 100%
문서2: topic B 100%
문서3: topic A 60%, topic B 40%
토픽별 단어 분포
topic A: 나는(10%), 추천을(40%), 공부한다(25%), 영화(5%), 아이언맨을(5%), 봤다(10%), 통해(5%) 등
LDA는 특정 주제에 관한 문서에서는 특정 단어가 자주 등장할 것이라는 가정으로 시작되었다. 따라서 문서들은 토픽들의 혼합으로 구성되어 있으며 토픽들은 확률 분포에 기반하여 단어들을 생성한다고 가정한다.
결론적으로 문서를 작성하기 위해 토픽을 고르고 선택한 토픽에 맞게 단어들을 선택하여 문서에 넣어 문서를 생성한다는 가정을 하고 있다.
LDA는 문서에서 단어의 순서는 신경쓰지 않기에 이 부분은 주의해야한다.
초기 문서의 토픽별 분포, 토픽별 단어 분포는 디리클레 분포에서 랜덤 추출된다. 하지만 학습 과정에서 실제 데이터에 맞추어 업데이트 되며 최종적으로 디리클레 분포의 형태를 따르도록 조정된다.
결과적으로 모든 문서 내의 단어를 학습하면 문서별 토픽 분포와 토픽별 단어의 분포가 디리클레 분포를 따른다.
토픽 개수인 k는 하이퍼파라미터로 사용자가 직접 선정해주어야 한다. 이러한 최적의 k를 구하기 위한 방법으로 perplexity 지표를 주로 사용한다.
perplexity는 확률 모델이 결과를 얼마나 잘 예측하는지를 의미한다.

일반적으로 perplexity가 낮은 k값을 최적의 토픽 수로 정하는 것이 일반적이지만 perplexity가 낮다고 해서 해당 모델의 결과 해석이 용이하다는 걸 의미하지 않는다. 오히려 결과를 보면서 토픽 수를 직접 정하는 방법이 더 괜찮은 경우도 존재한다.
LDA를 추천에 적용한다면
문서 - 유저, 단어 - 아이템으로 두고 LDA 모델을 학습시키면 유저는 토픽 분포를 갖게 된다.
ex) 유저 1: A 70%, B 30%
유저 2: B 100%
topic A: item1 20%, item2 50%, item3 30%
topic B: item1 70%, item2 20%, item3 10%
유저 1이 topic A에 대한 관심이 높다면 해당 토픽에 속한 연관도 높은 아이템인 item2를 추천
참고 사이트
https://wikidocs.net/30708
https://medium.com/musinsa-tech/%EB%AC%B4%EC%8B%A0%EC%82%AC%EA%B0%80-%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC%EC%88%8D-%EC%B6%94%EC%B2%9C%EC%9D%84-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-a45b219685ea
가짜연구소 4기 - 추천시스템 톺아보기 스터디
추천시스템을 공부하다보면 NLP와 함께 공부해야 할 내용이 많다. 해당 글도 추천시스템으로 넣을까 NLP로 넣을까 고민했지만 결과적으로 NLP로 포함시켰다. LDA를 활용한 추천시스템 실습에 대한 글을 추천시스템으로 넣을 계획이다.