Data Science กับ การดื่ม Craft Beer

Pattanan Numpong
Stand Up Code
Published in
3 min readApr 10, 2022

ใช้วิทยาศาสตร์ข้อมูลมาทำระบบค้นหาข้อมูลเบียร์คราฟต์ ด้วยรูปภาพกันเถอะ

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 มิติ สีในรูปด้านล่างพยามแสดงว่ามีหลายมิติ

Spotify/annoy

งั้นเราจะได้ Vector สำหรับมาเปรียบเทียบจากไหน แน่นอนว่ามันจะต้องมีตัวสร้าง Vector ตัวแทนที่แสดงถึงรูปนั้น ๆ เราจะใช้ Keras ทำ

อย่างท่ีเรารู้เราสามารถใช้ Pre-Trainned Model จาก Keras ได้แต่เราไม่ต่างการจะใช้ Model เพื่อจำแนกคลาสตามที่มันถูกสอนมา เราจึงตัด Layer Classify Logic ทิ้งแล้วใช้แค่ Fully Connected Layers

หน้าตาของ VGG16 ทั่วไป

ขยายความ สิ่งที่ผมทำ คือ การเอา 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

  1. เริ่มด้วยการรับรูปจากการอัพโหลดจาก Colab
  2. นำรูปไป Extract Feature
  3. ส่ง Feature Vector ไปค้นให้ใน Annoy Tree
  4. นำ Index ไป Mapping กับ File Json
  5. จัดการแสดงผลนิหน่อย

เพียงเท่านี้ก็จะพื้นฐานของการค้นคืนข้อมูลที่ไม่ใช่แค่ Text

สิ่งที่คุณได้เรียนรู้วันนี้

  • Feature Extraction
  • One-shot learning
  • Spotify Annoy

ปิดท้ายอย่าลืมไปติดตาม StandUpCode ได้ในทุกช่องทาง

--

--