ใช้ GotoKnow แล้วรู้สึกว่าลงตัวกับระบบที่ดี

แต่คงต้องมองไปข้างหน้าว่า ทำอย่างไร ระบบที่ดี กลายเป็นระบบที่ดียิ่ง ๆ ขึ้นไปอีก

ประเด็นหนึ่งที่คิดว่าคงสำคัญคือการที่ผู้เขียน blog สามารถหาอ่าน blog จากคนคอเดียวกันได้อย่างเป็นธรรมชาติ

ที่ระดับ blog ไม่กี่หมื่น blog คงยังไม่มีปัญหา ยังพอคุ้ยอ่านได้ทัน และจะเห็นหน้าเห็นตากันได้ หรืออย่างน้อย เห็นชื่อแทนหน้าก็ชื่นใจ (เฮ !)

แต่ในแวดวง IT รู้ ๆ อยู่ว่า กฎการเติบโต เป็นแบบทวีคูณต่อระยะเวลาที่คงที่

ถึงจุดหนึ่ง ที่ blog ขึ้นเป็นหลักแสน ก็เป็นไปได้ว่าจะเห็นกันไม่ทั่วถึง ทั้งที่ความสนใจตรงกันมาก แต่ใช้ tag คนละทิศคนละทาง ซึ่งคงน่าเสียดายมาก

หาไม่เจอ กับ ไม่มีอยู่ในโลก ก็ไม่ต่างกันเท่าไหร่หรอกครับ สำหรับคนอ่าน blog

เพราะระบบ tag จุดอ่อนอย่างหนึ่งคือ ไม่ได้ใช้คำกลาง ๆ ที่สากล เป็นคำที่ตั้งเอง เลือกเอง ผลคือ เรื่องคล้ายกัน ใช้ tag คนละคำกัน ก็ไม่เห็นกันแล้ว

ผมจึงคิดว่า เราคงต้องมองไปข้างหน้าว่าจะนำแนวคิดอะไรมาปรับใช้ในการช่วยควานหาคนคอเดียวกัน

ถ้าใช้วิธี smart text navigation โดยดูจาก document similarity ก็อาจเป็นเรื่องสเกลใหญ่ ต้องรอไป version หน้า เพราะคงเสียเวลาไม่ใช่น้อย ทั้งเขียน และ optimize code ให้ทำงานเร็วสะใจ

แต่ทางออกที่อาจพอเป็นไปได้คือปรับใช้แนวคิดในสเกลที่เล็กกว่า ซึ่งน่าจะดีกว่าการใช้ tag แบบเดิม

วิธีทางเลือกมีมากมหาศาล ผมไม่ขายมะพร้าวให้เจ้าของสวน แต่ผมมีข้อเสนอว่า วิธีหนึ่งที่น่าจะเขียนโปรแกรมง่าย และไม่เป็นภาระระบบนัก คือการใช้ cosine coefficient ของ tag ที่ผ่านการ enriched

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

Cosine coefficient: แนวคิดที่ใช้กันแพร่หลายคือ เจ้าของ blog แต่ละคน จะมี tag ติดตัวเป็นพรวน โดย tag แต่ละคำก็จะมีสถิติอยู่แล้วว่าเคยใช้ไปกี่ครั้ง (frequency) ซึ่งหากมองว่า tag ที่ร้อยเป็นพรวนนี้เป็น vector ที่เหมือนไม้เสียบลูกชิ้นปิ้ง ไม้เสียบนี้มีเนื้อที่เฉพาะของ tag ทั้งหมดของทุกคนใน GotoKnow เช่น คำว่า KM อาจจับจองตำแหน่งหัวสุดของไม้เสียบ ขณะที่ "การจัดการความรู้" ดันไปอยู่กลาง ๆ ไม้

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

ถ้าเรานำ 2 blog มาเทียบเคียงกัน ก็เหมือนหยิบ vector ทั้งคู่มาวางเคียงกัน ถ้าเป็นเรื่องคล้ายกัน vector ทั้งคู่จะขนานกัน (นั่นคือ ไม้เสียบทั้งคู่ จะดูคล้ายกันมาก) และหาก cosine ของมุมระหว่าง 2 vector เป็น 1 เมื่อใด แสดงว่าคู่นี้ขนานแน่ (นั่นคือ แสดงว่าทั้ง 2 blog มีเนื้อหาเกี่ยวกันมาก) ซึ่งสูตรคำนวณ ก็หาอ่านได้ตามตำราทั่วไป ซึ่งว่าไปแล้ว ก็คือการหาค่า Pearson's coefficient (r) ของ vector 2 ชุดนั่นเอง

ประเด็นคือ  ืทำไมต้อง enrich tag เสียก่อน ?

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

การ enrich ก็คือ การใช้ tag ทั้งหมดที่ GotoKnow รู้จัก มาตรวจดูว่า น่าจะใช้เป็น tag ของคนนั้นได้มั้ย (ดูง่าย ๆ คือมีคำนั้นปรากฎใน blog หรือเปล่า) 

เมื่อ union all tags in GotoKnow แล้วก็ใช้วิธีหยิบ tag ทีละตัวมาตรวจในทุก blog ถ้าพบใน blog ไหน แสดงว่าเป็น tag ของ blog นั้นได้ ก็ยัดเยียดให้ซะเลย 

ถ้าไม่สบายใจว่า tag ยัดเยียด ไม่น่าจะดีเท่า tag ที่เจ้าของตั้งเอง ก็ปรับลดน้ำหนักความสำคัญของ tag ลง เช่น จับหาร 2

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

คราวนี้เมื่อหาความขนานของเวคเตอร์ ก็น่าจะภูมิใจได้ว่า มีระบบ tag ที่รุ่มรวยใช้งานในมาตรฐานเดียวกัน การหาความคล้าย ก็น่าจะดีขึ้น

หลังจากนั้น ระบบอาจรันใหญ่วันละครั้ง สรุปว่า blog ไหนคล้าย blog ไหน เก็บไว้เป็นตารางอ่านสำหรับใช้อ้างอิงได้ภายหลัง

เมื่อใครโหลด blog ใดขึ้นมาก็ตาม ระบบก็สามารถอ่านว่ามี blog ไหน ที่มีความสนใจคล้าย ๆ กันบ้าง

ระบบนี้ น่าจะทำให้การความหาคนคอเดียวกัน เป็นไปได้ง่ายขึ้นกว่าการใช้ tag ตามปรกติ

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