ทำระบบแนะนำ (Recommender System) แบบง่ายๆ — Part 3: Algolia ปกติใช้ทำ Smart Search แต่เราเอามาทำ…

Kan Pawarisson
FOXBITH
Published in
3 min readMay 1, 2021

Algolia ใช้ทำ Search Engine . . ?

เราใช้ Algolia ทำ Search ให้ลูกค้า (ref. allaboutliving.co)

ปกติแล้วเราจะใช้ Algolia ทำ Smart Search ให้ลูกค้า โดยในช่อง Search ช่องเดียวสามารถค้นหาข้อมูลได้ทุกอย่างที่ต้องการให้ค้นหาได้ อย่างในตัวอย่างของ allaboutliving.co จะค้นหาได้ทั้งบทความ, Tag หรือสถานที่

หรือใช้ในกรณีที่ต้อง Query ข้อมูลแปลกๆที่ไม่สามารถ Query จาก Database ตรงๆได้ เช่น Locaiton Query

ต้องการแสดงบทความอื่นที่เกี่ยวกับ Location รอบๆบทความหลัก (ref. allaboutliving.co)

และจากความสามารถข้างต้น เราพบว่าสามารถนำ Algolia มาใช้ทำ Index ให้กับระบบแนะนำแบบ Content-Based Filtering ได้ดังนี้

เพิ่มข้อมูลที่ต้องการให้ Search ได้บน Algolia (ทำ Search Index)

ในกรณีทั่วไป หากเราต้องการทำ Search การเพิ่มข้อมูลเพื่อสร้าง Search Index ใน Algolia จะต้องระบุด้วยว่าจะให้ Field ไหนสามารถ Search เจอได้บ้าง ในกรณีปกติก็มักจะใช้ ชื่อ(name)

เลือกให้ข้อมูลใน field nameTh สามารถค้นหาได้

หลังจากเลือก field แล้ว เราจะสามารถ search ได้ ถ้าพบว่าข้อมูลที่เรา search มีข่าวที่มีข้อมูลตรงกัน ระบบก็ Query มาแสดงโดยมีการจัดลำดับตามที่เราเซตค่าไว้ใน Ranking and Sorting

ตัวอย่างผลลัพธ์การ search

แต่ในกรณีที่เราอยากทำ Recommender System เราต้องเปลี่ยนวิธีการสร้าง Search Index นิดหน่อย โดยเปลี่ยนจากการใช้ชื่อ เป็น string จาก feature vector แทนตัวอย่างเช่น ข่าว X มี category finance แล้วมี tag 3 อันคือ tag1, tag2 และ tag3 นำมาทำเป็น string แล้วตั้งชื่อ field ว่า tagString ดังนี้

เอา feature vector มาทำเป็น string

จากนั้นตั้งค่าให้ Algolia สามารถ Search ได้ผ่าน field tagString

ตั้งค่าให้สามารถ search ด้วย field นี้ได้
ตัวอย่างข้อมูลที่เก็บไว้ใน search index

จากข้อมูลที่เราเก็บไว้ใน Search Index ถ้าเราอยากจะค้นหาข่าวที่เหมือนกับข่าว A มากที่สุด เราจะทำได้โดยการเอา feature vector ของข่าว A ไป search

ระบบก็ Query หาข่าวที่มี Category,Tag (คำเหมือน) คล้ายกับข่าว A มาให้

ตัวอย่างการหาข่าวอื่นที่เหมือนกับข่าว A

จากผลลัพธ์ที่ได้ จะเห็นว่าการเรียงลำดับยังไม่ถูกต้อง เพื่อให้ผลการเรียงลำดับ เรียงจาก Similarity มากสุด(1) ไปหาน้อยสุด(0) เราต้องตั้งค่าใน Ranking and Sorting แบบนี้

เป็นอันเสร็จเรียบร้อยครับ

จาก บทความก่อนหน้า(Part 2) จะเห็นว่าหากทำระบบแนะนำด้วยวิธีนี้ เราจะลดงานของ Developer ลงได้ 1 อย่างคือ

2. ออกแบบ/พัฒนาวิธีการจัดเก็บและเรียกใช้งาน Index (ค่า Similarity) ของข่าวทั้งหมด เพื่อให้สามารถเรียกใช้ได้อย่างรวดเร็ว

โดย Algolia จะช่วยทำงานนี้แทนเรา ซึ่งงานที่เหลือนั้นง่ายพอที่ Developer ที่ไม่ได้เชี่ยวชาญเรื่อง Algorithm และ Data Structure สามารถทำได้ ช่วยลดทั้งต้นทุนแรงงาน และเวลาไปได้

สรุปรวมทั้ง 3 บทความจาก Part 1–3

  • ณ วันนี้ ระบบแนะนำ (Recommender System) เป็นสิ่งที่สำคัญมาก สำหรับ Platform Online ถ้าระบบดี ฉลาด เลือกเนื้อหาที่ตรงกับความต้องการของ User มาแสดงผลได้ จะช่วยให้ User อยู่ใน Platform นานขึ้น เพิ่มโอกาสในการขาย และยังช่วยในเรื่อง Design ทำให้ Platform มีเนื้อหาไม่เยอะจนเกินไป เพราะไม่ต้องแสดงทั้งหมด แต่เลือกแสดงเฉพาะที่คิดว่า User อาจจะสนใจ
  • ด้วยการทำที่ยากและแพง ทำให้ระบบนี้ยังไม่แพร่หลาย จะพบระบบนี้ได้แค่บน Platform ที่มีทุน Develop พอสมควร
  • เราได้ยกตัวอย่างหนึ่งในการทำระบบแนะนำแบบราคาย่อมเยาว์ที่คิดว่าโปรเจคขนาด SME/StartUp รายเล็กก็สามารถทำได้ โดยใช้ Algolia ซึ่งๆจริงๆแล้ว Algolia ไม่ได้ถูกสร้างมาเพื่อทำ Recommendation โดยเฉพาะ แต่ที่เราเลือกใช้เพราะเห็นว่า งานส่วนใหญ่ที่อยากได้ระบบแนะนำ ลูกค้าจะอยากได้ฟีเจอร์ Search ด้วย ซึ่งการใช้ Algolia แล้วจบงานได้ทั้ง 2 ฟีเจอร์ จะถูกกว่าการแยกไปใช้ Service สำหรับทำ Recommendation โดยเฉพาะ

ก่อนจะจากกันไป อยากย้ำไว้สักหน่อยนะครับว่า ระบบแนะนำที่เรายกตัวอย่างมาเป็นเพียง 1 วิธี จากอีกหลายวิธีในการทำ ด้วยความง่ายของโมเดลถึงทำแบบนี้ได้ แต่ถ้าอยากได้ระบบแนะนำโมเดลอื่นที่ซับซ้อนกว่านี้ ก็อาจต้องใช้วิธีอื่น เช่นใช้ Service ของพวก Cloud Computing Platform อย่าง GCP หรือ AWS

ปล. ถ้าใครรู้วิธีดีๆนอกเหนือจากนี้แนะนำได้เลยนะครับ ขอบคุณครับ 😍😘

--

--