inflearn logo
강의

Course

Instructor

Everyone's Korean Text Analysis and Natural Language Processing with Python

0202 KLUE Non-Negative Matrix Factorization (NMF) Topic Modeling

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

95

hyunwookkang795940

4 asked

0

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

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

python 머신러닝 빅데이터 NLP 텍스트마이닝 lda component

Answer 2

0

todaycode

안녕하세요!

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

communityai8509

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

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

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

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

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

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

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

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

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

작업형 1 유형 부분

0

9

1

수강평 이벤트

0

15

2

import torch가 안되는 경우는 어떻게 하나요?

0

15

1

작업형 1 (삭제예정, 구 버전)

0

28

2

강의노트는 어디있나요?

0

15

1

노션 학습 자료 권한 요청

0

15

1

수강기간 연장 문의드립니다.

0

20

1

2유형 레이블 인코딩 VS 원핫 인코딩

0

21

3

part2강의 문의사항입니다.

0

19

2

adapt() valid 포함

0

72

1

코드 에러

0

146

2

감성 분석을 하려면 어떤 부분을 공부해야 하나요?

0

205

2

수업자료 다운로드 링크 에러

0

157

2

모두의 한국어 텍스트 분석과 자연어처리 with 파이썬 -> 섹션 3 부터 재생이 안됩니다.

0

152

1

0204 쇼핑 리뷰 군집화 - KMeans, Elbow, Silhouette 분석 강의 질문있습니다.

0

215

2

load_metric 에러 발생

0

1127

2

강의에서 사용하는 csv 파일이 없습니다

0

266

2

적합한 알고리즘이나 라이브러리를 알고싶습니다

0

243

1

안녕하세요 선생님

0

312

1

kkma() 실행시 kernel dead 현상이 발생합니다.

0

488

3

설문조사 주관식 데이터 처리방법 문의

0

1123

1

감성분석

0

383

1

해당 강의 내용 영문에 적용하는 방법

0

420

1

PDF기준으로 LLM에게 답변/요약을 요청할때 가능한 방법 문의

1

1281

2