강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

강현욱님의 프로필 이미지
강현욱

작성한 질문수

모두의 한국어 텍스트 분석과 자연어처리 with 파이썬

0202 KLUE 비음수 행렬 분해(Non-Negative Matrix Factorization, NMF) 토픽모델링

Component 수는 어떻게 지정을 해야 할까요?

작성

·

15

0

LDA나 NMF 에서 component 수를 어떤 것을 참고해서 최적의 수를 찾을 수 있을까요?

군집에서 엘보우플롯이나, 실루엣 스코어를 참고했는데, 혹시 이렇게 참고할 만한 것이 있을까 궁금합니다.

답변 2

0

박조은님의 프로필 이미지
박조은
지식공유자

안녕하세요!

LDA나 NMF에서 최적의 컴포넌트 수(토픽의 개수, K)를 찾는 방법에 대해 질문해주셨네요.

토픽 모델링에도 비슷한 정량적 지표들이 있으며, 가장 널리 사용되는 것은 'Perplexity'와 'Coherence Score' 입니다.

하지만 군집 분석과 마찬가지로, 이 지표들이 항상 정답을 알려주는 것은 아니며, 최종적으로는 사람이 직접 토픽의 품질을 보고 판단하는 정성적 평가가 매우 중요합니다.

 

1. 정량적 평가 지표 (Quantitative Metrics)

가. Coherence Score (응집도 점수)

Coherence Score는 생성된 토픽이 얼마나 의미적으로 일관성 있는지를 측정하는 지표입니다. 즉, 한 토픽 내에 등장하는 상위 단어들이 서로 얼마나 연관성이 높은지를 계산합니다.

  • 해석: 점수가 높을수록 의미적으로 일관된, 사람이 해석하기 좋은 토픽이 생성되었음을 의미합니다.

  • 사용법:

    1. 다양한 K 값 (예: 5, 10, 15, ..., 100)에 대해 LDA/NMF 모델을 각각 학습시킵니다.

    2. 각 모델에 대해 Coherence Score를 계산합니다.

    3. K 값에 따른 Coherence Score를 그래프로 그립니다.

    4. 그래프에서 점수가 가장 높게 나타나는 지점(Peak)이나, 점수가 급격히 꺾이며 안정화되는 지점을 최적의 K 후보로 선택합니다.

  • 종류: C_v, Umass, C_uci, C_npmi 등 여러 계산 방식이 있으며, 일반적으로 C_v가 사람의 판단과 가장 유사한 경향을 보여 많이 사용됩니다. Python의 gensim 라이브러리에서 쉽게 계산할 수 있습니다.

실루엣 스코어와의 유사점: 군집이 얼마나 잘 형성되었는지 측정하는 실루엣 스코어처럼, Coherence Score는 토픽이 얼마나 의미적으로 잘 형성되었는지 측정합니다.

나. Perplexity (혼잡도)

Perplexity는 모델이 학습 데이터를 얼마나 잘 설명하는지를 나타내는 지표로, 모델이 테스트 데이터를 얼마나 잘 예측하는지를 측정합니다.

  • 해석: 값이 낮을수록 모델이 데이터를 잘 설명(예측)한다는 의미입니다.

  • 사용법:

    1. K 값에 따른 Perplexity를 그래프로 그립니다.

    2. 그래프의 기울기가 완만해지는 지점 (Elbow Point)을 최적의 K 후보로 선택합니다.

  • 주의사항:

    • Perplexity는 K가 커질수록 계속해서 낮아지는 경향이 있습니다.

    • 이 경우, 토픽이 너무 세분화되어 사람이 해석하기 어려운 수많은 토픽이 생성될 수 있습니다.

    • Perplexity가 낮다고 해서 반드시 사람이 해석하기 좋은 토픽인 것은 아닙니다. 최근에는 Perplexity보다 Coherence Score를 더 신뢰하는 추세입니다.

엘보우 플롯과의 유사점: 군집 내 거리(inertia)가 줄어드는 엘보우 플롯처럼, Perplexity도 특정 지점에서 감소율이 둔화되는 '팔꿈치' 지점을 찾습니다.

2. 정성적 평가 방법 (Qualitative Evaluation)

정량적 지표는 훌륭한 가이드라인을 제공하지만, 최종 결정은 결국 사람이 해야 합니다. 토픽 모델링의 주된 목적은 '사람이 이해하고 인사이트를 얻는 것'이기 때문입니다.

  • 방법:

    1. Coherence Score나 Perplexity를 통해 찾은 몇 개의 K 후보(예: K=20, 25, 30)를 정합니다.

    2. 각 K 값으로 학습된 모델의 토픽별 상위 단어 목록을 직접 출력해 봅니다.

    3. 아래 기준에 따라 토픽의 품질을 평가합니다.

      • 해석 가능성 (Interpretability): 각 토픽의 단어들이 하나의 의미 있는 주제로 묶이는가? (예: '농구', '축구', '야구', '선수' -> '스포츠' 토픽)

      • 차별성 (Distinctiveness): 각 토픽들이 서로 다른 주제를 다루고 있는가? 아니면 비슷한 토픽이 중복되는가?

      • 잡음 (Junk Topics): 의미 없는 단어(불용어, 특수문자 등)로만 구성된 토픽이 있는가?

  • 최종 선택: 정량적 지표가 가장 좋았던 K가 아니더라도, 사람이 보기에 가장 해석이 잘 되고, 비즈니스 목적에 부합하는 토픽들을 생성하는 K를 최종적으로 선택합니다.

실용적인 접근법 (Workflow)

  1. K의 범위 설정: 분석하려는 문서의 양과 도메인 지식을 바탕으로 K의 대략적인 범위를 설정합니다. (예: 10부터 100까지 5단위로)

  2. 정량적 지표 계산: 설정한 K 범위 내에서 각 K 값에 대해 모델을 학습시키고 Coherence Score (C_v)와 Perplexity를 계산합니다.

  3. 시각화 및 후보 선정: K 값에 따른 두 지표를 그래프로 그려봅니다. Coherence Score가 가장 높은 지점과 Perplexity의 엘보우 지점을 중심으로 2~3개의 K 후보를 선정합니다.

  4. 정성적 평가: 선정된 K 후보들에 대해 각각 토픽 결과를 출력하여 직접 눈으로 확인하고, 가장 해석 가능하고 유용한 토픽을 생성하는 K를 최종적으로 선택합니다.

즐거운 연휴 주말되시길 바라겠습니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 강현욱님.

LDA나 NMF에서 최적의 component 수를 선택하는 것은 중요한 결정이며, 이를 위해 몇 가지 방법을 사용할 수 있습니다:

  1. Perplexity Score: LDA의 경우, 퍼플렉시티 스코어는 모델이 데이터에 대해 얼마나 잘 맞는지를 나타내는 지표입니다. 퍼플렉시티 값은 작을수록 좋습니다. 다양한 component 수로 퍼플렉시티 값들을 계산하여 가장 낮은 값을 찾는 방법입니다.

  2. Coherence Score: 이 방법은 주제 모델의 해석력을 평가하는 데 유용합니다. 주제 모델이 도출한 주제들이 얼마나 높은 응집도를 가지는지를 평가합니다. Coherence score가 높을수록 주제의 일관성이 높다고 볼 수 있습니다.

  3. Grid Search와 Cross-Validation: 다양한 component 수와 다른 하이퍼파라미터 조합으로 모델을 학습하고, 교차 검증을 통해 가장 좋은 성능을 발휘하는 조합을 선택하는 방법입니다.

  4. 직관적 해석: 마지막으로, 도메인 지식을 활용하여 얻어진 결과들을 실제로 해석해 봅니다. 전체적으로 주제의 의미가 합당하게 해석될 수 있는지를 판단하여 component 수를 조정할 수 있습니다.

관련하여 참고할 수 있는 일부 답변 URL을 추가합니다:

이러한 방법들을 참고하여 최적의 component 수를 찾아보시기 바랍니다. 물론 모델의 해석 가능성과 직관적 해석 또한 중요하니, 다양한 관점에서 결과를 평가해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

강현욱님의 프로필 이미지
강현욱

작성한 질문수

질문하기