การจัดกลุ่มเอกสารโดยใช้หัวข้อที่ได้มาจากการจัดสรร Dirichlet แฝง


9

ฉันต้องการใช้ Latent Dirichlet Allocation สำหรับโครงการและฉันใช้ Python กับไลบรารี gensim หลังจากค้นหาหัวข้อที่ฉันต้องการจัดกลุ่มเอกสารโดยใช้อัลกอริทึมเช่น k-mean (โดยหลักแล้วฉันต้องการใช้ดีสำหรับการซ้อนกลุ่มเพื่อให้คำแนะนำยินดีต้อนรับ) ฉันจัดการเพื่อให้ได้หัวข้อ แต่อยู่ในรูปแบบของ:

0.041 * รัฐมนตรี + 0.041 * สำคัญ + 0.041 * ช่วงเวลา + 0.041 * แย้ง + 0.041 * นายกรัฐมนตรี

เพื่อที่จะใช้อัลกอริทึมการจัดกลุ่มและแก้ไขให้ฉันถ้าฉันผิดฉันเชื่อว่าฉันควรหาวิธีที่จะเป็นตัวแทนของแต่ละคำเป็นตัวเลขโดยใช้ tfidf หรือ word2vec

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

เช่นวิธีที่ฉันเห็นถ้าคำว่ารัฐมนตรีมีน้ำหนัก tfidf 0.042 และอื่น ๆ สำหรับคำอื่น ๆ ในหัวข้อเดียวกันฉันควรจะคำนวณสิ่งที่ชอบ:

0.041 * 0.42 + ... + 0.041 * tfidf (Prime) และรับผลลัพธ์ที่จะใช้ในภายหลังเพื่อจัดกลุ่มผลลัพธ์

ขอขอบคุณสำหรับเวลาของคุณ.


1
ตามที่อธิบายไว้ในบทช่วยสอนคุณสามารถแสดงเอกสารเป็นพาหะ จับกลุ่มเวกเตอร์เหล่านั้น
Emre

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

คุณไม่จำเป็นต้องแทนแต่ละคำว่าเป็นเวกเตอร์ คุณจะได้รับการแสดงใหม่สำหรับทั้งเอกสารโดยใช้การเปลี่ยนแปลง LDA ที่คุณได้เรียนรู้ที่จะคลัง สำหรับตัวอย่างที่มี LSI ดูที่ลิงค์นี้: radimrehurek.com/gensim/tut2.htmlส่วนสำคัญคือการที่พวกเขาใช้การแปลง LSI ที่เรียนรู้ไปยังคลังทั้งหมดด้วย lsi [doc_bow]
Will Stanton

คำตอบ:


4

สมมติว่า LDA สร้างรายการหัวข้อและใส่คะแนนกับแต่ละหัวข้อสำหรับแต่ละเอกสารคุณสามารถแสดงเอกสารและคะแนนเป็นเวกเตอร์:

Document | Prime | Minister | Controversial | TopicN | ...
   1       0.041    0.042      0.041          ...
   2       0.052    0.011      0.042          ...

หากต้องการรับคะแนนสำหรับแต่ละเอกสารคุณสามารถเรียกใช้เอกสาร เป็นถุงของคำผ่านโมเดล LDA ที่ได้รับการฝึกฝน จากเอกสาร gensim:

>>> lda = LdaModel(corpus, num_topics=100)  # train model
>>> print(lda[doc_bow]) # get topic probability distribution for a document

จากนั้นคุณสามารถเรียกใช้ k-mean บนเมทริกซ์นี้และควรจัดกลุ่มเอกสารที่คล้ายกัน K-mean โดยค่าเริ่มต้นเป็นอัลกอริทึมการจัดกลุ่มอย่างหนักซึ่งหมายความว่ามันจัดประเภทเอกสารแต่ละรายการเป็นหนึ่งคลัสเตอร์ คุณสามารถใช้กลไกการจัดกลุ่มแบบนุ่มนวลซึ่งจะให้คะแนนความน่าจะเป็นที่เอกสารในกลุ่มนั้นเรียกว่าฟัซซี่เค -เอฟ https://gist.github.com/mblondel/1451300เป็นส่วนสำคัญของ Python ซึ่งแสดงวิธีการที่คุณสามารถทำได้ด้วย scikit เรียนรู้

ps: ฉันไม่สามารถโพสต์ลิงก์มากกว่า 2 ลิงก์


ฉันพยายามทำเพื่อ "n" ไม่มีเอกสารพูดว่าหัวข้ออยู่ที่ไหน อย่างไรก็ตามสำหรับการพูด x ไม่มีของเอกสารทุกโพรป t หัวข้อไม่แสดงเฉพาะโพรป (t- ไม่) ของโพรบบางตัวปรากฏขึ้นโดยที่ 1 <= no <t จะไม่เกิดขึ้นเมื่อฉันเรียกใช้การทดสอบด้วยขนาดเอกสารเล็ก ๆ เป็นเพราะมันไม่ได้พิมพ์เลยถ้าโพรบเป็น 0?
Manish Ranjan

0

ประกอบกับคำตอบก่อนหน้านี้คุณไม่ควรเรียกใช้ kmeans โดยตรงกับข้อมูลองค์ประกอบที่ได้รับจากการแจกจ่าย lda topic-doc โดยตรงแทนที่จะใช้การแปลงข้อมูลองค์ประกอบเพื่อฉายภาพเหล่านั้นไปยังพื้นที่ euclidean เช่น ilr หรือ clr

( ตัวอย่าง )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.