Topic Modeling

Text Mining

Description for Topic Modeling

Yeongeun Jeon , Jung In Seo
2023-12-10

토픽 모델링 (Topic Modeling)



Contents


패키지 설치

pacman::p_load("readr",
               "dplyr", "tidyr",
               "KoNLP",
               "stringr",
               "tm", "tidytext",
               "topicmodels",
               "ggplot2", "scales", "showtext",
               "textclean",
               "ldatuning")

1. 토픽 모델링 개념


1-1. 예제




1-2. 문서를 토픽별로 분류



1-3. LDA 모델


Caution! 앞선 “고양이” 토픽과 “음식” 토픽은 토픽 모델의 의미를 이해하기 쉽도록 가상으로 만든 것이다. 실제로는 같은 문서가 여러 토픽에 등장할 가능성이 있고, 같은 단어도 여러 토픽에 등장할 가능성이 있기 때문에 확률이 0이 되지는 않는다.
게다가, LDA 모델이 만들어지는 과정을 자세히 알고 싶다면 Topic Modeling, LDA를 참고하며, 예문을 이용해 토픽 모델을 설명하는 아이디어는 “딥 러닝을 이용한 자연어 처리 입문” 블로그에서 얻었다.


2. LDA 모델 만들기


2-1. 데이터 불러오기

# 데이터 불러오기
raw_news_comment <- read_csv(".../news_comment_parasite.csv") %>%
  mutate(id = row_number())                  # 변수 id 추가 -> 행 번호(row_number)를 값으로 입력

raw_news_comment
# A tibble: 4,150 × 6
   reg_time            reply                   press title url      id
   <dttm>              <chr>                   <chr> <chr> <chr> <int>
 1 2020-02-10 16:59:02 "정말 우리 집에 좋은 …  MBC   '기…  http…     1
 2 2020-02-10 13:32:24 "와 너무 기쁘다! 이 시… SBS   [영…  http…     2
 3 2020-02-10 12:30:09 "우리나라의 영화감독분… 한겨… ‘기…  http…     3
 4 2020-02-10 13:08:22 "봉준호 감독과 우리나…  한겨… ‘기…  http…     4
 5 2020-02-10 16:25:41 "노벨상 탄느낌이네요\n… 한겨… ‘기…  http…     5
 6 2020-02-10 12:31:45 "기생충 상 받을때 박수… 한겨… ‘기…  http…     6
 7 2020-02-10 12:31:33 "대한민국 영화사를 새…  한겨… ‘기…  http…     7
 8 2020-02-11 09:20:52 "저런게 아카데미상 받…  한겨… ‘기…  http…     8
 9 2020-02-10 20:53:27 "다시한번 보여주세요 …  한겨… ‘기…  http…     9
10 2020-02-10 20:22:41 "대한민국 BTS와함께  …  한겨… ‘기…  http…    10
# ℹ 4,140 more rows

Caution! 문서를 토픽별로 분류하는 작업에서는 댓글 원문이 포함된 raw_news_comment와 각 문서(댓글)가 등장할 확률이 높은 토픽 번호를 결합하여 토픽별 문서 개수 계산 또는 시각화를 수행한다. 이때 문서(댓글)를 구분하는 기준이 필요하기 때문에 함수 row_number()로 문서의 고유 번호를 부여해 두어야 한다.


2-2. 전처리

2-2-1. 기본적인 전처리

  1. 중복 문서 제거하기
    • 중복 문서가 있으면 계산량이 늘어나 모델을 만드는 시간이 오래 걸리고, 한 토픽에 내용이 똑같은 문서가 여러개 들어 있는 문제가 발생한다.
    • 이런 문제를 피하기 위해 Package "dplyr"의 함수 distinct()를 이용해 중복 문서를 제거한다.
      • 문서(댓글)가 들어 있는 변수 reply 외에 다른 변수들도 모두 유지하도록 옵션 .keep_all = T을 사용한다.
  2. 짧은 문서 제거하기
    • 토픽 모델은 여러 문서에 공통으로 사용된 단어를 이용해 토픽을 찾는 과정을 거쳐 만들어진다.
    • 짧은 문서는 다른 문서와 공통으로 사용된 단어가 적어서 토픽 모델을 만드는 데 적합하지 않다.
    • 짧은 문서를 제거하기 위해 함수 str_count()를 이용해 세 단어 이상 사용된 문서만 추출한다.
news_comment <- raw_news_comment %>%
  mutate(reply = str_replace_all(reply, "[^가-힣]", " "), # 한글을 제외한 모든 문자는 공백으로 변경
         reply = str_squish(reply)) %>%                   # 연속된 공백 제거
  distinct(reply, .keep_all = T) %>%                      # 중복 문서 제거 / .keep_all = T : 다른 변수들 모두 유지
  filter(str_count(reply, boundary("word")) >= 3)         # 3 단어 이상 사용한 문서만 추출 -> 짧은 문서 제거

2-2-2. 명사 기준으로 토큰화

comment <- news_comment %>%                               # 기본적인 전처리를 수행한 결과가 저장되어 있는 객체 in 2-2-1
  unnest_tokens(input = reply,                            # 토큰화를 수행할 텍스트가 포함된 변수명
                output = word,                            # 출력 변수명
                token = extractNoun,                      # 명사 기준으로 토큰화
                drop = F) %>%                             # 원문 제거 X
  filter(str_count(word) > 1) %>%                         # 1 단어 이상 사용한 문서만 추출
  group_by(id) %>%                                        # 변수 id에 대해 그룹화 -> 각 문서에서 중복 사용된 단어를 제거하기 위해
  distinct(word, .keep_all = T) %>%                       # 중복 단어 제거 / .keep_all = T : 다른 변수들 모두 유지
  ungroup() %>%                                           # 그룹화 해제
  select(id, word)                                        # 변수 id와 word만 선택

comment
# A tibble: 21,457 × 2
      id word    
   <int> <chr>   
 1     1 우리    
 2     1 행복    
 3     2 시국    
 4     2 감사    
 5     2 하다    
 6     2 진심    
 7     3 우리나라
 8     3 영화감독
 9     3 영감    
10     3 봉감    
# ℹ 21,447 more rows

2-2-3. 빈도가 높은 단어 제거

count_word <- comment %>%                                 # 토큰화를 수행한 결과가 저장되어 있는 객체 in 2-2-2
  add_count(word) %>%                                     # 단어 빈도 계산
  filter(n <= 200) %>%                                    # 200번 이하로 사용한 단어만 추출
  select(-n)                                              # 단어 빈도가 포함된 변수 n 제거

2-2-4. 불용어 제거 & 유의어 처리

① 불용어와 유의어 확인하기

# 빈도를 기준으로 내림차순 정렬해 불용어와 유의어 확인
count_word %>%                                            # 빈도가 높은 단어를 제거한 객체 in 2-2-3
  count(word, sort = T) %>%                               # 단어 빈도 계산 / sort = T : 내림차순 정렬
  print(n = 200)                                          # 200개의 단어가 화면에 보이도록 출력 
# A tibble: 6,022 × 2
    word             n
    <chr>        <int>
  1 작품상         200
  2 자랑           193
  3 블랙리스트     173
  4 조국           170
  5 한국           165
  6 대박           148
  7 세계           140
  8 수상           135
  9 미국           128
 10 들이           123
 11 정치           108
 12 역사           102
 13 오스카         101
 14 우리나라        96
 15 감독상          93
 16 진심            93
 17 좌파            90
 18 작품            87
 19 한국영화        87
 20 사람            86
 21 배우            85
 22 박근혜          84
 23 국민            80
 24 하다            80
 25 최고            79
 26 호감            79
 27 우리            78
 28 문화            75
 29 생각            71
 30 수상소감        68
 31 감사            67
 32 가족            65
 33 나라            65
 34 오늘            63
 35 시상식          61
 36 문재인          60
 37 자랑스럽습니    60
 38 송강호          59
 39 소름            57
 40 정권            54
 41 각본상          53
 42 감동            53
 43 댓글            51
 44 빨갱이          51
 45 인정            48
 46 소식            47
 47 자한            47
 48 소감            45
 49 이미경          44
 50 하나            43
 51 한국인          43
 52 대통령          42
 53 정부            42
 54 아카데미상      39
 55 하게            39
 56 위상            38
 57 문재            37
 58 쾌거            37
 59 감격            36
 60 순간            36
 61 외국            36
 62 전세계          36
 63 호가            36
 64 하면            35
 65 눈물            34
 66 보수            34
 67 와우            34
 68 현실            34
 69 기사            33
 70 영광            33
 71 영화계          33
 72 경사            32
 73 사회            31
 74 한국의          31
 75 국제            30
 76 누구            30
 77 때문            29
 78 마지막          29
 79 얘기            29
 80 인간            29
 81 자랑스럽        29
 82 해서            29
 83 이번            28
 84 훌륭            28
 85 그네            27
 86 기분            27
 87 로컬            27
 88 사람들          27
 89 영화제          27
 90 정도            27
 91 뉴스            26
 92 왜구            26
 93 하네            26
 94 자유            25
 95 추카            25
 96 기생            24
 97 반미            24
 98 영화상          24
 99 이야기          24
100 정경            24
101 해요            24
102 내용            23
103 당신            23
104 세상            23
105 수준            23
106 위대            23
107 이것            23
108 일본            23
109 국위선양        22
110 니들            22
111 다시            22
112 중국            22
113 진정            22
114 계획            21
115 국가            21
116 네이버          21
117 숟가락          21
118 쓰레기          21
119 왕이            21
120 재미            21
121 정신            21
122 존경            21
123 행복            21
124 국격            20
125 문화계          20
126 예술            20
127 코로나          20
128 하기            20
129 하지            20
130 가슴            19
131 강국            19
132 사건            19
133 아시아          19
134 완전            19
135 우파            19
136 중요            19
137 최초            19
138 부회장          18
139 사실            18
140 소리            18
141 제작            18
142 각본            17
143 발전            17
144 스텝            17
145 시절            17
146 실화            17
147 올해            17
148 의미            17
149 자기            17
150 자신            17
151 천재            17
152 토착            17
153 한거            17
154 한번            17
155 해주            17
156 그것            16
157 노벨상          16
158 다들            16
159 다음            16
160 모두            16
161 박수            16
162 상상            16
163 시대            16
164 어디            16
165 여기            16
166 오스카상        16
167 최우수작품상    16
168 한국어          16
169 후보            16
170 고생            15
171 기대            15
172 덕분            15
173 발표            15
174 상은            15
175 예상            15
176 월드컵          15
177 응원            15
178 이해            15
179 조선            15
180 한류            15
181 해외            15
182 까지            14
183 대한            14
184 리스            14
185 모습            14
186 바이러스        14
187 생중계          14
188 여자            14
189 예전            14
190 이거            14
191 이름            14
192 장면            14
193 표현            14
194 하신            14
195 한국적          14
196 한마디          14
197 황금종려상      14
198 김연아          13
199 만큼            13
200 방탄            13
# ℹ 5,822 more rows

② 불용어 목록 만들기

stopword <- c("들이", "하다", "하게", "하면", "해서", "이번", "하네",
              "해요", "이것", "니들", "하기", "하지", "한거", "해주",
              "그것", "어디", "여기", "까지", "이거", "하신", "만큼")

③ 불용어를 제거하고 유의어를 통일하기

count_word <- count_word %>%                               # 빈도가 높은 단어를 제거한 객체 in 2-2-3
  filter(!word %in% stopword) %>%                          # 불용어에 포함하지 않은 단어만 추출 -> 불용어 제거
  # 유의어 통일
  mutate(word = recode(word,                        
                       "자랑스럽습니" = "자랑",            # 변수 word에서 "자랑스럽습니" -> "자랑"
                       "자랑스럽" = "자랑",                # 변수 word에서 "자랑스럽" -> "자랑"
                       "자한" = "자유한국당",              # 변수 word에서 "자한" -> "자유한국당"
                       "문재" = "문재인",                  # 변수 word에서 "문재" -> "문재인"
                       "한국의" = "한국",                  # 변수 word에서 "한국의" -> "한국"
                       "그네" = "박근혜",                  # 변수 word에서 "그네" -> "박근혜"
                       "추카" = "축하",                    # 변수 word에서 "추카" -> "축하"
                       "정경" = "정경심",                  # 변수 word에서 "정경" -> "정경심"
                       "방탄" = "방탄소년단"))             # 변수 word에서 "방탄" -> "방탄소년단"

Caution! 불용어를 제거하는 작업은 텍스트를 분석할 때마다 반복하기 때문에 자주 등장하는 불용어를 CSV 파일로 저장해두고 필요할 때마다 불러와 활용하면 편리하다.
영어의 경우 Package "kableExtra"data(stop_words)를 이용하여 불용어 사전을 활용할 수 있으며, 한국어의 경우 Korean Stopwords를 참고하여 불용어를 제거할 수 있다.

# 불용어 목록 만들기
stopword <- tibble(word = c("들이", "하다", "하게", "하면", "해서", "이번", "하네",
                            "해요", "이것", "니들", "하기", "하지", "한거", "해주",
                            "그것", "어디", "여기", "까지", "이거", "하신", "만큼"))

# 불용어 목록 저장하기
write_csv(stopword, "stopword.csv")

# 불용어 목록 불러오기
stopword <- read_csv("stopword.csv")

# 불용어 제거 Ver.1
count_word <- count_word %>%
  filter(!word %in% stopword$word)           # count_word의 변수 word에서 불용어(stopword$word)에 포함되지 않는 행만 추출 -> 불용어 제거

# 불용어 제거 Ver.2
count_word <- count_word %>%
  anti_join(stopword, by = "word")           # anti_join : 차집합 / count_word의 변수 word에서 불용어(stopword$word)에 포함되지 않는 행만 추출 -> 불용어 제거

2-3. LDA 모델

2-3-1. Document-Term Matrix


① 문서별 단어 빈도 계산

# 문서별 단어 빈도 계산
count_word_doc <- count_word %>%                           # 불용어를 제거하고 유의어를 통일한 객체 in 2-2-4
  count(id, word, sort = T)                                # 문서별 단어 빈도 계산 / sort = T : 내림차순 정렬

count_word_doc
# A tibble: 17,592 × 3
      id word           n
   <int> <chr>      <int>
 1    35 한국           2
 2   206 자랑           2
 3   566 자랑           2
 4   578 자랑           2
 5   598 자랑           2
 6  1173 한국           2
 7  1599 한국           2
 8  1762 한국           2
 9  2240 한국           2
10  2307 방탄소년단     2
# ℹ 17,582 more rows

Result! 35번째 문서(댓글)에서 “한국”은 2번 등장한다.


② DTM 만들기

dtm_comment <- count_word_doc %>%                          # 문서별 단어의 빈도를 계산한 결과가 저장되어 있는 객체
  # DTM 생성
  cast_dtm(document = id,                                  # 문서 구분 기준
           term = word,                                    # 단어가 포함된 변수명
           value = n)                                      # 단어의 빈도가 포함된 변수명

dtm_comment
<<DocumentTermMatrix (documents: 3203, terms: 5995)>>
Non-/sparse entries: 17592/19184393
Sparsity           : 100%
Maximal term length: 35
Weighting          : term frequency (tf)

Result! 출력 결과를 보면 dtm_comment는 3,203 문서 X 5,995 단어(documents: 3203, terms: 5995)로 구성됨을 알 수 있다.
Caution! 함수 as.matrix()를 이용하면 DTM의 내용을 확인할 수 있다.

as.matrix(dtm_comment)[1:8, 1:8]                           # 8개의 문서와 8개의 단어에 대해서만 출력
      Terms
Docs   한국 자랑 방탄소년단 박근혜 우리 행복 감사 시국
  35      2    0          0      0    0    0    0    0
  206     0    2          0      0    0    0    0    0
  566     1    2          0      0    0    0    0    0
  578     0    2          0      0    0    0    0    0
  598     0    2          0      0    0    0    0    0
  1173    2    0          0      0    0    0    0    0
  1599    2    1          0      0    0    0    0    0
  1762    2    0          0      0    0    0    0    0

Result! 출력 결과에서 Docs는 문서 번호, Terms는 단어, 숫자는 문서에 단어가 등장한 빈도를 의미한다. 예를 들어, 35번째 문서(댓글)에서 “한국”은 2번 등장한다.


2-3-2. LDA 모형 만들기

lda_model <- LDA(dtm_comment,                              # DTM in 2-3-1
                 k = 8,                                    # 토픽 개수
                 method = "Gibbs",                         # 샘플링 방법 : 깁스 샘플링
                 control = list(seed = 1234))              # Seed 고정 -> 항상 동일한 결과를 출력
lda_model
A LDA_Gibbs topic model with 8 topics.
glimpse(lda_model)                                         # 모델 구조 확인
Formal class 'LDA_Gibbs' [package "topicmodels"] with 16 slots
  ..@ seedwords      : NULL
  ..@ z              : int [1:17604] 8 8 4 3 7 4 3 1 1 1 ...
  ..@ alpha          : num 6.25
  ..@ call           : language LDA(x = dtm_comment, k = 8, method = "Gibbs", control = list(seed = 1234))
  ..@ Dim            : int [1:2] 3203 5995
  ..@ control        :Formal class 'LDA_Gibbscontrol' [package "topicmodels"] with 14 slots
  ..@ k              : int 8
  ..@ terms          : chr [1:5995] "한국" "자랑" "방탄소년단" "박근혜" ...
  ..@ documents      : chr [1:3203] "35" "206" "566" "578" ...
  ..@ beta           : num [1:8, 1:5995] -7.81 -10.22 -10.25 -5.83 -10.25 ...
  ..@ gamma          : num [1:3203, 1:8] 0.151 0.15 0.11 0.114 0.11 ...
  ..@ wordassignments:List of 5
  .. ..$ i   : int [1:17592] 1 1 1 1 1 1 1 1 1 1 ...
  .. ..$ j   : int [1:17592] 1 98 99 100 101 102 103 104 105 106 ...
  .. ..$ v   : num [1:17592] 8 4 3 7 4 3 7 2 8 6 ...
  .. ..$ nrow: int 3203
  .. ..$ ncol: int 5995
  .. ..- attr(*, "class")= chr "simple_triplet_matrix"
  ..@ loglikelihood  : num -126429
  ..@ iter           : int 2000
  ..@ logLiks        : num(0) 
  ..@ n              : int 17604

Result! lda_model에는 “단어가 각 토픽에 등장할 확률 beta(\(\beta\))”와 “문서가 각 토픽에 등장할 확률 gamma(\(\gamma\))”가 포함되어 있다. 출력 결과에서 beta : num [1:8, 1:5995]는 8개 토픽 각각에 5,995개의 beta 값이 있음을 의미하며, 이는 5,995개 단어로 토픽 모델을 만들었기 때문이다. 또한, gamma : num [1:3203, 1:8]는 8개 토픽 각각에 3,203개의 gamma 값이 있음을 의미하며, 이는 3,203개 문서로 토픽 모델을 만들었기 때문이다.
Caution! 깁스 샘플링에 관해 자세히 알고 싶다면 Topic Modeling, LDA를 참고한다.


3. 토픽별 주요 단어 살펴보기


3-1. 토픽별 단어 확률 beta 추출

term_topic <- tidy(lda_model,                              # LDA 모델 in 2-3-2 
                   matrix = "beta")                        # beta 추출

term_topic
# A tibble: 47,960 × 3
   topic term       beta
   <int> <chr>     <dbl>
 1     1 한국  0.000405 
 2     2 한국  0.0000364
 3     3 한국  0.0000353
 4     4 한국  0.00295  
 5     5 한국  0.0000353
 6     6 한국  0.0000356
 7     7 한국  0.00661  
 8     8 한국  0.0593   
 9     1 자랑  0.0181   
10     2 자랑  0.00440  
# ℹ 47,950 more rows

Result! 출력 결과를 보면 5,995개 단어를 이용해 토픽 모델을 만들었으므로 term_topic은 토픽별로 5,995행, 즉, 총 8 \(\times\) 5,995 = 47,960행으로 구성되어 있다. 변수 topic은 토픽 번호를, 변수 term은 단어를 의미하며, 이를 토대로 해석하면 “한국”이 토픽 1에 등장할 확률이 0.000405, 토픽 2에 등장할 확률이 0.0000364이다. 게다가, beta는 확률값이므로 한 토픽의 beta 값을 모두 더하면 1이 된다.

# 토픽별 단어 개수
term_topic %>%                                             # beta 값이 저장되어 있는 객체
  count(topic)                                             # 토픽별 단어 개수 계산
# A tibble: 8 × 2
  topic     n
  <int> <int>
1     1  5995
2     2  5995
3     3  5995
4     4  5995
5     5  5995
6     6  5995
7     7  5995
8     8  5995
# 토픽 1의 beta 값 합계
term_topic %>%                                             # beta 값이 저장되어 있는 객체
  filter(topic == 1) %>%                                   # 토픽 1만 추출
  summarise(sum_beta = sum(beta))                          # 변수 beta에 포함된 값의 합 계산
# A tibble: 1 × 1
  sum_beta
     <dbl>
1        1

Caution! 특정 단어를 추출하면 단어가 어떤 토픽에 등장할 확률이 높은지 알 수 있다.

# 특정 단어의 토픽별 등장 확률
term_topic %>%                                             # beta 값이 저장되어 있는 객체
  filter(term == "작품상")                                 # "작품상"에 대한 결과만 추출
# A tibble: 8 × 3
  topic term        beta
  <int> <chr>      <dbl>
1     1 작품상 0.0000368
2     2 작품상 0.000763 
3     3 작품상 0.0000353
4     4 작품상 0.0000364
5     5 작품상 0.0000353
6     6 작품상 0.0695   
7     7 작품상 0.000727 
8     8 작품상 0.000388 

Result! “작품상”은 토픽 6에 등장할 확률이 0.0695로 가장 높다.


3-2. 토픽별 주요 단어


3-2-1. 특정 토픽에서 beta 값이 높은 단어

term_topic %>%                                             # beta 값이 저장되어 있는 객체 in 3-1
  filter(topic == 6) %>%                                   # 토픽 6만 추출
  arrange(-beta)                                           # 변수 beta를 기준으로 내림차순 정렬
# A tibble: 5,995 × 3
   topic term        beta
   <int> <chr>      <dbl>
 1     6 작품상   0.0695 
 2     6 감독상   0.0318 
 3     6 한국영화 0.0228 
 4     6 수상     0.0214 
 5     6 각본상   0.0154 
 6     6 나라     0.0143 
 7     6 호감     0.0136 
 8     6 감격     0.0129 
 9     6 순간     0.0125 
10     6 눈물     0.00788
# ℹ 5,985 more rows

Result! 토픽 6을 추출한 다음, 변수 beta를 기준으로 내림차순으로 정렬해보면 “작품상”, “감독상”, “수상” 등의 확률이 높은 것을 알 수 있다. 이러한 결과들은 토픽 6이 영화상 수상과 관련있다는 것을 나타낸다.


3-2-2. 토픽별 주요 단어

terms(lda_model, 20) %>%                                   # 토픽별로 등장 확률이 높은 20개 단어 추출
  data.frame()                                             # Data Frame으로 변환
    Topic.1 Topic.2 Topic.3    Topic.4    Topic.5  Topic.6    Topic.7
1      작품    대박    조국       역사       자랑   작품상 블랙리스트
2      진심  시상식  문재인   우리나라       우리   감독상     박근혜
3      정치    오늘    가족       세계       최고 한국영화       사람
4      자랑    국민    문화     오스카       감사     수상     송강호
5  수상소감    소름  대통령       수상       생각   각본상     이미경
6      댓글    정치    자랑     빨갱이       소식     나라 자유한국당
7      외국    배우    때문     영화계   국위선양     호감       정권
8      경사    계획    인정 아카데미상       감동     감격       소감
9      훌륭    축하    정부       인간       하나     순간       보수
10     좌파    위상    강국       얘기 방탄소년단     눈물       인정
11     왜구    최고    호감       로컬     영화상   전세계     마지막
12     배우    한번    와우       내용   한국영화     진정       기생
13     예술    쾌거    사건       좌파       정도   노벨상       하나
14   전세계    생각    국격       정신       와우     소식     네이버
15   아시아    중국    고생       의미       조선     기사       한국
16     호감    다음    덕분       생각       존경     문화     이야기
17     토착    기분    기대       상상       후보     국제     부회장
18     발전    왕이    정말       국민       우한     각본     쓰레기
19   사람들    세상    해도       나라       시대     다들       좌파
20     수준    자랑    눈물       정부       행복     발표       영광
        Topic.8
1          한국
2          미국
3        한국인
4          세계
5          좌파
6          배우
7          감동
8          누구
9          사회
10         자유
11         현실
12         영광
13         위대
14       영화제
15         이해
16         자신
17 최우수작품상
18         예상
19   황금종려상
20         이유

Result! 출력 결과를 보면 토픽 1에는 “작품”, “진심”, “정치”의 등장 확률이 높으며, 토픽 2에는 “대박”, “시상식”, “오늘”의 등장 확률이 높다는 것을 알 수 있다.


3-2-3. 시각화

# 1. 토픽별로 beta 값이 큰 단어 10개 추출
top_term_topic <- term_topic %>%                           # beta 값이 저장되어 있는 객체 in 3-1
  group_by(topic) %>%                                      # 변수 topic에 대해 그룹화 -> 토픽별로 beta 값이 큰 단어를 추출하기 위해
  slice_max(beta, n = 10)                                  # beta 값이 가장 큰 10개 단어 추출

Caution! beta 값에 동점이 있으면 추출한 단어가 10개보다 많을 수 있다. 동점을 제외하고 토픽별로 단어 개수를 동일하게 10개로 맞추려면 함수 slice_max()에 옵션 with_ties = F를 입력하면 된다.

# 2. 막대 그래프
## 나눔바른 고딕 폰트 불러오기
font_add_google(name = "Nanum Gothic",                          # 구글 폰트에서 사용하고자 하는 폰트 이름 
                family = "nanumgothic")                         # R에서 사용할 폰트 이름 -> 사용자 지정
showtext_auto()

ggplot(top_term_topic,                                          # 토픽별로 beta 값이 큰 10개의 단어가 저장되어 있는 객체
       aes(x = reorder_within(term, beta, topic),               # reorder_within : 토픽별로 변수 beta를 기준으로 내림차순 정렬 
           y = beta, 
           fill = factor(topic))) +                             # 토픽별로 막대 색깔을 다르게 표현
  geom_col(show.legend = F) +                                   # 막대 그래프
  facet_wrap(~ topic,                                           # 변수 topic의 항목별로 그래프 작성 -> 토픽별로 막대 그래프 작성
             scales = "free", 
             ncol = 4) +                                        # 한 행에 4개의 막대 그래프 작성
  coord_flip() +                                                # 막대를 가로로 회전
  scale_x_reordered() +                                         # 단어 뒤에 토픽 이름 제거
  scale_y_continuous(n.breaks = 4,                              # y축의 눈금을 4개 내외로 제한 -> 막대를 가로로 회전했기 때문에 x축의 눈금이 수정됨
                     labels = number_format(accuracy = .01)) +  # 눈금 숫자를 소수점 셋째 자리에서 반올림
  labs(x = NULL) +                                              # x축 제목 제거 -> 막대를 가로로 회전했기 때문에 y축 제목이 제거됨
  theme(text = element_text(family = "nanumgothic"))            

Result! 등장 확률이 높은 주요 단어, 즉, beta 값이 큰 주요 단어를 살펴보면 토픽이 어떤 특징을 지니는지 알 수 있다. 예를 들어, 토픽 4의 “역사”, “우리나라”, “세계”를 보면 해당 토픽이 아카데미상 수상의 역사적 의미와 관련됨을 알 수 있다. 또한, 토픽 7의 “블랙리스트”, “박근혜”, “자유한국당”을 보면 해당 토픽이 정치 문제와 관련됨을 알 수 있다.
Caution! 함수 scale_y_continuous()에 입력한 옵션 n.breaks = 4는 축 눈금을 4개 내외로 정하는 기능을 한다. 또한, 옵션 labels = number_format(accuracy = .01)은 눈금 숫자를 소수점 셋째 자리에서 반올림하는 기능을 하며, 함수 number_format()을 사용하려면 Package "scales"를 설치해야 한다.


4. 문서를 토픽별로 분류


4-1. 문서별 토픽 확률 gamma 추출

doc_topic <- tidy(lda_model,                              # LDA 모델 in 2-3-2 
                  matrix = "gamma")                       # gamma 추출

doc_topic
# A tibble: 25,624 × 3
   document topic  gamma
   <chr>    <int>  <dbl>
 1 35           1 0.151 
 2 206          1 0.15  
 3 566          1 0.110 
 4 578          1 0.114 
 5 598          1 0.110 
 6 1173         1 0.110 
 7 1599         1 0.114 
 8 1762         1 0.0962
 9 2240         1 0.125 
10 2307         1 0.135 
# ℹ 25,614 more rows

Result! 출력 결과를 보면 3,203개 문서를 이용해 토픽 모델을 만들었으므로 doc_topic은 토픽별로 3,203행, 즉, 총 8 \(\times\) 3,203 = 25,624행으로 구성되어 있다. 변수 document은 문서(댓글) 번호를, 변수 topic은 토픽 번호를 의미하며, 이를 토대로 해석하면 35번째 문서(댓글)가 토픽 1에 등장할 확률은 0.151, 206번째 문서(댓글)가 토픽 1에 등장할 확률은 0.15이다. 게다가, gamma는 beta와 마찬가지로 확률값이므로 한 문서의 gamma 값을 모두 더하면 1이 된다.

# 토픽별 문서 개수
doc_topic %>%                                             # gamma 값이 저장되어 있는 객체
  count(topic)                                            # 토픽별 문서 개수 계산
# A tibble: 8 × 2
  topic     n
  <int> <int>
1     1  3203
2     2  3203
3     3  3203
4     4  3203
5     5  3203
6     6  3203
7     7  3203
8     8  3203
# 첫 번째 문서(문서 1)의 gamma 값 합계
doc_topic %>%                                             # gamma 값이 저장되어 있는 객체
  filter(document == 1) %>%                               # 첫 번째 문서(문서 1)만 추출
  summarise(sum_gamma = sum(gamma))                       # 변수 gamma에 포함된 값의 합 계산
# A tibble: 1 × 1
  sum_gamma
      <dbl>
1         1

4-2. 문서를 확률이 가장 높은 토픽으로 분류

Caution! 문서별로 gamma 값이 가장 큰 토픽을 추출하면 문서가 어떤 토픽에 등장할 확률이 높은지 알 수 있으며, 이렇게 얻은 값을 이용하면 각 문서를 확률이 높은 토픽으로 분류할 수 있다.

# 1. 문서별로 gamma 값이 가장 큰 토픽 추출
doc_class <- doc_topic %>%                                # gamma 값이 저장되어 있는 객체 in 4-1
  group_by(document) %>%                                  # 변수 document에 대해 그룹화 -> 문서별로 gamma 값이 가장 큰 토픽을 추출하기 위해
  slice_max(gamma, n = 1)                                 # gamma 값이 가장 큰 1개 토픽 추출

doc_class
# A tibble: 5,328 × 3
# Groups:   document [3,203]
   document topic gamma
   <chr>    <int> <dbl>
 1 1            5 0.159
 2 10           8 0.168
 3 100          5 0.153
 4 1000         7 0.15 
 5 1001         1 0.137
 6 1001         3 0.137
 7 1001         7 0.137
 8 1002         3 0.137
 9 1002         7 0.137
10 1002         8 0.137
# ℹ 5,318 more rows

Result! 첫 번째 문서(댓글)는 토픽 5에 등장할 확률이 0.159로 가장 높으며, 열 번째 문서(댓글)는 토픽 8에 등장할 확률이 0.168로 가장 높다.


# 2. 원문에 확률이 가장 높은 토픽 번호 부여 
doc_class$document <- as.integer(doc_class$document)      # 변수 document를 정수형으로 변환

# 원문에 토픽 번호 부여
news_comment_topic <- raw_news_comment %>%                # 원문 in 2-1
  left_join(doc_class, by = c("id" = "document"))         # 원문의 변수 id와 doc_class의 변수 document를 기준으로 원문과 doc_class 결합

news_comment_topic %>%
  select(id, topic)                                       # 변수 id와 topic만 선택
# A tibble: 6,275 × 2
      id topic
   <int> <int>
 1     1     5
 2     2     1
 3     2     5
 4     2     6
 5     3     2
 6     3     8
 7     4     4
 8     5     5
 9     5     6
10     6     3
# ℹ 6,265 more rows

Result! 첫 번째 문서(댓글)는 토픽 5의 gamma 값이 가장 커 토픽 5로 분류되었다.
Caution! gamma 값이 가장 큰 토픽 번호를 댓글 원문에 부여하기 위해 함수 left_join()을 이용하여 댓글 원문이 들어 있는 raw_news_comment (참고. 2-1. 데이터 불러오기)와 doc_class를 결합한다. 이때 raw_news_comment의 변수 iddoc_class의 변수 document가 문서(댓글) 번호를 나타내는 고유값이므로 이 변수를 기준(by = c("id" = "document"))으로 결합한다.
게다가, 데이터셋을 결합하려면 기준이 되는 변수의 타입이 같아야 한다. raw_news_comment의 변수 id는 정수형이고, doc_class의 변수 document는 문자형이기 때문에 후자를 정수형으로 변환한 다음 결합한다.


# 3. 토픽별 문서 개수
news_comment_topic %>%                                    # 원문에 토픽 번호를 부여한 객체
  count(topic)                                            # 토픽별 문서 개수 계산
# A tibble: 9 × 2
  topic     n
  <int> <int>
1     1   660
2     2   704
3     3   663
4     4   609
5     5   708
6     6   690
7     7   649
8     8   645
9    NA   947

Result! 원문에 gamma 값이 가장 큰 토픽 번호를 부여한 news_comment_topic를 이용해 토픽별 빈도를 구하면 각 토픽으로 문서가 몇 개씩 분류되었는지 알 수 있다. 출력 결과를 보면 토픽 1에는 660개의 문서(댓글)가, 토픽 2에는 704개의 문서(댓글)가 분류된 것을 알 수 있다.
Caution! 변수 topic에서 NA가 있는 이유는 빈도가 높은 단어를 제거하는 전처리 작업을 거치지 않은 raw_news_commentdoc_class를 결합해 토픽 번호를 부여했기 때문이다. 다시 말해서, raw_news_comment는 “빈도가 높은 단어만 있어서 토픽 모델을 만드는 데 사용하지 않은 문서(댓글)”까지 포함하고 있다. 이런 문서(댓글)의 번호는 doc_class에 없기 때문에 함수 left_join()을 이용해 결합하면 변수 topicNA가 할당된다. 해당 문서(댓글)는 분석에 활용하지 않으므로 함수 na.omit()를 이용해 제거한다.

# NA 제거
news_comment_topic <- news_comment_topic %>%              # 원문에 토픽 번호를 부여한 객체
  na.omit()                                               # NA 제거

4-3. 문서를 한 토픽으로만 분류

doc_topic %>%                                             # gamma 값이 저장되어 있는 객체 in 4-1
  group_by(document) %>%                                  # 변수 document에 대해 그룹화 -> 문서별로 gamma 값이 가장 큰 토픽을 추출하기 위해
  slice_max(gamma, n = 1) %>%                             # gamma 값이 가장 큰 1개 토픽 추출
  count(document) %>%                                     # 문서 빈도 계산
  filter(n >= 2)                                          # 2번 이상 등장한 문서 추출
# A tibble: 1,301 × 2
# Groups:   document [1,301]
   document     n
   <chr>    <int>
 1 1001         3
 2 1002         3
 3 1009         3
 4 1010         2
 5 1023         2
 6 1027         2
 7 103          2
 8 1036         3
 9 1038         2
10 104          2
# ℹ 1,291 more rows

Result! 2개 이상의 토픽에서 등장할 확률이 높은 문서(댓글)는 총 1,301개이다. 예를 들어, 1001번째 문서(댓글)는 3개의 토픽에서 등장할 확률이 가장 높으며, 이는 해당 문서는 3개의 토픽으로 분류된다는 것을 의미한다.
Caution! 문서를 한 토픽으로만 분류하려면 함수 slice_sample()을 이용해 문서별로 gamma 값이 가장 큰 토픽 중 하나를 무작위 추출하면 된다. 이렇게 하면 gamma 값이 가장 큰 토픽이 하나인 문서는 그대로 남고, gamma 값이 가장 큰 토픽이 둘 이상인 문서는 무작위로 한 개의 토픽을 추출한다. 게다가, 함수 slice_sample()는 난수를 이용하여 추출하기 때문에 set.seed로 난수를 고정하여 항상 동일한 결과를 출력하도록 해야 한다.

set.seed(1234)                                            # Seed 고정 -> 항상 동일한 결과를 출력
doc_class_unique <- doc_topic %>%                         # gamma 값이 저장되어 있는 객체 in 4-1
  group_by(document) %>%                                  # 변수 document에 대해 그룹화 -> 문서별로 gamma 값이 가장 큰 토픽을 추출하기 위해
  slice_max(gamma, n = 1) %>%                             # gamma 값이 가장 큰 1개 토픽 추출
  slice_sample(n = 1)                                     # gamma 값이 가장 큰 토픽이 2개 이상인 문서에 대해 무작위로 1개의 토픽만 남기기 위해

doc_class_unique
# A tibble: 3,203 × 3
# Groups:   document [3,203]
   document topic gamma
   <chr>    <int> <dbl>
 1 1            5 0.159
 2 10           8 0.168
 3 100          5 0.153
 4 1000         7 0.15 
 5 1001         1 0.137
 6 1002         8 0.137
 7 1003         8 0.142
 8 1004         2 0.156
 9 1005         2 0.171
10 1006         7 0.171
# ℹ 3,193 more rows
doc_class_unique %>%
  count(document, sort = T)                               # 문서 빈도 계산 
# A tibble: 3,203 × 2
# Groups:   document [3,203]
   document     n
   <chr>    <int>
 1 1            1
 2 10           1
 3 100          1
 4 1000         1
 5 1001         1
 6 1002         1
 7 1003         1
 8 1004         1
 9 1005         1
10 1006         1
# ℹ 3,193 more rows

Result! 출력 결과를 보면 문서를 한 토픽으로만 분류했기 때문에 모든 문서의 빈도가 1이다.


4-4. 시각화


# 1. 토픽별 주요 단어 목록 만들기
top_terms <- term_topic %>%                               # beta 값이 저장되어 있는 객체 in 3-1
  group_by(topic) %>%                                     # 변수 topic에 대해 그룹화 -> 토픽별로 beta 값이 큰 단어 추출하기 위해
  slice_max(beta, n = 6,                                  # beta 값이 가장 큰 단어 6개 추출
            with_ties = F) %>%                            # beta 값이 동일하더라도 옵션에 지정한 개수만큼만 단어 추출
  summarise(term = paste(term, collapse = ", "))          # 변수 term에 단어들을 ", "로 결합

top_terms
# A tibble: 8 × 2
  topic term                                                
  <int> <chr>                                               
1     1 작품, 진심, 정치, 자랑, 수상소감, 댓글              
2     2 대박, 시상식, 오늘, 국민, 소름, 정치                
3     3 조국, 문재인, 가족, 문화, 대통령, 자랑              
4     4 역사, 우리나라, 세계, 오스카, 수상, 빨갱이          
5     5 자랑, 우리, 최고, 감사, 생각, 소식                  
6     6 작품상, 감독상, 한국영화, 수상, 각본상, 나라        
7     7 블랙리스트, 박근혜, 사람, 송강호, 이미경, 자유한국당
8     8 한국, 미국, 한국인, 세계, 좌파, 배우                

Result! 첫 번째 행은 토픽 1에 대해 beta 값이 가장 큰 6개의 단어이고, 두 번째 행은 토픽 2에 대해 beta 값이 가장 큰 6개의 단어이다.


# 2. 토픽별 문서 개수 계산하기 
count_topic <- news_comment_topic %>%                     # 원문에 토픽 번호를 부여한 객체 in 4-2
  count(topic)                                            # 토픽별 문서 개수 계산

count_topic
# A tibble: 8 × 2
  topic     n
  <int> <int>
1     1   660
2     2   704
3     3   663
4     4   609
5     5   708
6     6   690
7     7   649
8     8   645

# 3. 문서 개수에 주요 단어 결합하기
count_topic_word <- count_topic %>%                       # 토픽별 문서 개수를 포함한 객체
  left_join(top_terms, by = "topic") %>%                  # count_topic과 토픽별 주요 단어를 포함한 top_terms를 변수 topic을 기준으로 결합 
  mutate(topic_name = paste("Topic", topic))              # Topic 1, Topic 2와 같은 값을 가지는 변수 topic_name 추가 

count_topic_word
# A tibble: 8 × 4
  topic     n term                                          topic_name
  <int> <int> <chr>                                         <chr>     
1     1   660 작품, 진심, 정치, 자랑, 수상소감, 댓글        Topic 1   
2     2   704 대박, 시상식, 오늘, 국민, 소름, 정치          Topic 2   
3     3   663 조국, 문재인, 가족, 문화, 대통령, 자랑        Topic 3   
4     4   609 역사, 우리나라, 세계, 오스카, 수상, 빨갱이    Topic 4   
5     5   708 자랑, 우리, 최고, 감사, 생각, 소식            Topic 5   
6     6   690 작품상, 감독상, 한국영화, 수상, 각본상, 나라  Topic 6   
7     7   649 블랙리스트, 박근혜, 사람, 송강호, 이미경, 자… Topic 7   
8     8   645 한국, 미국, 한국인, 세계, 좌파, 배우          Topic 8   

# 4. 막대 그래프 만들기
ggplot(count_topic_word,
       aes(x = reorder(topic_name, n),                     # 토픽에 대해 문서 개수를 기준으로 내림차순 정렬
           y = n,
           fill = topic_name)) +
  geom_col(show.legend = F) +                              # 막대 그래프 
  coord_flip() +                                           # 가로로 회전
  geom_text(aes(label = n) ,                               # 문서 빈도 표시
            hjust = -0.2) +                                # 막대 밖에 표시
  geom_text(aes(label = term),                             # 주요 단어 표시
            hjust = 1.03,                                  # 막대 안에 표시
            col = "white",                                 # 단어 색깔
            fontface = "bold",                             # 단어 굵기 : 두껍게
            family = "nanumgothic") +                      # 폰트 -> 3-2-3에서 정의한 나눔바른 고딕 폰트
  scale_y_continuous(expand = c(0, 0),                     # y축 막대 간격 줄이기 -> 막대를 가로로 회전했기 때문에 x축 막대 간격이 수정됨 
                     limits = c(0, 820)) +                 # y축 범위 -> 막대를 가로로 회전했기 때문에 x축 범위가 수정됨
  labs(x = NULL)                                           # x축 제목 제거 -> 막대를 가로로 회전했기 때문에 y축 제목이 제거됨 

Result! 출력한 그래프를 보면 막대에 주요 단어와 문서 개수가 함께 표현되어 토픽의 특징을 한눈에 파악할 수 있다. 예를 들어, 토픽 5는 708개의 문서(댓글)를 포함하며 “자랑”, “우리”, “최고”와 같은 단어들이 등장할 확률이 높다.


5. 토픽 이름 짓기


5-1. 토픽별 주요 문서 확인 & 토픽 이름 짓기


5-1-1. 원문 전처리 & gamma 값을 내림차순으로 정렬

comment_topic <- news_comment_topic %>%                   # 원문에 토픽 번호를 부여한 객체 in 4-2
mutate(reply = str_squish(replace_html(reply))) %>%       # html 특수 문자 대체
  arrange(-gamma)                                         # 변수 gamma를 기준으로 내림차순 정렬

comment_topic %>%
  select(gamma, reply)                                    # 변수 gamma와 reply만 출력
# A tibble: 5,328 × 2
   gamma reply                                                        
   <dbl> <chr>                                                        
 1 0.264 "도서관서 여자화장실서 나오는 남자사서보고 카메라있는지없는… 
 2 0.260 "봉준호 송강호 블랙리스트 올리고 CJ 이미경 대표는 박근혜가 … 
 3 0.239 "보수정권때 블랙리스트에 오른 봉준호 송강호가 보기싫다는 박… 
 4 0.238 "도서관서 여자화장실서 나오는 남자사서보고 카메라있는지없는… 
 5 0.235 "당초 \"1917\"과 \"기생충\"의 접전을[초기엔 1917이 훨씬 우세…
 6 0.234 "박그네 밑에서 블랙리스트 있었는데 ㅋㅋㅋㅋㅋㅋㅋ 이미경이는…
 7 0.226 "위대한 박정희 삼성이 대한민국을 세계에 우뚝 세워 놨기에 가… 
 8 0.225 "기생충 영화보고 좌빨이 얼마나 기생충인지 못느낀 사람 제정신…
 9 0.225 "봉준호 감독과 송강호 배우는 이명박그네 정권 시절 문화계 블… 
10 0.224 "나중에 기생충 정부 영화 한편 나오겠네. 남자 주연 문xx ,여자…
# ℹ 5,318 more rows

5-1-2. 주요 단어가 사용된 문서 확인

# 토픽 1 내용 살펴보기
comment_topic %>%                                         # gamma 값이 내림차순으로 정렬된 객체 in 5-1-1
  filter(topic == 1 & str_detect(reply, "작품")) %>%      # 토픽 1로 분류된 문서에서 "작품"을 포함하는 문서만 추출
  head(50) %>%                                            # 처음 50개의 문서만 확인
  pull(reply)                                             # 문서를 벡터 형태로 출력
 [1] "봉감독의 'local'이라는 말에 발끈했나요? 미국 아카데미의 놀라운 변화입니다. 기생충이란 영화의 작품적 우수성 뿐만 아니라 '봉준호'라는 개인의 네임벨류와 인간적 매력과 천재성이 이번 아카데미 수상에 큰 역할을 한 것 같네요. 그의 각종 수상소감을 보면 면면히 드러나네요~~"                                                                                           
 [2] "이 작품을 기준으로 앞으로도 계속 쓰여질 것입니다. 진심으로 축하드립니다^^"                                                                                                                                                                                                                                                                                         
 [3] "이런 위대한 작품과 감독을 블랙리스트에 올려 대중에게서 뺏어 묻어버릴려고 했던 쥐닥정권 그걸 찬양하는 소시오패스일베충 벌래에게 무한한 저주가 함께하길 기원합니다.^^"                                                                                                                                                                                               
 [4] "폐쇄적이라는 평가를 받아온 오스카가 외국영화에 작품상을 주는걸 보니 또다른 의미의 권위가 느껴진다"                                                                                                                                                                                                                                                                 
 [5] "봉준호감독 대단하다 열등감이있는외모 안된다는 편견 자신과의 싸움 결국 그럭게 말하는자 들은 뭐하고사는지?우스꽝스럽다고 비꼬고 놀렸을만한 모습이지만 그들은 이런상 한번이라도 받을수있는 자격이있는지 암튼 대다하고 작품활동열심히 하셔서 멋진사람으로 기억되길,.,,외모비하하는 찌질이들은 아무재능없는 소인배가되고 결국 계속 악플 올렸다간 따돌림이나 당하겠지..."
 [6] "이런 감독을 박그네 토착왜구 정부에서는 좌파 블랙리스트에 올렸었지 ㅋㅋㅋ 근데 정작 미국에선 작품상 ㅋㅋㅋ"                                                                                                                                                                                                                                                         
 [7] "축하합니다!! 자랑스럽고 멋져요^^ 앞으로도 멋진 작품 부탁드립니다!"                                                                                                                                                                                                                                                                                                 
 [8] "정말 대단하다는 말밖에는~ 진심으로 축하드립니다. 앞으로도 좋은 작품 많이 만들어주세요~^^"                                                                                                                                                                                                                                                                          
 [9] "한류의 또다른 이정표를 봉준호가 해내는구가 오스카상 특히 작품상은 비영어권 국가가 수상하기 어려운 상당히 보수적인데 대단하다 썩은 정치로 한숨쉬는 국민들에게 또 다른 희망과 자부심을 심어줘서 고맙다"                                                                                                                                                              
[10] "작품이라고 할 수 없는 습작 정도의 물건을 상을 줬으니, 그동안 오스카 상이 얼마나 추접한 상인지 증명하는 것임."                                                                                                                                                                                                                                                      
[11] "기생충을 재밌게는봤지만,작품성이 그리대단한줄은 몰랐네요,축하합니다"                                                                                                                                                                                                                                                                                               
[12] "완전감동이네요..제2의기생충같은 작품 많이많이 만들어주세요.."                                                                                                                                                                                                                                                                                                      
[13] "봉감독님 너무 축하합니다! 앞으로도 훌륭한 작품들 기대합니다♥"                                                                                                                                                                                                                                                                                                     
[14] "작품도 뛰어났지만 국가 위상이 그만큼 높아진 것. 촛불시민혁명 국민들이 비폭력적으로 정권교체 하는데 성공하고 문 대통령이 남북정상회담 멋지게 해내셨고 그 과정을 거치면서 대한민국이 서구 사회에 유명해진 것. 분위기가 뒷받침 해주지 않으면 아무리 작품이 좋아도 이런 성과는 못냄."                                                                                  
[15] "각본상받았다고 하길래 그게 끝인줄 알았더니 시작에 불과했었네. 한국영화의 쾌거로구나. 헐리웃영화가 아닌 작품이 작품상을 받은게 최초라는데 역사를 썼다. 와우~"                                                                                                                                                                                                       
[16] "작품..감독..배우는 말할 것도 없고 샤론최님까지 통역을 잘 해주셔서 외국사람들으 현지호응도..작품 이해도가 높아져서.. 분위기 잘 잡아주셨나보네요."                                                                                                                                                                                                                   
[17] "개인적으론 봉감독 작품중에 여전히 살인의 추억이 가장 인상깊지만... 기생충은 전세계적으로 화두가 된 주제선정이 탁월했고 풀어내는 모양새도 능수능란하게 과하지도 덜하지도 않게 딱 좋았다. 여유있게 유머를 가지고 오스카를 향한 긴 레이스에서 정치[?]도 잘했다."                                                                                                      
[18] "백인우월주의가 팽배한 그 나라에서 조차 인정할 수 밖에 없을만큼 대단한 작품이었다는 반증인거지. 그리고 저 영화 보고 기분 더러웠다는 건 제대로 느낀거 아닐까? 기생충 자체가 사회풍자가 들어있으니까. 원래 너무 현실적인게 가장 불편함. 극구 부정하고 싶거든."                                                                                                        
[19] "각본상 준거보니 작품상은 1917 아니면 조커다"                                                                                                                                                                                                                                                                                                                       
[20] "축하드려요. 당신은 우리의 자랑입니다. 좋은 작품 앞으로도 기대할게요^^ 짝짝짝"                                                                                                                                                                                                                                                                                      
[21] "오스카 작품상 탔다 비영어권처음이다"                                                                                                                                                                                                                                                                                                                               
[22] "축하합니다~^^. 작품상까지 받은 작품인데 주연상이 없음이 좀 아이러니지만...."                                                                                                                                                                                                                                                                                       
[23] "김기덕 감독님 영화는 이렇게 해야됩니다. 맨날 어둡고 보기 힘든 영화만 만들지 마시고 이런 작품도 만들어 주세요! 봉 감독님 진심 축하드립니다."                                                                                                                                                                                                                        
[24] "솔직히 작품상은 조커가 타는 게 맞는데 동양인 쿼터 준다고 많이 배려해 준 듯."                                                                                                                                                                                                                                                                                       
[25] "솔직히 눈물난다ㅡ내가 내 인생영화로 꼽았던 작품! 개봉첫날 두번 봤다 ㅜ.ㅜ"                                                                                                                                                                                                                                                                                         
[26] "와...햐늘을 찌르는 작품성을 바탕으로 아카데미는 로컬영화제라고 인터뷰하던 그대의 고귀한 자태는정말 멋잇엇어요....자랑스럽습니다"                                                                                                                                                                                                                                   
[27] "남들은 남감독 작품이 해외서 상을 타니 입에 침이 마르도록 찬양을 한다. 왜 저렇게 남자일을 자기일처럼 좋아할까? 저 자리에 여성은 없고 향후 몇 십년 동안 없을 수도 있단 생각에 난 웃음도 나질 않는다. ㅉ"                                                                                                                                                             
[28] "우리나라 영화제..10년도 넘은 배우한테..신인신ㅇ 주고 공동수상 남발하고..감독상 받으면 작품상은 포기해야 하는데..외국의 냉철함 너무 보기 좋네"                                                                                                                                                                                                                      
[29] "축하합니다. 어깨가 으쓱해집니다. 작품상까지 수상하시길 응원합니다."                                                                                                                                                                                                                                                                                                
[30] "꿈 아니냐?? 작품상??? 전 세계에서 한해 제일 잘만들면서 대중성도 있는 작품에 주는 그상 맞냐? World no.1 ㄷ ㄷ ㄷ ㄷ ㄷ 진짜 개소름"                                                                                                                                                                                                                                 
[31] "근데 나는 봉준호 송강호도 대단하지만 이선균이 진심 대단함. 이선균 필모는 넘사네 진짜. 작품도 다양하고."                                                                                                                                                                                                                                                            
[32] "정말 자랑스럽습니다! 눈물흘리며 같이 환호했습니다! 앞으로도 역사에 남을 작품 많이 남겨주세요!"                                                                                                                                                                                                                                                                     
[33] "다른 작품들도 진짜 쟁쟁했는데.... 이건 대한민국 영화의 새로운 역사입니다!!! 봉 감독님 진짜 축하드려요!!! 그리고 수구꼴통 토착왜구 새끼들아!!! 제발 이런걸 정치적인거랑 엮지마라!!!!! 늬들의 행태 너무나 역겹다!!!!!!"                                                                                                                                              
[34] "아카데미에서 큰상받은건 축하하고 대한민국인으로서 자랑스럽긴한데, 영알못은 기생충의 어떤점이 작품성이 있는지 잘 모르겠다."                                                                                                                                                                                                                                         
[35] "일하다가 눈물날뻔..^^ 감격스럽네요 자랑스럽네요 봉감독님의 더 많은 작품, 훌륭한 작품 기대합니다~~^^"                                                                                                                                                                                                                                                               
[36] "얼마전 괴물 다시보는데도 진짜 봉감독님 작품 너무 재밌어요! 수상 축하드려요!"                                                                                                                                                                                                                                                                                       
[37] "작품성과 흥행성을 모두 거머쥔 시대상을 딱 반영하는 상이다. 오스카도 반영했을듯 하네ㅋ"                                                                                                                                                                                                                                                                             
[38] "자본주의 민주주의 아메리카가 인정한 작품. 기생충이 짱개의 유사사회주의 찬양한것처럼 달창 거지기생충들 그냥 좋댄다 ㅋㅋㅋㅋㅋ"                                                                                                                                                                                                                                      
[39] "작품상은 가능성이 희박하다는 기사를 봤었는데... 기적이네요.... 투표 방식이 이번에 바껴서 그런가"                                                                                                                                                                                                                                                                   
[40] "봉준호 감독님! 대한민국을 널리 알려주셔서 감사합니다. 수상소감 말씀하실때 눈물이 핑 돌더군요. 앞으로도 좋은 작품 세계적인 영화를 기대합니다. 축하드립니다.기생충! 봉준호 감독님! 화이팅입니다 ^^"                                                                                                                                                                  
[41] "아마 반백년내에는 한국에서 이런 영화가 나오긴 힘들듯.. 칸 황금종려상과 아카데미 작품상을 동시에 수상한것도 전세계적으로 60년만에 일인거고.. 진짜 어메이징한 올해 한국의 최대 이변일듯.."                                                                                                                                                                           
[42] "예전 살인의 추억을 극장에서 보고 작품,상업성을 다 갖춘 감독의 출현에 지금껏 응원해왔어요 정말 뭉클합니다"                                                                                                                                                                                                                                                          
[43] "블랙리스트랑 작품의 완성도랑 무'슨상'관임? 예술적으로 완성도 높은 작품을 만들었으니 상을 받은거지. 문화계 블랙리스트가 뭐 능력떨어지는 예술인들에 대한 리스트도 아니고."                                                                                                                                                                                           
[44] "축하 합니다 쭉 좋은 작품 부탁 합니다."                                                                                                                                                                                                                                                                                                                             
[45] "감독님 정말 멋집니다!!! 헐리우드작품 감독님의 영화도 한번 보고싶습니다!! 화이팅~~~~~~"                                                                                                                                                                                                                                                                             
[46] "작품상 받을 포스인데..."                                                                                                                                                                                                                                                                                                                                           
[47] "축하합니다. 앞으로도 좋은 작품 기대하겠습니다."                                                                                                                                                                                                                                                                                                                    
[48] "축하드립니다~ 국제적 작품이 되엇어요 ♡~♡"                                                                                                                                                                                                                                                                                                                        
[49] "황금종려상에 아카데미 작품상까지 정말 대단합니다"                                                                                                                                                                                                                                                                                                                  
[50] "대단~^^ 작품상까지~ 올들어 젤 기쁜 기사네요"                                                                                                                                                                                                                                                                                                                       
comment_topic %>%                                         # gamma 값이 내림차순으로 정렬된 객체 in 5-1-1                        
  filter(topic == 1 & str_detect(reply, "진심")) %>%      # 토픽 1로 분류된 문서에서 "진심"을 포함하는 문서만 추출
  head(50) %>%                                            # 처음 50개의 문서만 확인
  pull(reply)                                             # 문서를 벡터 형태로 출력
 [1] "한국문화는 1등수준. 정치는 개돼지 3등수준. 대한민국 문화수준을 엎 그레이드 한 봉준호감독에게 존경을 표한다. 월드컵4강.봉준호감독 오스카수상. 한국국민들 절대로 잊혀지지않는 대사건이다. 정말 진심으로 축하드립니다.특히 CJ가 한국영화 산업에 큰 발전에 국민의 한 사람으로 감사드린다."
 [2] "진심 축하드립니다. 대한민국 예술처럼 정치, 경제도 발전해서 살기좋은 나라가 되었으면 좋겠네요"                                                                                                                                                                                         
 [3] "이 작품을 기준으로 앞으로도 계속 쓰여질 것입니다. 진심으로 축하드립니다^^"                                                                                                                                                                                                            
 [4] "소름이 돋을 정도로 믿기지 않습니다! 진심으로 축하드립니다 살인의추억을 보고 우리나라에도 이렇게 훌륭한 영화를 만드는 감독이 있구나 느꼈고 그 이후로 계속 봉감독님 영화를 챙겨보게 되었는데 이제는 세계인도 인정해주는 감독이 되어 너무나도 벅찹니다 다시한번 진심으로 축하드립니다"   
 [5] "봉감독님 진심 축하드립니다! 아카데미에서 외국 영화 기생충이 4관왕을 차지했다는 것은 아카데미도 기류가 바뀌고 있다는 ... 험지에서 대단한 업적을 남긴 감독, 배우들, 스텝들에게 찬사를 보냅니다!"                                                                                        
 [6] "기생충!! 우와~~^^이게 실화인가요? 진심으로 축하드려요"                                                                                                                                                                                                                                
 [7] "정말 대단하다는 말밖에는~ 진심으로 축하드립니다. 앞으로도 좋은 작품 많이 만들어주세요~^^"                                                                                                                                                                                             
 [8] "진심으로 축하드립니다. 자랑스럽습니다."                                                                                                                                                                                                                                               
 [9] "진심 축하드려요 봉준호감독님 진심 응원합니다"                                                                                                                                                                                                                                         
[10] "한국영화계에 이런일이 생길 줄은 꿈에도 몰랐는데 4관왕 진심으로 축하드립니다."                                                                                                                                                                                                         
[11] "영화 보면서 봉준호는 천재다 라고 외쳤는데~ 진심 자랑스럽다 축하합니다"                                                                                                                                                                                                                
[12] "와 진심 대박 ㅜㅜ 화이트 파티인 아카데미에서 ㅠㅜ"                                                                                                                                                                                                                                    
[13] "와.. 대박 진심 호명순간 소리질렀어여"                                                                                                                                                                                                                                                 
[14] "김기덕 감독님 영화는 이렇게 해야됩니다. 맨날 어둡고 보기 힘든 영화만 만들지 마시고 이런 작품도 만들어 주세요! 봉 감독님 진심 축하드립니다."                                                                                                                                           
[15] "세계가 인정하는 대한민국 예술! 진심으로 자랑스럽다ㅠㅠ"                                                                                                                                                                                                                               
[16] "근데 나는 봉준호 송강호도 대단하지만 이선균이 진심 대단함. 이선균 필모는 넘사네 진짜. 작품도 다양하고."                                                                                                                                                                               
[17] "이걸 정치적으로 까는거보면 뇌가있나 싶다 진심으로 /"                                                                                                                                                                                                                                  
[18] "축하드립니다. 대한민국 사람으로서 봉준호감독님 세계적인 거장에 한걸음 다가가신걸 진심으로 축하드려요~~^^"                                                                                                                                                                             
[19] "우와 !!!!! 진심으로 축하드려요 !!!!"                                                                                                                                                                                                                                                  
[20] "어~~ 진짜 되네? 진심으로 축하드려요"                                                                                                                                                                                                                                                  
[21] "진심 축하드립니다~~~ 너무 멋져요!!"                                                                                                                                                                                                                                                   
[22] "대박입니다~~ 진심으로 축하합니다~!!!"                                                                                                                                                                                                                                                 
[23] "와 대박이네요 ~ 진심으로 축하드립니다."                                                                                                                                                                                                                                               
[24] "아카데미 4관왕 거머쥐신 봉준호 감독님 진심 추카드려요"                                                                                                                                                                                                                                
[25] "미쳤다 진심 비명지르고"                                                                                                                                                                                                                                                               
[26] "진심 대박이다.와"                                                                                                                                                                                                                                                                     
[27] "캬 역사를만드셨네 진심 축하드립니다"                                                                                                                                                                                                                                                  
[28] "와...진심 미쳤다이건."                                                                                                                                                                                                                                                                
[29] "진심 축하드려요 영화못봤는데 봐야겠네요"                                                                                                                                                                                                                                              
[30] "진짜 자랑스럽고 하고싶은 말이 많은데 벅차서 글이 안써지네요 봉감독님~♡ 진심으로 축하드려요"                                                                                                                                                                                          
[31] "너무 자랑스럽다. 진심. 레알."                                                                                                                                                                                                                                                         
[32] "진심 소름~~축하해요!"                                                                                                                                                                                                                                                                 
[33] "봉준호 감독관님 진심으로 축하드립니다."                                                                                                                                                                                                                                               
[34] "와 너무 기쁘다! 이 시국에 정말 내 일같이 기쁘고 감사하다!!! 축하드려요 진심으로!!!"                                                                                                                                                                                                   
[35] "진심...너무 자랑스럽습니다. ㅠㅠㅠㅠㅠ 너무 감격스러워요 ㅠㅠㅠ"                                                                                                                                                                                                                      
[36] "진심 역사적인 쾌거입니다."                                                                                                                                                                                                                                                            
[37] "진심 동시대에 살고 있는 것만으로도 영광스럽다ㅠㅠㅠ"                                                                                                                                                                                                                                  
[38] "봉준호 감독! 기생충! 송강호외 배우님들 대한민국 진심으로 축하합니다~"                                                                                                                                                                                                                 
[39] "진심으로 축하하며 여러분들이 진정한 애국자네요"                                                                                                                                                                                                                                       
comment_topic %>%                                         # gamma 값이 내림차순으로 정렬된 객체 in 5-1-1
  filter(topic == 1 & str_detect(reply, "정치")) %>%      # 토픽 1로 분류된 문서에서 "정치"을 포함하는 문서만 추출
  head(50) %>%                                            # 처음 50개의 문서만 확인
  pull(reply)                                             # 문서를 벡터 형태로 출력
 [1] "한국문화는 1등수준. 정치는 개돼지 3등수준. 대한민국 문화수준을 엎 그레이드 한 봉준호감독에게 존경을 표한다. 월드컵4강.봉준호감독 오스카수상. 한국국민들 절대로 잊혀지지않는 대사건이다. 정말 진심으로 축하드립니다.특히 CJ가 한국영화 산업에 큰 발전에 국민의 한 사람으로 감사드린다."
 [2] "진심 축하드립니다. 대한민국 예술처럼 정치, 경제도 발전해서 살기좋은 나라가 되었으면 좋겠네요"                                                                                                                                                                                         
 [3] "좌좀세력, 태극기부대, 빨갱이, 일베애들과 이런것들을 이용애 먹는 정치인들만 없어지면 우리나라 엄청 발전할텐데...기업, 문화 모두 선진국인데 저런것들이 발목을 잡고 너무 깍아먹는다."                                                                                                    
 [4] "정치충들 상은 봉준호가 받았는데 왜 정치얘기를하고있냐"                                                                                                                                                                                                                                
 [5] "문화는 일류 정치는 삼류에 개막장"                                                                                                                                                                                                                                                     
 [6] "정치만 후진국이다 방탄소년다/봉준호감독 화이팅"                                                                                                                                                                                                                                       
 [7] "영화, 엔터, 기업 모두 일류인데, 이놈의 정치는 언제까지 3류할거냐 ? 썪어 빠진 한국 정치도 좀 국제적인 상을 받을 수 있게 혁신 좀 하자."                                                                                                                                                 
 [8] "너무좋은소식에 같이 즐기고픈데 정치댓글이ㅜㅜ 그치만4관왕..ㅎㄷㄷ 너도나도축하~"                                                                                                                                                                                                      
 [9] "한류의 또다른 이정표를 봉준호가 해내는구가 오스카상 특히 작품상은 비영어권 국가가 수상하기 어려운 상당히 보수적인데 대단하다 썩은 정치로 한숨쉬는 국민들에게 또 다른 희망과 자부심을 심어줘서 고맙다"                                                                                 
[10] "결국 구체적으로 보면 영화얘기고, 더 넓게 보면 사회풍자 블랙코미디인데, 축하는 못 해 줄망정 여기서 정치질 하는 쓰레기들은 뭐꼬?"                                                                                                                                                       
[11] "닭근혜 자망당 하에서 불랙리스트로 엄청난 고생을 해왔던 분들, 이제 진정한 민주주의 나라에서 마음껏 능력을 발휘해서 최고의 상을 수여받았네! 축하합니다. 이것은 바로 토착왜구 자한당, 조중동, 윤석렬정치개검들, 틀딱, 빤스먹사놈들이 사라져야 나라가 발전한다는 확실한 증거이다."        
[12] "정치하는 놈들아 잘봐라 이게 애국하는거다. 느들은 지금 뭐하고 있냐?"                                                                                                                                                                                                                   
[13] "이제 좌빨 위선자들 이야기로 영화 만들면 국제대회에서 상 휩쓴다는 좋은 전례를 만들었네..봉준호 감독도 옛날 가당치도 않던 괴물 이런 정치 놀음 그만두고 이번 기생충 처럼 영화다운 영화 많이 만들어주길.."                                                                                
[14] "개인적으론 봉감독 작품중에 여전히 살인의 추억이 가장 인상깊지만... 기생충은 전세계적으로 화두가 된 주제선정이 탁월했고 풀어내는 모양새도 능수능란하게 과하지도 덜하지도 않게 딱 좋았다. 여유있게 유머를 가지고 오스카를 향한 긴 레이스에서 정치[?]도 잘했다."                         
[15] "와 이런 좋은일에도 정치댓글로 편가르기 하는 놈들이 있네"                                                                                                                                                                                                                              
[16] "역시 한국은 정치하는 새끼들 수준만 올리면 됨."                                                                                                                                                                                                                                        
[17] "아무데나 똥오줌 못가리고 정치적 댓글 쓰는 정치충들 극혐"                                                                                                                                                                                                                              
[18] "아무데나 정치적 댓글 다는 수준미달 정치충들 한심하다."                                                                                                                                                                                                                                
[19] "이런 축하할 기사까지 굳이 와서 정치얘기하는 사람들은 정신좀 차리세요."                                                                                                                                                                                                                
[20] "정치적인 문제가 있더라도 정치 기사가서 논합시다. 여기선 축하해야 할 곳이라 생각합니다."                                                                                                                                                                                               
[21] "이걸 정치적으로 까는거보면 뇌가있나 싶다 진심으로 /"                                                                                                                                                                                                                                  
[22] "다른 작품들도 진짜 쟁쟁했는데.... 이건 대한민국 영화의 새로운 역사입니다!!! 봉 감독님 진짜 축하드려요!!! 그리고 수구꼴통 토착왜구 새끼들아!!! 제발 이런걸 정치적인거랑 엮지마라!!!!! 늬들의 행태 너무나 역겹다!!!!!!"                                                                 
[23] "인터뷰 봐라, 가장 한국적이어서 통한 것 같다고..한국 현실 다큐가 영화 모티브인데..말은 몰라도 얼마나 실감나겠나? 아마도 한국 블랙 정치 다큐도 모티브로 해서 세미 코메디 영화 만들면 대박날 듯..얼마나 실감나겠어?"                                                                     
[24] "기생충보면서 좌파 우파 정치성향 난 잘 모르겠든데 굳이 보려구한다면 사회주의공산주의 맨 위 기득권 상위층에 대한 하층서민의 반란... 설국열차도 역시 공산주의 최고층에대한 투쟁인거 같음"                                                                                                
[25] "정치적 발언이라 좀 그렇치만.. 박근혜정부엿다면 불가능햇을 일."                                                                                                                                                                                                                        
[26] "정치는 정말 잘해도 본전도 못찾는 직업인듯 차라리 그 머리로 다른 분야에 도전한다면 봉준호 같은 사람이 되지 않을까 생각"                                                                                                                                                                
[27] "대한민국 국민이라는게 자랑스럽습니다. 정치 기레기들만 아니면 이나라는 더 발전 할수 있을텐데.."                                                                                                                                                                                        
[28] "장하십니다. 정말 축하드리며 오늘 만큼 한국인이라는것이 자랑스럽기는 처음입니다. 우리나라는 정치인들 빼고는 모든국민들이 열심입니다."                                                                                                                                                  
[29] "정치 이야기는 가슴에 쳐 박아라ㅋㅋㅋ 칭찬하고 자랑스럽고 내 마음 속에 태극기가 펄럭인다 축하드리고 고생 많으셨네요"                                                                                                                                                                   
[30] "좌우도 뭣도 아닌데 봉준호 감독 기사마다 축하해도 모자랄판에 블랙리스트 어쩌고 저쩌고 자꾸 정치색 입히는 댓글들 한두개면 이해하겠는데 대체 몇개나 올리는거야 ㅈㄴ 눈새들 같아 작작 좀 해"                                                                                              
[31] "예술에 정치는 끼어들지 마라!!!!! 문화가 올라갔는데 이제는 우리가 수준이 올라가야지...언제까지 정치에 휘둘리거냐??? 예술은 예술 그게 진정 선진국민이 되는 길이다!"                                                                                                                     
[32] "수준떨어지는 정치인 나부랭이들아 우리나라 문화대국에 기여하는 사람들의 코딱지 만큼만이라도 따라가봐라"                                                                                                                                                                                
[33] "문화계 블랙리스트로 나라에 거장들을 자기들 정치적 목적으로 매장시키지 말아라"                                                                                                                                                                                                         
[34] "닭똥쥐똥의 후예들이 아직도 정치판에서 설치고있으니 반드시 괴멸시켜야하는 국민의 임무가있다"                                                                                                                                                                                           
[35] "진짜 우리나라는 아무짝에 쓸모없는 정치하는것들 빼고는 다들 세계최고임..봉감독님과 스텝분들 배우분들 다시 한번 축하드립니다~~"                                                                                                                                                         
[36] "그동안 보수정권 하에선 아카데미에 출품되려면 정부 당국과 감독의 정치성향이 맞아떨어져야 가능했음"                                                                                                                                                                                     
[37] "확실히 개이버 정치사회 뉴스에 자한당 일베충 650원 알바들이 활동하는게 맞구나 , 이런 뉴스에는 베댓에 오르지 않는것 보니...ㅉㅉ"                                                                                                                                                        
[38] "정치인들이 봉준호같으면 좋겠습니다."                                                                                                                                                                                                                                                  
[39] "정치하는 잡쓰레기들이 반에 반만이라도 잘하면 되는데"                                                                                                                                                                                                                                  
[40] "축하하고 기뻐해야 할 일을 정치적으로 따지는 모자란 것들은 뭐지? 그냥 즐겨 뭐 맨날 상 받을 줄 알아? 받았을 때 즐기라고."                                                                                                                                                               
[41] "여기에서 정치얘기 하지 말아주세요."                                                                                                                                                                                                                                                   
[42] "한국역사의 획을 긋는다!!! 정치하는 세끼들 봉준호 똥이나 빨아라!!!"                                                                                                                                                                                                                    
[43] "전국민이 감격하고 자랑스러운 역사적인 사건에도 정치적인 이념과 진영논리를 내세우는 사람들~ 제발 쫌 그냥 기뻐하고 벅찬가슴을 즐길수 있게 해주세요~"                                                                                                                                    
[44] "너 정의당원이지 않나? 봉! 정치얘기하지마!"                                                                                                                                                                                                                                            
[45] "울 나라는 정치하는 인간들 빼면 참 훌륭한 나라여...^^"                                                                                                                                                                                                                                 
[46] "정치 운운하면서 댓글판 더럽히는것들 개극혐"                                                                                                                                                                                                                                           
[47] "좌건 우건 모르겠고, 이런일에까지 정치 들이밀면서 물 흐리지 말아줬으면..."                                                                                                                                                                                                             
[48] "그냥 축하합시다! 정치이야기 꼭 해야겠습니까~!!"                                                                                                                                                                                                                                       
[49] "작품에 정치관련 글은 안썻으면 좋겠는데"                                                                                                                                                                                                                                               
[50] "정치외교는 엉망인데 예술인들은 역사에 한 획을 긋는구나"                                                                                                                                                                                                                               

Result! 토픽 1은 주로 작품상 수상을 축하하거나 정치적인 문서(댓글)를 비판하는 내용으로 구성된다는 것을 알 수 있다. 토픽 2~8도 동일한 패턴으로 주요 단어가 사용된 문서(댓글)을 추출해 확인할 수 있다.
Caution! comment_topictibble 자료형이므로 Console 창 크기에 맞추어 일부만 출력된다. 함수 pull()을 이용하면 변수를 벡터 타입으로 추출하므로 전체 내용을 출력할 수 있다.


# 토픽 2 내용 살펴보기
comment_topic %>%                                         # gamma 값이 내림차순으로 정렬된 객체 in 5-1-1
  filter(topic == 2 & str_detect(reply, "대박")) %>%      # 토픽 2로 분류된 문서에서 "대박"을 포함하는 문서만 추출
  head(50) %>%                                            # 처음 50개의 문서만 확인
  pull(reply)                                             # 문서를 벡터 형태로 출력
 [1] "아직도 믿기지않네. .아카데미 시상식.하면 정말 남의나라 얘기처럼 멀게만 느껴졌는데.영화인들은 더 오죽할까.정말 대박사건이다."                                                                      
 [2] "진심으로 축하드립니다 솔직히 2개 부문 정도 생각했는데 4개의 상 이것은 대박^^ 작품상 감독상받았으면 최고의 영화로 인정받은것 같네요 다음에는 조연상 주연상도 받았으면 좋겠네요"                    
 [3] "본방사수 중. 시상식장에 낯익은 얼굴들. 한국어 소감. 대박사건입니다. 아카데미시상식을 본방으로 볼줄이야. ^^ 자랑스럽습니다. 흥하라 기생충. 다음 노미네이트에서도 수상으로 이어지기를 기대해봅니다."
 [4] "대박 시상식 보는 내내 소름돋았네요 멋집니다! 남들 잔치인줄 알았는데 우리 잔치였네요 오늘은^^축하합니다"                                                                                           
 [5] "90년 역사상 처음이라니...대박이네...1년동안 나온 수많은 영화중에 한국영화가 넘버원이라니....소름이 끼치네"                                                                                        
 [6] "대단하네요. 아카데미 작품상 수상작을 자막없이 볼 수 있다니 대박!!수상기념 기생충 극장 재개봉 해주세요"                                                                                            
 [7] "와 소름 대박 안 믿겨 ㅜㅜ"                                                                                                                                                                        
 [8] "진짜...대박이다 대박...와 소름돋음"                                                                                                                                                               
 [9] "대박 소리질렀다. 와 쩐다 진짜."                                                                                                                                                                   
[10] "진짜 이럴땐 내가 한국사람인거에 자부심과 자긍심 뿜뿜 이다 축하드립니다 진짜 좋은소식하나없는 요즘 대박사건이다"                                                                                   
[11] "진짜 대박이다. 실시간으로 이걸 지켜보다니 ㅋ"                                                                                                                                                     
[12] "봉준호 경사났네 대박중에 대에박 축하합니다"                                                                                                                                                       
[13] "대박!!! 대한민국 국민이라는게 너무 자랑스럽네요!"                                                                                                                                                 
[14] "대박이고 패러사이트를 외칠때 소름이 돋았다 축하드립니다 !!"                                                                                                                                       
[15] "와우 소름! 대박이다 정말!!"                                                                                                                                                                       
[16] "대박 축하요! 자랑스러운 한국인"                                                                                                                                                                   
[17] "아카데미 감독상 한개 더 추가요~ 정말 대박입니다."                                                                                                                                                 
[18] "대박이다 1917 감독이 받을 줄 알았는데 역사를 쓰셨다"                                                                                                                                              
[19] "대박..대박.....진짜 대박...봉준호 감독님과 우리 배우들 너무 다랑스러워요!!!!!"                                                                                                                    
[20] "대박! 추카 추카 추카...칭찬할껀 칭찬합시다..대단하다."                                                                                                                                            
[21] "대박 소오름~ 시상식을 보니 믿어지지 않네요 영광입니다^^"                                                                                                                                          
[22] "와 진심 대박 ㅜㅜ 화이트 파티인 아카데미에서 ㅠㅜ"                                                                                                                                                
[23] "대박 우리나라 청룡영화제보다 상을 더받은거?? 대박 소름 ㅠㅠㅠㅠㅠㅠ"                                                                                                                              
[24] "우리나라에서 오스카 4관왕이라니.. 대박이네여~ 축하드립니다. ♡♡♡"                                                                                                                               
[25] "대박 작품상까지 이 땅에서 토왜.친일파들이 모두 사라지는 그날까지~"                                                                                                                                
[26] "대박이다.. 더 이상 표현할 단어가 없다"                                                                                                                                                            
[27] "감독상 대박이다 ㅠㅠㅠㅠㅠ쟁쟁한 감독들 다 제쳤네 자랑스럽다!!!!"                                                                                                                                 
[28] "헐..추카드립니다..대박. 어메이징.."                                                                                                                                                               
[29] "대박 소름 간만에 너무 좋은소식 감사합니다~~!!^^"                                                                                                                                                  
[30] "와 진짜 대박이다 봉준호 언젠가 정말 세계적으로 인정 받는 날이 올줄은 알았지만 와와 짐작하는 팬조차도 놀라자빠짐"                                                                                  
[31] "대박대박 와우 축하합니다 한국의 위상을 알리셨네요 와 정말 놀랬습니다 수상소감도 멋지구요"                                                                                                         
[32] "좌파영화인 봉준호가 좌파영화로 아카데미 작품상. 대박~~~ 배 아프겠다 안보겄다던 쓰레기들."                                                                                                         
[33] "와 대박! 감독도 한국의 위상을 올리는데 대가리는 욕만 먹고 다니고 무시당하고 참 비교된다... 나라 말아먹는 검덤"                                                                                    
[34] "와 진짜 대형 사고쳤구만쫌...많이 오버해서 최대치로 축하합니다~말그대로 대박이네요 정말정말 축하해요!!"                                                                                            
[35] "와우~!!!6개 노미네이트 된것도 대박인데... 그중에 하나라도 수상하면 완전 초대박이죠~!!!"                                                                                                           
[36] "와 대단하다 진짜 축하드려요!!! 대박 진짜"                                                                                                                                                         
[37] "대박 3관왕!!축하합니다"                                                                                                                                                                           
[38] "기생충 보고 와 대박이다 했는데..진짜 대박이네요!!"                                                                                                                                                
[39] "우와 대박 미쳤다 축하축하"                                                                                                                                                                        
[40] "이제 시작이다 캬 대박"                                                                                                                                                                            
[41] "대박♡축하 축하"                                                                                                                                                                                  
[42] "우와ㅡ대박~~~~진자 대단하다 봉준호"                                                                                                                                                               
[43] "미쳤다 대박 축하합니다"                                                                                                                                                                           
[44] "햐 이건 대박중에 대박이다"                                                                                                                                                                        
[45] "와와와! 대박!!봉감독님 축하합니다!!!"                                                                                                                                                             
[46] "우와 ㅋㅋㅋ 대박!!! 축하드립니다~~~"                                                                                                                                                              
[47] "찢었다...미쳤다...대박...소름..."                                                                                                                                                                 
[48] "와.. 진짜 대박... 소름..."                                                                                                                                                                        
[49] "와 미쳤다 !!!대박이다"                                                                                                                                                                            
[50] "와 봉준호 대박!!! 축하드려요"                                                                                                                                                                     
comment_topic %>%                                         # gamma 값이 내림차순으로 정렬된 객체 in 5-1-1                       
  filter(topic == 2 & str_detect(reply, "시상식")) %>%    # 토픽 2로 분류된 문서에서 "시상식"을 포함하는 문서만 추출
  head(50) %>%                                            # 처음 50개의 문서만 확인
  pull(reply)                                             # 문서를 벡터 형태로 출력
 [1] "역대시상식 봐봐라 어디 제작사 사장이 나와서 설치냐? 현타온다. 디즈니 영화 작품상타면 밥아이거가 껴드냐?"                                                                                                                                                                                                
 [2] "아직도 믿기지않네. .아카데미 시상식.하면 정말 남의나라 얘기처럼 멀게만 느껴졌는데.영화인들은 더 오죽할까.정말 대박사건이다."                                                                                                                                                                            
 [3] "본방사수 중. 시상식장에 낯익은 얼굴들. 한국어 소감. 대박사건입니다. 아카데미시상식을 본방으로 볼줄이야. ^^ 자랑스럽습니다. 흥하라 기생충. 다음 노미네이트에서도 수상으로 이어지기를 기대해봅니다."                                                                                                      
 [4] "너무 감동이라 시상식 본방 못봐서 재방으로 보고 있네요. 오늘은 너무나 자랑스러운 한국입니다!!!! 봉준호감독님 수고 하셨어요~~^^"                                                                                                                                                                          
 [5] "대박 시상식 보는 내내 소름돋았네요 멋집니다! 남들 잔치인줄 알았는데 우리 잔치였네요 오늘은^^축하합니다"                                                                                                                                                                                                 
 [6] "근데 조여정 영화에서 너무 예쁘게 나왔었는데 왜 시상식에서는 키도 너무 작아보이고..머리도 커보이고..드레스는 왜 또 단점을 부각시켜 입었나요ㅜㅜ 보는제가 다 속상하더이다."                                                                                                                               
 [7] "어릴때부터보던 저 오스카시상식에 우리나라 포스터가 위너에 올라간거보니.진짜 뭉클..다음엔 박찬욱감독님 받읍시다"                                                                                                                                                                                         
 [8] "대박 소오름~ 시상식을 보니 믿어지지 않네요 영광입니다^^"                                                                                                                                                                                                                                                
 [9] "봉준호 감독님~ 자랑스럽습니다!! 참 멋진 시상식에 행복함이 가득합니다!"                                                                                                                                                                                                                                  
[10] "기생충, 2020 아카데미 시상식에서 지금 최고 대상인 작품상을 비롯하여 각본상, 외국어영화상, 감독상까지 모두 싹쓸이!!! 이게 꿈이냐??!@@ 1개만 타도 대성공인데....봉준호감독님! 오늘은 대한민국이 전 세계에 K-POP에 이어 영화도 선전포고를 한 역사적인 날!! 한국 영화, 이제부터 시작입니다!!!........"      
[11] "아카데미주최측입장에선 로컬시상식이라 한 봉감독님 말에 승부욕생기신듯ㅋ"                                                                                                                                                                                                                                
[12] "시상식장 앉아있는 배우들반응보고 더소름 끼침..대단함 봉준호"                                                                                                                                                                                                                                            
[13] "해방 후 100년도 안 된 역사의 대한민국에서 아카데미 시상식 4관왕이라는 업적을 세운 건 앞으로도 전무후무한 기록이 될 듯"                                                                                                                                                                                  
[14] "오스카후보에 오른것만도 한국영화100년역사의 큰획일텐데 4관왕이라니요..정말 대단하십니다.봉감독님 ..존경합니다.오스카가 로칼시상식이라고 일침을놓으셨을때 너무 통쾌했었는데^^ 기생충영화와 관련된 모든관계자분들 다시한번 진심 축하드리며 고생하셨습니다.대한민국의 한사람으로 너무나 감동적인 하루네요."
[15] "와!! 백인들한테만 상준다는 로컬시상식에서 동양인으로 상을 받다니 봉감독은 실력으로 차별을 찢어버렸네 !!"                                                                                                                                                                                                
[16] "축하축하합니나. 그리고 원래 작품상은 제작자가 주된 수상자예요. 이미경도 소감 당연히 하는것임. 시상식 첨보는 사람들 많네요."                                                                                                                                                                             
[17] "아카데미시상식 보는 중인데 와 대단해요"                                                                                                                                                                                                                                                                 
[18] "요즘 오스카는 대중성[어렵지 않고 재미가 있는] 없는 영화에 상을 안주는 경향이 있다. 시상식의 화제성과 흥행 때문이겠지. 작년 수상작 그린북도 그랬고 기생충 역시 작품성과 대중성 모두 갖췄다는게 4관왕의 비결인듯."                                                                                        
[19] "시상식보면서 네번소리지름.대박~~"                                                                                                                                                                                                                                                                       
[20] "기생충을 위한 시상식이었다. 대단하고 자랑스럽다!"                                                                                                                                                                                                                                                       
[21] "시상식 보고 눈물나기는 처음이네요."                                                                                                                                                                                                                                                                     
[22] "아카데미 시상식에서 한국어가 소감이 나올줄이야..."                                                                                                                                                                                                                                                      
[23] "봉감독이 아카데미 로컬 시상식이라고 한 말이 자극을 준 듯"                                                                                                                                                                                                                                               
[24] "이 시상식에서 제일 높은 상이 머임? 대상같은거없나"                                                                                                                                                                                                                                                      
[25] "주~~~~~~모 !!!!! 와 아카데미 시상식에서 한국어 수상소감을 생중계로 듣다니 ㅎㄷㄷ"                                                                                                                                                                                                                       
[26] "엠넷 시상식도 아니고 국내에서 듣보시상식인 아카데미로 언플하냐 ㅉㅉ"                                                                                                                                                                                                                                    
[27] "아카데미 시상식 마지막을 한국인이 장식하내~헐"                                                                                                                                                                                                                                                          
comment_topic %>%                                         # gamma 값이 내림차순으로 정렬된 객체 in 5-1-1
  filter(topic == 2 & str_detect(reply, "오늘")) %>%      # 토픽 2로 분류된 문서에서 "오늘"을 포함하는 문서만 추출
  head(50) %>%                                            # 처음 50개의 문서만 확인
  pull(reply)                                             # 문서를 벡터 형태로 출력
 [1] "대한민국 국민인게 오늘에서야 자랑스럽습니다~~ 대단한 일을 하신 봉준호 감독님 및 제작자, 배우 등 모든 스태프 분들에게 찬사를 보냅니다... 정치인 빼놓고 대한민국 국민은 위대합니다~~"                                                                                                                                                                                               
 [2] "완전 소름!!!! 정말 축하합니다!!! 그래서 오늘 식구들과 치맥 파티하려고요 ㅋ"                                                                                                                                                                                                                                                                                                       
 [3] "너무 감동이라 시상식 본방 못봐서 재방으로 보고 있네요. 오늘은 너무나 자랑스러운 한국입니다!!!! 봉준호감독님 수고 하셨어요~~^^"                                                                                                                                                                                                                                                    
 [4] "충무로 시위가 생각난다. 스크린 쿼터 폐지하면 한국 영화는 망한다. 연예인들이 총출동 해서 깃발을 들었었다. 결과는 한국영화가 극장을 점령하고 허리우드를 삼켰다. 일본 문화를 개방하면 일본 드라마가 한국 안방을 점령할 것이라며 반대했다. 결과는 한류가 일본을 점령했다. 어떤 문화든 보호 받으면 성장하지 못 한다는 교훈을 얻었다. 한국 영화가 보호 받았다면 오늘의 봉준호는 없었다."
 [5] "대박 시상식 보는 내내 소름돋았네요 멋집니다! 남들 잔치인줄 알았는데 우리 잔치였네요 오늘은^^축하합니다"                                                                                                                                                                                                                                                                           
 [6] "쾌거다 ~!! 축하합니다 봉감독님 밤새도록 술마실 자격 충분합니다 오늘은 마음껏 즐기세요 다시한번 축하드립니다."                                                                                                                                                                                                                                                                     
 [7] "오늘 최고의 날"                                                                                                                                                                                                                                                                                                                                                                   
 [8] "그린일베들 오늘은 조용하넹?"                                                                                                                                                                                                                                                                                                                                                      
 [9] "ㅠㅠ 멋쩌부려. 오늘만 국뽕에 취할꺼임~"                                                                                                                                                                                                                                                                                                                                           
[10] "큰일 하셨네요 오늘은 대한민국이 자랑스러운 날이네요"                                                                                                                                                                                                                                                                                                                              
[11] "오늘 마 내 국뽕한짝 마 들이부어야 겠수다"                                                                                                                                                                                                                                                                                                                                         
[12] "오늘은 더 이상 정치 색칠 놀이는 접고 같이 축하하고 즐기세요..맨날 종편과 유투브만 보지말고 문화생활도 좀 접하면서 보편타당한 상식과 마음의 여유도 만끽하면서 건강도 챙기세요"                                                                                                                                                                                                     
[13] "고백하건데 난 정말 씨크하고 감정표현력이 부족하다. 인생 절반 살면서 부끄럽지만 타인에게 박수 보낸적이 별로 없다. 그런데 오늘! 나는 진심으로 기생충 관계자들에게 박수를 쳐본다. 그것도 진심담긴 손바닥이 빨개질때까지..... 어쩜 앞으로의 내삶도 변화가 올만큼... 감사하고 다시한번 진심으로 박수를 보낸다. 짝! 짝! 짝!"                                                            
[14] "오늘의 아카데미 주인공은 봉준호 감독인듯.. 수상소감으로 관중을 들었다 놨다!!ㅋㅋ"                                                                                                                                                                                                                                                                                                 
[15] "미쳤네 살아생전 대한민국 영화가 아카데미 수상이라니 주모 오늘 국뽕 세 사발"                                                                                                                                                                                                                                                                                                       
[16] "와 오늘 진짜 제대로 국뽕이네요. 코로나땜에 전 국민이 걱정이 태산인데 기생충이 오랫만에 큰 기쁨 주네요. 봉준호감독님 외 기생충 스태프분들 자랑스럽습니다. 수고하셨습니다~"                                                                                                                                                                                                         
[17] "기생충, 2020 아카데미 시상식에서 지금 최고 대상인 작품상을 비롯하여 각본상, 외국어영화상, 감독상까지 모두 싹쓸이!!! 이게 꿈이냐??!@@ 1개만 타도 대성공인데....봉준호감독님! 오늘은 대한민국이 전 세계에 K-POP에 이어 영화도 선전포고를 한 역사적인 날!! 한국 영화, 이제부터 시작입니다!!!........"                                                                                
[18] "개닭순실 오늘 밥 굶겨라! 추카에 의미로다가ㅋㅋㅋ"                                                                                                                                                                                                                                                                                                                                 
[19] "오늘같은날엔 날 국뽕이라 놀려도 좋다 대한민국 만세 봉준호만세 참고로 나 준호랑 동갑이다 ㅋ"                                                                                                                                                                                                                                                                                       
[20] "오늘도 친일 매국노 소시오패스 일베충 벌래들 열폭 꿀쨈~!!!"                                                                                                                                                                                                                                                                                                                        
[21] "문화로 끌어올린 대한민국!! ㅎㅎ 중국몽♡ 북한몽♡문재앙이 나라 쑥대밭만드네 오늘도 역시"                                                                                                                                                                                                                                                                                          
[22] "MB 정부때 '문화계 블랙리스트'는 정말 볼품없다는게 다시 한번 드러나네요. 시련과 고난을 딛고 일어서서 세계적으로 권위있는 상을 타낸 봉준호 감독, 응원합니다! 오늘 성공을 축하하시며, 좋은 시간 보내시길 바랍니다."                                                                                                                                                                  
[23] "기생충 오늘 봤습니다. 진짜 상 받을만한 영화였네요"                                                                                                                                                                                                                                                                                                                                
[24] "오늘을 절대 잊지 못할 듯 합니다. ㅎㅎㅎ"                                                                                                                                                                                                                                                                                                                                          
[25] "크아~ 오늘은 국뽕에 맘껏 취해보련다~~~^^~"                                                                                                                                                                                                                                                                                                                                        
[26] "내일 아침까지 마실꺼라 하셨는데 ㅋ 진짜 막 이 순간 영광을 막 즐기시길 바래요 정말 축하드립니다 오늘 하루 봉봉봉 떠다니시길~!!^^"                                                                                                                                                                                                                                                  
[27] "오늘이 날이 날인 만큼 알벤다졸 두 알 먹어야 겠다~"                                                                                                                                                                                                                                                                                                                                
[28] "오늘 함 기생충 방영해 주세요!"                                                                                                                                                                                                                                                                                                                                                    
[29] "기쁘서 폴짝폴짝 뜀.축하합니다.오늘밤10시 녹방 사수"                                                                                                                                                                                                                                                                                                                               
[30] "봉감독님^^ 당신이 오늘 봉~~~입니다"                                                                                                                                                                                                                                                                                                                                               
[31] "오늘은 진짜 국뽕에 취해보자ㅋ"                                                                                                                                                                                                                                                                                                                                                    
[32] "오늘은 당신이 챔피언 입니다. 축하드립니다."                                                                                                                                                                                                                                                                                                                                       
[33] "주모 샷대내려 오늘은 국뽕에 취한다"                                                                                                                                                                                                                                                                                                                                               
[34] "뭉가 오늘 감독에게 전화걸겠지... 졸라 하는것도 없는 색기가. 꼭 밥숟가락 얹는거 꼴 뵈기 싫다."                                                                                                                                                                                                                                                                                     

5-1-3. 토픽 이름 목록 만들기

name_topic <- tibble(topic = 1:8,                         # 토픽 번호
                     # 토픽 이름
                     name = c("1. 작품상 수상 축하, 정치적 댓글 비판",
                              "2. 수상 축하, 시상식 감상",
                              "3. 조국 가족, 정치적 해석",
                              "4. 새 역사 쓴 세계적인 영화",
                              "5. 자랑스럽고 감사한 마음",
                              "6. 놀라운 4관왕 수상",
                              "7. 문화계 블랙리스트, 보수 정당 비판",
                              "8. 한국의 세계적 위상"))

name_topic
# A tibble: 8 × 2
  topic name                                 
  <int> <chr>                                
1     1 1. 작품상 수상 축하, 정치적 댓글 비판
2     2 2. 수상 축하, 시상식 감상            
3     3 3. 조국 가족, 정치적 해석            
4     4 4. 새 역사 쓴 세계적인 영화          
5     5 5. 자랑스럽고 감사한 마음            
6     6 6. 놀라운 4관왕 수상                 
7     7 7. 문화계 블랙리스트, 보수 정당 비판 
8     8 8. 한국의 세계적 위상                

5-2. 시각화

# 토픽별 주요 단어와 토픽 이름 결합
top_term_topic_name <- top_term_topic %>%              # 토픽별 주요 단어가 포함된 객체 in 3-2-3
  left_join(name_topic, name_topic, by = "topic")      # top_term_topic와 토픽 이름 목록 name_topic를 변수 topic을 기준으로 결합

top_term_topic_name
# A tibble: 83 × 4
# Groups:   topic [8]
   topic term        beta name                                 
   <int> <chr>      <dbl> <chr>                                
 1     1 작품     0.0299  1. 작품상 수상 축하, 정치적 댓글 비판
 2     1 진심     0.0240  1. 작품상 수상 축하, 정치적 댓글 비판
 3     1 정치     0.0192  1. 작품상 수상 축하, 정치적 댓글 비판
 4     1 자랑     0.0181  1. 작품상 수상 축하, 정치적 댓글 비판
 5     1 수상소감 0.0166  1. 작품상 수상 축하, 정치적 댓글 비판
 6     1 댓글     0.0151  1. 작품상 수상 축하, 정치적 댓글 비판
 7     1 외국     0.0122  1. 작품상 수상 축하, 정치적 댓글 비판
 8     1 경사     0.0107  1. 작품상 수상 축하, 정치적 댓글 비판
 9     1 훌륭     0.00998 1. 작품상 수상 축하, 정치적 댓글 비판
10     1 좌파     0.00814 1. 작품상 수상 축하, 정치적 댓글 비판
# ℹ 73 more rows
ggplot(top_term_topic_name,
       aes(x = reorder_within(term, beta, name),             # reorder_within : 토픽별로 변수 beta를 기준으로 내림차순 정렬 
           y = beta,
           fill = factor(topic))) +                          # 토픽별로 막대 색깔을 다르게 표현
  geom_col(show.legend = F) +                                # 막대 그래프
  facet_wrap(~ name,                                         # 변수 name의 항목별로 그래프 작성 -> 토픽별로 막대 그래프 작성
             scales = "free",
             ncol = 2) +                                     # 한 행에 2개의 막대 그래프 출력
  coord_flip() +                                             # 막대를 가로로 회전
  scale_x_reordered() +                                      # 단어 뒤에 토픽 이름 제거
  labs(title = "영화 기생충 아카데미상 수상 기사 댓글 토픽", # 제목
       subtitle = "토픽별 주요 단어 Top 10",                 # 부제목
       x = NULL, y = NULL) +                                 # x축과 y축 이름 제거
  theme_minimal() +
  theme(text = element_text(family = "nanumgothic"),         # 폰트 -> 3-2-3에서 정의한 나눔바른 고딕 폰트
        title = element_text(size = 12),                     # 제목 글자 크기
        axis.text.x = element_blank(),                       # x축 눈금 라벨 제거
        axis.ticks.x = element_blank())                      # x축 눈금 제거

Result! 출력한 그래프를 보면 토픽 이름과 주요 단어가 함께 표현되어 토픽의 특징을 쉽게 이해할 수 있다.


6. 최적의 토픽 개수


6-1. 토픽 개수를 정하는 방법

① 방법 1. 모델의 내용을 보고 해석 가능성을 고려해 토픽 개수 정하기


② 방법 2. 여러 모델의 성능 지표를 비교해 토픽 개수 정하기


③ 방법3. 방법 1과 방법 2를 함께 사용하기


6-2. 하이퍼파라미터 튜닝으로 토픽 개수 정하기


# 1. 토픽 개수를 바꾸어 가며 LDA 모델 여러개 만들기
models <- FindTopicsNumber(dtm = dtm_comment,                # DTM in 2-3-1 
                           topics = 2:20,                    # 2~20을 후보 토픽 개수로 둠
                           return_models = T,                # 모델 저장
                           control = list(seed = 1234))      # Seed 고정 -> 항상 동일한 결과를 출력

models %>%
  select(topics, Griffiths2004)                              # 변수 topics와 Griffiths2004만 출력
   topics Griffiths2004
1      20     -127213.1
2      19     -127445.4
3      18     -126984.0
4      17     -127317.9
5      16     -127139.2
6      15     -126643.9
7      14     -126742.4
8      13     -126720.4
9      12     -127429.4
10     11     -126677.9
11     10     -127039.5
12      9     -127133.2
13      8     -127234.1
14      7     -128079.5
15      6     -128948.9
16      5     -129672.9
17      4     -131006.8
18      3     -133171.8
19      2     -137154.4

Result! models를 출력하면 토픽 개수(topics)가 2~20인 19개의 모델이 들어 있음을 알 수 있다. 변수 Griffiths2004은 모델의 성능 지표로, 모델이 텍스트를 설명하는 정도를 나타낸 복잡도(Perplexity)를 의미한다. 모델이 텍스트의 구조를 잘 설명할수록 해당 변수가 큰 값을 가진다.
Caution! Griffiths2004Griffiths와 Steyvers (2004)가 제안한 복잡도 지표로, 다양한 연구에서 토픽 모델의 성능을 측정하는 데 활용되고 있다.
게다가, 함수 FindTopicsNumber()를 이용하면 Griffiths2004 외에 다른 복잡도 지표도 구할 수 있으며, Select number of topics for LDA model를 참고한다.


# 2. 최적의 토픽 개수 정하기
FindTopicsNumber_plot(models) 

Result! models를 함수 FindTopicsNumber_plot()에 적용하면 성능 지표를 이용해 선 그래프를 만든다. 그래프의 x축은 토픽 개수를 의미하고, y축은 성능 지표를 0~1로 최대-최소 정규화(Mix-max Normalization)한 값이다. 모델의 성능이 좋을수록 y축의 값이 크며, 후보 모델 중 성능이 가장 좋으면 1, 가장 나쁘면 0이 된다.
그래프를 보면 토픽 개수가 8개가 될 때까지는 성능 지표가 큰 폭으로 증가하다가 그 이후로는 약간씩만 증가하거나 등락을 반복한다. 성능이 비슷하면 단순한 모델을 사용하는 게 좋기 때문에 지금의 경우 토픽 개수를 8개로 정하면 적당하다. 이처럼 “토픽 개수를 늘려도 성능이 크게 향상되지 않고 등락을 반복하기 시작하는 지점”에서의 토픽 개수를 정한다. 만약 해석 가능성을 포기하더라도 성능을 가장 중요하게 고려해야 한다면 y축의 값이 1일 때의 토픽 개수를 정한다.


# 3. 모델 추출하기
optimal_model <- models %>%        
  filter(topics == 8) %>%          # 토픽 개수가 8개인 모델 추출
  pull(LDA_model) %>%              # LDA 모델 추출 
  .[[1]]                           # 첫 번째 리스트 출력

optimal_model
A LDA_Gibbs topic model with 8 topics.

Result! modelLDA_model에 리스트 구조로 된 토픽 모델이 포함되어져 있으며, 이를 추출하기 위해 위의 코드를 이용한다.


# 하이퍼파라미터 튜닝을 통해 구축된 LDA 모형
tidy(optimal_model, 
     matrix = "beta")              # beta 추출
# A tibble: 47,960 × 3
   topic term       beta
   <int> <chr>     <dbl>
 1     1 한국  0.000405 
 2     2 한국  0.0000364
 3     3 한국  0.0000353
 4     4 한국  0.00295  
 5     5 한국  0.0000353
 6     6 한국  0.0000356
 7     7 한국  0.00661  
 8     8 한국  0.0593   
 9     1 자랑  0.0181   
10     2 자랑  0.00440  
# ℹ 47,950 more rows
# 함수 LDA를 이용하여 구축된 LDA 모형
tidy(lda_model,                    # LDA 모델 in 2-3-2 
     matrix = "beta")              # beta 추출
# A tibble: 47,960 × 3
   topic term       beta
   <int> <chr>     <dbl>
 1     1 한국  0.000405 
 2     2 한국  0.0000364
 3     3 한국  0.0000353
 4     4 한국  0.00295  
 5     5 한국  0.0000353
 6     6 한국  0.0000356
 7     7 한국  0.00661  
 8     8 한국  0.0593   
 9     1 자랑  0.0181   
10     2 자랑  0.00440  
# ℹ 47,950 more rows

Result! optimal_model은 함수 LDA()를 통해 토픽 개수를 8개로 지정하여 구축된 모형 lda_model (참고. 2-3-2. LDA 모형 만들기)과 동일하다. 출력된 beta 값을 보면 결과가 같다는 것을 알 수 있다.


요약

# 1. LDA 모델 만들기
# 1-1. 문서별 단어 빈도 계산
count_word_doc <- count_word %>%                           # 불용어를 제거하고 유의어를 통일한 객체 in 2-2-4
  count(id, word, sort = T)                                # 문서별 단어 빈도 계산 

# 1-2. DTM 만들기
dtm_comment <- count_word_doc %>%                          # 문서별 단어의 빈도를 계산한 결과가 저장되어 있는 객체
  # DTM 생성
  cast_dtm(document = id,                                  # 문서 구분 기준
           term = word,                                    # 단어가 포함된 변수명
           value = n)                                      # 단어의 빈도가 포함된 변수명

# 1-3. LDA 모델
lda_model <- LDA(dtm_comment,                              # DTM in 2-3-1 
                 k = 8,                                    # 토픽 수
                 method = "Gibbs",                         # 샘플링 방법 : 깁스 샘플링
                 control = list(seed = 1234))              # Seed 고정 -> 항상 동일한 결과를 출력


# 2. 토픽별 주요 단어 확인
# 2-1. beta 추출
term_topic <- tidy(lda_model,                              # LDA 모델  
                   matrix = "beta")                        # beta 추출

# 2-2. 토픽별로 beta 값이 상위인 단어 추출
top_term_topic <- term_topic %>%                           # beta 값이 저장되어 있는 객체 
  group_by(topic) %>%                                      # 변수 topic에 대해 그룹화 -> 토픽별로 beta 값이 큰 단어를 추출하기 위해
  slice_max(beta, n = 10)                                  # beta 값이 가장 큰 10개 단어 추출

# 3. 문서를 토픽별로 분류
# 3-1. gamma 추출
doc_topic <- tidy(lda_model,                              # LDA 모델 
                  matrix = "gamma")                       # gamma 추출

# 3-2. 문서별로 확률이 가장 높은 토픽 추출 
doc_class <- doc_topic %>%                                # gamma 값이 저장되어 있는 객체 
  group_by(document) %>%                                  # 변수 document에 대해 그룹화 -> 문서별로 gamma 값이 가장 큰 토픽을 추출하기 위해
  slice_max(gamma, n = 1)                                 # gamma 값이 가장 큰 1개 토픽 추출

# 3-3. 변수 타입 통일
doc_class$document <- as.integer(doc_class$document)      # 변수 document를 정수형으로 변환

# 3-4. 문서에 확률이 가장 높은 토픽 번호 부여
news_comment_topic <- raw_news_comment %>%                # 원문 
  left_join(doc_class, by = c("id" = "document"))         # 원문의 변수 id와 doc_class의 변수 document를 기준으로 원문과 doc_class 결합


# 4. 토픽별 주요 문서 확인
# 4-1. 특정 토픽에서 gamma 값이 높은 순으로 문서 정렬
news_comment_topic %>%                                    # 원문에 토픽 번호를 부여한 객체
  filter(topic == 1) %>%                                  # 토픽 1에 분류된 문서만 추출
  arrange(-gamma) %>%                                     # 변수 gamma를 기준으로 내림차순 정렬
  select(reply)                                           # 문서만 출력

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".