ตอนแรกตั้งใจอย่างมากมายว่าจะเขียนเรื่องสรุปเกี่ยวกับ Information Retrieval (IR) ทั้งหมดนะคะ แต่ช่วงนี้กำลังมึนๆ เลยขอติดไว้ก่อนนะคะ blogนี้จะเขียนคำถามที่มักพบบ่อยมากๆเวลาคนมาถามเรื่องเกี่ยวกับ IR นะคะ นั่นคือ weight ของคำคำนวณได้อย่างไร และ อะไรคือ tf , idf
จากการที่ IR ใช้ weight เพื่อบอกความสำคัญของ term ที่ใช้เป็น index ในการบ่งชี้ถึง document นะคะ (คนที่ไม่มีพื้น IR อาจจะ งง กันเล็กน้อยนะคะ)
จากการที่ IR ใช้ weight เพื่อบอกความสำคัญของ term ที่ใช้เป็น index ในการบ่งชี้ถึง document นะคะ (คนที่ไม่มีพื้น IR อาจจะ งง กันเล็กน้อยนะคะ)
โดย weight หรือ ค่าน้ำหนักของ index นะคะ ซึ่ง make sense ว่า index ใดที่มีน้ำหนักมาก ก็จะมีความสำคัญ และมีความสามารถในการบ่งชี้ถึง document สูง และในทางกลับกัน index ที่มีค่าน้ำหนักน้อย ก็จะมีความสามารถในการบ่งชี้ถึง document ต่ำ ซึ่งโดย ทั่วไปสูตรที่ใช้คำนวณ weight ใน IR คือ
Weight = tf * idf
ซึ่ง ค่า tf หรือ term frequency ชื่อก็บอกอยู่แล้วนะคะ มันก็คือ ความถี่ของ term โดยเราจะนับความถี่ใน 1 document เท่านั้น
ส่วน idf หรือ inverse document frequency เป็นค่าที่ใช้บ่งบอกความสำคัญของ term ที่เทียบกับ ทุกๆ document ที่เก็บอยู่ในฐานข้อมูล
ส่วน idf หรือ inverse document frequency เป็นค่าที่ใช้บ่งบอกความสำคัญของ term ที่เทียบกับ ทุกๆ document ที่เก็บอยู่ในฐานข้อมูล
idf = log N/n
N คือ จำนวณ document ทั้งหมดที่เก็บอยู่ในฐานข้อมูล
n คือ จำนวณ document ที่ term ปรากฎ (term ในที่นี้คือ คำที่เราต้องการจะหาค่าน้ำหนักของมันนะคะ)
n คือ จำนวณ document ที่ term ปรากฎ (term ในที่นี้คือ คำที่เราต้องการจะหาค่าน้ำหนักของมันนะคะ)
Note: มี trick ให้คิดเล็กน้อยเกี่ยวกับ การคำนวณค่า weight นะคะ
จากที่เราบอกไปแล้วว่า weight ที่มีค่าสูง จะมีความสามารถในการบ่งชี้เอกสารมาก และสูตรของการคำนวณ weight = tf * idf ซึ่งเป็นการ คูณ นั่นหมายความว่า ถ้า index ใดมี tf มาก ก็แสดงว่ามีค่า weight มาก และมีความสามารถในการบ่งชี้สูงด้วย
จากประเด็นนี้จะขัดแย้งกับความเข้าใจว่า การที่มีความถี่เยอะๆ จะสามารถ specific ถึงเอกสารได้ยังไง ต้องยิ่งมีความถี่น้อยๆสิ ถึงจะบ่งชี้ไปยังเอกสารได้อย่างดีเยี่ยม
จากกรณีนี้เราจึงจำเป็นต้องใช้ค่า idf เพื่อถ่วงน้ำหนักของคำ ให้มีความ balance มากขึ้น เนื่องจาก idf จะเป็นตัวบ่งบอกว่า index มีความสำคัญต่อทั้งฐานข้อมูลแค่ไหน
โดย ที่มา ของ idf นั้น เกิดจากการหาความถี่ของ index ที่ปรากฎในฐานข้อมูลทั้งหมดก่อน แล้วมาทำการ inverse โดยใช้ log ซึ่งมีจุดประสงค์ในการกลับค่าจากน้อยให้เป็นมาก (ถึงตรงนี้ หลายคนอาจจะงงนะคะว่าค่าไหนน้อย ค่าไหนมาก) จะยกตัวอย่างง่ายๆให้ดูนะคะ
ตัวอย่างเช่น เราให้ฐานข้อมูลมีเอกสารทั้งสิ้น 10 เอกสาร นั่นคือ N = 10
กรณีแรก ให้ n =5 จะได้ค่า idf = log N/n
= log 10/5
= log 2
= 0.3010
กรณีสอง ให้ n=2 จะได้ค่า idf = log N/n
= log 10/2
= log 5
= 0.6989
อย่าลืมนะคะ ว่า n ในที่นี้คือ จำนวณเอกสารที่ index ของเราปรากฎ นั่นหมายความว่า
โดย ที่มา ของ idf นั้น เกิดจากการหาความถี่ของ index ที่ปรากฎในฐานข้อมูลทั้งหมดก่อน แล้วมาทำการ inverse โดยใช้ log ซึ่งมีจุดประสงค์ในการกลับค่าจากน้อยให้เป็นมาก (ถึงตรงนี้ หลายคนอาจจะงงนะคะว่าค่าไหนน้อย ค่าไหนมาก) จะยกตัวอย่างง่ายๆให้ดูนะคะ
ตัวอย่างเช่น เราให้ฐานข้อมูลมีเอกสารทั้งสิ้น 10 เอกสาร นั่นคือ N = 10
กรณีแรก ให้ n =5 จะได้ค่า idf = log N/n
= log 10/5
= log 2
= 0.3010
กรณีสอง ให้ n=2 จะได้ค่า idf = log N/n
= log 10/2
= log 5
= 0.6989
อย่าลืมนะคะ ว่า n ในที่นี้คือ จำนวณเอกสารที่ index ของเราปรากฎ นั่นหมายความว่า
"n ยิ่งน้อย จะต้องมีความสามารถในการบ่งชี้สูง"
ซึ่งจากตัวอย่างก็ชัดเจนอยู่แล้วว่า log จะช่วยให้ค่าน้ำหนักเป็นไปตามที่เราต้องการ นั่นคือ เราอยากให้ index ที่ปรากฎอยู่เพียงแค่ 2 เอกสาร มีค่า น้ำหนักมากกว่า index ที่ปรากฎอยู่ทั้ง 5 เอกสาร ถ้าเราเอา ตัวเลข 2 กับ 5 นี้ไปคูณเลยโดยไม่ได้ทำการใส่ log ก่อน ก็จะทำให้ผลลัพธ์ที่ได้นั้นออกมาผิดกับความจริงที่ว่า ยิ่งปรากฎน้อยเอกสาร ยิ่งต้องเป็น index ที่ดี
สุดท้ายนี้ เนื่องจาก blog นี้เป็น blog แรกในการฝึกเขียน blog ความรู้นะคะ ถ้าผิดพลาดประการใด ก็ขอให้เพื่อนๆ ช่วย comment ทิ้งไว้ และจะรีบมาแก้ไขนะคะ ส่วนผู้ใดที่เข้ามาอ่านแล้วไม่เข้าใจอยากถามก็ถามทิ้งไว้ได้จะเข้ามาตอบค่ะ