LDA trong thực tế

Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Kasey Jones

Research Data Scientist

Chốt kết quả LDA

  • chọn số lượng chủ đề
    • perplexity/các chỉ số khác
    • giải pháp phù hợp với bối cảnh của bạn
Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Perplexity

  • thước đo mức độ mô hình xác suất khái quát lên dữ liệu mới
  • càng thấp càng tốt
  • dùng để so sánh mô hình
    • Trong tinh chỉnh tham số LDA
    • Chọn số chủ đề
sample_size <- floor(0.90 * nrow(doc_term_matrix))
set.seed(1111)
train_ind <- sample(nrow(doc_term_matrix), size = sample_size)
train <- matrix[train_ind, ]
test <- matrix[-train_ind, ]
1 https://en.wikipedia.org/wiki/Perplexity
Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Perplexity trong R

library(topicmodels)
values = c()
for(i in c(2:35)){
  lda_model <- LDA(train, k = i, method = "Gibbs",
                   control = list(iter = 25, seed = 1111))
  values <- c(values, perplexity(lda_model, newdata = test))  
}
plot(c(2:35), values, main="Perplexity for Topics", 
     xlab="Number of Topics", ylab="Perplexity")
Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Perplexity lần nữa!

Perplexity đo mức độ mô hình khái quát lên dữ liệu mới.

Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Chọn thực tế

  • Số chủ đề phù hợp với bối cảnh là bao nhiêu
    • 20 chủ đề có thể khó bao quát
  • Cách bạn hiển thị kết quả
    • Biểu đồ với 5 chủ đề dễ hơn 100 chủ đề
  • Quy tắc kinh nghiệm:
    • Dùng ít chủ đề, mỗi chủ đề có vài tài liệu đại diện
    • Chỉ dùng nhiều chủ đề nếu có thời gian khám phá và phân tích từng chủ đề
Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Khai thác kết quả

  • Duyệt hoặc nhờ người duyệt tìm “chủ đề” cho từng topic
    • cung cấp danh sách từ khóa hàng đầu của topic
    • cung cấp danh sách tài liệu hàng đầu cho topic đó
Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Duyệt kết quả

betas <- tidy(lda_model, matrix = "beta")
betas %>%
  filter(topic == 1) %>%
  arrange(desc(beta)) %>%
  select(term)
# A tibble: 2,000 x 1
   term    
   <chr>   
 1 athletic   
 2 quick 
 3 strong    
 4 tough    
...
gammas <- tidy(lda_model, matrix = "gamma")
gammas %>%
  filter(topic == 1) %>%
  arrange(desc(gamma)) %>%
  select(document)
# A tibble: 1,000 x 1
   document
   <chr>   
 1 232     
 2 292     
 3 921    
 4 643    
 5 468
Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Tóm tắt kết quả

gammas <- tidy(lda_model, matrix = "gamma")
gammas %>%
  group_by(document) %>%
  arrange(desc(gamma)) %>%
  slice(1) %>%
  group_by(topic) %>% 
  tally(topic, sort=TRUE)
  topic     n
1     1  1326
2     5  1215
3     4   804
...
Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Tóm tắt lần nữa

gammas %>%
  group_by(document) %>%
  arrange(desc(gamma)) %>%
  slice(1) %>%
  group_by(topic) %>% 
  summarize(avg=mean(gamma)) %>%
  arrange(desc(avg))
  topic   avg
1     1 0.696
2     5 0.530
3     4 0.482
...
Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Thực hành LDA.

Nhập môn Xử lý Ngôn ngữ Tự nhiên với R

Preparing Video For Download...