Switch to Conjugate Gradient

Since I posted about autoencoder neural network on my blog (2 years ago), there are many people visit my Github for that code, Hooray !! Thank you very much everyone. And again I have a new update for that code. I switch to use Conjugate Gradient instead of generative back-propagation. Someone may think is that take 2 years to update it, NO but i’m too lazy.

While I posting autoencoder article, I realize that we need better than normal backpropagation. So I try to explore “What is the easy way to change and what algorithm to swiched to?”. Then I found that in scipy library, it contains optimization algorithm in scipy.optimize module. So you can change the optimization algorithm whatever you want that build within scipy.optimize module. This link is refer to Github page of old autoencoder but the Conjugate Gradient is on conjugate branch.

Why do I switch to Conjugate Gradient? After I study UFLDL lesson within advance optimization part. There is a phrase say that Conjugate Gradient is better than Gradient Descent (Classic Back-propagation). So I started to study about Conjugate Descent and other advance optimization, but I don’t understand them. Finally, I found out the workaround to improve my implementation by using scipy library. If anyone have any suggestion, please comment. Thanks.

Object detection using OpenCV

หลังจากที่ห่างหายไปนานมากเป็นปีเลยทีเดียว วันนี้ก็ได้กลับมาเขียนอีกครั้ง ก็ไม่มีอะไรจะแก้ตัวครับขี้เกียจเป็นหลัก ในวันนี้จะนำเสนอเรื่อง Object detection โดยใช้ HOG และ SVM ผ่านไลบรารี่ OpenCV ซึ่งจริงๆ ใน GitHub ของ OpenCV มีโค้ดส่วนนี้อยู่แล้ว อยู่ใน samples/cpp/train_HOG.cpp ในบทความนี้แค่มาใช้ให้ดูเท่านั้นครับ สำหรับผมใช้ Ubuntu 14.04 และ OpenCV เวอร์ชัน 3 ในการพัฒนาโปรเจคนี้ครับ

ภาพรวมของโปรเจคนี้มีสองขั้นตอนครับ คือเตรียมข้อมูลและ Train model ซึ่งเป็นหน้าที่ของโค้ด train_HOG ของ OpenCV การทำงานของ train_HOG.cpp คือการนำข้อมูลนำเข้าทั้ง Positive และ Negative ไป train โมเดล linear SVM ซึ่งมีการปรับแก้ไขโค้ดเล็กน้อยเพื่อให้เข้ากับโปรเจคที่เราจะทำ นั่นคือการทำ iPhone detection สามารถเข้าไปดูได้ที่ link นี้

ขั้นตอนแรก การเตรียมข้อมูล ข้อมูลประกอบด้วยข้อมูลสองชนิด (Positive, Negative) เริ่มต้นจาก Negative มันคือภาพที่ไม่ใช่วัตถุที่เราจะตรวจจับ ซึ่งเอามาจาก link นี้ ส่วนภาพวัตถุที่จะตรวจจับเราสามารถสร้างเองก็ได้แต่ในที่นี้จะใช้วิธี populate ขึ้นมาจากตัวอย่างที่มีอยู่หนึ่งภาพโดยใช้ opencv_creasamples หลักการคือโปรแกรมจะเอาภาพตัวอย่างไปหมุนและแปะลงบนภาพ Negative เช่นตัวอย่างด้านล่าง

Generated Data

โดยใช้คำสั่งตามข้างล่างนี้

# opencv_createsamples -img images/iphone.jpg -bg negatives/negatives.txt -info positives/positives.txt -num 3000 -bgcolor 255 -bgthresh 8 -w 40 -h 80 -maxxangle 0.5 -maxyangle 0.5

ซึ่งการจะใช้โปรแกรม opencv_createsamples จำเป็นต้องมีไฟล์ negatives.txt ซึ่งคือไฟล์ที่มีรายชื่อของภาพที่จะใช้ ซึ่งเราสามารถสร้างได้โดยใช้คำสั่งข้างล่างนี้

# ls -1 negatives/ > negatives/negatives.txt

และขั้นตอนต่อไปคือการ Train model โดยใช้ train_HOG.cpp ซึ่งสิ่งที่ต้องมีเพื่อใช้กับโปรแกรม train_HOG คือภาพ negative 1 โฟลเดอร์ และภาพ positive 1 โฟลเดอร์ พร้อมด้วยไฟล์ .txt ที่มีรายชื่อของไฟล์ภาพทั้งหมด เพียงเท่านี้เราก็สามารถ train HOG SVM ได้แล้ว แต่สำหรับโค้ดผมจะมีการโหลดภาพทดสอบ เพื่อทดสอบโมเดลที่เรา train มาด้วย โดยคำสั่งที่ใช้ train ตามนี้ครับ

# ./train_HOG --pd=positives/ -p=positives.txt -nd=negatives/ -n=negatives.txt

ภาพผลลัพธ์ทางนี้เลยยังไม่สมบูรณ์มากแต่ก็พอเป็นแนวทางในการริเริ่มทำ object detection ของวัตถุอื่นๆ ได้ครับ ขอบอกว่า ณ ตอนนี้ OpenCV รองรับเพียง linear model ถ้าว่างๆ ผมจะลองพัฒนาโค้ดให้สามารถรับ rbf model ได้ละกัน แล้วก็ใครรู็สึกว่า model ไม่ค่อยดีเท่าไหร่ ลองดู reference ข้างล่างมีวิธีการ train แบบ Haar Cascade อยู่ ซึ่งหลายคนบอกว่าให้ผลดีกว่า HOG SVM แต่ใช้เวลาในการ train นานมาก กอไก่หลายตัว ก็ลองทำตามกันดูครับ ถ้าใครมีผลลัพธ์อย่างไรเอามาแนะนำและแบ่งปันกันก็ได้ครับ (ขอขอบคุณภาพจาก http://kooc.market/)

Using Thai font on FPDF

หายไปนานนะครับ ต้องบอกเลยว่าหาเนื้อหามาลงไม่ได้เลยในช่วงที่ผ่านมา นี่ก็โพสแรกของปีก็ว่าได้เดือนเมษาเลยนะ สำหรับช่วงนี้ผมได้มีโอกาสรับงานเกี่ยวกับการทำ PHP Web Application ซึ่งมีฟีเจอร์ต้องทำรายงาน (Report) ให้กับลูกค้าด้วย ก็หาวิธีมาหลายทางจบด้วยวิธีการที่ว่าให้เซิฟเวอร์สร้างรายงานในรูปแบบ PDF ออกมาเลยดีกว่าลูกค้าถึงไม่ปรินท์ก็สามารถบันทึกส่งเป็นเมล์ได้ ซึ่งไลบารี่ที่ใช้คือ FPDF (Free PDF) ซึ่งเป็นไลบารี่ของภาษา PHP เท่านั้นนะครับ

แต่แล้วก็เกิดปัญหาขึ้นคือจำเป็นต้องทำรายงานออกมาเป็นภาษาไทยครับ แต่ FPDF เนี่ยไม่มี font ภาษาไทยมาให้จำเป็นต้องสร้าง font ภาษาไทยขึ้นมาเองครับ ขั้นตอนการสร้าง font นี่ก็ไม่ยากสามารถไปทำตามได้ที่เว็บไซต์ FPDF > Tutorial > Tutorial ที่ 7 ครับ บอกเลยว่าไม่ยากอย่างที่คิด ซึ่งภาษาไทยใช้ cp874 นะครับ (แต่ถ้าขี้เกียจทำตอนท้ายของบทความมีให้ Download ได้ครับ ซึ่งมี THSarabun กับ Tahoma) เมื่อสร้างแล้วการที่จะนำไปใช้เนี่ยก็ง่ายมากครับ อย่างแรกให้ copy ไฟล์ THSarabunNew.php และ THSarabunNew.z ไว้ในโฟลเดอร์ font ของไลบารี่ fpdf จากนั้นเพียงแค่ AddFont เข้าไปก่อนการเรียกใช้ แล้วก็เรียกใช้ได้เลย ตามตัวอย่างโค้ดข้างล่าง แค่นี้ก็สร้างรายงานแบบ PDF ส่งลูกค้าได้แล้วครับ

<?php 
require('fpdf.php'); 

$pdf = new FPDF(); 
// Add Thai font 
$pdf->AddFont('THSarabunNew','','THSarabunNew.php');
$pdf->AddFont('THSarabunNew','B','THSarabunNew_b.php');
$pdf->AddPage();
$pdf->SetFont('THSarabunNew','',16);
$pdf->Cell(40, 10, iconv('UTF-8', 'cp874', 'สวัสดี'));
$pdf->SetFont('THSarabunNew','B',16);
$pdf->Cell(40, 10, iconv('UTF-8', 'cp874', 'สวัสดี'));
$pdf->Output();
?>

Download

Uber Dynamic Pricing Model

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

ปรากฎว่า ไม่ได้มีการประกันรายได้ทุกคน (ไม่รู้จริงเปล่า) ต้องเป็นคนที่ทำเควสของ Uber ได้ เท่านั้นก็เก็ทเลย จึงทำให้สงสัยขึ้นมาทันทีว่าแล้วใครคิดเควสหล่ะ แล้วรู้ได้ไงว่าจะต้องมอบเควสให้กับใคร พอลองศึกษาเพิ่มก็พบกับคำๆหนึ่งคือ Gamification เป็นเรื่องของการที่เอาองค์ประกอบของเกม มาใช้กับชีวิตประจำวันให้สนุกและท้าทายขึ้น เช่น มีระบบ Point ระบบ Level เพื่อเพิ่มความสนุกและสร้างฐานผู้ใช้ที่ดีเลยทีเดียว เพราะงั้น Uber ใช้ระบบจัดการแบบออโต้เพื่อจัดการทุกอย่างเลย อย่างโหด

Uber ยังไม่มีการเปิดเผยใดๆ เรื่องของเควส (จริงๆ แล้วหาไม่เจอแหละแฮะๆ) เนื่องจากเป็นคนชื่นชอบเรื่องอัลกอริทึม เลยลองหาดูว่าแล้วมีอย่างอื่นที่ Uber ทำหรือไม่ ปรากฎเจอเรื่อง Dynamic Pricing Model คือการปรับราคาตามความต้องการของตลาด ถ้าพูดให้ถูกภาษาเศรฐศาสตร์ คือ Supply & Demand เช่น ผู้โดยสารต้องการเยอะ Uber จะขึ้นราคาเพื่อให้คนที่ต้องการใช้บริการ Uber จริงๆ เพราะคนขับมีจำกัด เมื่อหมดช่วงเวลาเร่วด่วนก็ปรับราคากลับมาเท่าเดิม ดูเหมือนง่ายเลย แต่มีส่วนผสมในรายละเอียดของ Dynamic Pricing Model อีกมาก เช่น ต้องคาดเดาให้ได้ก่อนเกิดชั่วโมงเร่งด่วนจากนั้นจะมี notification ไปบอกคนขับว่าออกมาขับได้แล้วได้เงินเพิ่มนะ หรือการเตือนผู้โดยสารอย่างไรเพื่อไม่ให้ผู้โดยสารโมโหว่าทำไมขึ้นราคาแพงจังเลย

นอกจากนั้น Uber ยังมีการให้ผู้โดยสารให้คะแนนคนขับ และให้คนขับให้คะแนนผู้โดยสารเพื่อดูพฤติกรรมอีกด้วย นอกจากนั้นยังมีการดูว่าคนขับปฎิเสธผู้โดยสารบ่อยรึเปล่าและอื่นๆอีก ซึ่งระบบ Dynamic Pricing Model ไม่ได้มีแต่ใน Uber นะ โรงแรม สายการบินและอื่นๆ ก็ใช้ระบบนี้กันทั้งนั้น สุดท้าย Uber บอกว่าการปรับราคาตามความต้องการของตลาดนั้นไม่มีผลต่อผู้ใช้มากเท่าไหร่เพราะเมื่อผู้ใช้รู้สึกว่าแพงเกินไปไม่อยากจ่าย ก็จะพบว่าแท๊กซี่ช่วงนั้นก็หายากเช่นกัน (มันเลยแพงไง ก็ชั่วโมงเร่งด่วนหนิ) ทำให้ผู้โดยสารไม่ค่อยติมากเท่าใด

ใครสนใจลองไปอ่านต่อเพิ่มเติมได้นะจาก Reference ข้างล่าง ยังไงคราวหน้าจะเตรียมเนื้อหาให้ดีกว่านี้นะ และจะใส่รูปเพิ่มขึ้นด้วยนะ ยังไงก็ติดตามกันนะ สุดท้ายนี้อยากบอกว่าไม่ได้ค่าโฆษณาจาก Uber แต่อย่างใด ขอบคุณครับ

What is Well-Architected structure ?

เดือนที่แล้วไม่ได้มาเขียนอ่ะ เพราะงานยุ่งกว่าจะนึกได้ก็เดือนใหม่ซะแล้ว ฮ่าๆ รอบนี้ก็หนีไม่พ้นไปแปลงานภาษาอังกฤษมาให้ฟังอีกแหละ เข้าเรื่องเลยดีกว่าเนาะในหลายโพสที่ผ่านมาได้มีการแนะนำ Google App Engine ซึ่งเป็นแบบเอาโค้ดเราขึ้นไป Deploy บนคลาวด์ของ Google ได้นั่นเอง รอบนี้มีของอีกเจ้าหนึ่งที่ก็ดังไม่แพ้กัน นั่นคือ AWS ซึ่งอยู่ในเครือ Amazon โดยอันนี้มีให้เลือกเยอะกว่า GAE หน่อย มีทั้งสามารถสร้าง Infrastructure ได้เอง และแบบคล้ายคลึงกับ GAE คือส่งแค่โค้ดขึ้นไป Deploy บนระบบของ AWS บอกเลยว่าผู้เขียนไม่ได้รับค่าโฆษณาใดๆ ทั้งสิ้นนะ

ผู้เขียนได้ไปอ่านบทความของ AWS ซึ่งนับว่าเป็นบทความที่ดีมากเลย เกี่ยวกับว่าทำไมเราต้องนำระบบไปทำงานบนคลาวด์ จนถึงว่าวางระบบบนคลาวด์ยังไงให้ได้ประโยชน์มากที่สุด โดยแปลมาจาก Whitepaper ของ AWS ชื่อว่า AWS Well-Architected Framework หากเราคิดว่ามันเป็นการโฆษณาเพื่อให้ขายของตัวเองได้ดีขึ้นผู้อ่านก็คิดถูกแล้วแหละ แต่ในโฆษณาก็มีประเด็นที่น่าเก็บเอามาคิดดี เช่น

ในบทความกล่าวถึง การวางระบบบนคลาวด์ AWS พื้นฐานควรทำอย่างไรบ้าง

  • เลิกเดาว่าจะมีคนใช้ระบบกี่คน ในระบบแบบที่เราเป็นคนตั้งเองจำเป็นต้องคำนึงถึงผู้ใช้เพราะไม่งั้นระบบจะล่มเอาได้ง่ายๆ หากเรามัวแต่คิดว่าต้องตั้ง Server กี่ตัว ตั้งมาแล้วไม่ได้ใช้ ตั้งมาแล้วใช้ไม่พอ แบบนี้คงเหนื่อย แต่บน AWS เราไม่จำเป็นต้องเดาอะไรให้มากมายเพราะทุกอย่างเป็นคลาวด์สามารถเพิ่มลดได้ตามความต้องการ
  • สามารถเทสได้บนระบบจริง การเทสถ้าไปเทสกับของจริงเกิดมันล่ม จะทำให้เกิดหายนะ แต่จะสร้างระบบจำลองที่เหมือนของจริงก็ใช้เงินมากทีเดียว เช่น จะต้องนำระบบไป Deploy บนเครื่อง Mainframe ของบริษัท จะให้ทดลองโดยการซื้อ Mainframe อีกเครื่องมาตั้งไว้แค่เทสก็ไม่ไหว แต่บนคลาวด์ทุกอย่างเป็นการแชร์กับคนอื่นอยู่แล้ว สามารถสร้างระบบจำลองอีกทั้งระบบเพื่อใช้แค่วันเดียวในการเทสก็ทำได้
  • ลดความเสี่ยงที่เกิดจาก infrastructure บอกเลยว่าการนำระบบไป Deploy ให้ลูกค้า เครื่องที่ลูกค้านำมาให้ใช้ในการ Deploy เนี่ยไม่รู้ว่าเวอร์ชันตรงกับที่เราพัฒนามารึเปล่าก็ไม่ทราบ แต่การที่ทุกอย่างอยู่บนคลาวด์เราสามารถสร้าง Infrastructure แบบที่เราต้องการได้ ไม่ต้องเสี่ยงกับ infrastructure ที่ไม่พร้อมให้เราทำการ Deploy (ข้อนี้จริงๆ ระบบสามารถอยู่บนแค่ Virtual System ไม่จำเป็นต้องคลาวด์ก็ได้นะ)
  • สามารถทำเวอร์ชันของ infrastructure ได้ ในชีวิตจริงแล้วเนี่ย หากเราต้องเทสระบบแล้วต้องไปลงโปรแกรมบนเครื่องเทสเนี่ย ส่วนมากจะเกิดอาการงงว่าเราลงอะไรไปแล้วบ้างพอระบบมีปัญหาก็ Format แล้วลงโปรแกรมใหม่ แต่นั่นคือถ้ามีเครื่องเพียงเครื่องเดียวชีวิตก็สวยงามดีแหละ หากถ้าเครื่องคำนวณแยกเครื่องกับ Database และแยกกับ Firewall เนี่ยการไปไล่ Format ทั้งหมดคงลำบากมากนะบอกเลย จะดีกว่ามั้ยถ้าเรามีระบบเวอร์ชันให้กับทุกเครื่องที่เกี่ยวข้องกับการเทสของเรา บน AWS สามารถทำเวอร์ชันให้กับเครื่องของเราได้และสามารถเปรียบเทียบความแตกต่างของเวอร์ชันต่างๆได้อีกด้วย (ข้อนี้ผู้เขียนก็คิดเหมือนข้อที่แล้วนะ ถ้าอยู่บน Virtual System อะไรก็ทำเวอร์ชันได้แหละแต่เหนื่อยหน่อยเท่านั้นเอง เพราะ AWS มีระบบเวอร์ชันให้อยู่แล้วเนี่ยแหละเลยง่ายกว่า)
  • รองรับการเปลี่ยนแปลงแบบพลิกฝ่ามือได้ ผู้เขียนแปลออกมาซะยิ่งใหญ่เชียว เพราะคิดว่าอันนี้เป็นข้อดีของระบบ AWS ที่สุดละ อันอื่นอาจจะมีทางแก้ในแนวทางอื่นๆได้ แต่ข้อนี้อาจจะทำไม่ได้ในระบบแบบเก่า โดยในข้อนี้พูดถึงการอยากจะเปลี่ยนแปลงระบบทั้งหมดเช่น เมื่อก่อนเป็น Centralize อยากเปลี่ยนเป็นแบบ Distribution โหไหนจะซื้อเครื่องมาเพิ่มใหม่ ไหนจะเอาเครื่องเก่าไปทำอย่างอื่นอีก โหเหนื่อย แต่ถ้าเป็นคลาวด์ทุกอย่างสามารถหายวับไปกับตาแล้วแทนที่ด้วยสิ่งใหม่เพียงไม่กี่คลิกได้นับว่าเป็นข้อดีอย่างที่สุดของ AWS แล้วสามารถเพิ่มลดทุกอย่างได้ดั่งใจ

นอกจากการออกแบบ infrastructure จะคิดถึงปัจจัยข้างบนแล้ว เวลาออกแบบระบบใดๆก็ตามควรจะคิดถึง 4 ปัจจัยนี้เป็นหลัก คือ ความปลอดภัย (Security) , ความน่าไว้วางใจ (Reliability) , ประสิทธิภาพการใช้งาน (Performance Efficiency) และ การลดค่าใช้จ่าย (Cost Optimization)

Security ในระบบทุกระบบจำเป็นที่เราจะต้องมีการคำนึงถึงความปลอดภัย ซึ่งประกอบด้วย 4 หัวข้อใหญ่ คือ การป้องกันดาต้า (Data protection) , การควบคุมการเข้าถึง (Privilege management) , การป้องกันโครงสร้าง (Infrastructure protection) เช่น การป้องกันการเข้าถึง router และ ระบบควบคุมการตรวจสอบ (Detective controls) เช่น ตั้งให้ระบบมีการตรวจจับการโจมตีอัตโนมัติ

Reliability ระบบจะมีความน่าไว้วางใจเมื่อระบบมีการรองรับความผิดพลาดที่ดี เช่นระบบไม่มี Downtime ในการขึ้นระบบใหม่ ระบบมีการทำ Change management เมื่อระบบที่ขึ้นใหม่มีการเปลี่ยนแปลงจากระบบเก่า และสุดท้ายเมื่อระบบพบกับความผิดพลาดสามารถซ่อมแซมได้ง่ายไม่ใช่ต้องใช้เวลานานในการซ่อมแซม

Performance Efficiency ระบบที่ดีควรมีการจัดสรรทรัพยากรที่ดี เช่นเครื่องที่ทำงานต้องไม่ว่างจนเกินไป นอกจากนั้นทั้งเนื้อที่ความจุและ Database ก็ควรมีประสิทธิภาพเช่นกัน เช่นเราควรเลือก Database และ Storage ให้เหมาะสมกับระบบที่เราจะทำงานด้วย นอกนั้นยังมีเรื่องที่น่าสนใจอีกเรื่องคือการทำแคชเพราะการทำแคชจะเป็นการทำ Space-time trade-off หรือหากเราต้องการความเร็วเพิ่มขึ้นเราสามารถเพิ่มพื้นที่ให้ระบบเร็วขึ้นได้ แต่เราจะสามารถทำแคชได้ง่ายหรือไม่ขึ้นอยู่กับการออกแบบนี่แหละ

Cost Optimization ระบบคลาวด์สามารถคำนวณงบประมาณที่ใช้ได้ง่าย และนอกจากนั้นใน AWS ยังมีระบบที่คิดเงินเป็น API call อีกด้วยหากเรายังไม่ต้องการที่จะสร้าง Server ขึ้นมาใช้จริงๆ นอกจากนั้นทุกอย่างบนโลกนี้เป็นเงินหมดครับ การที่เราไปฝากเครื่องไว้ที่ Datacenter การจะแบ็คอัพทีนี่คิดเงินเยอะประมาณหนึ่งเลยทีเดียวแต่บนคลาวด์ทุกอย่างสามารถลดค่าใช้จ่ายลงได้ครับ

โพสนี้ยาวหน่อยแต่ก็หวังว่าจะเป็นความรู้ให้ผู้อ่านแหละใครสนใจก็ไปอ่านเพิ่มเติมได้ครับ ถ้ายังไม่สนใจยังไง AWS มีโปรฟรีหนึ่งปีสำหรับผู้เข้าไปใช้ใหม่ได้นะครับ นอกจากนั้นเดี๋ยวนี้ AWS พัฒนาหลายระบบขึ้นมาตอบสนองผู้ใช้อีกมากมายลองไปดูกันครับ นอกจากนั้น AWS ยังมี guideline สำหรับระบบต่างๆว่าควรจะวางอย่างไรโดยเข้าไปดูได้ที่ link นี้ครับ

Evolution of Recommendation Systems

สวัสดีผู้อ่านทุกท่าน รอบนี้ต้องบอกเลยว่าหาเนื้อหามาเขียนไม่ทันอีกแล้ว 555 ขอโทษผู้อ่านด้วย โพสนี้เลยจะแนะนำเรื่องราวของ Recommendation System จริงๆ ก็แปลมาแหละ ลองอ่านๆ กันดูนะครับ

ในปัจจุบันการเลือกซื้อสินค้า เข้าร้านอาหาร และดูภาพยนตร์ ต้องบอกเลยว่าถูกชักจูงจากระบบ Recommendation System (ย่อยสั้นๆ ว่า RS ละกัน) เป็นส่วนมาก RS  เปลี่ยนพฤติกรรมผู้ใช้ไปมาก คอยแนะนำ คอยชักจูง บางทีเรายังไม่รู้เลยว่าเราต้องการอะไร RS อาจจะรู้ความต้องการมากกว่าเราซะอีก

RS คือระบบคัดกรองข้อมูลอัจฉริยะ ซึ่งช่วยลดตัวเลือกที่จะนำแสนอแก่ผู้ใช้ให้ตรงผู้ใช้มากขึ้น และในปัจจุบันระบบส่วนมากมีการนำ RS เข้าไปใช้งาน ผู้อ่านลองคิดดูสิว่าถ้า Netflix ไม่แนะนำภาพยนตร์ Amazon ไม่แนะนำหนังสือประเภทเดียวกัน Facebook หรือ LinkedIn ไม่แนะนำคนที่น่าจะรู้จัก Yahoo ไม่แนะนำข่าวสารที่น่าสนใจให้ เว็ปเหล่านี้คงขาดความน่าสนใจลงไปโขเลยทีเดียว

คราวนี้เรามาดูกันดีกว่าว่า RS มีส่วนประกอบอะไรบ้าง สำหรับข้อมูลหรือเชื้อเพลิงในการขับเคลื่อนระบบ RS นั้นมีอยู่ 2 อย่างด้วยกัน นั่นคือ Explicit interaction และ Implicit interaction โดย Explicit คือ ข้อมูลโดยตรงที่ได้จากผู้ใช้นั่นเอง เช่น เพศ อายุ เป็นต้น และ Implicit คือข้อมูลโดยอ้อมที่เกี่ยวข้องกับผู้ใช้ เช่น ที่อยู่ปัจจุบัน วันเวลา อุปกรณ์ที่ผู้ใช้ใช้งาน เป็นต้น ยกตัวอย่าง เช่น Amazon ใช้ข้อมูลสินค้าเก่าที่เราเคยเข้าไปดู (Explicit) สินค้าที่ผู้ใช้คนอื่นที่ใกล้เคียงกับเราซื้อ (Implicit) วันเวลาที่ผู้ใช้ใช้งาน (Implicit) จากข้อมูลเหล่านี้ ระบบ RS แบ่งออกได้เป็น 3 ประเภทคร่าวๆ ดังนี้

Collaborative Filtering คือระบบ RS ที่ใช้ข้อมูลการกระทำของเราและเพื่อน เพื่อใช้แนะนำการกระทำที่เราน่าจะทำหรือน่าสนใจ แต่ระบบนี้มีปัญหา Cold Start Problem หรือคือการที่ต้องมีข้อมูลเยอะพอสมควรเพื่อเป็นฐานข้อมูลในการแนะนำ และนอกจากนั้นระบบแบบนี้จะแนะนำการกระทำที่เป็นกระแสในช่วงนั้น โดยไม่แนะนำการกระทำนอกกระแส ก็เป็นข้อเสียเปรียบของระบบ RS แบบนี้ก็ว่าได้ ระบบ RS นี้ยกตัวอย่าง เช่น Amazon, Facebook, Twitter, LinkedIn, Spotify, Google News และ Last.fm

Content-Based Filtering (CBF) คือระบบ RS ที่สนใจในวัตถุนั้นมากกว่าการกระทำของผู้ใช้ โดยการแยกแยะปัจจัยของวัตถุนั้นๆ และแนะนำวัตถุที่มีปัจจัยใกล้เคียงกันขึ้นมาให้ ข้อดีของระบบ RS แบบนี้คือการที่ไม่จำเป็นต้องใช้ข้อมูลมหาศาลในการประมวลผล หรือไม่มี Cold Start นั่นเอง แต่ก็มีข้อเสียอยู่ว่าวัตถุที่แนะนำนั้นค่อนข้างเจาะจงมากไปหน่อย ขึ้นอยู่กับการคำนวนความใกล้เคียงของวัตถุนั้นๆ ตัวอย่างเช่น IMDB, Rotten Tomatoes และ Pandora

Hybrid Method คือระบบ RS ที่รวมเอาสองระบบข้างต้นมาทำงานช่วยกัน Netflix คือตัวอย่างของระบบผสมนี้ ระบบแบบผสมนี้ไม่มีขั้นตอนตายตัว แล้วแต่ผู้พัฒนาจะนำไปใช้งานในแนวทางไหน แต่ส่วนมากระบบผสมจะแก้ปัญหาที่เกิดขึ้นในระบบ RS ข้างต้นได้

ต้องยอบรับว่าระบบ RS จะนำผู้ใช้และธุรกิจไปสู่ประสบการณ์ใหม่บนโลกดิจิตอล นอกจากนั้น cloud computing ยังเป็นตัวช่วยที่สำคัญยิ่งที่จะให้ระบบ RS เข้าใกล้จุดสูงสุดคือสามารถแนะนำได้ถูกใจผู้ใช้ทุกคนแตกต่างกันไปและทันเวลา ในปัจจุบันระบบ RS ยังแบ่งผู้ใช้ออกเป็นหลายกลุ่มอยู่ ในอนาคตอันใกล้นี้คงจะเห็นระบบ RS ที่แนะนำเฉพาะบุคคลมากขึ้นและยังตอบสนองแบบทันเวลา ทันอารมณ์ ทันสถานที่ ข้อมูลทุกอย่างเกี่ยวกับผู้ใช้จะถูกนำมาวิเคราะห์และประมวลผลเพื่อความแม่นยำมากขึ้น

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

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

Mashape : api search engine

ก็วันนี้ไม่มีอะไรมาก จะมาแนะนำ เว็บสำหรับคนหา api (mashape) ซึ่งทำออกมาได้ดีมากเลยทีเดียว เป็นเว็บสำหรับให้ผู้ใช้และผู้สร้างได้เชื่อมต่อกันง่ายขึ้น โดยชีวิตปกติของโปรแกรมเมอร์นั้นส่วนมากก็จะไปหาว่า api ไหนเจ๋งและน่าใช้ใน  stackoverflow ถ้ายังงงกับการทำงานก็จะหาต่อใน Github ซึ่งทำให้ไม่รู้การเชื่อมต่อไปยัง api จริงๆว่าต้องทำอย่างไร ทำให้เสียเวลากับการหา api และนำมาเปรียบเทียบค่อนข้างยาก mashape จะช่วยเติมเต็มความต้องการเหล่านี้

สำหรับฝั่งผู้ใช้นั้น เว็บ mashape สามารถทำให้เราได้ทดลองใช้ api ได้เร็วขึ้น ติดตามการเปลี่ยนแปลงได้อย่างรวดเร็ว และมีการรองรับถึง 8 ช่องทาง (Curl, Java, Node, PHP, Python, Ruby, Objective C, และ .NET) น่าจะเรียกได้ว่าเป็น one-stop service จริงๆ นอกจากนั้นยังมีเว็บบอร์ดสำหรับพูดคุยถามปัญหากับผู้สร้างได้ นอกจากนั้นตัว mashape เองยังมีระบบจัดการรองรับการทำงานทั้ง การกำหนดสิทธ์ผู้เข้าถึง การแปลงข้อมูลให้เหมาะกับ application ของผู้ใช้ มีทั้ง pricing ให้เราดูด้วยว่า api ไหนราคาเท่าไหร่ และยังสามารถดูแลตรวจสอบ api ได้จากที่หน้าเว็บเพียงแห่งเดียวไม่ต้องเข้าหลายเว็บ นั่นคือมาที่หน้าเว็บนี้ทีเดียวรู้หมดว่า api ไหนเป็นอย่างไรบ้าง และเค้ายังรับประกันว่า 99.9% up time หลายคนอาจจะสงสัยว่าเค้าทำฟรีแล้วได้อะไร หากเราเสียเงินให้เค้าไปแล้วเนี่ย (25$ ต่อเดือน) เค้าจะอนุญาตให้เราเค้าถึง api ที่ไม่ public ให้เราเข้าไปยัง api ที่เค้าขายกันจริงๆ ไม่ opensource ไม่เลิกพัฒนาเป็นต้น สำหรับคนที่เป็นองค์กร สมัครไว้ก็ดีนะ

และหากเป็นผู้สร้าง api ก็บอกได้เลยว่าเป็นแหล่งค้าขายที่น่าทำตลาดมาก เพราะผู้ใช้อยากได้แหล่งหา api อยู่แล้วที่ไม่ใช่ google และ overflow เพราะ mashape จัดการให้เราหมดทุกอย่างเลย ทำให้เราไม่ต้องไปหา layout การจะพูดคุยกับลูกค้าว่าทำยังไงให้เค้ามาใช้ mashape จะจัดรูปแบบให้ผู้ใช้เข้าใจง่าย ทั้งยังมีระบบจัดทำรายงานให้ได้วิเคราะห์ และเรายังไม่ต้องกังวลเรื่องระบบของผู้ใช้ว่าจะใช้ข้อมูลแบบไหน mashape จะแปลงข้อมูลตามที่ผู้ใช้ต้องการ และยังเป็น auto-generate sdk ทั้ง 8 ช่องทางให้อีกด้วย บอกได้เลยว่าเจ๋ง ส่วนของผู้สร้างอาจจะอธิบายไม่ค่อยเห็นภาพเพราะเป็นแต่ผู้ใช้ไง แต่บอกผู้สร้างได้เลยนะว่าเป็นตลาดที่น่าสนใจทีเดียว dev ทุกคนอยากได้เว็บอย่างนี้อยู่แล้ว

สำหรับวันนี้ไม่รูปนะเพราะทำไม่ทันอ่ะ แล้วมันสิ้นเดือนแล้วด้วยไว้คราวหน้าละกันนะ