본문 바로가기

정보

어린이 자외선 차단제 선크림 선블록│댓글 분석 │LDA 토픽 모델링 │R 한글 텍스트 마이닝

지난 포스팅에서는 어린이 자외선 차단제 댓글들을 이용하여 품사분석, 전처리 그리고 빈도분석까지 실행해 보았습니다. 이번 포스팅에서는 이어서 잠재 디리클레 할당(Latent Dirichlet Allocation, 이하 LDA) 기반의 토픽 모델링 분석 결과와 R 코딩을 공유하겠습니다. 분석 절차와 내용을 간단히 설명하면, 다음과 같습니다. 첫째 토픽 모델링 분석을 위한 R 패키지인 topicmodels을 추가 설치한 후, 명사만 추출하여 Document Term Matrix(이하 DTM)을 생성합니다. 둘째, 임의로 토픽 수를 5개로 설정한 후, 토픽 모델링 분석 결과를 제시합니다. 셋째, ldatuning R 패키지를 추가 설치한 후, 최적의 토픽 수를 결정합니다. 넷째, 최적의 토픽 수 기반의 새로운 토픽 모델 분석 결과를 시각화하여 제시합니다. 마지막으로 이번 포스팅에서 사용한 R 코드는 포스팅 맨 아래 업로드해 두겠으니 필요한 분들은 참고하시기 바랍니다. 

 

N-Gram 댓글 분석 │R 한글 텍스트 마이닝 │어린이 자외선 차단제 선크림

N-Gram은 말 그대로 N개의 연속적인 단어들의 나열을 뜻합니다. 코퍼스에서 N개의 단어로 나누고 이를 하나의 토큰으로 간주합니다. 여기서 N이 한 개 일 때는 유니그램(unigram), 두 개일 때는 바이

e-datanews.tistory.com

 

댓글 분석 │어린이 자외선 차단제 선크림 사례│R 한글 텍스트 마이닝

댓글 분석 방법에 관하여 정리하여 공유합니다. 분석 도구는 R을 이용하며, 분석 대상은 국내 어린이 자외선 차단제(혹은 선크림) 중 화장품 전문 리뷰 어플인 글로우픽에서 임의로 하나를 골랐

e-datanews.tistory.com

 

아이폰15 스마트폰 케이스 일본 리뷰 분석 사례 │야후재팬 │구글 노트북LM

웹스크래핑한 아이폰 15 케이스에 관한 일본 리뷰를 구글 노트북 LM으로 분석해 보고, 어떤 마케팅 인사이트를 얻을 수 있는지 정리하는 포스팅입니다. 구글 노트북 LM의 기본적인 사용법과 아이

e-datanews.tistory.com

 

마인드맵으로 유튜브 영상 분석 │아이폰15 케이스│Mapify 사용법

유튜브 영상 내용을 요약하는 다양한 AI 도구들을 소개한 바 있는데요. 가령, QuickVid, YTsuummarizer.io, Lilys.AI, Glarity ChatGPT, TRAW, Youtube summary with ChatGPT 가 그러한 예라고 할 수 있습니다. 이번 포스팅

e-datanews.tistory.com

 

1. Topicmodels 패키지 추가 설치 및 전처리 

이전 포스팅(댓글 분석 │어린이 자외선 차단제 │R 한글 텍스트 마이닝)에서 사용하였던 댓글 데이터와 R 텍스트 마이닝 코드를 그대로 이어서 사용합니다. 단, LDA 기반의 토픽 모델링 분석을 위한 추가 패키지 설치가 필요하며, 데이터 정제까지의 R 코드는 다음과 같습니다. 

# 추가 패키지 설치 및 로딩
install.packages("topicmodels")
library(topicmodels)

# 데이터 전처리 (정제) - id 추가
naverq_reviews <- naverq %>%
  mutate(reviews = str_replace_all(reviews, "[^가-힣]", " "),
  reviews = str_squish(reviews),
  id = row_number())

 

2. 품사 분석, 명사 추출 및 DTM 생성 

SimplePos09 기반의 품사 분석  후, 명사를 추출하고, naverq_reviews의 id를 유지한 상태에서 결합한 후, DTM을 생성하는 R 코드는 다음과 같습니다. 

# 품사분석 
reviews_pos <- naverq_reviews %>%
  unnest_tokens(input = reviews,
  output = pos,
  token = SimplePos09,
  drop = F)

# 명사 추출
reviews_pos_nouns <- reviews_pos %>% 
  filter(str_detect(pos, "/n")) %>%
  mutate(word = str_remove(pos, "/.*$")) %>%
  filter(str_length(word) > 1)

# naverq_reviews의 id를 유지한 상태에서 결합
reviews_pos_nouns <- reviews_pos_nouns %>%
  select(id, word) %>% # id와 word만 남김
  count(id, word, sort = TRUE) %>% # 단어 빈도 계산
  filter(n > 1)

# Document-Term Matrix 생성
dtm <- reviews_pos_nouns %>%
  cast_dtm(document = id, term = word, value = n)

 

3. LDA 토픽 모델링 분석 결과

임의로 토픽 수를 5개로 설정한 후, 각 토픽별로 10개의 상위 단어들을 추출하고, 각 토픽에 적정한 이름을 지정한 후,  토픽 모델 분석 결과를 도출하는 R 코드는 다음과 같습니다. 

# LDA 모델 생성 (토픽 수 5개로 설정)
lda_model <- LDA(dtm, k = 5, control = list(seed = 1234))

# 각 문서가 속하는 토픽 확인
topics <- tidy(lda_model, matrix = "beta")

# 토픽별 상위 단어 추출
top_terms <- topics %>%
  group_by(topic) %>%
  slice_max(beta, n = 10) %>%
  ungroup() %>%
  arrange(topic, -beta)

# 각 토픽에 이름 지정
topic_names <- c("토픽 1: 사용자 경험", "토픽 2: 제품 성능", "토픽 3: 가격 및 가치", "토픽 4: 디자인 및 외관", "토픽 5: 부작용 및 문제점")

# 토픽 이름을 데이터에 추가
top_terms_named <- top_terms %>%
  mutate(topic_name = topic_names[topic])

# 결과 확인
print(top_terms_named)

# 시각화 - 토픽별 상위 단어 시각화
top_terms_named %>%
  ggplot(aes(x = reorder_within(term, beta, topic_name), y = beta, fill = as.factor(topic_name))) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic_name, scales = "free_y") +
  coord_flip() +
  scale_x_reordered() +
  labs(title = "토픽 모델링 결과", x = NULL, y = "Beta 값") +
  theme_minimal()

댓글 분석 │어린이 자외선 차단제 선크림 │토픽 모델링 분석 결과
댓글 분석 │어린이 자외선 차단제 선크림 │토픽 모델링 분석 결과

 

4. ldatuning 패키지 추가 설치

이번에는 임의로 토픽 수를 결정하지 않고, ldatunning 패키지를 설치한 후, 최적 토픽 수를 탐색 및 결정하는 R 코드를 소개하면 다음과 같습니다. 

# 추가 패키지 설치 및 로딩
install.packages("ldatuning")
library(ldatuning)

# Document-Term Matrix(DTM) 생성
# 이전 분석에서 만든 reviews_pos_nouns 데이터를 이용
dtm <- reviews_pos_nouns %>%
  cast_dtm(document = id, term = word, value = n)

 

5. 최적 토픽 수 탐색과 결정

먼저 최적 토픽 수의 탐색 범위를 설정하는데요. 일단 이번 포스팅에서는 2개에서 10까지 탐색 범위를 지정하고, 최적 토픽 수를 결정하는 R 코드는 다음과 같습니다. 

# 토픽 수 탐색 범위 설정 
k_values <- c(2:10)

# 최적의 토픽 수 결정 (지표: Arun, CaoJuan, Deveaud, Griffiths2004, 등)
result <- FindTopicsNumber(
  dtm,
  topics = k_values,
  metrics = c("Arun2010", "CaoJuan2009", "Griffiths2004", "Deveaud2014"),
  method = "Gibbs",
  control = list(seed = 1234),
  mc.cores = 2L,  # CPU 코어 수 (병렬 처리)
  verbose = TRUE
  )

# 결과 시각화
FindTopicsNumber_plot(result)

ldatuning │최적 토픽 수의 결정
ldatuning │최적 토픽 수의 결정

 

6. LDA 토픽 모델링 수정 분석 결과

앞서 ldatuning 패키지를 이용하여 최적의 토픽 수를 결정할 수 있는 R 코드를 소개하였습니다. 분석 결과를 통해 만약 6개의 토픽이 최적의 수라고 결정하였다는 가정하에 LDA 토픽 모델링 분석을 수정한 R 코드, 분석 결과 및 시각화 결과는 다음과 같습니다. 또한 이번 포스팅에서 사용한 전체 R 코드도 함께 올려두겠습니다. 관심 있는 분들은 내려받은 후, 테스트해 보시기 바랍니다. 


# LDA 모델 생성 (토픽 수 6개로 설정)
lda_model <- LDA(dtm, k = 6, control = list(seed = 1234))

# 각 문서가 속하는 토픽 확인
topics <- tidy(lda_model, matrix = "beta")

# 토픽별 상위 단어 추출
top_terms <- topics %>%
  group_by(topic) %>%
  slice_max(beta, n = 10) %>%
  ungroup() %>%
  arrange(topic, -beta)

# 각 토픽에 이름 지정 (6개의 토픽에 대한 이름)
topic_names <- c("토픽 1: 사용자 경험", 
      "토픽 2: 제품 성능",
      "토픽 3: 가격 및 가치",  
      "토픽 4: 디자인 및 외관",
      "토픽 5: 부작용 및 문제점",
      "토픽 6: 사용 편의성")

# 토픽 이름을 데이터에 추가
top_terms_named <- top_terms %>%
   mutate(topic_name = topic_names[topic])

# 결과 확인
print(top_terms_named)

# 시각화 - 토픽별 상위 단어 시각화
top_terms_named %>%
   ggplot(aes(x = reorder_within(term, beta, topic_name), y = beta, fill = as.factor(topic_name))) +
   geom_col(show.legend = FALSE) +
   facet_wrap(~ topic_name, scales = "free_y") +
   coord_flip() +
   scale_x_reordered() +
   labs(title = "토픽 모델링 결과", x = NULL, y = "Beta 값") +
   theme_minimal()

댓글 분석 │LDA 토픽 모델링 분석 결과 수정
댓글 분석 │LDA 토픽 모델링 분석 결과 수정
댓글 분석│ LDA 토픽 모델링 분석 │R 한글 텍스트 마이닝.txt
0.01MB

 

텍스트 마이닝 │한글 │R 4.3.1│Window 11 기준

R을 이용한 한글 텍스트 마이닝(R 4.3.1과 윈도 11 기준) 포스팅이 계속 업데이트되고 있습니다. 관심 있는 분들은 KoNLP 설치 오류 해결 후, 다음 포스팅 순서에 따라 실습해 보기 바랍니다. 키워드

e-datanews.tistory.com

 

무료 일본어 AI 자동 텍스트 마이닝 사이트 사용법 (2) │아마존 재팬 고객 리뷰 분석 │User Local(

이번 포스팅은 User Local(ユーザーローカル)을 이용하여 일본어 고객 리뷰를 자동 텍스트 마이닝 분석해 봅니다. 예제로 사용할 리뷰는 지난 포스팅에서 사용했던 아마존 재팬의 

e-datanews.tistory.com

 

텍스트 마이닝 사이트│웹페이지 데이터 추출 │워드클라우드 자동 생성과 토픽 모델링 분석

Auto Textmining 무료 도구인 voyant-tools를 활용한 웹페이지 데이터 추출과 이를 활용한 워드클라우드, 토픽 모델링 분석 방법을 정리합니다. Auto Textmining Free│2개 이상의 PDF 문서 텍스트

e-datanews.tistory.com

 

7. 정리

이번 포스팅에서는 R 기반의 한글 텍스트 마이닝 분석 방법 중 LDA 토픽 모델링 분석을 위한 R 코드를 공유하였습니다. 분석하는 사람이 임의로 토픽 수를 결정하여 토픽 모델링을 실행하는 경우와 ldatuning 패키지를 이용하여 최적 토픽 수를 탐색한 후, 최적의 토픽 수를 결정하는 방법, 두 가지를 모두 제시하였으므로 분석 목적에 맞게 적절히 사용하시기 바랍니다. 그 외 분석 이론 자체가 워낙 유명한 분석 방법이라 관련 이론은 별도 설명하지 않았습니다만,  조그만 구글링 해보면 해당 이론에 관한 다양한 정보들을 획득할 수 있으므로 관련 정보들을 참고하시기 바랍니다. 최근 관련 논문도 하나 링크해두겠씁니다. 마지막으로 R을 이용한 한글 텍스트 마이닝 시리즈는 이 정도에서 마무리하겠습니다. 도움이 되셨기를 바랍니다.