สร้าง Topic Modeling ง่ายๆ ด้วย LSA


Share this article

เชื่อว่าหลายๆคนอาจจะเจอปัญหาในการเริ่มทำ Topic Modeling ด้วย LSA หรือเรียกเต็มๆว่า Latent Semantic Analysis เพราะไม่ค่อยมีใครอธิบายกระบวนการเต็มๆ หรือการนำไปใช้ ส่วนใหญ่มักจะเขียนแค่ว่าได้ตัวโมเดลแล้วจบแค่นั้น สามารถ Download ตัวอย่าง python notebook พร้อมคำอธิบายได้ที่นี่

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

 

1.LSA คืออะไร

Singular Value Decomposition | Stanford University

การทำ Topic Modeling ด้วย LSA จัดเป็นการเรียนรู้แบบ Unsupervised Machine Learning โดยการจัดกลุ่ม Latent Topic (Aka. Latent Factors) คือ Topic ที่ซ่อนอยู่ในเนื้อหา จำแนกโดยลักษณะการใช้คำ ที่มีการใช้คำใกล้เคียงกันไว้ด้วยกัน

LSA ใช้การทำ Singular Value Decomposition(SVD) ในการแปลง Document-Term matrix(A) ให้เป็น Document-Topic(U), Topic-Strength(Σ) และ Term-Topic(V) โดย matrix ที่เป็นจำนวนจริงจะสามารถทำ SVD ได้ทั้งหมด

 

2. จะทำ Topic Modeling ด้วย LSA อย่างไร

Document — Term matrix

สิ่งที่เราต้องทำ LSA คือการสร้าง Document-Term Matrix โดยพื้นฐานทั่วไปมักจะใช้ Term-Frequency (ใช้การนับความถี่ของคำ) แต่มักไม่ได้ผลที่ดีนัก เนื่องจาก Document ที่ยาวมักจะมีค่า Term Frequency ที่สูงเนื่องจากมีจำนวนคำที่มากกว่า

จึงนิยมใช้ TF-IDF แทน ซึ่งเป็นการชั่งน้ำหนักระหว่างจำนวนครั้งที่ใช้คำ และความแรร์ของคำ กล่าวคือหากมีการใช้เยอะใน 1 document และไม่ค่อยพบใน document อื่น ค่า TF-IDF score จะสูง (อ่าน TF-IDF เพิ่มเติมได้ที่นี่)

– โดยในขั้นตอนนี้อาจใช้ Stemmer,  Lemmatizer และ กำจัด stop word ก่อนการทำ Document-Term Matrix ได้เพื่อให้ได้ผลที่ดีขึ้น

หลังจากที่เราได้ Document-Term Matrix แล้ว เราสามารถนำ matrix ดังกล่าวไปทำการ SVD ได้ส่วนประกอบทั้ง 3 ส่วนออกมาเป็นอันเสร็จสิ้น

– ในตัวอย่างโค้ดจะเป็นการใช้ TruncatedSVD ซึ่งสามารถกำหนดจำนวน Latent Topic ได้ จาก Scikit-Learn เพราะหากต้องทำการคำนวณ SVD แบบเต็มจะใช้เวลานานมาก

 

3. จะใช้โมเดลที่สร้างมาอย่างไร กับข้อมูลใหม่

ตัวอย่างของข้อมูลใหม่

หลังจากได้โมเดลแล้วคือ matrix ของ U, Σ และ V จากการทำ SVD นั้น

1. เราสามารถดูว่า document ใน training data ใด อยู่ในกลุ่ม topic ไหนได้จาก matrix U (Document-Topic) โดยดูว่า column ใดมีค่าสูงที่สุด โดยค่ามากหมายถึงความเป็นสมาชิกในกลุ่มนี้มาก

2. เราสามารถดูได้ว่ากลุ่ม topic ใด มีคำไหนเป็นคำสำคัญได้จาก matrix V (Topic-Term) โดยดูว่า column ใดมีค่าสูงที่สุด โดยค่ามากหมายถึงความสำคัญมาก

 

หากมีข้อมูลใหม่เราสามารถนำมาจัดกลุ่มรวมกับข้อมูลเก่าโดยใช้โมเดลเดิมได้โดยมีลำดับดังนี้

1. Pre-processing Data ให้อยู่ในรูปเหมือนกับ data ที่ใช้ในการทำ SVD โดยเราจะได้ Document-Term matrix

ตัวอย่าง Document-Term matrix ของข้อมูลใหม่

2. นำ Document-Term matrix มา dot product กับ matrix V transpose (Term-Topic) โดยผลลัพธ์ที่ได้คือ matrix U(Document-Topic) โดยดูว่า column ใดมีค่าสูงที่สุด

ตัวอย่างผลลัพธ์ของ matrix U(Document-Topic)

จากตัวอย่างจะเห็นได้ว่า doc-1, doc-2 และ doc-3 อยู่ในกลุ่ม topic-4 ในขณะที่ doc-4, doc-5 และ doc-6 อยู่ในกลุ่ม topic-5 เนื่องจากเป็น column ที่มีค่าสูงสุดในแต่ละ document โดยกลุ่ม topic-4 พูดทำนองชมสินค้า ในขณะที่ topic-5 พูดในทำนองไม่พอใจกับสินค้า

คำสำคัญในแต่ละ topic

 

4. จะใช ้LSA อย่างไร ในการลด Feature สำหรับ Supervised Machine Learning

Matrix U(Document-Topic) สามารถใช้ค่าของ Latent Topic ต่างๆ เป็น Latent Features โดยสามารถกำหนดจำนวนที่เหมาะสมเพื่อลดจำนวน dimension ของข้อมูลได้(เดิม dimension ของข้อมูลคือจำนวนคำใน dictionary)

READ  U-Net: Convolutional Networks for Biomedical Image Segmentation

กระบวนการทั้งหมดที่กล่าวมาสามารถดูตัวอย่างโค้ดได้จาก github ที่ให้ไว้ หากมีอะไรสงสัยเชิญคอมเม้นและสอบถามได้เลยครับ 🙂

Resource

Reference


ลงทะเบียนรับข่าวสาร

ไม่พลาดทุกการอัพเดทจาก Big Data Experience Center

Big Data Experience Center (BX)

ชั้น 14 อาคาร Knowledge Exchange Center (KX)
110/1 ถนนกรุงธนบุรี, แขวงบางลำภูล่าง เขตคลองสาน กรุงเทพฯ 10600
อีเมล์: [email protected]

ABOUT

SERVICES