Data Science กับ การดื่ม Craft Beer
ใช้วิทยาศาสตร์ข้อมูลมาทำระบบค้นหาข้อมูลเบียร์คราฟต์ ด้วยรูปภาพกันเถอะ
DISCLAIMER: บทความนี้เป็นเพียงการให้ความรู้ด้านวิทยาศาสตร์ข้อมูลมิได้เป็นเชิญชวนให้ดื่มเครื่องดื่มและสิ่งมึนเมาแต่อย่างใด
เบียร์ ถือเป็นหนึ่งเครื่องดืมที่เป็นที่นิยมมาก ยิ่งกับ Craft Beer หรือเบียร์ที่ผลิตแบบ home made ที่มีกำลังการผลิตน้อย ๆ และค่อนข้างใช้เทคนิคหลากหลายในการพัฒนา
คุณรู้ไหมว่า ตลาดคราฟต์เบียร์มีมูลค่า 41.07 พันล้านดอลลาร์ในปี 2561 และคาดว่าจะสูงถึง 92.80 พันล้านดอลลาร์ในปี 2568 โดยมีอัตราการเติบโตเฉลี่ยต่อปี 12.35% ตลอดระยะเวลาคาดการณ์”
ทำไมกันละ?
เพราะเบียร์ประเภทนี้มีกำลังการผลิตน้อย หายากบางตัว ฟังดูขัดแย้งในตัวเองนะ
แต่เพราะเหตุนี้เองผู้ที่เข้ามาดื่มกับยอมจ่ายแพงเพื่อแสวงหารสชาติที่แปลกใหม่ อีกอย่างเบียร์กลุ่มนี้มักถูกแนะนำแบบ ปากต่อปาก จากเพื่อนสู่เพื่อน จึงกระตุ้นความอยากรู้อยากลองของผู้บริโภคได้เป็นอย่างดี แน่นอนคนเราย่อมเชื่อใจคนสนิทมากกว่าโฆษณาโดยบุคคลอื่นอยู่แล้ว
แล้ว Data Science จะเข้ามาช่วยคุณตรงไหนละ
เคยไหมยืนนิ่งอยู่หน้าตู้แช่ไม่รู้จะดื่มอะไรดี จะถามพนักงานก็อาจจะเป็นการรีวิวแบบ 1 คนอยากได้หลาย ๆ คนช่วยแนะนำ แน่นอนว่าที่ผ่าน ๆ มามีกลุ่มหรือรีวิวที่หาได้ตามอินเตอร์เน็ตทั่ว ๆ ไป แต่ไม่สะดวกที่จะพิมพ์ค้นหาไล่อ่าน ถ้าเรามี Platfrom รีวิวที่สามารถถ่ายรูปแล้วได้รีวิวเลยได้ไหมนะ
สปอยผลการรันก่อนเลย
รูปบน คือ รูปที่เราอัพโหลดขึ้นไป
รูปล่าง คือ ตัวอย่างที่เราได้เตรียมไว้ คิดซ่ะว่ามัน คือ รีวิวจากผู้ใช้ท่าน ๆ อื่น ๆ
คุ้น ๆ ไหมครับเทคนิคนี้ ใช้แล้วครับ Google Image Search นั้นเอง
ว่าแต่มันทำงานอย่างไรละ ส่ิงนี้เรียกว่า “One-shot Learning ครับ”
One-shot learning เป็น 1 ใน เทคนิคทาง Machine Learning ที่นำมาใช้แก้ปัญหาประมาณข้อมูลตัวอย่างที่มีจำนวนตัวอย่างน้อยมาก ๆ เช่น ตามรูปตัวอย่างจะเห็นว่าเรามีน้องหมาสายพันธุ์ละ 1 ภาพเป็นตัวอย่างเท่านั้น ดังสมการ
จะเห็นได้ว่าเราจะทำการเทียบ distance ระหว่าง Vector test และ ref แล้วนำมาหาค่าที่น้อยที่สุดในกลุ่มนั้น ๆ เป็นจำนวน i ครั้ง
ใครอาจะเคยเห็นเทคนิคในการทำระบบจดจำใบหน้ามาแล้ว โดยส่วนใหญ่จะใช้การ Brute force เทียบ Vector ถ้าข้อมูลเราน้อย ๆ มันก็ไม่เป็นอะไรหรอกแต่ถ้าสัก 1 ล้าน ตัวอย่างละไม่ต้องคิดเลยนานชั่วกัลป์แน่นอน
ผมได้ไปเจอไลบารรี่ ชื่อ spotify annoy ซึ่งเป็นสิ่งที่เค้าใช้ในการจัดการระบบแนะนำเพลงของแอพเลย
Spotify Annoy จะช่วยเราจัดกลุ่มของ Vector ไว้ก่อนทำให้เวลาเรา Query จะเร็วขึ้นมหาศาล
ยังไงนะหรอ มันจะทำการทำตามสมการด้านบนพร้อม ๆ กัน หลาย ๆ รอบจนได้การกระจายของ Vector Space ตามภาพ แบบ n มิติ เนื่องจากมนุษย์เห็นแค่ 3 มิติ สีในรูปด้านล่างพยามแสดงว่ามีหลายมิติ
งั้นเราจะได้ Vector สำหรับมาเปรียบเทียบจากไหน แน่นอนว่ามันจะต้องมีตัวสร้าง Vector ตัวแทนที่แสดงถึงรูปนั้น ๆ เราจะใช้ Keras ทำ
อย่างท่ีเรารู้เราสามารถใช้ Pre-Trainned Model จาก Keras ได้แต่เราไม่ต่างการจะใช้ Model เพื่อจำแนกคลาสตามที่มันถูกสอนมา เราจึงตัด Layer Classify Logic ทิ้งแล้วใช้แค่ Fully Connected Layers
ขยายความ สิ่งที่ผมทำ คือ การเอา Activation Function และ เลือกแค่ Fully Connected Layers 1 เราจะได้ Feature Size ขนาด 4096 ซึ่งมากพอที่จะใช้แยกของทั่ว ๆ ไป
เนื่องจากเราไม่สามารถใส่ข้อมูลอื่น ๆ นอกจาก Vector ลงไปได้ เราจึงต้องสร้าง Database ไปพร้อม ๆ กับ Index ในที่นี้ผมใช้ง่าย คือ .json
Build Index จากการทำ Feature Extraction ส่วนข้อมูลก็ไว้ใน Database.json และ Tree ของ Annoy เราเลือกให้ Annoy ทำ Index แบบ Angular หรือ Cosine- Similarity
ตัวอย่าง Dummy Data
Query ข้อมูลจาก Google Colab
- เริ่มด้วยการรับรูปจากการอัพโหลดจาก Colab
- นำรูปไป Extract Feature
- ส่ง Feature Vector ไปค้นให้ใน Annoy Tree
- นำ Index ไป Mapping กับ File Json
- จัดการแสดงผลนิหน่อย
เพียงเท่านี้ก็จะพื้นฐานของการค้นคืนข้อมูลที่ไม่ใช่แค่ Text
สิ่งที่คุณได้เรียนรู้วันนี้
- Feature Extraction
- One-shot learning
- Spotify Annoy
ปิดท้ายอย่าลืมไปติดตาม StandUpCode ได้ในทุกช่องทาง