ความเสถียรของหัวข้อในแบบจำลองหัวข้อ


23

ฉันกำลังทำงานในโครงการที่ฉันต้องการดึงข้อมูลบางอย่างเกี่ยวกับเนื้อหาของเรียงความแบบปลายเปิด ในโครงการนี้โดยเฉพาะ 148 คนเขียนบทความเกี่ยวกับองค์กรนักศึกษาสมมุติซึ่งเป็นส่วนหนึ่งของการทดลองที่ใหญ่กว่า แม้ว่าในสาขาของฉัน (จิตวิทยาสังคม) วิธีทั่วไปในการวิเคราะห์ข้อมูลเหล่านี้คือการเขียนเรียงความด้วยมือ แต่ฉันต้องการทำปริมาณเชิงปริมาณเนื่องจากการเขียนโค้ดด้วยมือนั้นใช้ทั้งแรงงานและบิตส่วนตัวเกินไปสำหรับฉัน ลิ้มรส

ในระหว่างการสืบสวนเกี่ยวกับวิธีการวิเคราะห์ข้อมูลการตอบสนองเชิงปริมาณฉันพบวิธีการสร้างหัวข้อ (หรือการปันส่วน Dirichlet หรือ LDA) การสร้างแบบจำลองหัวข้อใช้ตัวแทนข้อมูลของคุณ (เมทริกซ์เอกสารระยะ) และใช้ข้อมูลเกี่ยวกับคำว่าเหตุการณ์ร่วมเพื่อแยกหัวข้อแฝงของข้อมูล วิธีนี้เหมาะสำหรับการสมัครของฉัน

น่าเสียดายที่เมื่อฉันใช้การสร้างแบบจำลองหัวข้อกับข้อมูลของฉันฉันได้ค้นพบสองประเด็น:

  1. หัวข้อที่เปิดโดยการสร้างแบบจำลองหัวข้อบางครั้งยากที่จะตีความ
  2. เมื่อฉันเรียกใช้แบบจำลองหัวข้อของฉันอีกครั้งด้วยเมล็ดพันธุ์แบบสุ่มที่แตกต่างกันหัวข้อดูเหมือนจะเปลี่ยนไปอย่างมาก

ปัญหาที่ 2 โดยเฉพาะเกี่ยวกับฉัน ดังนั้นฉันมีคำถามที่เกี่ยวข้องสองคำถาม:

  1. มีสิ่งใดบ้างที่ฉันสามารถทำได้ในโพรซีเดอร์ LDA เพื่อปรับโมเดลโพรซีเดอร์ของฉันให้เหมาะสมสำหรับการตีความและความเสถียร โดยส่วนตัวฉันไม่สนใจมากนักเกี่ยวกับการหาแบบจำลองที่มีความสับสนและ / หรือแบบจำลองที่ดีที่สุด - ส่วนใหญ่ฉันต้องการใช้ขั้นตอนนี้เพื่อช่วยให้ฉันเข้าใจและอธิบายลักษณะที่ผู้เข้าร่วมในการศึกษานี้เขียนไว้ในบทความของพวกเขา อย่างไรก็ตามฉันไม่ต้องการให้ผลลัพธ์ของฉันเป็นสิ่งประดิษฐ์ของเมล็ดสุ่ม!
  2. เกี่ยวข้องกับคำถามข้างต้นมีมาตรฐานใดสำหรับข้อมูลที่คุณต้องใช้ในการทำ LDA เอกสารส่วนใหญ่ที่ฉันเคยเห็นที่ใช้วิธีนี้วิเคราะห์ corpora ขนาดใหญ่ (เช่นเอกสารวิทยาศาสตร์ทั้งหมดที่เก็บไว้ในช่วง 20 ปีที่ผ่านมา) แต่เนื่องจากฉันใช้ข้อมูลการทดลองคลังเอกสารของฉันจึงเล็กกว่ามาก

ฉันโพสต์ข้อมูลเรียงความที่นี่สำหรับทุกคนที่ต้องการทำให้มือของเขาหรือเธอสกปรกและฉันได้วางรหัส R ที่ฉันใช้ด้านล่าง

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))

แก้ไข:

ฉันพยายามแก้ไขnstartตามคำแนะนำของ Flounderer ในความคิดเห็น น่าเสียดายที่แสดงไว้ด้านล่างแม้ตั้งค่าnstartเป็น 1,000 ผลลัพธ์ในหัวข้อที่แตกต่างกันอย่างมากจากเมล็ดสุ่มไปยังเมล็ดสุ่ม เพียงเพื่อเน้นอีกครั้งสิ่งเดียวที่ฉันเปลี่ยนแปลงในการประมาณค่าของแบบจำลองทั้งสองด้านล่างนี้คือเมล็ดแบบสุ่มที่ใช้ในการเริ่มต้นการประมาณแบบจำลอง แต่หัวข้อดูเหมือนจะไม่สอดคล้องกันในการวิ่งทั้งสองนี้

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
ขอบคุณสำหรับการแบ่งปันข้อมูลของคุณ! มันน่าสนใจมากที่ได้ดู ฉันไม่มีคำตอบที่ดีสำหรับคำถามของคุณ แต่ฉันอยากจะแนะนำบางสิ่ง สำหรับคำถามที่ 1 คุณสามารถลองปรับพารามิเตอร์ควบคุมในLDAฟังก์ชั่นในtopicmodelsแพ็คเกจ โดยเฉพาะคุณสามารถลองnstartเพิ่มขนาดให้ใหญ่ขึ้นได้ สิ่งนี้รับประกันได้ว่าจะทำให้ผลลัพธ์ของคุณมีเสถียรภาพมากขึ้นเพราะฟังก์ชั่น LDA จะทำงานซ้ำแล้วซ้ำอีกด้วยการสุ่มเมล็ดที่แตกต่างกันแล้วส่งคืนผลลัพธ์ที่ดีที่สุด แต่น่าเสียดายที่เพิ่มขึ้นnstartเพื่อพูด, 1000 จะทำให้ขั้นตอนวิธีการทำ 1000 ครั้งมากขึ้นการทำงาน (ต่อ)
Flounderer

1
ดังนั้นมันจะช้ากว่ามาก และไม่มีการรับประกันว่ามันจะมีเสถียรภาพไม่พอ Re: คำถามทั้งสองดูเหมือนว่าสำหรับฉันแล้ว LDA ได้รับการออกแบบมาเพื่อจำแนกเอกสารที่มองไม่เห็นเมื่อมีข้อมูลมากเกินกว่าที่มนุษย์จะประมวลผลได้ สำหรับเรื่องนี้มันก็โอเคถ้าอัลกอริทึม VEM ให้คำตอบที่ "ดีพอ" เท่านั้นซึ่งอาจแตกต่างจากการวิ่งหนึ่งไปยังอีก แต่สำหรับคุณแล้วสิ่งนี้ไม่เป็นที่ต้องการดังนั้น LDA อาจไม่ใช่ตัวเลือกที่ดีที่สุด มีทางเลือกที่ยอดเยี่ยมบางอย่างในการบรรยายครั้งแรกของหลักสูตรของ Shalizi ที่นี่: stat.cmu.edu/~cshalizi/350ตัวอย่างเช่นคุณสามารถแปลงแต่ละรายการ (ต่อ)
Flounderer

2
เรียงความเวกเตอร์ถุงคำแล้วทำ PCA กับผลลัพธ์แล้วมองหากลุ่ม ไม่ว่าจะเป็นคลังข้อมูลของคุณมีขนาดใหญ่พอที่จะซื่อสัตย์ฉันจะไม่แปลกใจถ้ามันใหญ่เกินไปสำหรับ VEM ที่จะให้ผลลัพธ์ที่เชื่อถือได้ บางทีฉันอาจขม แต่ฉันใช้เวลาจำนวนมากพยายามที่จะใช้วิธีนี้ในการทำงานกับรุ่นอื่นโดยผู้เขียนที่คล้ายกันและมันก็ไม่สอดคล้องกันอย่างสมบูรณ์จากการวิ่งเพื่อวิ่ง มีเอกสารไม่มากที่พูดถึงการเลือกจุดเริ่มต้นสำหรับอัลกอริทึมเช่นนี้เท่าที่ฉันรู้
Flounderer

ผู้ดิ้นรนขอบคุณมากสำหรับการป้อนข้อมูลของคุณ! มันน่าผิดหวังเล็กน้อยสำหรับฉันที่ได้ยินว่าไม่มีแนวทางเพิ่มเติมเกี่ยวกับ LDA โดยเฉพาะ แต่ฉันคิดว่ามันมาพร้อมกับอาณาเขตของวิธีการที่ไม่ได้รับการดูแล ฉันจะลองปรับnstartและดูที่เว็บไซต์ของหลักสูตรเพื่อดูว่าสิ่งใดสิ่งหนึ่งเป็นประโยชน์หรือไม่ (BTW หากคุณใส่ความคิดเห็นของคุณในคำตอบฉันจะลงคะแนนฉันอยากจะดูว่ามีคนอื่นมีคำแนะนำก่อนที่ฉันจะยอมรับอะไรหรือไม่
Patrick S. Forscher

ฉันรู้สึกถึงความเจ็บปวดที่เกิดจากงานสังคมศาสตร์ของคุณแพทริค แต่ฉันคิดว่าวิธีการของคุณผิดไปตั้งแต่เริ่มต้น หากคุณต้องการใช้การทดสอบทางสถิติคุณจะต้องให้รหัสมนุษย์ส่วนหนึ่งของพวกเขาเพื่อรับอัตราข้อผิดพลาดการจำแนกคุณได้ทำแบบนั้นหรือไม่? ถ้าเป็นเช่นนั้นคุณจะรู้ว่าคุณลักษณะใดโดดเด่นที่สุดและคุณสามารถออกแบบ / เลือกอัลกอริทึมที่ดีกว่า
พอใจ

คำตอบ:


6

สำหรับความอยากรู้ของฉันฉันใช้อัลกอริทึมการจัดกลุ่มที่ฉันได้ทำงานกับชุดข้อมูลนี้

ฉันเก็บผลลัพธ์ไว้ที่นี่ชั่วคราว (เลือกชุดข้อมูลเรียงความ)

ดูเหมือนว่าปัญหาไม่ใช่จุดเริ่มต้นหรืออัลกอริทึม แต่เป็นข้อมูล คุณสามารถ 'มีเหตุผล' (ในทางจิตใจในประสบการณ์ที่ จำกัด ของฉัน) ได้รับกลุ่มที่ดีแม้จะมี 147 ครั้งตราบใดที่มีหัวข้อ / แนวคิด / ธีม / กลุ่มที่ซ่อนอยู่ (สิ่งที่คุณต้องการเรียก)

หากข้อมูลไม่มีหัวข้อที่แยกจากกันไม่ว่าคุณจะใช้อัลกอริทึมใดคุณอาจไม่ได้รับคำตอบที่ดี


@ Siddharth.Gopal ขอบคุณมากสำหรับการตอบสนอง! มันเป็นความจริงที่ฉันคาดหวังว่าจะมีการทับซ้อนกันในกลุ่มเนื่องจากผู้เข้าร่วมทั้งหมดอธิบายองค์กรนักศึกษาสมมุติหนึ่งองค์กร (ซึ่งเราเรียกว่า "BadgerConnect") ยกตัวอย่างเช่นในทางตรงกันข้ามกับการประยุกต์ใช้การสร้างแบบจำลองหัวข้อกับบทความจากวิทยาศาสตร์ที่บางหัวข้อมีความแตกต่างกันอย่างมากจากกระดาษสู่กระดาษหัวข้อต่าง ๆ ล้วนคล้ายกัน อย่างไรก็ตามมันเป็นความจริงที่บางบทความเป็นที่โปรดปรานของ BadgerConnect และบางส่วนเขียนขึ้นจาก BadgerConnect
Patrick S. Forscher

มันเป็นความจริงเช่นกันว่าเรียงความแตกต่างกันอย่างกว้างขวางในประเภทของข้อโต้แย้งที่พวกเขานำเสนอและวิธีการนำเสนอข้อโต้แย้ง ฉันต้องการบันทึกความแปรปรวนบางอย่างถ้าเป็นไปได้ คุณมีความคิดใด ๆ ว่าการจับความแตกต่างเหล่านี้เป็นไปได้หรือไม่ (อย่างน้อยที่สุดความแตกต่างระหว่างการเขียนเรียงความในความโปรดปรานและการเขียนเรียงความเทียบกับโปรแกรมนักเรียนสมมุตินี้) ผลการจัดกลุ่มของคุณมีเสถียรภาพเมื่อคุณใช้เมล็ดสุ่มที่แตกต่างกันหรือไม่
Patrick S. Forscher

1
1. หากคุณกังวลเกี่ยวกับความเสถียรของอัลกอริทึม - ลองใช้อัลกอริทึมหลาย ๆ ครั้งและเลือกโมเดลที่มีโอกาสสูงที่สุด
Siddharth Gopal

1
(แม้ว่าความมั่นคงดูเหมือนจะเป็นปัญหารองที่นี่) 2. ให้คำอธิบายถึงสิ่งที่คุณคาดหวังในแง่ของการโต้แย้งและความคิดเห็นการนำเสนอบทความในรูปแบบของคำไม่ใช่ความคิดที่ดีในบริบทนี้ แบบจำลองหัวข้อ Infact เองอาจไม่ใช่เครื่องมือที่ดีสำหรับสิ่งนี้ ฉันขอแนะนำให้คุณเลือกคำสำคัญสองสามคำที่คุณสนใจ (เช่นเชื้อชาติอาหารหอพัก ฯลฯ ) และพยายามวิเคราะห์ความรู้สึกของประโยคที่เกิดขึ้น สำหรับตัวอย่างดูที่นี่เพื่อดูตัวอย่าง
Siddharth Gopal

1
Python มีชุดเครื่องมือ NLP ที่ยอดเยี่ยมที่เรียกว่า nltk คุณอาจต้องการดูสิ่งที่มีให้ เกี่ยวกับ tf-idf 'ทางเทคนิค' อินพุตไปยัง LDA ควรนับจำนวนคำเท่านั้นเนื่องจากการแจกแจงแบบมัลติมิเนียลไม่ได้ถูกกำหนดไว้สำหรับจำนวนจริงโดยพลการ
Siddharth Gopal

10
  1. แนวคิดของ "หัวข้อ" ในสิ่งที่เรียกว่า "แบบจำลองหัวข้อ" นั้นทำให้เข้าใจผิด ตัวแบบไม่ทราบหรือไม่ได้ออกแบบมาเพื่อรู้ "หัวข้อ" ที่เชื่อมโยงกันทางความหมาย "หัวข้อ" เป็นเพียงการแจกแจงมากกว่าโทเค็น (คำ) กล่าวอีกนัยหนึ่งแบบจำลองนี้จะตรวจจับคำที่เกิดขึ้นพร้อมกันสูง โครงสร้างเหล่านี้มีความหมายว่าอะไรหรือไม่นั้นไม่ใช่จุดประสงค์ของโมเดล

  2. โมเดล "LDA" มีสองส่วน (ส่วนใหญ่เป็นแบบกราฟิกทั้งหมด): a) นิยามของโมเดลและ b) การใช้อัลกอริทึมการอนุมานเพื่ออนุมาน / พารามิเตอร์โมเดลทรัพย์ สิ่งที่คุณกล่าวถึงอาจจะใช่หรือไม่ใช่ปัญหาของโมเดล "LDA" แต่อาจเป็นข้อผิดพลาด / ข้อผิดพลาด / การกำหนดค่าผิดพลาดของการใช้งานเฉพาะที่คุณใช้ (แพ็คเกจ R)

  3. การใช้งาน "LDA" เกือบทั้งหมดต้องใช้การสุ่มตัวอย่าง และด้วยธรรมชาติของอัลกอริธึมการอนุมาน (เช่น MCMC หรือการอนุมานเชิงแปรปรวน) คุณจะได้รับการแก้ปัญหาขั้นต่ำในท้องถิ่นหรือการกระจายของโซลูชั่นจำนวนมาก ดังนั้นในระยะสั้นสิ่งที่คุณสังเกตเห็นเป็นที่คาดหวังอย่างใด

ข้อเสนอแนะในทางปฏิบัติ:

  1. ลองแพ็คเกจ R อื่น: ตัวอย่างเช่นแพคเกจนี้ทำโดยอดีตนักศึกษาระดับบัณฑิตของ David Blei หรือแม้แต่จะพยายามสภาพแวดล้อมอื่นเช่นนี้ หากคุณได้รับผลลัพธ์ที่คล้ายกันจากแพ็คเกจที่เสถียรเหล่านี้อย่างน้อยคุณจะได้รับปัญหาน้อยลง

  2. ลองเล่นโดยไม่ลบคำหยุด เหตุผลก็คือว่าคำหยุดเหล่านี้มีบทบาทสำคัญในการเชื่อมต่อความหมายทางความหมายในคลังข้อมูลขนาดเล็กเช่น (100 บทความหรือมากกว่านั้น) และอย่าพยายามกรองสิ่งต่าง ๆ

  3. ลองเล่นด้วยพารามิเตอร์ไฮเปอร์เช่นหมายเลขหัวข้อต่างๆ

บทความเกี่ยวกับความสอดคล้องของหัวข้อ:

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

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


ขอบคุณสำหรับคำตอบของคุณ ฉันจะตอบความคิดเห็นของคุณทีละคน (1) ฉันเข้าใจว่าตัวแบบรู้อะไรเกี่ยวกับหัวข้อ แต่การโต้แย้งของคุณว่าโครงสร้างเปิดเผยโดยแบบจำลองหัวข้อ (และว่าโครงสร้างเหล่านี้หมายถึงอะไรก็ตามไม่ใช่จุดประสงค์ของแบบจำลองเหล่านี้) ขัดแย้งกับบทความนี้โดยตรงโดย David Blei ผู้สร้างแบบจำลองหัวข้อ สำหรับฉันแล้วดูเหมือนว่าวัตถุประสงค์ของแบบจำลองหัวข้อจะช่วยในการสำรวจ / อธิบายข้อมูลที่เป็นข้อความซึ่งเป็นสิ่งที่ฉันต้องการจะทำในโครงการนี้
Patrick S. Forscher

(2) แม้ว่าอาจเป็นไปได้ว่าผลลัพธ์ของฉันเกิดจากข้อผิดพลาด แต่ฉันคิดว่าเป็นไปได้มากว่าพวกเขาจะเกิดข้อผิดพลาดบางอย่างที่ปลายของฉัน (และถ้าเป็นเช่นนี้โปรดบอกฉัน!) ฉันใช้topicmodelsแพคเกจใน R ซึ่งโดยพื้นฐานแล้วเป็นส่วนต่อประสาน R กับอัลกอริทึมดั้งเดิมที่ใช้โดย Blei และเพื่อนร่วมงาน
Patrick S. Forscher

(3) ฉันรู้ว่า LDA ต้องการการสุ่มดังนั้นฉันไม่ได้ขอผลลัพธ์ที่แน่นอนจากการรันเพื่อให้ทำงาน แต่ฉันคิดว่ามันสมเหตุสมผลที่จะคาดหวังหัวข้อที่คล้ายกันโดยใช้เมล็ดสุ่มที่แตกต่างกัน (แน่นอนฉันเชื่อว่านี่เป็นความคาดหวังมาตรฐานเมื่อ ผู้คนใช้อัลกอริทึมตามการสุ่ม) สิ่งที่ฉันต้องการรู้คือวิธีการบรรลุความมั่นคงในผลลัพธ์
Patrick S. Forscher

@ PatrickS.Forscher ความคิดเห็นแรกของคุณ: ไม่มันขัดแย้ง ชื่อ "หัวข้อ" คือสิ่งที่เราในฐานะมนุษย์วางป้ายบนการกระจายคำเหล่านั้น โครงสร้างการจัดกลุ่มเหล่านี้อาจหรือไม่เกี่ยวข้องกับโลกแห่งความเป็นจริงที่มนุษย์สามารถอ่านได้ มีจำนวนเอกสารที่จะแนะนำการเชื่อมโยงเข้ากับตัวแบบหัวข้อเพื่อลดปัญหาที่แน่นอน
Liangjie Hong

@ PatrickS.Forscher ความคิดเห็นที่สองของคุณ: ลองใช้การดำเนินการที่แตกต่างกันเพื่อดูว่าคุณได้รับผลลัพธ์ที่คล้ายกัน (ไม่สมเหตุสมผล) หรือไม่ ตัวอย่างเช่น UMASS Mallet
Liangjie Hong
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.