Sự ổn định của chủ đề trong các mô hình chủ đề


23

Tôi đang làm việc trong một dự án mà tôi muốn trích xuất một số thông tin về nội dung của một loạt các bài tiểu luận mở. Trong dự án cụ thể này, 148 người đã viết bài luận về một tổ chức sinh viên giả định như một phần của một thí nghiệm lớn hơn. Mặc dù trong lĩnh vực của tôi (tâm lý học xã hội), cách điển hình để phân tích các dữ liệu này là viết mã các bài tiểu luận bằng tay, tôi muốn làm điều này một cách định lượng, vì mã hóa bằng tay vừa tốn nhiều công sức và hơi chủ quan đối với tôi nếm thử.

Trong quá trình điều tra về các cách phân tích định lượng dữ liệu phản hồi miễn phí, tôi tình cờ tìm thấy một phương pháp được gọi là mô hình hóa chủ đề (hoặc Phân bổ Dirichlet tiềm ẩn, hoặc LDA). Mô hình chủ đề lấy một đại diện bao gồm các từ của dữ liệu của bạn (ma trận tài liệu thuật ngữ) và sử dụng thông tin về các lần xuất hiện từ để trích xuất các chủ đề tiềm ẩn của dữ liệu. Cách tiếp cận này có vẻ hoàn hảo cho ứng dụng của tôi.

Thật không may, khi tôi áp dụng mô hình chủ đề cho dữ liệu của mình, tôi đã phát hiện ra hai vấn đề:

  1. Các chủ đề được phát hiện bởi mô hình chủ đề đôi khi rất khó để giải thích
  2. Khi tôi chạy lại các mô hình chủ đề của mình với một hạt giống ngẫu nhiên khác, các chủ đề dường như thay đổi đáng kể

Vấn đề 2 đặc biệt quan tâm đến tôi. Vì vậy, tôi có hai câu hỏi liên quan:

  1. Có bất cứ điều gì tôi có thể làm trong thủ tục LDA để tối ưu hóa quy trình phù hợp với mô hình của tôi về tính dễ hiểu và ổn định không? Cá nhân, tôi không quan tâm nhiều đến việc tìm ra mô hình với mức độ lúng túng thấp nhất và / hoặc mô hình phù hợp nhất - Tôi chủ yếu muốn sử dụng quy trình này để giúp tôi hiểu và mô tả những gì những người tham gia nghiên cứu này đã viết trong bài luận của họ. Tuy nhiên, tôi chắc chắn không muốn kết quả của mình là một tạo tác của hạt giống ngẫu nhiên!
  2. Liên quan đến câu hỏi trên, có tiêu chuẩn nào cho số lượng dữ liệu bạn cần để thực hiện LDA không? Hầu hết các bài báo tôi đã thấy đã sử dụng phương pháp này để phân tích khối lượng lớn (ví dụ: một kho lưu trữ tất cả các bài báo Khoa học từ 20 năm qua), nhưng, vì tôi đang sử dụng dữ liệu thực nghiệm, nên các tài liệu của tôi nhỏ hơn nhiều.

Tôi đã đăng dữ liệu bài luận ở đây cho bất kỳ ai muốn làm bẩn tay mình và tôi đã dán mã R tôi đang sử dụng bên dưới.

require(tm)
require(topicmodels)

# Create a corpus from the essay 
c <- Corpus(DataframeSource(essays))
inspect(c)

# Remove punctuation and put the words in lower case
c <- tm_map(c, removePunctuation)
c <- tm_map(c, tolower)

# Create a DocumentTermMatrix.  The stopwords are the LIWC function word categories
# I have a copy of the LIWC dictionary, but if you want to do a similar analysis,
# use the default stop words in tm
dtm <- DocumentTermMatrix(c, control = list(stopwords = 
  c(dict$funct, dict$pronoun, dict$ppron, dict$i, dict$we, dict$you, dict$shehe, 
    dict$they, dict$inpers, dict$article, dict$aux)))

# Term frequency inverse-document frequency to select the desired words
term_tfidf <- tapply(dtm$v/rowSums(as.matrix(dtm))[dtm$i], dtm$j, mean) * log2(nDocs(dtm)/colSums(as.matrix(dtm)))
summary(term_tfidf)

dtm <- dtm[, term_tfidf >= 0.04]

lda <- LDA(dtm, k = 5, seed = 532)
perplexity(lda)
(terms <- terms(lda, 10))
(topics <- topics(lda))

Chỉnh sửa:

Tôi đã cố gắng sửa đổi nstarttheo đề xuất của Flounderer trong các bình luận. Thật không may, như được hiển thị bên dưới, thậm chí thiết lập nstarttới 1000 kết quả trong các chủ đề thay đổi khá đột ngột từ hạt giống ngẫu nhiên sang hạt giống ngẫu nhiên. Chỉ cần nhấn mạnh một lần nữa, điều duy nhất tôi thay đổi trong ước tính của hai mô hình dưới đây là hạt giống ngẫu nhiên được sử dụng để bắt đầu ước lượng mô hình, và các chủ đề dường như không nhất quán trong hai lần chạy này.

lda <- LDA(dtm, k = 5, seed = 535, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1         Topic 2      Topic 3      Topic 4       Topic 5      
 [1,] "international" "ethnicity"  "free"       "credit"      "kind"       
 [2,] "communicate"   "true"       "team"       "mandatory"   "bridge"     
 [3,] "gain"          "asians"     "cooperate"  "music"       "close"      
 [4,] "use"           "hand"       "order"      "seen"        "deal"       
 [5,] "big"           "hold"       "play"       "barrier"     "designed"   
 [6,] "communication" "effective"  "big"        "stereotypes" "effort"     
 [7,] "america"       "emphasis"   "beginning"  "asians"      "implemented"
 [8,] "chinese"       "halls"      "china"      "fantastic"   "websites"   
 [9,] "ethnicity"     "minorities" "difference" "focusing"    "planned"    
[10,] "networks"      "population" "easier"     "force"       "body"

lda <- LDA(dtm, k = 5, seed = 536, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1       Topic 2         Topic 3        Topic 4       Topic 5    
 [1,] "kind"        "international" "issue"        "willing"     "play"     
 [2,] "easier"      "ethnicity"     "close"        "use"         "trying"   
 [3,] "gain"        "communication" "currently"    "hand"        "unity"    
 [4,] "websites"    "communicate"   "implemented"  "networks"    "decision" 
 [5,] "credit"      "bridge"        "particularly" "stereotypes" "gap"      
 [6,] "effort"      "america"       "credit"       "communicate" "normally" 
 [7,] "barriers"    "connection"    "fulfill"      "came"        "asians"   
 [8,] "effects"     "kind"          "grew"         "asians"      "created"  
 [9,] "established" "order"         "perspectives" "big"         "effective"
[10,] "strangers"   "skills"        "big"          "budget"      "prejudice"

2
Cảm ơn bạn đã chia sẻ dữ liệu của bạn! Nó rất thú vị để xem xét. Tôi không có câu trả lời tốt cho câu hỏi của bạn, nhưng tôi muốn đề xuất một số điều. Đối với Câu hỏi 1, bạn có thể thử điều chỉnh các tham số điều khiển trong LDAchức năng trong topicmodelsgói. Đặc biệt, bạn có thể thử làm cho nstartlớn hơn. Điều này được đảm bảo để làm cho kết quả của bạn ổn định hơn, bởi vì hàm LDA sẽ chỉ chạy đi chạy lại với các hạt ngẫu nhiên khác nhau và sau đó trả về kết quả tốt nhất. Thật không may, tăng nstartlên, giả sử, 1000 sẽ khiến thuật toán thực hiện công việc gấp 1000 lần (tiếp)
Flounderer

1
vì vậy nó sẽ chậm hơn nhiều Và không có gì đảm bảo rằng nó sẽ đủ ổn định . Re: cả hai câu hỏi, đối với tôi, LDA thực sự được thiết kế để phân loại các tài liệu không nhìn thấy khi có quá nhiều dữ liệu để con người xử lý. Đối với điều này, sẽ ổn nếu thuật toán VEM chỉ đưa ra câu trả lời "đủ tốt" có thể thay đổi từ lần chạy này sang lần chạy khác. Nhưng đối với bạn, điều này là không mong muốn, và vì vậy LDA có thể không phải là lựa chọn tốt nhất. Có một số lựa chọn thay thế xuất sắc trong một vài bài giảng đầu tiên của khóa học của Shalizi tại đây: stat.cmu.edu/~cshalizi/350 , ví dụ, bạn có thể chuyển đổi từng (tiếp theo)
Flounderer

2
tiểu luận cho một vectơ từ ngữ và sau đó làm PCA về kết quả, sau đó tìm cụm. Về việc liệu tử thi của bạn có đủ lớn hay không, thành thật mà nói, tôi sẽ không ngạc nhiên nếu nó quá lớn để VEM đưa ra kết quả đáng tin cậy. Có lẽ tôi chỉ cay đắng, nhưng tôi đã dành một lượng lớn thời gian để cố gắng làm cho phương pháp này hoạt động cho một mô hình khác của các tác giả tương tự, và nó hoàn toàn không nhất quán từ chạy sang chạy, ngay cả khi sử dụng các ví dụ nhỏ. Không có nhiều bài báo thảo luận về việc chọn điểm khởi đầu cho các thuật toán như thế này, theo như tôi biết.
Flounderer

Flounderer, cảm ơn bạn rất nhiều vì đầu vào của bạn! Tôi hơi thất vọng khi biết rằng không có nhiều hướng dẫn cụ thể về LDA, nhưng tôi cho rằng điều đó đi kèm với lãnh thổ của một phương pháp không được giám sát. Tôi sẽ thử điều chỉnh nstartvà xem trang web của khóa học để xem liệu một trong hai điều đó có mang lại điều gì hữu ích không. (BTW, nếu bạn đưa ý kiến ​​của mình vào câu trả lời, tôi sẽ bỏ phiếu. Tôi muốn xem có ai có lời khuyên trước khi tôi chấp nhận bất cứ điều gì không, nhưng tôi nghĩ rằng nhận xét của bạn là quá đủ để tính là một câu trả lời).
Patrick S. Forscher

Tôi cảm thấy nỗi đau khoa học xã hội của bạn, Patrick, nhưng tôi nghĩ cách tiếp cận của bạn là sai lầm khi bắt đầu. Nếu bạn muốn sử dụng các bài kiểm tra thống kê, bạn sẽ cần phải có con người mã hóa một phần trong số họ để có được tỷ lệ lỗi phân loại, bạn (cá nhân) đã làm điều đó chưa? Nếu vậy, bạn sẽ biết những tính năng nào nổi bật nhất và bạn có thể thiết kế / chọn một thuật toán tốt hơn.
Xúi giục

Câu trả lời:


6

Vì sự tò mò của riêng tôi, tôi đã áp dụng một thuật toán phân cụm mà tôi đã làm việc với bộ dữ liệu này.

Tôi đã tạm thời đưa ra kết quả ở đây (chọn tập dữ liệu tiểu luận).

Có vẻ như vấn đề không phải là điểm bắt đầu hay thuật toán, mà là dữ liệu. Bạn có thể 'một cách hợp lý' (theo chủ quan, theo kinh nghiệm hạn chế của tôi) có được các cụm tốt ngay cả với 147 trường hợp miễn là có một số chủ đề / khái niệm / chủ đề / cụm ẩn (bất cứ điều gì bạn muốn gọi).

Nếu dữ liệu không có các chủ đề được phân tách tốt, thì cho dù bạn sử dụng thuật toán nào, bạn có thể không nhận được câu trả lời tốt.


@ Siddharth.Gopal Cảm ơn rất nhiều vì đã phản hồi! Đúng là tôi sẽ mong đợi một số trùng lặp trong các cụm cho rằng tất cả những người tham gia đang mô tả một tổ chức sinh viên giả định (mà chúng tôi gọi là "BadgerConnect"). Vì vậy, ngược lại, ví dụ, một ứng dụng mô hình hóa chủ đề cho các bài báo từ Khoa học, trong đó một số chủ đề rất khác nhau từ giấy này sang giấy khác, các chủ đề đều hơi giống nhau. Tuy nhiên, sự thật là một số bài tiểu luận ủng hộ BadgerConnect và một số được viết chống lại BadgerConnect.
Patrick S. Forscher

Cũng đúng là các bài tiểu luận rất khác nhau về loại lập luận họ trình bày và cách trình bày các lập luận. Tôi muốn nắm bắt một số thay đổi đó, nếu có thể. Bạn có biết liệu có thể bắt được một số sự khác biệt này không (ít nhất, sự khác biệt giữa các bài luận có lợi và bài tiểu luận chống lại chương trình sinh viên giả định này)? Ngoài ra, kết quả phân cụm của bạn có ổn định khi bạn sử dụng các hạt ngẫu nhiên khác nhau không?
Patrick S. Forscher

1
1. Nếu bạn hoàn toàn lo lắng về tính ổn định của thuật toán - hãy thử chạy thuật toán nhiều lần và chọn mô hình có khả năng cao nhất.
Siddharth Gopal

1
(mặc dù sự ổn định có vẻ như là một vấn đề thứ yếu ở đây). 2. Đưa ra mô tả của bạn về những gì bạn mong đợi về mặt lập luận và ý kiến, đại diện cho các bài tiểu luận như một túi từ ngữ không phải là một ý tưởng tốt trong bối cảnh này. Mô hình chủ đề nguyên vẹn có thể không phải là một công cụ tốt cho việc này. Tôi sẽ đề nghị bạn chọn một vài từ khóa mà bạn quan tâm (như chủng tộc, thức ăn, ký túc xá, v.v.) và cố gắng phân tích tình cảm của câu trong đó từ đó xuất hiện. Ví dụ, hãy xem ở đây cho một bản demo.
Siddharth Gopal

1
Python có một bộ công cụ NLP tuyệt vời gọi là nltk. Bạn có thể muốn có một cái nhìn về những gì nó cung cấp. Về tf-idf, 'về mặt kỹ thuật', đầu vào cho LDA chỉ nên được tính bằng từ vì phân phối đa thức không được xác định cho các số thực tùy ý.
Siddharth Gopal

10
  1. Khái niệm "chủ đề" trong cái gọi là "mô hình chủ đề" là sai lệch. Mô hình không biết hoặc không được thiết kế để biết "chủ đề" mạch lạc về mặt ngữ nghĩa. Các "chủ đề" chỉ là phân phối trên các mã thông báo (từ). Nói cách khác, mô hình chỉ nắm bắt được sự xuất hiện của các thuật ngữ. Cho dù các cấu trúc này có ý nghĩa gì hay không không phải là mục đích của mô hình.

  2. Mô hình "LDA" có hai phần (về cơ bản là tất cả các mô hình đồ họa): a) định nghĩa mô hình và b) triển khai thuật toán suy luận cho các tham số mô hình suy luận / bất động. Điều bạn đề cập có thể hoặc không phải là vấn đề của mô hình "LDA" nhưng có thể là một số lỗi / lỗi / cấu hình sai của việc triển khai cụ thể mà bạn đã sử dụng (gói R).

  3. Hầu như tất cả các triển khai "LDA" đòi hỏi một số ngẫu nhiên. Và theo bản chất của các thuật toán suy luận (ví dụ: MCMC hoặc suy luận đa dạng), bạn sẽ nhận được các giải pháp tối thiểu cục bộ hoặc phân phối nhiều giải pháp. Vì vậy, trong ngắn hạn, những gì bạn quan sát được bằng cách nào đó mong đợi.

Gợi ý thiết thực:

  1. Hãy thử các gói R khác nhau: Ví dụ, gói này được thực hiện bởi cựu sinh viên tốt nghiệp của David Blei's. Hoặc, thậm chí thử một môi trường khác, chẳng hạn như môi trường này . Nếu bạn nhận được kết quả tương tự từ tất cả các gói ổn định này, ít nhất, bạn sẽ giảm được vấn đề một chút.

  2. Hãy thử chơi một chút mà không loại bỏ các từ dừng. Lý do là, những từ dừng này đóng vai trò quan trọng trong việc kết nối các ý nghĩa ngữ nghĩa trong một kho văn bản nhỏ như vậy (ví dụ, 100 bài báo hoặc hơn). Ngoài ra, cố gắng không lọc mọi thứ.

  3. Hãy thử chơi một chút với các tham số siêu, như số lượng chủ đề khác nhau.

Giấy tờ về sự gắn kết chủ đề:

  1. http://www.aclweb.org/anthology-new/D/D12/D12-1087.pdf

  2. http://people.cs.umass.edu/~wallach/publications/mimno11optimizing.pdf


Cám ơn phản hồi của bạn. Tôi sẽ trả lời từng bình luận của bạn. (1) Tôi hiểu rằng mô hình không biết gì về chủ đề này, nhưng tranh của bạn rằng các cấu trúc phát hiện bởi mô hình chủ đề (và rằng cho dù những cấu trúc bất cứ điều gì có nghĩa là không phải là mục đích của những mô hình) là mâu thuẫn trực tiếp đến này giấy xét bởi David Blei, người tạo ra các mô hình chủ đề. Dường như với tôi rằng mục đích của các mô hình chủ đề là chính xác để giúp khám phá / mô tả dữ liệu văn bản, đó chính xác là những gì tôi muốn làm trong dự án này.
Patrick S. Forscher

(2) Mặc dù có thể kết quả của tôi là do lỗi, nhưng tôi nghĩ nhiều khả năng là do lỗi của tôi (và nếu điều này có vẻ là trường hợp, xin vui lòng cho tôi biết!). Tôi đang sử dụng topicmodelsgói trong R, về cơ bản là giao diện R với thuật toán gốc được Blei và các đồng nghiệp triển khai.
Patrick S. Forscher

(3) Tôi biết rằng LDA yêu cầu một số ngẫu nhiên, vì vậy tôi không yêu cầu kết quả chính xác từ chạy sang chạy, nhưng tôi nghĩ sẽ hợp lý khi mong đợi các chủ đề tương tự sử dụng các hạt ngẫu nhiên khác nhau (thực sự, tôi tin rằng đây là một kỳ vọng tiêu chuẩn khi người ta sử dụng thuật toán dựa trên sự ngẫu nhiên). Những gì tôi muốn biết là làm thế nào để đạt được sự ổn định nói trong kết quả.
Patrick S. Forscher

@ PatrickS.Forscher Nhận xét đầu tiên của bạn: Không. Nó mâu thuẫn. Tên "chủ đề" là những gì chúng ta, với tư cách là con người, đặt các nhãn trên các bản phân phối từ đó. Các cấu trúc phân cụm này có thể có hoặc không liên quan đến các chủ đề thực tế, có thể đọc được của con người. Có một số bài viết để giới thiệu sự gắn kết vào các mô hình chủ đề để giảm thiểu vấn đề chính xác.
Liangjie Hong

@ PatrickS.Forscher Để nhận xét thứ hai của bạn: Hãy thử một số cách thực hiện khác nhau để xem bạn có nhận được kết quả tương tự (không hợp lý) hay không. Ví dụ, UMASS Mallet.
Liangjie Hong
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.