[ 토픽 모델링 ] hLDA ( Hierarchical LDA ) 실험 : : 나 의 큰 O 는 logx 야 . . 
 2017 . 07 . 23 02 : 25 그냥 공부 
 요즘 계속 토픽 모델링 쪽 으로 공부 를 해 보 고 있 는데요 , 앞서 다뤘 던 LDA , DMR , HDP - LDA 같 은 모델 은 모두 각각 의 주제 가 독립 적 이 라 가정 하 고 , 단일 수준 에 모든 주제 들 을 배치 했었 습니다 . 이번 에 살펴보 는 hLDA ( Hierarchical LDA ) 는 주제 를 계층 적 으로 찾 아서 , 최상위 주제 아래 하위 주제 여러 개 를 배치 할 수 있 게 해줍니다 . 배경 이 되 는 수학 이론 이 생각 보다 까다로워서 아직 완벽 하 게 이해 는 하 지 못했 구요 , 샘플 코드 를 가지 고 요리조리 실험 을 해 본 결과 를 간단 하 게 살펴보 는 시간 을 가지 려고 합니다 . 
 주제 는 서로 독립 이 아니 다 
 LDA 와 같 은 토픽 모델링 은 문헌 집합 내 의 주제 를 발견 하 는 데 에 큰 도움 을 주 지만 , 아쉽 게 도 어떤 주제 끼리 서로 연관 이 있 는지 를 밝혀 주 지 는 못 합니다 . 예 를 들 어 정치 라는 주제 는 해외 정치 , 국내 정치 등 으로 나눠질 수 도 있 습니다 . 해외 정치 와 국내 정치 는 서로 다른 주제 이 지만 , 굉장히 유사 한 부분 을 가지 고 있 겠 죠 . LDA 를 사용 할 경우 여러 문헌 들 을 정치 라는 주제 로 뭉뜽 그려 버리 거나 , 문헌 들 을 해외 정치 , 국내 정치 로 나누 더라도 두 주제 가 연관 이 있 는지 를 밝혀줄 수 는 없 죠 . 사실 이 문제 는 토픽 모델링 분야 에서 생각 보다 중요 한 문제 였 습니다 . LDA 의 경우 주제 개수 K , HDP - LDA 의 경우 집중 파라미터 α 를 어떻게 잡 느냐 에 따라서 추출 되 는 주제 의 개수 가 달라지 는데 , 이 에 따라 유사 한 주제 들 이 하나 로 뭉뚱그려 지 거나 서로 다른 주제 가 합쳐 지 는 일 이 발생 하 기 때문 에 주제 의 구조 를 파악 할 수 없 기 때문 이 죠 . Blei , D . M . , Griffiths , T . L . , & Jordan , M . I . ( 2010 ) . The nested chinese restaurant process and bayesian nonparametric inference of topic hierarchies . Journal of the ACM ( JACM ) , 57 ( 2 ) , 7 . 의 논문 에서 는 중첩 된 중국집 프로세스 를 통해 이 문제 를 해결 하 는 토픽 모델링 기법 을 제시 했 습니다 . 
 중첩 된 중국집 프로세스 ( nested Chinese Restaurant Process ) 
 중국집 프로세스 는 [ 그냥 공부 ] - [ 토픽 모델링 ] HDP 와 토픽 모델 링 포스팅 에서 잘 설명 했으니 다시 설명 하 지 않 고 넘어가 도록 하 겠 습니다 . HDP 에서 는 중국집 을 본사 - 체인점 2 계층 으로 나누 어 본사 에서 각 체인점 ( 문헌 ) 의 식탁 ( 단어 클러스터 ) 들 에게 음식 ( 주제 ) 을 배분 해 주 도록 하 여 임의 개수 의 주제 에 대해 토픽 모델링 을 수행 하 게 했 습니다 . 
 중첩 된 중국집 프로세스 에서 는 2 계층 이 아니 라 무한 한 계층 의 중국집 을 가정 합니다 . 최상위 계층 에 는 중국집 1 개 가 있 고 , 이 중국 집 에서 밥 은 먹 은 사람 들 이 갈 수 있 는 두 번 째 계층 의 중국 집들이 있 습니다 . 마찬가지 로 두 번 째 계층 에서 밥 을 먹 는 사람 들 은 세 번 째 계층 의 중국 집 으로 갈 수 있 고 이렇게 n 번 째 계층 의 중국집 까지 사람 들 은 계속 식사 투어 를 하 게 되 는 거 죠 . 
 단 이때 중국집 의 계층 구조 는 트리 형태 를 따릅니다 . 반드시 중국집 은 n 번 째 계층 에서 n + 1 번 째 계층 으로 연결 되 어 있 고 , 한 중국집 은 하나 의 부모 계층 만 을 가집니다 . 즉 상위 계층 두 군데 에서 오 는 손님 을 받 을 수 는 없 어요 . 아래 그림 처럼 말 이 죠 
 ( 출처 ) Blei , D . M . , Griffiths , T . L . , & Jordan , M . I . ( 2010 ) . The nested chinese restaurant process and bayesian nonparametric inference of topic hierarchies . Journal of the ACM ( JACM ) , 57 ( 2 ) , 7 . 
 여기 서 각 계층 의 중국집 은 주제 를 뜻 합니다 . 그리고 중국 집 에서 식사 를 하 며 다니 는 사람 은 하나 의 문헌 을 뜻 하 구요 , 즉 각 문헌 은 각 계층 마다 하나 의 중국집 을 지나 게 되 죠 . 그 결과 n 개 의 계층 을 통과 하 는 경로 가 생기 고 , 이 경로 가 해당 문헌 의 주제 경로 가 되 겠 죠 . 
 이 과정 은 다음 과 같이 정리 될 수 있 습니다 . 
 여기 서 크 게 4 개 의 파라미터 가 등장 합니다 . η 와 γ , 그리고 m 과 π 입니다 . m 과 π 는 GEM 분포 의 파라미터 인데 아직 GEM 분포 를 정확 하 게 이해 못 해서 생략 . .. 대 게 0 . 5 , 100 으로 설정 한답니다 . 
 η 는 주제 에 포함 되 는 어휘 를 결정 하 는 파라미터 입니다 . 이 값 이 작 을수록 한 주제 에 적 은 어휘 가 포함 되 고 ( 즉 많 은 주제 가 생성 되 고 ) , 클수록 한 주제 에 많 은 어휘 가 포함 됩니다 ( 즉 , 적 은 주제 가 생성 됩니다 ) . γ 는 nCRP 의 파리 미터 인데 한 중국 집 에서 갈 수 있 는 다음 중국집 가 어느 정도 가 될지 를 정 합니다 . 이 값 이 클 수록 한 중국 집 아래 에 더 많 은 중국집 이 생성 되 고 , 작 을 때 는 반대 가 되 겠 죠 ? 
 아주 흥미 로운 토픽 모델링 기법 이 어서 실제로 논문 에서 제시 하 는 것 처럼 결과 가 잘 나올지 궁금 해졌 습니다 . 그래서 제 가 가지 고 있 는 데이터 를 가지 고 실험 해 보 기 로 했 습니다 . 
 실험 을 돌려 보 자 
 파이썬 에서 간단 하 게 사용 할 수 있 는 라이브러리 가 있 으면 좋 을 테 지만 찾아보 니 없 는 듯 하 고 , 대신 저자 가 c 로 작성 한 샘플 코드 가 github 에 공유 되 어 있 습니다 . https : / / github . com / blei - lab / hlda 코드 가 어렵 지 는 않 으니 관심 있 는 분 은 살펴보 시 는 것 도 좋 을 듯 합니다 . 불행히 도 제 Windows 10 과 Visual Studio 에서 는 컴파일 되 지 가 않 기 에 약간 수정 하 여 사용 했 습니다 . 
 실험 에 사용 한 데이터 는 저번 에 프로젝트 때문 에 수집 해 둔 2016 년 1 년 간 정치 / 사회 분야 신문 기사 약 15 만 건 이 고 형태소 분석 은 하 되 불 용어 제거 는 하 지 않 은 채 로 hLDA 를 실시 했 습니다 . 파라미터 는 다음 과 같이 설정 했 습니다 . 
 ETA 2 . 0 1 . 0 0 . 5 0 . 25 0 . 125 
 GAM 1 . 0 1 . 0 1 . 0 1 . 0 
 GEM _ MEAN 0 . 5 
 SAMPLE _ ETA 1 
 SAMPLE _ GEM 1 
 깊이 는 5 단계 . η 값 은 1 계층 에서 는 크 게 해서 한 주제 에 많 은 단어 들 이 뭉치 게 했 고 , 5 계층 으로 갈수록 한 주제 에 적 은 단어 들 이 뭉치 게 했 습니다 . γ 값 은 그냥 다 1 로 . 그리고 SAMPLE _ ETA 및 SAMPLE _ GEM 을 On 하 여서 매 반 복시 마다 새롭 게 최적 의 η 파라미터 와 GEM 파라미터 를 계산 하 도록 했 습니다 . 문헌 집합 이 크 다 보 니 ( 그리고 원체 hLDA 가 계산 량 이 많 다 보 니 ) 이틀 가까이 돌렸 습니다 . ( 147 회 반복 하 고 종료 시켰 어요 . ..) 실행 후 조절 된 파라미터 는 아래 와 같 습니다 . 
 SCORE - 1 . 599 e + 08 
 ITER 147 
 ETA 0 . 1311 0 . 6433 0 . 9471 1 . 3465 1 . 4543 
 GAMMA 1 . 0 1 . 0 1 . 0 1 . 0 
 GEM _ MEAN 0 . 4128 
 GEM _ SCALE 0 . 4888 
 약 700 여 개 의 주제 가 등장 했 는데요 , 포함 된 단어 의 수 가 너무 적 은 것 들 은 추리 고 나 니 92 개 의 주제 가 남 았 습니다 . 
 결과 는 어떻게 나왔 을까요 ? 
 먼저 제일 최상위 계층 에 는 다음 단어 들 이 등장 했 습니다 . 
 하 다 , 있 다 , 되 다 , 대하 다 , 없 다 , 대통령 , 보다 , 의원 , 국민 . .. 
 가장 상위 계층 이 니 모든 신문 기사 에 두루 쓰이 는 단어 들 ( 대체로 불 용어 겠 죠 ) 이 등장 했 습니다 . 그 아래 계층 은 8 개 가 나왔 습니다 . 8 개 의 주제 와 그 주제 의 하위 주제 들 이 어떤 것 이 나왔 는지 도표 로 정리 해 보 았 어요 . 
 8 개 중 첫 번 째 주제 는 국회 및 정치 전반 에 대한 내용 인 듯 합니다 . 하위 주제 로 는 위 와 같 은 것 들 이 나왔 습니다 . 
 두 번 째 는 대선 후보 에 관한 내용 입니다 . 엉뚱 하 게 도 그 하위 주제 로 등장 한 국회 총선 관련 주제 아래 에 는 일본 과 관련 된 주제 들 이 등장 하 네요 . 아마 국회 총선 주제 문헌 에 일본 관련 언급 이 있 었 고 , 그래서 그 어휘 들 이 국회 총선 아래 에서 두 분 류 로 갈려서 나타나 는 듯 합니다 . 
 세 번 째 는 대북 문제 관련 입니다 . 좀 거칠 긴 하 지만 잘못 된 건 없 어 보 입니다 . 
 네 번 째 는 특검 수사 관련 주제 입니다 . 
 다섯 번 째 는 개혁 관련 주제 인데 , 해석 하 기 가 난해 하 군요 . 
 여섯 번 째 는 좀 우습 네요 . 정당 내 선거 에 관한 주제 인 듯 한데 , 더 민주 경선 에서 경쟁 과 관련 된 어휘 가 많이 언급 되 어 그런지 , 리우 올림픽 을 그 아래 에 분류 해 버렸 네요 . .. ( 경쟁 이 라는 측면 에서 보 면 . ..) 
 일곱 번 째 입니다 . 이 부분 은 갈 길 이 좀 멀 어 보이 네요 . iteration 을 더 반복 해야 좋 은 결과 가 나올 거 같 습니다 . 
 마지막 여덟 번 째 입니다 . 지역 사회 와 관련 된 하위 주제 는 왼쪽 하나 밖에 없 는 거 같 군요 . 
 보 다시피 계층 적 으로 주제 분류 가 되 기 는 합니다 . .. 만 파라미터 설정 을 잘 하 고 iteration 을 오래 돌려야 제대로 된 결과 가 나올 것 같 습니다 . 좀 사용 하 기 에 어려운 기법 이 지만 나름 대로 쓸 만 한 곳 이 있 을 것 같 네요 . 계층 적 으로 분류 가 필요 한 분야 ( 택 소노 미 자동 구축 이 라던지 자동 분류 등 ) 에서 사용 하 기 에 좋 지 않 을까 싶 어요 . 문제 는 계층 이 늘어날 수록 처리 속도 가 정말 기하급수 적 으로 늘어난다는 것 인데 , 아마 이 문제 때문 에 대량 의 데이터 를 대상 으로 는 널리 쓰이 지 못하 고 있 는 듯 합니다 . 
 2017 . 08 . 29 23 : 23 신고 
 리눅스 를 쓰 시 면 github 에 있 는 코드 그대로 사용 하 실 수 있 구요 , 윈도우 를 쓰 시 면 조금 수정 해야 합니다 . 
 어느 부분 수정 했 는지 가 궁금 하 신 거 죠 ? 
 윈도우 사용 하 고 있 습니다 . 수정 본 좀 볼 수 있 을까요 . .? 
 2018 . 01 . 25 17 : 06 
 2018 . 01 . 26 01 : 41 신고 
 어떤 파라미터 를 말씀 하 시 는 건가요 ? gamma 값 을 말씀 하 시 는 거 라면 여러 값 을 바꿔 가 시 면서 최적 의 결과 를 내 는 값 을 찾 아야 하 구요 , eta 라면 저 도 아직 배움 이 부족 하 여 정확히 어떻게 최적화 를 하 는지 모르 겠 네요 
 wjcho 22 
 2018 . 08 . 28 15 : 53 
 좋 은 정보 감사 합니다 . 혹시 hlda - c 코드 에서 나온 output 을 어떻게 해석 하 는지 에 관해서 documentation 이 있 나요 ? 제 가 공부 가 부족 해서 그런지 output file 들 의 의미 를 잘 모르 겠 네요 ㅠㅠ 
 2018 . 08 . 29 00 : 09 신고 
 결과 파일 이 여러 종류 가 나와서 요 . 어떤 결과 파일 내용 을 얘기 하 시 는 건지 알려 주 시 면 , 답변 에 도움 이 될 것 같 습니다 . 
 2018 . 08 . 29 14 : 33 
 사실 처음 에 output 을 보 고 멘탈 이 나가 버렸 네요 . . 어제 어떻게 든 생각 을 짜내 서 mode 의 의미 는 대강 알 았 습니다 . column label 이 있 어서 그나마 쉬웠 습니다 . 
 mode . assign 에서 1 열 은 문서 번호 이 고 , 3 열 부터 끝 까지 는 node index 같 은 것 처럼 보이 는데 , 2 열 의 값 이 크 고 작음 이 무엇 을 의미 하 는지 잘 모르 겠 습니다 . 
 그리고 mode . levels 에서 각 문서 에 등장 하 는 단어 가 몇 번 째 level 에서 유래 한 것 인지 표시 한 것 으로 보입니다 . 그런데 동일 한 단어 에 문서 에 따라 다른 level 을 부여 할 이론 적 인 근거 가 와 닿 지 않 습니다 . 
 2018 . 08 . 29 15 : 30 신고 
 mode . assign 파일 은 각 문헌 이 어떤 경로 를 따라 부여 되 는지 를 보여 줍니다 . 해석 하 신 바 가 맞 으시 구요 , 두 번 째 열 에 는 score 를 찍 어 주 고 있 는데 , 이 는 해당 문헌 이 3 열 이후 에 나타나 는 노드 를 따라 생성 되 었 다고 가정 했 을 때 , 전체 문헌 의 내용 을 얼마나 잘 설명 할 수 있 는지 를 표현 해 주 는 척도 라고 보 시 면 됩니다 . ( 로그 가능 도 log likelihood 같 은 개념 입니다 . ) 코드 를 본지 가 오래 되 어서 정확 하 게 기억 은 안 나 는데 , 아마 로그 취한 가능 도 값 을 전체 단어 의 개수 로 나눠 준 걸로 알 고 있 습니다 . 
 즉 이 값 이 클수록 해당 문헌 이 그 경로 를 따라 생성 되 었 다고 가정 할 때 잘 맞 는다는 볼 수 있 다는 거 죠 . 
 동일 단어 가 문헌 에 따라 다른 level 에 부여 되 는 것 은 확률 기반 의 모델 상 어쩔 수 없 는 특징 입니다 . 같 은 단어 라고 해도 문헌 내 에 함께 등장 한 다른 단어 들 에 따라 적절 한 주제 에 배치 가 됩니다 . 
 결국 에 는 확률 / 통계 적 처리 이 다 보 니 , 단어 하나 하나 가 어디 에 배정 되 었 는지 를 보 는 건 한계 가 있 구요 , 해당 레벨 ( 노드 ) 에 전반 적 으로 어떤 단어 들 이 분포 하 는지 그 경향 을 보 는 게 좀 더 의미 가 있 는 것 이 라고 할 수 있 겠 죠 . 
 이론 적 인 근거 라고 한다면 . .... 음 노드 A 의 단어 분포 , 노드 B 의 단어 분포 , 노드 C 의 단어 분포 가 ~~~~ 할 때 , 이 문헌 의 단어 들 은 노드 A - 노드 B - 노드 C 에서 뽑 았 을 때 제일 가능 도 가 높 다고 추정 되 었 기 때문 에 이렇게 배정 된 것 . 정도 가 아닐까 싶 네요 . 
 케니 왕 
 안녕 하 세요 , 정말 유익 한 포스팅 들 감사 드립니다 . 
 다만 궁금 해 지 는 부분 이 , 
 Hierarchical LDA 를 돌리 는 것 과 
 그냥 LDA 를 돌리 고 그 결과 로 분류 된 그룹 들 각각 에 대해 LDA 를 돌리 는 걸 반복 하 는 것 과 이론 적 으로 차이 가 있 나요 ? 
 2019 . 01 . 29 22 : 03 신고 
 부족 한 글 에 관심 가져 주 셔서 감사 합니다 . 
 hLDA 로 분석 할 경우 경우 전체 데이터 를 하나 의 모델 로 처리 합니다 . 반면 질문 하 신 것 처럼 LDA 를 수행 한 결과 로 분류 를 하 고 다시 LDA 를 수행 하 는 경우 는 분류 한 데이터 별 로 별도 의 모델 을 적용 하 는 게 되 겠 죠 . 
 후자 의 경우 각 모델 별 로 공유 하 는 파라미터 가 없 으므로 , 각각 은 서로 독립 적 인 LDA 결과 가 됩니다 . 즉 서로 비교 하 는 것 은 불가 합니다 . 
 또한 , 상위 LDA 에서 학습 된 단어 분포 가 하위 LDA 에서 는 전혀 사용 되 지 않 기 때문 에 , 하위 LDA 의 결과 는 말 그대로 기존 의 LDA 과 동일 하 되 , 입력 문헌 만 줄어든 결과 를 얻 게 될 겁니다 . 
 반면 hLDA 의 경우 , 상위 단계 의 주제 에서 는 많 은 문헌 에서 공통 적 으로 등장 하 는 어휘 들 이 뽑히 고 , 하위 단계 로 내려갈수록 좀 더 세부 적 인 어휘 가 등장 하 게 됩니다 . 또 hLDA 는 비모수 기법 을 사용 하 기 에 , 적절 한 주제 의 개수 를 알 아서 찾아간다는 것 도 중요 한 차이 가 될 것 같 습니다 . 
 2019 . 01 . 30 13 : 36 
 아하 단순히 한 번 만 돌리 면 되 는 것 외 에 많 은 장점 들 이 있 군요 . 친절 한 답변 감사 드립니다 ! 공부 가 많이 되 고 있 어요 .