Tag Archives: Facebook Page

การหา Facebook Page ที่ใกล้กัน (1)

การหาว่า Facebook Page ใดที่ใกล้กันนั้น มีประโยชน์หลายแบบ ไม่ว่าจะเป็นอย่างง่ายที่สุด คือ การแนะนำเพจที่น่าสนใจแบบตรง ๆ เช่น ถ้า User ชอบเพจ A เพจที่ใกล้กับ A ที่สุด ซึ่ง User คนนี้ยังไม่ทราบ หรือยังไม่กดไลค์ คือ เพจใด เพจนั้นก็น่าจะเป็นเพจที่ควรแนะนำให้แก่ User คนนั้นใช่ไหมครับ ประโยชน์ต่อ ๆ มา คือ การเอาเพจไปแบ่งกลุ่ม หรือที่เรียกว่า การทำ Clustering หรือการแบ่งคลัสเตอร์ ซึ่งหากเราทำได้ดี ก็จะได้เพจที่คล้ายกันออกมาเป็นกลุ่ม ๆ ที่เรียกว่าเป็นคลัสเตอร์นั่นแหละครับ

เมื่อเรารู้แล้วว่า เราพอจะทำอะไรกันเพจเหล่านั้นได้บ้าง คราวนี้ก็ถึงเวลาลองเอาเพจมาวัดระยะกันดูครับ โดยทั่วไปแล้ว มีการวัดระยะอยู่สองแบบ คือ การวัดระยะด้วยความแตกต่างของข้อความ ซึ่งบ่อยครั้งจะเกิดปัญหาในกรณีที่เพจนั้นโพสต์รูปบ่อย ๆ ซึ่งเรามักจะหาข้อมูลจากรูปนั้นไม่ได้ ทำให้ในที่สุดเราจะวัดความเหมือนกันของเพจสองเพจนั้นไม่ได้ ทำให้มีงานวิจัยอีกกลุ่มหนึ่งที่ไม่สนใจเนื้อหาข้างใน แต่สนใจผลลัพธ์ที่เกิดขึ้นจากการโพสต์ นั่นคือ การที่มี User มากระทำการบางอย่าง เช่น Like Comment หรือ Share สถานะ รูป ลิงก์หรืออะไรก็แล้วแต่ในเพจ (รวมไปถึงการที่ User มา Like ตัวเพจเองด้วย) แล้ว User กลุ่มที่มากระทำการบางอย่างนั้น เกิดซ้อนทับกันบ้าง เป็นกลุ่มเดียวกันบ้าง เราก็สามารถเอาความเหมือนกันของกลุ่ม User มาเป็นตัวบอกว่า เพจสองเพจนั้น ใกล้เคียงกันขนาดไหน

และเนื่องจากเราต้องใช้เวลาและพลังการคำนวณในการค้นหาและดึงข้อมูลUser มา ทำให้ในที่สุดแล้ว เราสามารถดึงข้อมูลบางส่วนออกมาได้จากเพจของ Facebook ในระยะ 1 เดือน โดยการเริ่มค้นหาจาก User ที่ไป Like หรือ Comment อะไรก็แล้วแต่ 10 โพสต์ ล่าสุดในเพจทางด้านธนาคารสองเพจ ซึ่งมีผู้กด Like เพจทั้งสองเกินล้านคนทั้งสองเพจ ดึง User ออกมาได้ประมาณ 200,000 คน จากนั้นสุ่มเลือก User 400 คนที่เปิดเผยว่า ตนเอง Like เพจใดอยู่บ้างออกมา จากนั้น จึงค้นลงไปที่ User แต่ละคนว่า User เหล่านั้น กด Like เพจใดบ้าง ด้วยการ Crawl ไปยังหน้า Profile ของ User ทั้ง 400 คนนั้น ทำให้ได้เพจออกมาจำนวน 80,884 เพจ แล้วไปดึงข้อมูล User ที่มีการกระทำกับเพจเหล่านี้ใน 10 โพสต์ล่าสุดของแต่ละเพจ (จำนวนรวมทั้งสิ้น 643,157 โพสต์) ทำให้เราสามารถดึงข้อมูล User ออกมาได้ทั้งหมด 106,638,220 คน

จากนั้นจึงวัดระยะของเพจทั้ง 80,884 เพจด้วยวิธีการวัดที่เน้นจำนวน User ที่มีการกระทำต่อเพจทั้งคู่ โดยสนใจที่เพจขนาดเล็กก่อน (เพจขนาดเล็ก คือ เพจที่มีจำนวน User ซึ่งมีการกระทำต่อเพจเหล่านั้นเป็นจำนวนน้อย) แล้วเรียงลำดับเพจออกมา พบว่า 10 อันดับแรกของเพจที่มีความใกล้เคียงกันมีดังนี้

  1. Tlux51 กับ Bag’s house Shop
  2. ทรัพย์เจริญ แทรเวล กับ หจก.รุ่งทวีการท่องเที่ยว
  3. ขอบสนาม กับ ไบรอัน เดอะซวย
  4. น้าค่อม ชวนชื่น (fanclub) กับ แมนยูคลับ
  5. We Love Coach กับ The Peninsula Bangkok
  6. Bei Otto กับ Voucher_travel
  7. New page Mookies Zapp กับ คลิปดังเฟสบุ๊ค
  8. ภูฝางทัวร์ กับ เอิร์ธ เบาะซิ่ง
  9. บอย ท่าพระจันทร์ FC กับ Kirk Schiller
  10. Sexyเบาเบา กับ รีทวิต

ซึ่งทั้งหมดนี้คำนวณมาจากความสัมพันธ์จำนวน 3,271,070,286 คู่เพจ และในแต่ละคู่เพจ ต้องเปรียบเทียบโดยเฉลี่ย 25,000,000 ครั้ง ทำให้เราต้องเปรียบเทียบถึง 81,776,757,150,000,000 ครั้ง ใช่แล้วครับ คุณอ่านไม่ผิดหรอกครับ ราวๆ แปดหมื่นหนึ่งพันล้านล้านครั้ง ซึ่งไม่สามารถคำนวณได้ บนคอมพิวเตอร์เครื่องเดียวแน่นอน (จริง ๆ ก็คำนวณได้นะครับ แต่คิดว่าต้องรอนานนนนนนนนมากกกกกกกกกกกก) ทำให้เราต้องย้ายไปใช้เครื่องคอมพิวเตอร์คลัสเตอร์บน Amazon EC2 ร่วมกับ Apache Spark ในงานนี้ เราใช้เครื่อง VM จำนวน 18 Instance และใช้เวลาไปทั้งสิ้นเพียง 20 ชั่วโมง

ผมขอเวลาเรียบเรียงข้อมูลอีกเล็กน้อย รวมถึงการสร้างวิธีการวัดที่หลากหลายกว่าเดิม จากนั้นจะเปิดโอกาสให้องค์กรต่าง ๆ Download ความสัมพันธ์ของคู่เพจเหล่านี้นะครับ