คำเตือน บทความนี้ อาจจะยาวนิดนึง รวมถึงมี ภาพ และ ข้อความจำนวนมาก ค่อย ๆ อ่าน ระวังตาลายนะครับ :D หายใจเข้าลึก ๆ ถ้าพร้อมแล้ว มาเริ่มกันเลยครับ
เริ่มได้!!
TF-IDF หรือ Term Frequency-Inverse Document Frequency — เป็นหนึ่งในวิธีหา “คำ(term)” ที่สำคัญ ใน “เอกสาร(document)” โดยดูจากเนื้อหาของเอกสารทั้งหมด มักจะใช้ในงานพวก Information-retrieval หรือ Text mining
TF-IDF เกิดจากผลคูณของสองค่า คือ TF(Term Frequency) กับ IDF(Inverse Document Frequency)
Term ในที่นี้ ผมจะกำหนดให้เป็น “คำ” นะครับ แต่จริง ๆ แล้ว มันไม่ใช่
Term Frequency
หรือ ความถี่ของ คำ(term) และเนื่องจากว่าแต่ละ เอกสาร(document) อาจจะมีความยาวที่แตกต่างกัน ดังนั้นการคำนวณ Term Frequency จึงมักจะหารด้วยความยาวของ document (จำนวนคำทั้งหมดใน document นั้น)
วิธีการคำนวณ Term Frequency มีหลายวิธี เช่น
- Raw counts
- Log normalization
- Double normalization
Raw counts
แบบง่าย ๆ เลยก็คือนับจำนวน คำ(term) ที่มีใน เอกสาร(document) นั้น ๆ เช่น
เมื่อนับ คำ(term) ใน เอกสารที่ 1 (document 1) จะได้
Term Frequency
หลังจากนั้นนำค่าที่ได้แต่ละคำ ไปหารกับจำนวนคำทั้งหมดใน document ในตัวอย่างมีทั้งหมด 8 คำ
จะได้ว่า
เราก็จะได้ค่า Term Frequency ของแต่ละคำ(term)มาแล้ว และนี่คือวิธีการที่ง่ายที่สุดในการหาค่า Term Frequency ครับ
Log Normalization
อีกรูปแบบนึงในการหาค่า Term Frequency คือการหาค่าความถี่แบบ log scaled
เหมาะสำหรับข้อมูลที่จำนวนความถี่ของคำมีช่วงต่างกันมากๆ เช่น มีคำนึงมีความถี่แค่ 1 แต่อีกคำมีความถี่เป็น 1000
Log Normalization จะมาช่วย normalized ค่าไม่ให้แตกต่างกันเกินไป
กำหนดให้ logTF = logNormalization
หมายเหตุ: เมื่อ f(term, document) = 0, logNormalization จะเป็น 0
Double Normalization
เหมาะสำหรับข้อมูลที่มีความยาวของ เอกสาร (document) ไม่เท่ากัน หรือต่างกันมาก เช่น
document a มีแค่ 10 คำ แต่ document b มี 1000 คำ
Double Normalization จะมาช่วยป้องกันไม่ให้เกิด bias เนื่องจากความยาวของ เอกสาร (document) มันมีผลต่อการคำนวณ
กำหนดให้ dn = doubleNormalization
Inverse Document Frequency
ใช้สำหรับวัดความสำคัญของ คำ(term) ใน เอกสาร(document) ทั้งหมด หมายถึง ถ้า คำ (term) เจอในหลาย เอกสาร (document) มันย่อมมีความสำคัญลดลง เช่น
จะเห็นว่า document1 กับ document2 มีคำที่เหมือนกันคือ
และมีคำที่ไม่เหมือนกันคือ
ดังนั้นจะเห็นว่า คำ(term) ที่แตกต่างกันจะมีความสำคัญมากกว่า เพราะเป็นคำที่ใช้บอกว่า เอกสาร(document) นี้มีข้อมูลเรื่องอะไร
และอีกเช่นกัน Inverse Document Frequency ก็มีวิธีคิดหลายวิธี เช่นกัน แต่เราจะพูดถึงแค่แบบธรรมดาก่อน ในบทความนี้นะครับ :D
- แบบธรรมดา
- แบบ smooth
- แบบ max
- แบบ probabilistic
แบบธรรมดา
N คือ จำนวน document ทั้งหมด
df(t) คือ จำนวน document ที่มี term t
ดังนั้นถ้าคำนวนจากตัวอย่าง จะได้
TF-IDF
พอมาถึงตรงนี้แล้วสิ่งที่เราต้องทำก็คือ เอาผลของ Term Frequency และ Inverse Document Frequency มา คูณ กัน เท่านี้เราก็จะได้ tf-idf weight ของ คำ(term) นั้น ๆ แล้ว
ถ้า weight ของ tf-idf เยอะ เกิดจาก คำ(term) มีความถี่ใน เอกสาร(document) ที่ใช้คำนวนสูง แต่มีความถี่ต่ำใน เอกสาร(document) อื่น ๆ ใน collection ทั้งหมด
tf-idf weight จะช่วยทำการกรอง คำ(term) ที่มีความ common ออกไป ทำให้เรารู้ว่า เอกสาร(document) แต่ละอัน มันเป็นเรื่องอะไร
ส่งท้าย
สำหรับบทความนี้ก็คงจะจบลงเพียงเท่านี้ก่อนนะครับ บทความหน้าอาจจะหยิบเรื่องที่น่าสนใจเกี่ยวกับการประมวลผลทางข้อความมาเล่าสู่กันฟังนะครับ สำหรับวันนี้ สวัสดีคร้าบบ