1 토픽 모형(topic modeling) 1

문서가 많은 경우 혹은 책과 같이 다수 장(chapter)으로 구성된 경우 이를 추상화해서 토픽(topic, 주제)를 추출할 필요가 있다. Latent Dirichlet allocation (LDA)가 토픽 모형으로 많이 알려져 있으며 많이 사용되고 있다.

  • 모든 문서는 화제(topic)가 뒤섞인 것이다. (Every document is a mixture of topics.), 즉, 문서 각각은 몇개 화제가 일정 비율로 뒤섞인 것으로 볼 수 있다. 예를 들어, 첫번째 문서는 화제 1이 10%, 화제 2가 90%, 반면에서 두번째 문서는 화제 1이 70%, 화제3이 20%, 화제2가 10% 뒤섞인 것으로 본다.
  • 모든 화제(topic)은 단어(word)가 뒤섞인 것이다. (Every topic is a mixture of words.), 즉, OO일보 2019-01-29 일자 뉴스기사는 “정치”에서 화제를 하나뽑고, “연예”에서 화제를 하나 뽑아 작성되었다. 정치 화제에서 가장 많이 회자된 단어는 “대통령”, “국회”, “정부”를 들 수 있고, 연예 화제에서는 “영화”, “SNS”, “배우”를 둘 수 있다. 특히 “예산” 같은 단어는 정치나 연예 모두 공통으로 사용되는 중요한 단어가 될 수 있다.

2 케인즈 vs 하이에크 저서 데이터 2

pdf_text 함수로 .pdf 파일을 R에서 처리 가능한 문자열을 뽑아내서 객체에 담아낸다.

2.1 케인즈 - 일반이론

케인즈 “일반이론” 책을 각 Chapter 장으로 쪼갠다. 이를 위해서 정규표현식을 동원해서 각 장의 첫번째 장을 추출하고 매칭되지 않는 것을 NA로 처리한 후에 tidyr::fill() 함수로 채워넣고 기타 불필요한 서문과 부록(Appendix)을 제거시킨다.

# A tibble: 6 x 2
  text       book  
  <chr>      <chr> 
1 Chapter 22 케인즈
2 Chapter 23 케인즈
3 Chapter 24 케인즈
4 Appendix 1 케인즈
5 Appendix 2 케인즈
6 Appendix 3 케인즈

2.2 각장(Chapter) → 단어(Word)

앞서 “일반이론”을 각 장별로 나눠서 총 24장으로 구성된 것을 확인하고 제대로 검증하기 위해서 단어 갯수를 불용어 처리해서 세어본다.

# A tibble: 6,008 x 2
   word           n
   <chr>      <int>
 1 rate         759
 2 money        724
 3 employment   623
 4 investment   543
 5 capital      510
 6 income       377
 7 marginal     367
 8 wage         338
 9 demand       337
10 cost         322
# ... with 5,998 more rows

ggrepel 팩키지를 활용하여 총 24장에 걸쳐 가장 많이 회자되는 단어가 어떤 것이 있는지 각 장별로 15개씩 뽑아서 이를 시각화한다.

4 일반이론 주제(topic) 3

tf-idf 분석을 이어 토픽 모형으로 진행하는데 팩키지가 필요한데 과거 속도, 자바 의존성이 문제가 되어 번거러웠으나, stm 팩키지의 등장으로 C++로 작성되어 자바 의존성과 속도 문제가 모두 해결되고 전문가들의 평판도 좋다.

stm()함수는 인자로 문서-단어 행렬(document-term matrix) 혹은 quanteda 팩키지 희소 행렬(sparse matrix) 혹은 dfm 자료형을 전달하여야 한다. 깔끔한 텍스트 데이터로 정제된 것을 문서(스토리)-단어 행렬로 count(), cast_dfm() 함수를 연결하여 구현해낸다. 동일하게 count(), cast_sparse() 함수를 연결하여 희소행렬도 구현할 수 있다.