[NLP] LDA(잠재 디리클레 할당)

연수·2024년 3월 16일

NLP

목록 보기
1/1
post-thumbnail

토픽모델링이란?

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

LDA란?

LDA는 주어진 각 문서가 어떤 토픽을 가지는지 확률 모형을 통해 토픽별 단어의 분포, 문서의 토픽별 분포를 디리클레 분포로 가정하고 표현한다.

  • 디리클레 분포란?
    • 연속 확률분포(ex. 키, 몸무게처럼 연속적인 값으로 이루어진 분포)
    • k차원의 실수 벡터 중 벡터의 요소가 모두 양수이며 모든 요소를 더한 값이 1인 경우에 대해 확률값이 정의되는 분포이다.

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는 특정 주제에 관한 문서에서는 특정 단어가 자주 등장할 것이라는 가정으로 시작되었다. 따라서 문서들은 토픽들의 혼합으로 구성되어 있으며 토픽들은 확률 분포에 기반하여 단어들을 생성한다고 가정한다.
결론적으로 문서를 작성하기 위해 토픽을 고르고 선택한 토픽에 맞게 단어들을 선택하여 문서에 넣어 문서를 생성한다는 가정을 하고 있다.

  1. 문서에 사용할 단어의 개수(N)를 선정한다.
  2. 문서를 작성하기 위해 topic 분포를 확률 분포에 기반하여 고른다.
    ex) topic A 60%, topic B 40%
  3. 아래 과정을 반복하면서 단어 N개를 추출한다.
    a. 문서의 토픽 분포로부터 토픽 추출 => A 토픽 선정
    b. 선택한 토픽의 단어 확률 분포로부터 단어 하나를 골라서 문서에 넣는다.
    ex) topic A: 나는(10%), 추천을(40%), 공부한다(25%), 영화(5%), 아이언맨을(5%), 봤다(10%), 통해(5%) => 추천을(40%) 선택

LDA는 문서에서 단어의 순서는 신경쓰지 않기에 이 부분은 주의해야한다.

LDA 생성 과정

초기 문서의 토픽별 분포, 토픽별 단어 분포는 디리클레 분포에서 랜덤 추출된다. 하지만 학습 과정에서 실제 데이터에 맞추어 업데이트 되며 최종적으로 디리클레 분포의 형태를 따르도록 조정된다.

  1. 토픽 개수 k를 선정한다.
    • k개의 토픽은 A 60%, B 40% 이런식으로 모든 문서에 대해 분포되어 있다.
  2. 문서에 있는 단어를 k개 중 하나의 토픽에 랜덤으로 할당한다.
    • 동일한 단어가 한 문서에 두 번 이상 등장한다면 각 단어는 서로 다른 토픽에 할당될 수 있다.
  3. 각 문서의 개별 단어에 대해 해당 단어를 제외한 나머지 단어는 올바른 토픽에 할당되었다고 가정하고 해당 단어에 대한 토픽을 재할당한다.

결과적으로 모든 문서 내의 단어를 학습하면 문서별 토픽 분포와 토픽별 단어의 분포가 디리클레 분포를 따른다.

최적의 토픽 개수 k를 구하는 방법

토픽 개수인 k는 하이퍼파라미터로 사용자가 직접 선정해주어야 한다. 이러한 최적의 k를 구하기 위한 방법으로 perplexity 지표를 주로 사용한다.
perplexity는 확률 모델이 결과를 얼마나 잘 예측하는지를 의미한다.

일반적으로 perplexity가 낮은 k값을 최적의 토픽 수로 정하는 것이 일반적이지만 perplexity가 낮다고 해서 해당 모델의 결과 해석이 용이하다는 걸 의미하지 않는다. 오히려 결과를 보면서 토픽 수를 직접 정하는 방법이 더 괜찮은 경우도 존재한다.

LDA를 추천에!

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를 활용한 추천시스템 실습에 대한 글을 추천시스템으로 넣을 계획이다.

profile
하고 싶은건 다 하자 👻

0개의 댓글