มาลองทำ AWS Personalize กันและใช้ Golang ดึง Recommend

AWS Personalize คือเทคโนโลยีที่ทำ Machine Learning โดยที่เราไม่ต้องมาทำเองโดยส่วนใหญ่ก็เอา Recommend สินค้าให้บุคคล ไม่ว่าจะแนะนำสินค้า แนะนำหนัง หรือ การแนะนำ Campaign ต่างๆให้บุคคลนั้นๆ ซึ่งมีระบบดังๆใช้ตัวเทคโนโลยี AWS Personalize มาเริ่มกันเลยดีกว่า

ก่อนอื่นเลยมาเตรียมความพร้อม schema กับ data กันก่อนเลยซึ่งใช้แค่ 3 table เท่านั้น Interactions,Items,Users แหล่งอ้างอิงต่างๆ https://docs.aws.amazon.com/personalize/latest/dg/custom-datasets-and-schemas.html

1.Interactions

โดย Schema Interactions ผมจะสร้างไว้ประมาณนี้

อันดับแรกผมจะมาจัด Data ดังรูปโดยผมก็ไปหา transaction ที่กด Campaign มาจัดรูปแบบใน Interactions ตาม Schema ที่ผมทำไว้ โดย ต.ย.ข้อมูลที่แสดงมีประมาณ 3000 rows

2.Items

โดย Schema Items ผมจะสร้างไว้ประมาณนี้

และ Items GENRES คือ ประเภทต่างๆผมก็จัดไว้ประมาณนี้ซึ่งถ้า ITEM_ID มีหลายประเภทหรือหลายหมวดหมู่ต้องใช้เครื่องหมาย | คั้นไว้

3.Users

โดย Schema Users ผมจะสร้างไว้ประมาณนี้

และก็ User ผมจัด Data ประมาณนี้แต่ก่อนเอาเข้าผม random อายุ random เพศก่อนนะครับตัวข้อมูล mock ผมใส่อายุ 30 กับเพศ ชายยาวๆไม่ได้เอา data ที่ random มาแสดง

หลังจากเราเตรียมความพร้อม Data หมดแล้วต่อมาก็มาสร้าง S3

ผมสร้าง s3 ชื่อว่า test-amazon-personalize

จากนั้นใส่ permission ให้ตัว s3 ที่เราสร้างให้เรียบร้อยเพื่อให้ AWS personalize เข้าถึง

เข้า s3 ไปตรง permission แล้วมาตรง bucket แล้ว coppy วางเปลี่ยนแต่ตรงคำว่า bucket-name เป็นของตัวเองให้เรียบร้อย

จากนั้นทำการ create dataset group และผมตั้งชื่อว่า test-personalize และเลือก usecase แบบ Custom

จากนั้นก็มันก็จะต่อเนื่องโดยที่จะให้เราสร้าง Interactions ใส่ชื่อ dataset และสร้าง schema ตามที่เราออกแบบไว้ข้างต้น

จากนั้นก็ไปเอา Data .csv ที่เราวางบน S3 ทำการ coppy S3 URI แล้วนำไปวางที่ Data location ตามรูปด้านบน

หลังจาก coppy S3 URI มาวางแล้วก็กำหนด permission ให้ตัวนี้เข้าถึง s3 เราได้

จากนั้นรอมันสร้างให้เสร็จเราก็ไปทำแบบเดิมกับ Items,Users ตามที่ผมติ๊ก

หลังจากสร้างเสร็จหมดแล้วก็มา create solution อยู่ใต้หัวข้อ User Custom Resources

โดยผมจะเลือก algorithm เป็น aws-user-personalization เป็นการทำนายอนาคตว่าคนนี้จะ ซื้ออะไร ดูหนังอะไร หรือเล่น campaign อะไร

จากนั้นรอสร้างจนเสร็จก่อน

หลังจากสร้าง solution เสร็จแล้วเราก็มาสร้าง campaign แล้วทำการเลือก solution ที่เลือกไว้และรอจนเสร็จดังรูป

จากนั้นก็ใส่ userId ที่ต้องการ

กด Recommend ก็จะได้ item และ score ออกมาแค่นี้เราก็ไปดึงสินค้ามาแสดง recommend ผ่านหน้าเว็บเราได้แล้วโดยจะดึงจาก api

เสริมอีกหน่อยเราสามารถสร้าง Filter เพื่อใช้งานได้ด้วยเช่นอยากระบุอายุเข้าไปประมวลด้วย

โดยผมจะสร้าง filter อันนี้เพื่อไปประมวลผลด้วยโดยตั้งว่า user ที่อายุน้อยกว่า 40

จากนั้นผมก็กลับมาตรง campaign แล้วใส่ filter-test ที่สร้างไว้

จากนั้นผมก็จะได้ผลลัพธ์ต่างจากข้างบนนิดหน่อยอาจเพราะ userId นี้อาจจะอายุน้อยกว่า 40 เลยไม่มีอะไรเปลี่ยนมาก

ต่อมาก็ลง code กันอันดับแรกทุกคนน่าจะมี User IAM อยู่แล้วก็ไปเพิ่ม permission ให้ user เรามีสิทธิเข้าถึง aws personalize แบบ full access

code ส่วนนี้คือการ connect เข้า กับ aws ซึ่งตอนเราสร้าง User IAM จะได้ key และ access มาอยู่แล้ว code ส่วนอื่นๆผมอธิบายไว้ในบทความอื่นๆไว้หมดแล้วเดียวผมจะแปะไว้ล่างสุด

ส่วน code ส่วนนี้ผมจะเอา session จากการต่อไปเปิดใช้งาน personalizeruntime โดยผมจะเก็บเข้าตัวแปรชื่อ svc จากนั้น svc ก็จะได้ ทุกอย่างของ personalizeruntime โดยอ้างอิงจาก https://docs.aws.amazon.com/sdk-for-go/api/service/personalizeruntime/

ซึ่งผมจะสร้าง api recomend โดยรับค่าเป็น post โดยจะส่งค่า

campaignArn ผมเอามาจาก

ผมรู้ได้ไงว่าจะต้องอะไรเข้าไปบ้าง

ผมก็ไปดูจากตัว SDK ของ AWS Personalizeruntime

อันนี้เป็น Function ที่เราจะใช้จากการเปิดใช้งาน

svc เราก็จะมี function getRecommend อยู่ข้างในพร้อมใช้งานแล้วลองมารัน api และลองยิงกัน

จากนั้นลองยิง postman ดู ก็จะ return items มาให้เราพร้อมใช้งานบนหน้าเว็บเรา เราสามารถส่งค่ามากกว่าแค่ userId ได้ โดยอ้างอิงจาก https://docs.aws.amazon.com/sdk-for-go/api/service/personalizeruntime/

*หมายเหตุจริงๆจะให้เห็นผลแบบจริงจังเลยทาง AWS เขา requirement ขั้นต่ำ
-25 unique user
-100 products หรือ items
-1000 transactions

ก็จบไปแล้วกับบทความ AWS Personalize เราก็จะมี Recommend เจ๋งๆเป็นของตัวเองเหมือนเว็บใหญ่ๆเว็บอื่นแล้วสามารถเอาไปประยุคใช้เองได้อีกหลายอย่างเลย

บทความเกี่ยวข้องกับ Golang

( CR. ธำรงค์ ไชยวงค์ )

--

--

No responses yet