“โปรจ๋ามาหาหน่อย” — ประสบการณ์ใหม่แห่งการช้อปปิ้งผ่าน Machine Learning

บทความนี้เป็นส่วนหนึ่งของ Data Science Essential Botnoi Classroom : Project 2 — Machine Learning by Group 7

Kam Kochakorn
botnoi-classroom
7 min readAug 31, 2020

--

ขาช้อปยกมือขึ้น! สำหรับใครที่ชอบการช้อปปิ้งคงไม่อยากพลาดเรื่องราวดีๆที่พวกเราจะมานำเสนอแน่นอน กับประสบการณ์การช้อปปิ้งที่คุณจะไม่พลาดโปรโมชั่นดีๆ สินค้าเด็ดๆ และที่ขาดไม่ได้สินค้า mix & match ที่คุณจะต้องร้องว่า ปังมากแม่!!!

Key focus

✔️เราจะพาคุณไปรู้จักเทคโนโลยีสมัยใหม่อย่าง Machine Learning ว่าจะทำให้การช้อปปิ้งนั้น ง่ายขึ้น ประหยัดเวลาขึ้น และคุ้มค่ากับเงินที่จ่ายไปได้อย่างไร

✔️เรียนรู้วิธีการเขียนโค้ดสำหรับการทำ Reverse Image Search และ เทคนิคต่างๆที่สามารถนำไปต่อยอดเพื่อใช้ในธุรกิจได้จริง

✔️ทดลองใช้ API ได้แล้ว คลิกที่นี่👉🏻https://openapi.botnoi.ai/dashboard/api/sa-detect-promotion

ก่อนอื่นต้องขอแนะนำทีมงานที่คอยร่วมมือร่วมแรงกันผลักดันโปรเจคดีๆอย่างนี้ออกมาและได้เรียบเรียงสรุปมาให้ทุกคนได้อ่านกัน — Members : ไบร์ท, ปอ, แบงค์, แก้ม, ฟิลด์, วิม, ปู, ซุย, เป๊ก, เก่ง, เอมี่, อ๋อย, ไอซ์, แชมป์, อ๋อง, หนุ่ย, แก๊ส, แมน, มิด, ย้อย

SALE SALE SALE! ทุกวันนี้ขาช้อปทั้งหลายคงมองหาป้าย SALE กันอยู่ใช่ไหม ?

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

ทุกวันนี้ Facebook Page ที่ชี้โปรโมชั่นลดราคาเกิดขึ้นมากมายเกินกว่า 10 เพจ บางเพจมีผู้ติดตามมากกว่า 4 ล้านคน คงปฏิเสธไม่ได้ว่าผู้ที่สนใจโปรโมชั่นดีๆ โปรโมชั่น ราคาถูกมีมากมายขนาดไหน ใครก็คงอดใจไม่ไหวที่จะได้สินค้าราคาถูกมาครอบครองเพราะมันคุ้ม! แต่มันจะคุ้มจริงๆมั้ยนะกับเวลาและความยุ่งยากที่เราจะต้องเข้าออกเพจหรือเว็ปไซต์ขายของเพื่อเข้าไปเช็คราคาอีกที!?

จะดีกว่ามั้ยถ้าชีวิตการช้อปปิ้งกำลังจะง่ายขึ้น เปิดประสบการณ์ใหม่แห่งการช้อปปิ้ง โดยให้ Machine Learning และ Deep Learning เข้ามาช่วยชี้เป้าโปรโมชั่น รวมไว้ในที่เดียว

Machine Learning และ Deep Learning คืออะไร ?

Source: https://www.geospatialworld.net/blogs/difference-between-ai%EF%BB%BF-machine-learning-and-deep-learning/

Machine Learning คือ กระบวนการที่ทำให้คอมพิวเตอร์เรียนรู้และประมวลผลออกมา โดยเราจะต้องสอนคอมพิวเตอร์ (training) ก่อนด้วยการป้อนข้อมูลเข้าไป ไม่ว่าจะเป็นตัวอักษร รูปภาพหรือเสียงก็ได้ เมื่อเรา train คอมพิวเตอร์เสร็จแล้ว เราจะต้องทำการทดสอบ (testing) ด้วยว่าจากข้อมูลที่เราได้สอนไป คอมพิวเตอร์สามารถประมวลผลได้ถูกต้องแม่นยำแค่ไหน ซึ่งในการสอน เราจะเป็นคนกำหนดการสกัดคุณลักษณะของข้อมูล (feature extraction) เช่น ใบหน้าของมนุษย์จะต้องมีตา หู จมูก ปาก ฯลฯ ให้กับคอมพิวเตอร์เพื่อนำไปสร้างความสัมพันธ์ระหว่างคุณลักษณะผ่านการแบ่งประเภท (classification) ต่อไป

Deep Learning เป็นส่วนหนึ่งของ Machine Learning ที่มีการประมวลผลเชิงลึกกว่า จากการสร้างชั้นประมวลผล (layers) เป็นโครงข่ายประสาท (neural network) และแต่ละชั้นจะเรียนรู้ข้อมูลจากชั้นก่อนหน้าเพื่อสร้างข้อมูลที่มีความซับซ้อนมากยิ่งขึ้น ซึ่งจะมีประสิทธิภาพในการวิเคราะห์ข้อมูลขนาดใหญ่ได้ดี อีกทั้ง Deep Learning จะเรียนรู้เองว่าควรเลือก features ไหนถึงจะดีที่สุด ซึ่งต่างจาก Machine Learning ที่มนุษย์จะต้องเป็นคนเลือก features ที่เหมาะสมเข้าไปใน model ที่เราสร้างขึ้น

ครั้งนี้ทีมงานได้ใช้รูปภาพจำนวนมากในการสอน Machine Learning และ Deep Learning โดยจะแสดงวิธีการเขียนโค้ดให้ดูในส่วนล่างของบทความนี้ต่อไป

ประสบการณ์ใหม่แห่งการช้อปปิ้งหน้าตาเป็นอย่างไร ? มาดูกัน

เราเป็นเว็บไซต์ที่จะช่วยให้การช้อปปิ้งออนไลน์เป็นเรื่องที่ง่ายด้วยฟีเจอร์ 3 SMARTs เพียงคุณเลือกสินค้าที่ต้องการบนหน้าเว็บไซต์ ก็จะไม่พลาดราคาดีๆที่รวมกันมาจากทุกที่มาอยู่บนเว็บไซต์นี้ที่เดียว

SMART SEARCH + SMART COMPARE + SMART MIX & MATCH

SMART SEARCH ผลงานชิ้นแรกที่ได้หยิบมาพัฒนาก่อนใคร ที่จะชี้เป้าโปรโมชั่น เพื่อไม่ให้พลาดโปรเด็ดอีกต่อไป เรียกสั้นๆง่ายๆว่า “โปรจ๋ามาหาหน่อย ” เพียงเลือกรูปภาพสินค้าที่ต้องการ ระบบจะรู้ว่าเป็นสินค้าประเภทใดแล้วจะแสดงเว็บไซต์ต่างๆที่มีโปรโมชั่นของสินค้าชิ้นนั้นขึ้นมา หรือประเภทสินค้าที่เกี่ยวข้องขึ้นมาด้วย เช่น สินค้าประเภทเครื่องแต่งกายผู้หญิง เป็นต้น ถ้าสนใจโปรโมชั่นจากเว็บไซต์ไหนก็กดเข้าไปเลย ระบบจะเชื่อมต่อไปยังเว็บไซต์นั้นๆให้อัตโนมัติ

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

SMART MIX & MATCH เป็นฟีเจอร์ที่แนะนำสินค้าที่ใช้ร่วมกันหรือการจับคู่สินค้าที่เข้ากันเพื่อให้ลูกค้าตัดสินใจเลือกซื้อสินค้าที่ใช้ร่วมกันได้ง่ายขึ้น อีกทั้งยังช่วยผลักดันยอดขายให้เพิ่มสูงขึ้น และ ถ้าจับคู่กันแล้วมีโปรโมชั่นลดราคาอีกก็จะยิ่งทำให้ปิดการขายได้อย่างรวดเร็ว

สำหรับฟีเจอร์ SMART COMPARE และ SMART MIX & MATCH ปัจจุบันยังไม่ได้มีการพัฒนา แต่คาดว่าจะมีประโยชน์มากถ้านำไปต่อยอดผลิตภัณฑ์ต่อให้สมบูรณ์

ซึ่งแนวคิดผลิตภัณฑ์ที่ว่านี้สามารถนำไปต่อยอดร่วมกับแพลตฟอร์ม (platforms) ต่างๆได้เพื่อเพิ่มประสบการณ์ในการช้อปปิ้งภายในแพลตฟอร์มเอง และไม่ว่าจะเป็นกลุ่มธุรกิจไหน เช่น เสื้อผ้า อาหาร เฟอร์นิเจอร์ เครื่องสำอางค์ อุปกรณ์กีฬา ฯลฯ ก็สามารถนำไปใช้ได้เช่นเดียวกัน

ตัวอย่างการนำไปต่อยอดร่วมกับแพลตฟอร์ม

  • E-Marketplace (Shopee, Lazada, Grab, LINE MAN)
  • Brand website (Central, HomePro, SuperSport, SB design square, SMEs)
  • ส่งเสริมการขายร่วมกับภาครัฐ (https://www.thaitambon.com/product)

มาดูด้าน Technical กันบ้างว่า Deep Learning และ Machine Learning จะช่วยให้การช้อปปิ้งง่ายขึ้นได้อย่างไร ?

เทคนิคหลักๆที่ทีมนำมาใช้เรียกว่า “Reverse Image Search”

อะไรคือ Reverse Image Search ?

ถ้าให้พูดเป็นภาษาที่เข้าใจง่าย ก็คือ การค้นหาภาพผลลัพธ์ที่มีลักษณะใกล้เคียงกับภาพต้นฉบับที่เรามี ยกตัวอย่างเช่น เรามีภาพของเสื้อที่เราอยากได้จาก Instagram ดารา เราก็นำภาพนั้นไปค้นหาว่ามี website ไหน หรือ ร้านค้าออนไลน์ไหนที่มีเสื้อลักษณะเดียวกันหรือใกล้เคียงกับเสื้อต้นฉบับที่เราอยากได้นั่นเอง

มาดูกันว่า Deep Learning และ Machine Learning จะเข้ามาช่วยสร้าง Reverse Image Search ได้อย่างไร

ขั้นตอนที่ 1: ตั้งเป้าหมาย (Set Goal)

จากข้างต้น Goal ของทีมเราคือ

“สร้างโมเดลในการค้นหารูปที่มีโปรโมชั่นจากเว็ปไซต์ต่างๆได้ และ สามารถค้นหารูปที่เหมือนหรือมีลักษณะใกล้เคียงกับรูปตั้งต้นได้”

ซึ่งในเฟสแรก ทีมได้ตั้งเป้าหมายระยะสั้น คือ “การพิสูจน์ให้ได้ว่าโมเดลที่สร้างขึ้นจะสามารถแยกรูปภาพออกว่ารูปภาพไหนมีโปรโมชั่นหรือรูปภาพไหนไม่มีโปรโมชั่น” โดยโมเดลนี้จะใช้เทคนิค Reverse Image Search เป็นหลัก

และในเฟสต่อไปที่ยังไม่ได้เริ่มพัฒนา แต่ทีมได้วางแผนไว้แล้วว่าจะต้องพัฒนา API เพื่อให้สามารถเข้าถึงข้อมูลสินค้าจริงบน platforms หรือ websites ต่างๆได้ ซึ่งจะเป็นเป้าหมายถัดไปในการพิสูจน์ว่าโมเดล Reverse Image Search ที่พัฒนาขึ้นนี้สามารถใช้กับธุรกิจได้จริง

ต่อจากนั้นจะพัฒนาโมเดลให้สามารถค้นหา พร้อมแนะนำสินค้าที่เหมือนหรือมีลักษณะใกล้เคียงกับรูปตั้งต้นได้ โดยวางแผนว่าจะต้องสร้าง Web Scraping ขึ้นมา

แต่สำหรับตอนนี้ ทีมได้ทำเฟสแรกเรียบร้อยแล้ว และยังคงต้องพัฒนาโมเดลนี้ให้แม่นยำมากขึ้นต่อไป ซึ่งคำอธิบายของเฟสแรกจะอยู่ในส่วนล่างนี้

ขั้นตอนที่ 2: เลือก Data set

ทีมได้เลือกภาพที่มีทั้งโปรโมชั่นและไม่มีโปรโมชั่น โดยลักษณะภาพที่เข้าเงื่อนไขของคำว่า “Promotion” ทีมได้เลือกภาพที่มีข้อความระบุอยู่ ซึ่งมีรูปแบบทั้งหมด 4 แบบ ได้แก่ มา x จ่าย y, ลด x% (หรือราคาพิเศษจาก x เหลือ y), ซื้อ x แถม y, และ ซื้อ x ลดชิ้นถัดไป %

และเพื่อไม่ให้เกิดการ bias ของ data set ที่นำมาเทรน จึงต้องมีวิธีการเลือกดังนี้

  1. เป็นรูปภาพที่มีทั้งโปรโมชั่นและไม่มีโปรโมชั่นในจำนวนที่เท่ากัน และมีรูปแบบของโปรโมชั่นที่หลากหลาย (ตามที่ได้กล่าวไปด้านบน)
  2. หมวดหมู่ของสินค้าที่เลือกมามีความหลากหลาย ได้แก่ อาหาร, เสื้อผ้า, เครื่องสำอาง, อุปกรณ์ไฟฟ้า, รองเท้าและอุปกรณ์กีฬา, สินค้าแม่และเด็ก, และ เครื่องครัว
  3. ภาพ Non Promotion ควรมีข้อความอยู่บนภาพซึ่งต้องเป็นข้อความที่ไม่แสดงถึง Promotion เพราะทีมคิดว่า ปกติภาพ Promotion จะมีข้อความระบุดังที่กล่าวไปข้างต้น แต่คอมพิวเตอร์ไม่ควรแยกรูป Promotion ออกจาก Non Promotion แค่เพียงเพราะการที่รูป Non Promotion ไม่มีข้อความปรากฏอยู่บนรูปภาพ

ขั้นตอนที่ 3: แปลงรูปภาพให้เป็น “Feature”

เนื่องจากเวลาที่คอมพิวเตอร์จะอ่านรูปภาพสักรูป คอมพิวเตอร์ไม่ได้เห็นรูปเป็นรูปเหมือนกับที่คนเห็น แต่คอมพิวเตอร์จะเห็นรูปเป็นตัวเลข ซึ่งเราจะขอเรียกว่า “Features”

มาถึงจุดนี้ ทุกคนอาจจะงงว่าคอมพิวเตอร์จะอ่านภาพเป็นตัวเลขได้อย่างไร ?

อธิบายให้ง่าย ๆ ยกตัวอย่างเช่น ใน 1 รูปภาพที่เราเห็นในจอคอมพิวเตอร์ มันก็จะมีขนาดความละเอียด หรือที่เรารู้จักกันในชื่อของ “Pixel” (หรือเป็นจุด) สมมติภาพนี้มีความละเอียดที่ 100 x 100 แล้วในแต่ละ pixel (หรือมีทั้งหมด 10,000 จุด) ในแต่ละจุดก็จะมีค่าสีที่เรียกว่า “RBG” (Red Blue Green) หรือแม่สี แตกต่างกันออกไป

ดังนั้น ในแต่ละจุดของภาพ ก็จะมีตัวเลข 3 ชุด แสดงถึงค่าสี RBG ยกตัวอย่างเช่น R255, G175, B97 เราก็จะได้เป็นสีส้มอ่อน ดังนั้น สมมติรูปภาพมีความละเอียดต่ำ 2 x 2 แปลว่า ในภาพนี้ก็จะมีชุดตัวเลขของค่า RBG ทั้งหมด (2 x 2) x 3 สี= 12 ชุดตัวเลขซึ่งเราสามารถเขียนเป็น “Matrix” ในรูปแบบ (2 x 2) x 3 ได้เป็น

ตัวอย่างการใช้ Matrix ในการแสดงผลรูปภาพ scale 2x2
ตัวอย่างการผสมค่าสี RBG ใน 1 จุด (pixel) จะได้เป็นสีส้ม

ในส่วนของการเขียน Python เพื่อแปลงรูปภาพให้เป็น “feature” นั้นทำได้ดังนี้

Python Code: Pre-Process ลบไฟล์ที่เป็น Feature ออกจากคลังรูป
Python Code: แปลงรูปให้เป็น Features (Matrix)
Python Code: การเตรียม Datasets หลังจากที่แปลงรูปภาพเป็น Features (Matrix) แล้ว
ผลลัพธ์ : จะเห็นว่า Datasets จากรูปตอนนี้จะกลายเป็น Matrix ชุดตัวเลขแล้ว (โดยบางท่านอาจจะเรียก Feature ที่เป็นชุดตัวเลขเหล่านี้เป็น Matrix หรือ Vector ก็ได้ มีความหมายเหมือนกัน เพราะ Matrix สามารถแปลงให้เป็น Vector ได้ตามหลักคณิตศาสตร์)

ขั้นตอนที่ 4: แยกรูป Promotion ออกจาก Non-Promotion โดยใช้โมเดล “Resnet50”

เมื่อเราเข้าใจแล้วว่า คอมพิวเตอร์จะอ่านรูปภาพเป็นชุดตัวเลขภายใต้ “Matrix” ตามความละเอียดของภาพ ทีมจึงเลือก Neural Network ซึ่งเป็น 1 ในโมเดล Deep Learning ที่เรียกว่า “Resnet50” (Residual Network) มาช่วยแยกภาพ

แล้ววิธีการทำงานของโมเดล Resnet50 นั้นเป็นอย่างไร ?

เบื้องหลังการทำงานของโมเดล Resnet50 จะเริ่มวิเคราะห์ภาพทีละขั้นตอน โดยอาจจะยากที่จะบอกว่าโมเดล Resnet 50 จะเริ่มวิเคราะห์หรือแยกภาพจากจุดไหน แต่โดยทั่วไปโมเดลจะเริ่มวิเคราะห์จากกว้างไปละเอียด ยกตัวอย่างเช่น โมเดลอาจจะเริ่มหาเส้นตรงก่อน ภาพ Promotion อาจจะมีเส้นตรงทั้งแนวนอนและแนวตั้งมากกว่า (เพราะมีกล่องข้อความที่ระบุ Promotion) จากนั้นโมเดลจะเริ่มเจาะรายละเอียดเป็นรูปร่างมากขึ้น เช่น ถ้าเป็นสีเหลี่ยมหรือวงกลม มักจะเป็นรูปที่เป็น Promotion หรือ ภาพที่มีเฉดสีที่เข้มกว่า มักจะเป็นรูป Promotion โดยโมเดลทั้งหมดนี้จะวิเคราะห์แยกภาพออกเป็นทั้งหมด 50 layers หรือพูดง่าย ๆ ก็คือมีการวิเคราะห์ภาพทั้งหมด 50 ครั้งนั่นเอง

เมื่อเราใช้ Resnet50 ในการวิเคราะห์ภาพในขั้น first layer [Source: https://www.mathworks.com/help/vision/examples/image-category-classification-using-deep-learning.html]
ตัวอย่างวิธีการทำงานของ Deep Learning — จะเห็นได้ว่าภาพซ้ายสุดแสดงถึงการวิเคราะห์ใน layer แรกๆ คือโมเดลจะจับเส้น (แนวนอน/แนวตั้ง) จากนั้นจึงเริ่มพัฒนาจับเป็นรูปร่างมากขึ้น จนใน layer สุดท้ายซึ่งเป็น layer ที่โมเดลต้องตัดสินใจว่าในรูปนั้นเป็นรูปอะไร (เช่น เป็นรูปรถยนต์) [Source: https://medium.com/abraia/getting-started-with-image-recognition-and-convolutional-neural-networks-in-5-minutes-28c1dfdd401]

เมื่ออ่านมาถึงจุดนี้ ทุกคนอาจจะสงสัยว่า แล้วโมเดล Resnet50 จะรู้ได้อย่างไร ว่าภาพนี้คือเส้นตรง หรือภาพนี้มีเฉดสีแดง หรือภาพนี้เป็นรูปอาหาร ฯลฯ ?

โมเดล Resnet50 ใช้หลักการที่ชื่อว่า “Convolution” โดยจะมีสิ่งที่เรียกว่า “Kernel/Filter” (แผ่นสี่เหลี่ยมสีเหลือง dimension 3 x 3 ในภาพด้านล่าง) โดยตัว Filter นี้มันจะวิ่งไปตามภาพใหญ่ (แผ่นสีเหลี่ยมสีเขียว dimension 5 x 5) โดยในรูปข้างล่าง จะสมมติให้ 0 คือ สีขาว และ 1 คือ สีดำ เมื่อมันวิ่งไปแต่ละ pixel ของภาพ (สีเหลี่ยมสีเขียว) ก็จะเกิดการคำนวณเกิดขึ้นเพื่อตัดสินใจออกมาว่า บริเวณของภาพที่ Filter วิ่งไปตรงนั้นมีเฉดสีดำหรือขาว เช่น ในภาพด้านล่าง Filter ไปอยู่ตรงมุมขวาล่างของแผ่นสี่เหลี่ยมสีเขียว เมื่อเอาตัวเลขมาคูณกันจะได้ว่า มุมขวาล่างมีสีดำอยู่เยอะเพราะได้ score = 4 ที่นี่คอมพิวเตอร์ก็จะเรียนรู้ว่า ภาพใหญ่มีค่าความเข้มอยู่ตรงส่วนไหนบ้าง และก็จะเห็นค่าตัวเลขสูงๆอยู่ติดกัน จนเป็นเส้นสีดำนั่นเอง

ตัวอย่าง: มุมด้านขวา จะได้ค่าเท่ากับ (1x1) + (1x0) + (1x1) + (1x0) + (1x1) + (0x0) + (1x1) + (0x0) + (0x1) = 4 (Source: https://www.kdnuggets.com/2015/11/understanding-convolutional-neural-networks-nlp.html)

Resnet50 เป็นโมเดล Deep Learning ใช้ในการวิเคราะห์รูปภาพที่เป็นสากล หมายถึงว่า ทุกคนสามารถนำโมเดลนี้ไปใช้แยกภาพต่างๆได้ทุกประเภทบนโลก ไม่ว่าจะเป็นตั้งแต่ แยกภาพระหว่างหมากับแมว หรือ แยกภาพข้าวหมูแดงกับข้าวหมูกรอบ ฯลฯ เพราะว่า Resnet50 ได้มีการเทรนโมเดลจากชุดรูปภาพต่างๆนับเป็นพันชุดรูปภาพ ดังนั้น เพื่อเป็นการแยกรูปภาพได้ทุกประเภท จึงไม่แปลกที่ว่าตัวโมเดล Resnet50 จะเริ่มวิเคราะห์ภาพจากกว้างๆ (เส้นตรง เส้นโค้ง) แล้วค่อยๆไปเป็นรูปร่าง จนในที่สุดจะชัดเจนใน layer สุดท้ายเพื่อตัดสินใจว่าเป็นชุดภาพประเภทใด

เมื่อเราเข้าใจแล้วว่า Resnet50 สามารถวิเคราะห์ได้ทุกรูปภาพจากกว้างๆ และค่อยลงลึกในรายละเอียด ในโปรเจคนี้เราจะนำมาแยกภาพที่เป็น Promotion ออกจาก Non-Promotion ดังนั้น เราจึงยืมการวิเคราะห์ตั้งแต่ layer แรกและตัด layer สุดท้ายทิ้ง โดยการยืมนี้ในภาษาวิชาการจะเรียกว่า “Transfer Learning” นั่นเอง

ทำไมต้อง Transfer Learning การวิเคราะห์ใน layer แรกๆ แต่ตัด layer สุดท้ายทิ้ง ?

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

ลองคิดดูว่าถ้าเราเอา Resnet50 ที่ใช้แยกหมากับแมว มาใช้แยกผู้ชายออกจากผู้หญิงจะเป็นอย่างไร ?

คำตอบก็คือ ใน layer แรกๆ เราก็ยังสามารถให้ Resnet50 วิเคราะห์เส้นตรงบริเวณจมูก หรือวงกลมของตาได้อยู่ เพราะเป็น common feature ที่หมา, แมว, ผู้ชาย, ผู้หญิงมีร่วมกัน แต่เมื่อวิเคราะห์ลึกเข้าไป หมากับแมว และ ผู้ชายกับผู้หญิง ก็เป็นคนละสิ่งกัน ดังนั้นเราจึงไม่สามารถใช้การวิเคราะห์ใน layer ท้ายๆมาปรับใช้กับ ผู้ชายกับผู้หญิงได้ แต่เรายังสามารถใช้ layer แรกๆมาปรับใช้ได้อยู่

แล้วทำไมต้องตัดแค่ layer สุดท้าย แต่ไม่ตัดตั้งแต่ layer แรกๆ ?

เนื่องมาจากว่า หากเราจะเริ่มให้ Deep Learning เรียนรู้ใหม่ตั้งแต่ layer แรกเพื่อให้มันเรียนรู้ภาพ promotion ได้อย่างแม่นยำมากขึ้น เราจำเป็นที่จะต้อง trade off กับการที่ต้องมี “คลังรูปภาพ” จำนวนมหาศาลเช่นกัน (เหมือนกับที่กล่าวไปข้างต้นว่า Resnet50 เป็นโมเดลที่เทรนรูปภาพมามากกว่า 1,000 ประเภทรูปภาพ) แต่ด้วยข้อจำกัดของปริมาณรูปภาพ Promotion ที่เราใส่เข้าไปในโมเดลของโปรเจคนี้ ทำให้โมเดลไม่สามารถเรียนรู้ได้อย่างแม่นยำตั้งแต่ layer แรก แต่ก็อย่างไรก็ตาม ทีมได้ตัด layer สุดท้ายทิ้ง เพื่อให้โมเดล customize เรียนรู้ภาพ promotion ออกจาก non-promotion นั่นเอง

เมื่อตัด layer สุดท้ายทิ้ง แล้วจะเอาอะไรมาแทน ?

Layer สุดท้ายส่วนมากเป็น Layer ที่ไว้คอยตัดสินใจว่ารูปนี้จะเป็นภาพอะไร (เช่น เป็น Promotion หรือ Non-Promotion) ทีมจึงหยิบเครื่องมือที่เอาไว้คอยแยกประเภทของข้อมูลต่างๆ (classifier) มาใช้ซึ่งก็มีหลากหลายมาก อาทิเช่น K-Means, KNN, Decision Tree แต่สำหรับโปรเจคนี้ ทีมตัดสินใจเลือกหยิบ “LinearSVC” มาใช้

LinearSVC เป็นโมเดลภายใต้ classifier ที่เรียกว่า “SVM” หรือ “Support Vector Machine” มาใช้ โดยหลักการของ SVM จะแบ่งเป็น 2 กลุ่มใหญ่ๆ ก็คือ Linear และ Non-Linear ทีมเลือกที่จะใช้ SVM ในกลุ่มที่เป็น Linear มาใช้ในการแบ่งประเภท โดยหลักการทำงานของ Linear SVM นั่นก็คือ SVM จะค้นหา Seperable Linear หรือ Solution Boundary ซึ่งจะเป็น “เส้นตรง” ที่เป็นเส้นแบ่งขอบเขตระหว่าง Features ทั้ง 2 classes: Promotion กับ Non-Promotion นั่นเอง (ซึ่ง Features นี้แสดงอยู่ภายใต้ชุดตัวเลข Matrix หรือ Vector ดังที่กล่าวไปข้างต้น)

หมายเหตุเพิ่มเติม :เราสามารถให้คอมพิวเตอร์แสดง Features (Matrix หรือ Vector) ของรูปภาพ Promotion หรือ Non Promotion ออกมาเป็นกราฟได้ แต่เนื่องจากว่า Matrix ของรูปภาพส่วนใหญ่มี dimension ขนาด n x m มิติ ทำให้ไม่สามารถ plot ลงบนกราฟ 2 มิติได้ ดังนั้น เทคนิค ที่จะแปลงข้อมูลหลายมิติ ให้ลงบนกราฟ 2 มิติจะเรียกว่า “การลดมิติของข้อมูล” (Dimensionality Reduction) โดยทั่วไปวิธีการลดมิติของข้อมูลสามารถทำได้ 2 วิธี ได้แก่ PCA (Principal Component Analysis) และ TSNE (T-distributed Stochastic Neighbor Embedding) แต่ในโปรเจคนี้จะไม่ลงในรายละเอียด

ตัวอย่าง: หากเราลดมิติของข้อมูลลงบนกราฟ 2 มิติ เราจะเห็นข้อมูลแยกเป็น 2 กลุ่ม ได้แก่ สีแดงและสีน้ำเงิน ส่วนเส้นประสีเขียวแสดง Seperable Linear หรือ Solution Boundary (Source: https://dhruvs.space/posts/ml-basics-issue-2/)

ซึ่งการเขียน Phyton ของโมเดล Resnet50 เขียนได้ดังนี้

Python Code: ขั้นตอนการแยกภาพ Promotion ออกจาก Non-Promotion โดยใช้ Deep Learning: Resnet50 ที่ตัด layer สุดท้ายออก และใช้ LinearSVC เข้าไปแทน

เพิ่มประสิทธิภาพในการจำแนกภาพด้วย Sigmoid Function

หลังจากที่ให้ Deep Learning: Resnet50 เรียนรู้วิธีการจำแนกภาพ Promotion ออกจาก Non-Promotion แต่เพื่อเป็นการเพิ่มความแม่นยำของการจำแนกภาพ ทีมได้นำ Sigmoid function เข้าไปในโมเดลด้วย เพื่อที่ว่าผลลัพธ์ที่ออกมาจะสามารถบอกได้ว่า ภาพดังกล่าวจะถูกจัดไปอยู่ใน category Promotion หรือ Non-Promotion ด้วยความน่าจะเป็นเท่าไหร่ (แทนที่จะฟันธงไปเลยว่าเป็น 0 หรือ 1 แต่ Sigmoid Function จะประมวลผลให้กลายมาเป็น ค่าความน่าจะเป็นที่อยู่ระหว่าง 0 กับ 1) โดยถ้าหลังจากประมวลผลมาแล้วพบว่าเป็น Promotion มากกว่า 0.5 แสดงว่า ภาพดังกล่าวจะถูกคัดว่าเป็น Promotion กลับกัน ถ้าต่ำกว่า 0.5 ก็จะกลายเป็น Non-Promotion นั่นเอง

Python Code: การเพิ่ม Sigmoid Function เพื่อให้ผลลัพธ์ออกมาเป็น Probability โดยจะ link ภาพจาก image url

ขั้นตอนที่ 5: Train และ Test Model

นอกจากจะใช้ Deep Learning เข้ามาช่วยคัดแยก feature ของแต่ละภาพแล้ว ทีมจะใช้กระบวนการทำ Machine Learning เข้ามาผสม โดยให้มีการ training เพื่อให้ Machine เรียนรู้ว่าภาพไหนเป็น Promotion และภาพไหนเป็น Non-Promotion โดยในขั้นตอนนี้ทีมได้แบ่งเป็น train:test ในอัตราส่วน 67.77% : 33.33% และเมื่อ test ผลลัพธ์จากการเทรนโมเดลทีมพบว่า มีค่า accuracy อยู่ที่ 54.54% ซึ่งถือว่ายังต่ำมาก ทีมอาจจะต้องพัฒนาโมเดลหรือหาวิธีการอื่นเพื่อเพิ่มความแม่นยำมากขึ้นซึ่งจะขอกล่าวในส่วนของผลลัพธ์และขั้นตอนถัดไป

Python Code: Training Datasets
Python Code: ตัวอย่างการ Testing Datasets แค่ 1 datasets
Python Code: ทำนายว่าเป็น Promotion/Non-Promotion จากภาพตัว Model ทำนายออกมาเป็น Non-Promotion ด้วยความน่าจะเป็น 78.51%
Python Code: Model Accuracy = 54.54%

ข้อสังเกต : อย่าสับสนระหว่างความน่าจะเป็น และ accuracy rate — ความน่าจะเป็น คือ ตัวเลขที่บอกว่ามีโอกาสมากน้อยแค่ไหนที่จะเป็นภาพ Promotion หรือ Non-Promotion แต่ accuracy rate คือ หลังจากที่เราปัดค่าความน่าจะเป็นขึ้นลง เพื่อฟันธงว่าเป็น Promotion หรือ Non-Promotion เราจะมาเทียบกับภาพของจริงว่า สิ่งที่ทำนายออกมานั้นตรงกับภาพของจริงแค่ไหน โดย accuracy testing สามารถทำง่ายๆได้โดยการสร้าง confusion matrix หรือก็คือการคำนวนสัดส่วนของสิ่งพยากรณ์ได้เทียบกับสิ่งที่เกิดขึ้นจริง ซึ่งค่า accuracy ที่ได้เมื่อรวมกับค่าerrorแล้วจะต้องได้ 1 หรือ 100% เสมอ

ขั้นตอนที่ 6: เขียน API

API หรือ Application Programming Interface เป็นการทำโปรแกรมที่ให้ผู้ใช้งานสามารถ input ข้อมูลที่ต้องการ และ API จะประมวลผลตามโมเดลที่เราได้พัฒนาขึ้น เพื่อให้คำตอบแก่ผู้ใช้งาน ยกตัวอย่างเช่น ในโปรเจคนี้ เราได้พัฒนา API เพื่อให้ผู้ใช้งานสามารถนำรูปที่ค้นหาจาก website ต่างๆ เข้ามาใส่ โดยเราได้ใส่โมเดลที่ทีมงานพัฒนาตั้งแต่ขั้นตอนที่ 1–5 เข้าไปเพื่อประมวลผล จากภาพข้างล่าง API ได้ทำนายภาพออกมาว่าเป็น Promotion ด้วยความน่าจะเป็น 59.41% นั่นเอง

หลังจากเขียน API เสร็จแล้ว จึงได้ทดลองใส่ภาพเข้าไปใน API เพื่อให้ประเมินผลออกมาว่าภาพนี้มีโปรโมชั่นหรือไม่

ภาพตัวอย่างที่ใส่เข้าไปใน API

สรุปผลลัพธ์และขั้นตอนถัดไป

ผลลัพธ์ที่ได้จากการใช้ API ทีมพบว่า โมเดลที่ใช้ในการทำนายภาพว่าเป็น Promotion หรือไม่ ยังมีอัตราความถูกต้อง (accuracy rate) ต่ำ ดังนั้น ทีมอาจจะต้องไปแก้ไขในแต่ละขั้นตอนเพื่อเพิ่ม accuracy rate ทีมได้ปรึกษากันและเสนอแนวทางต่างๆ อาทิเช่น

  • เพิ่มจำนวนรูปภาพเพื่อให้โมเดลมี sample ได้เรียนรู้มากยิ่งขึ้น
  • ศึกษาเพิ่มเติมเกี่ยวกับการลดมิติของข้อมูลเพื่อดูการกระจายตัวของรูปว่าจะมี seperable linear/solution boundary ที่เป็น Linear หรือไม่ หากพบว่ามีการกระจายตัวที่ไม่สามารถเขียนเส้น Linear แบ่งแยกได้ ทีมอาจจะต้องเปลี่ยน Classifier จาก SVM Linear ไปเป็น Non-Linear หรือใช้ Classifier ประเภทอื่นแทน
  • เปลี่ยนโมเดลจาก Resnet50 ให้เป็น Object Detection เนื่องมาจากว่า Resnet50 เป็น Deep Learning ที่วิเคราะห์ภาพโดยกว้าง กล่าวคือ โมเดลจะค้นหา feature ที่มีร่วมกันของแต่ละประเภทของภาพ (เช่น ถ้าเป็นรูปแมว คือ จะพยายามหาหนวดหรือหาง เพราะแมวทุกตัวมีเหมือนกัน) ซึ่งอาจจะทำให้เกิดข้อผิดพลาด เนื่องมาจากภาพ Promotion และ Non Promotion มี feature ที่มีร่วมกันเยอะมากจนเกินไป แต่ถ้าใช้ Object Detection คือ การที่เรากำหนดให้หาวัตถุในภาพเลย (เช่น ค้นหาภาพคำว่า “Sales” หรือ “ลดราคาพิเศษ” ฯลฯ) อาจจะทำให้ตัดสินใจง่ายกว่าว่าเป็นภาพประเภท Promotion หรือ Non Promotion

Next Step

หากทีมสามารถทำ Goal ขั้นที่ 1 เสร็จแล้ว เราสามารถต่อยอดไอเดียโดยการทำ Web Scraping โดยพัฒนา API ที่สามารถดึงข้อมูลโปรโมชั่นของสินค้าชนิดนั้นหรือใกล้เคียงจาก websites ของร้านค้าต่างๆขึ้นมาแสดงผลได้ เพื่อให้ผู้ใช้สามารถลดเวลาในการค้นหาโปรโมชั่นและเปรียบเทียบราคาสินค้าได้ อีกทั้งยังช่วยให้ผู้ที่ขายสินค้าออนไลน์มีโอกาสได้ขายสินค้ามากยิ่งขึ้น

ถ้าอยากรู้ว่าที่เล่ามาทั้งหมดมันเป็นอย่างไร ลองทดสอบ API กันได้เลย คลิกที่นี่ 👉🏻https://openapi.botnoi.ai/dashboard/api/sa-detect-promotion

เป็นอย่างไรกันบ้างสำหรับขาช้อปทั้งหลาย พอจะเห็นภาพกันแล้วใช่มั้ยว่า Machine learning จะเข้ามาช่วยเพิ่มความสะดวกสบายให้เราได้ขนาดไหน สุดท้ายนี้อย่าลืม 👏🏻ปรบมือ กดไลค์ กดแชร์ เพื่อเป็นกำลังใจให้พวกเรามีแรงพัฒนาโปรเจคต่อไป พร้อมติดตามเรื่องราวดีๆจากพวกเราได้ใหม่ครั้งหน้า ขอบคุณขาช้อปที่ให้ความสนใจในโปรเจคของพวกเรา :)

--

--

Kam Kochakorn
botnoi-classroom

I’m a writer from Thailand. Follow me to keep updating what I’m interested in. Many contents will be written in Thai.