ใช้LDA — Topic Modeling เพื่อแบ่งกลุ่มผู้ใช้เวปไซต์ ตามความสนใจ

Arcchaporn Choukuljaratsiri
HomeDotTech
Published in
3 min readAug 2, 2019

--

เวปไซต์บริษัทที่เราทำอยู่คือ home.co.th เป็นเวปลงโฆษณาโครงการบ้าน สนใจคลิกเข้าไปดูได้นะจ๊ะ

เรื่องมีอยู่ว่า มีออเดอร์จากเบื้องบน ให้แบ่งกลุ่มคนที่เข้าเวปเราดูซิว่ามีกี่ประเภทด้วย LDA(Latent Dirichlet Allocation) ซึ่งเป็นเทคนิคนึงใน machine learning จำพวก NLP (Natural Language Processing) หรือการวิเคราะห์ภาษาของมนุษย์ หลังจากไปกูเกิ้ลว่ามันคืออะไร …ก็พบว่า จากการไปดูโพสต์ (และก้อปโค้ด) ของ Susan Lee ที่เป็น Datascientist สาย NLP ก็พอจะถูไถเอามาเล่นได้
(เจ๊ซูซานคนนี้ เคยจบสายภาษามาก่อนจะทำงานสายไอที)

เพื่ออธิบายการใช้งาน LDA ตามความเข้าใจของเราเอง ขอเกริ่นจากเรื่องอื่นก่อน

คุณรู้จักนพลักษณ์ (enagram) ไหม มันเป็นเป็นการแบ่งคนออกเป็น 9ประเภท ที่มีมาตั้งแต่โบราณ

เครดิต: https://www.bloggang.com/mainblog.php?id=type4&month=16-01-2011&group=1&gblog=7

ทีนี้ลองจินตนาการดู นักปราชญ์โบราณ เค้าแบ่งคนทั้งหมดมาเป็นเก้าแบบนี้ได้ยังไง.. ก็น่าจะต้องสังเกตช่วงชีวิตของแต่ละคน ว่ามีอะไรโดดเด่น แตกต่างไปจากคนอื่นๆบ้าง

ปกติชีวิตคนทุกๆวัน ก็จะมีกิจกรรมที่ซ้ำๆกัน คือ กิน นอน ขี้ ฯลฯ ซึ่งคงไม่เหมาะจะเอามาใช้แบ่งประเภทคน เค้าจึงต้องตัดกิจกรรมที่ซ้ำซากออก เหลือแต่ส่วนที่เป็นอัตลักษณ์เฉพาะตัว

สมมติว่า จากการสังเกตุ พบว่า เค้าแบ่งคนได้ 9 กลุ่มพอดี โดย มีกลุ่มคนที่ชีวิตนี้ มีพฤติกรรมแบบไหนที่พบเจอได้บ่อยๆ คือ “สงสัย”, “ทำไม”, “เอ๊ะ” …. ก็จัดให้ ลักษณ์6 หรือ ตั้งเป็นชื่อกลุ่ม (Topic) ว่า “นักตั้งคำถาม — คนช่างสงสัย” อย่างเช่น เจ้าหนูจำไมในอิคคิวซัง

credit: https://www.youtube.com/watch?v=OL75DrfyahM

ในขณะที่อีกกลุ่ม มีคำว่า “ช่วยเหลือ” , “ให้ทาน” , “ดูแล” ก็เป็นจัดเป็นลักษณ์ 2 หรือตั้งชื่อกลุ่มว่า “ผู้ให้-ผู้ช่วยเหลือ” อย่างเช่น แม่ชีเทเรซา

credit: wikipedia

คนๆนึงอาจไม่ได้อยู่ในลักษณ์เดียว จะมีลักษณ์หลัก1ตัว ลักษณ์รองอีกสักสองตัว

กลับมาที่ LDA คราวนี้เป็น การพยายามแบ่งกลุ่มหนังสือ (Document) ออกเป็นหลายๆกลุ่ม แล้วตั้งชื่อหมวดหมู่ (Topic) ให้แต่ละกลุ่ม

จริงๆแล้ว ชีวิตคนๆนึงก็เหมือนหนังสือหนึ่งเล่ม ที่บันทึกเรื่องราวแต่ละวันไว้ แต่อ่านเท่าไหร่ก็ไม่จบสักที

สิ่งที่ LDA ต่างกับ นพลักษณ์ คือ การสังเกตลักษณะเด่นนี้ ทำโดยใช้คอมพิวเตอร์ช่วยเรียนรู้ (Machine Learning) แทนที่จะเป็นคนมาเฝ้าสังเกตทั้งชีวิต และอาศัยหลักการทางคณิตศาสตร์และสถิติอันสวยงาม (ชมตัวอย่างความงามได้ในรูปล่าง) ซึ่งคิดค้นและต่อยอดโดยเหล่านักวิจัยใจดีๆ อ่านเพิ่มเติมได้ที่โพสต์ของ Pongsakorn

Plate Notation of Gaussian Distribution (http://mlg.eng.cam.ac.uk/zoubin/talks/lect2gm.pdf)

สรุปก็คือ LDA จะรับอินพุตจากเราว่า

1. หนังสือ (documents) ทั้งหมด ที่เราจะเอามาแบ่งกลุ่ม

2. แต่ละเล่มมี เนื้อหาข้างใน ประกอบไปด้วย คำศัพท์ (token) อะไรมั่ง

3. เราต้องการแบ่งหนังสือออกเป็นกี่กลุ่ม (Topic Number) ไม่ได้จำกัดแค่ 9เหมือนนพลักษณ์แล้ว

สำหรับข้อ2 เราจะเอาคำศัพท์จากเนื้อหามาได้ยังไงนั้น
ในทางโปรแกรม ข้อความยาวๆจะถูกเรียกว่า String (สาย) เพราะมันคือการเอาคำศัพท์หลายๆคำมาต่อเป็นทอดๆ เหมือนเส้นหอยจ้อ

credit: Pantip

การตัดเอาคำศัพท์แต่ละคำมาให้ถูกต้อง ตามตัวสะกดนั้น ก็เหมือนการตัดหอยจ๊อให้เป็นชิ้นๆ (token) โดยมีเทคนิคที่เรียกว่า ตัดคำ (Tokenize) (Ref: Witchapong Daroontham)

ถ้าเป็นภาษาอังกฤษก็ง่าย เพราะคำมันแบ่งด้วยเว้นวรรค แต่เราใช้คำภาษาไทยซึ่งมันติดกัน
โชคดีที่มีนักวิจัยใจดีๆ (อีกแล้ว) พัฒนาการตัดคำไทย จนมีไลบรารี่ pythai มาให้ใช้ในการ ตัดคำ พอไปเสิร์ชดูพบว่าคนทำไลบรารี่เป็นเด็กอายุยี่สิบเอ็ด (เชรดด) ไปดูโฉมหน้าน้อง wannaphongได้ค่ะ

นอกจากนี้ เราจะตัดคำที่ฟุ่มเฟือย ซ้ำซาก อย่าง “กิน” “นอน” “ขี้” ออกไป เราจึงต้องระบุว่า จะตัดเอาคำที่มีเปอร์เซนต์ โผล่หน้าออกมาในหนังสือ มากกว่ากี่เปอร์เซนต์ออกไปด้วย ในเคสนี้เราตั้งไว้ที่50% (ตามโค้ดที่ก้อปมาเป๊ะๆ)

หลังจากทำการหั่นหอยจ๊อเป็นชิ้นๆ เอาไปทอดในน้ำมัน ก็จะได้หมวดหมู่คำพร้อมคีย์เวิร์ดที่ต้องการ

ต่อมาคือการเอามาเล่นกับ user journey จริงๆ

เนื่องจากเรามี user log ที่เข้าเวป และลิสต์คีย์เวิร์ดของคำในหน้าที่ user เข้าดู
ถ้าเอาทุกๆคำของ user 1คน มารวมเป็น 1 document แล้วใช้ LDA ก็อาจหาอะไรได้
เทคนิคนี้มีคนใช้เยอะในงานวิจัย กูเกิ้ลดูได้จาก ( userlog+lda)

ตัวอย่าง user log

แล้วต่อไปก็ ก๊อปโค้ดโลดจ๊ะ จากคุณซูซาน ไลบรารี่ที่เธอใช้ทำ LDA คือ Gensim แน่นอนว่าต้องมีการปรับเปลี่ยนนิดนึง

ผลที่ได้ มันก็จะแบ่งออกมาว่าแต่ละกลุ่มมีอะไรที่เด่นมั่ง ตัวอย่างเช่น ลองสั่งให้แบ่งเป็น 5 กลุ่มดูซิ ก็ได้ผลเป็นดังนี้

เลขด้านหน้าคำคือความน่าจะเป็น เช่นคนในกลุ่มแรก มีโอกาสที่จะเปิดหน้าที่มีคำว่าโครงการ
0.036 = 3.6% จะเห็นว่ามันน้อยมากก นี่อาจยังไม่ใช่การแบ่งที่ดีพอ ต้องปรับต่อไป
เราลองมาตั้งหัวข้อ (topic) เล่นๆให้คนพวกนี้มั่ง ดูซิว่าคุณจะเชื่อหรือไม่

กลุ่มที่1 : คอนโด วัยสร้างตัว
กลุ่มที่2 : สิงห์รถตู้
กลุ่มที่3 : บริษัทบ้านๆ
กลุ่มที่4 : ชื่นชอบ มหาชน
กลุ่มที่5 : ฮวงจุ้ยโหราศาสตร์

--

--