สถาบันข้อมูลขนาดใหญ่ (องค์การมหาชน)

สกัดใจความสำคัญของข้อความด้วยเทคนิคการประมวลผลทางภาษาเบื้องต้น: TF-IDF, Part 1

Oct 1, 2020

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

จุดสำคัญหนึ่งที่ทำให้ข้อมูลชนิดข้อความแตกต่างจากข้อมูลที่มีโครงสร้างอย่างชัดเจน (เช่น ข้อมูลที่ถูกเก็บในฐานข้อมูล) นั้น คือข้อมูลในรูปแบบข้อความมีรูปแบบและความยาวที่หลากหลาย ส่งผลให้ข้อมูลชนิดข้อความถูกนำมาวิเคราะห์ได้ยากกว่ามาก ดังนั้นความสามารถในการสกัดเอาข้อมูลที่สำคัญออกมาจากจากข้อความ (Text Mining) ได้จึงเป็นสิ่งที่สำคัญและเป็นประโยชน์อย่างมาก ในบทความนี้เราจะพูดถึงเทคนิคพื้นฐานเทคนิคหนึ่งที่ใช้ในการวิเคราะห์ค้นหาคำสำคัญของข้อมูลในลักษณะของข้อความที่ชื่อว่า Term Frequency – Inverse Document Frequency (TF-IDF).

Term Frequency – Inverse Document Frequency เป็นเทคนิคที่พิจารณาองค์ประกอบของคำภายในประโยค (และเอกสาร) เป็นหลักโดยจะไม่นำลำดับของคำภายในเอกสารมาใช้วิเคราะห์ประกอบด้วย

เทคนิคนี้มีอยู่ 2 องค์ประกอบด้วยกันคือ Term Frequency (TF) และ Inverse document Frequency (IDF) ซึ่งมีที่มาจากสองไอเดียหลักๆ ต่อไปนี้
* การคำนวณค่าของทั้ง TF และ IDF นั้น มีหลายรูปแบบ สิ่งที่เลือกมานำเสนอ ณ ที่นี้จะเป็นรูปแบบพื้นฐานของทั้งสองค่า (แต่การคำนวณในรูปแบบอื่นๆนั้นก็จะมีลักษณะคล้ายคลึงกัน)


Term-Frequency (TF)

ไอเดียแรกคือ “ถ้าหากคำคำไหนถูกพูดถึงอยู่บ่อยๆ ในเอกสารนั้นๆ จะมีความเป็นไปได้สูงว่าคำนั้นมีความเกี่ยวข้องกับใจความสำคัญของเอกสารนั้นๆ มาก” เช่น ถ้าหากเราเลือกที่จะพิจารณาบทความเกี่ยวกับกาแฟ เราอาจจะเห็นคำว่า “กาแฟ” และ “ชง” หลายครั้งภายในบทความนั้น ค่าของ Term Frequency เป็นค่าที่บอกความถี่ของคำแต่ละคำที่ปรากฏในเอกสารเอกสารหนึ่ง โดยคิดคำนวณจากการนำจำนวนครั้งที่คำนั้นๆ ปรากฏในเอกสารมาหารด้วยจำนวนคำทั้งหมดในเอกสาร

เพื่อแสดงการตัวอย่างการคำนวณค่า TF (รวมถึง ค่า IDF และ TF-IDF ในตัวอย่างต่อๆไป)  เราจะใช้เอกสาร 2 เอกสารด้านล่างซึ่งแต่ละเอกสารจะมีเพียงประโยคเดียวเท่านั้น

  • เอกสารที่ 1: A nose print of a dog is unique the same way fingerprints of a human being are unique.
  • เอกสารที่ 2: A human nose has five million scent receptors, while  a dog nose has up to three hundred million receptors.

เนื่องจากเอกสารที่ 1 ประกอบด้วยคำทั้งหมด 18 คำ ดังนั้นเราสามารถคำนวณค่า Term Frequency  ของคำแต่ละคำได้ดังต่อไปนี้

คำจำนวนคำTerm-Frequency (TF)
a33/18
nose11/18
print11/18
of22/18
dog11/18
is11/18
unique22/18
the11/18
same11/18
way11/18
fingerprints11/18
human11/18
being11/18
are11/18
ค่า Term Frequency ของคำในเอกสารที่ 1

สำหรับเอกสารที่ 2 (ประกอบด้วยคำทั้งหมด 19 คำ) นั้น เราก็สามารถทำการคำนวณค่า Term Frequency ได้แบบเดียวกัน

อย่างไรก็ตาม การที่ใช้คำที่ปรากฏบ่อยๆ เพียงอย่างเดียวเพื่อหาใจความสำคัญของข้อความนั้นอาจยังไม่ดีพอ ยกตัวอย่างเช่นในกรณีที่เรามีหลายเอกสารในหมวดหมู่เดียวกัน เราต้องการคำที่สามารถแยกแยะเอกสารแต่ละชิ้นออกจากกันได้ด้วย (เช่นในกรณีที่เราต้องการหาใจความสำคัญของบทความเกี่ยวกับปลาทะเล เราคงไม่ต้องการให้คำสำคัญที่สุดของทุกบทความที่หามาได้เป็นคำว่า “ปลา”,”ทะเล” หรือ ”ว่าย” ไปทั้งหมด) ดังนั้นคำที่ถูกเลือกมาว่าเป็นคำที่มีความสำคัญที่สุดต่อความหมายของบทความนั้นควรจะเป็นคำที่ปรากฏอยู่ในเอกสารจำนวนไม่มากในบรรดาเอกสารทั้งหมดที่เรานำมาวิเคราะห์ ความต้องการในจุดนี้ทำให้ไอเดียของ Invert Document Frequency (IDF) ถูกนำมาใช้ในลำดับถัดมา


Inverse Document Frequency (IDF)

IDF เป็นการคำนวณค่าน้ำหนัก (weight) ความสำคัญของแต่ละคำโดยจะคำที่พบเจอได้บ่อยๆ (ในหลายๆเอกสาร) จะมีค่า IDF ต่ำ ซึ่งบ่งบอกว่าคำเหล่านั้นจะไม่สามารถดึงเอาจุดเด่นของเอกสารที่คำเหล่านั้นปรากฏอยู่ออกมาได้ดี ค่า IDF สามารถคำนวณได้ด้วยสมการ

สำหรับตัวอย่างการคำนวณค่า IDF นั้น เราจะใช้ตัวอย่างเอกสารชุดเดียวกับตัวอย่างการคำนวณ ค่า TF ด้านบน

เมื่อพิจารณาเอกสารที่ 1 เราพบว่าคำว่า a, nose, dog, human ปรากฏอยู่ในเอกสารที่ 2 ด้วย ดังนั้นเราจึงสามารถคำนวณค่า IDF ได้ดังต่อไปนี้

คำจำนวนเอกสารที่ปรากฏInverse Document Frequency (IDF)
a2\log{(\frac{2}{2})} = 0
nose2\log{(\frac{2}{2})} = 0
print1\log{(\frac{2}{1})} \approx 0.3
of1\log{(\frac{2}{1})} \approx 0.3
dog2\log{(\frac{2}{2})} = 0
is1\log{(\frac{2}{1})} \approx 0.3
unique1\log{(\frac{2}{1})} \approx 0.3
the1\log{(\frac{2}{1})} \approx 0.3
same1\log{(\frac{2}{1})} \approx 0.3
way1\log{(\frac{2}{1})} \approx 0.3
fingerprints1\log{(\frac{2}{1})} \approx 0.3
human2\log{(\frac{2}{2})} = 0
being1\log{(\frac{2}{1})} \approx 0.3
are1\log{(\frac{2}{1})} \approx 0.3
ค่า Inverse Document Frequency ของคำในเอกสารที่ 1

เช่นเดียวกับตัวอย่างด้านบน ค่า IDF ของคำในเอกสารที่ 2 ก็สามารถทำการคำนวณได้ด้วยวิธีเดียวกัน


คำนวณค่า TF-IDF

เมื่อนำการคำนวณทั้งสองส่วนมารวมกัน เราจะได้การคำนวณ TF-IDF ดังต่อไปนี้

เพราะฉะนั้นค่า TF-IDF ของแต่ละคำในเอกสารที่ 1 ถูกคำนวณได้ดังต่อไปนี้ได้ดังต่อไปนี้

คำTFIDFTF-IDF = TF\timesIDF
a3/1800
nose1/1800
print1/180.30.0167
of2/180.30.333
dog1/1800
is1/180.30.0167
unique2/180.30.333
the1/180.30.0167
same1/180.30.0167
way1/180.30.0167
fingerprints1/180.30.167
human1/1800
being1/180.30.0167
are1/180.30.0167
ค่า TF-IDF ของคำในเอกสารที่ 1

และ ของเอกสารที่ 2 ถูกคำนวณได้ดังต่อไปนี้ได้ดังต่อไปนี้

คำTFIDFTF-IDF = TF\timesIDF
a2/1900
human1/1900
nose2/1900
has2/190.30.0316
five1/190.30.0158
million2/190.30.0316
scent1/190.30.0158
receptors2/190.30.0316
while1/190.30.0158
dog1/1900
up1/190.30.0158
to1/190.30.0158
three1/190.30.0158
hundred1/190.30.0158
ค่า TF-IDF ของคำในเอกสารที่ 2

จากผลลัพธ์ที่ได้จะเห็นว่าคำที่ปรากฏอยู่ในทั้งสองเอกสาร ถึงแม้ว่าจะมีค่า TF ที่สูง เมื่อนำมาคิดค่า TF-IDF แล้วนั้นถูก weight ให้ต่ำลง (ในกรณีนี้ถูกเปลี่ยนเป็น 0) เนื่องจากคำเหล่านี้ไม่สามารถที่จะช่วยแยกแยะใจความสำคัญของข้อความของทั้งสองเอกสารออกจากกันได้ดีเพราะปรากฏอยู่ในทุกเอกสารนั่นเอง คำที่มีค่า TF-IDF สูงของแต่ละเอกสารนั้นจะเป็นคำที่มีความสำคัญสูง (ถูกกล่าวถึงบ่อยที่สุดและไม่ได้ปรากฏอยู่หลายเอกสารเกินไป) และมีแนวโน้มที่จะเป็นใจความสำคัญของเอกสาร

ในตัวอย่างนี้ เราอาจจะเห็นว่ามีความบางคำที่มีค่า TF-IDF สูงแต่ไม่ได้บ่งบอกถึงลักษณะของข้อความในเอกสารเช่นคำว่า of, has, หรือ million ปนอยู่ด้วย อันที่จริงแล้วคำเหล่านี้ถูกจัดว่าเป็น “stop words” ซึ่งเป็นคำที่ปรากฏอยู่ทั่วไปในภาษาอังกฤษและมักไม่สื่อความหมายถึงนัยสำคัญของข้อความ โดยปกติแล้ว คำเหล่านี้มักถูกกรองออกก่อนที่จะมีการนำข้อความมาทำการประมวลผลทางภาษา อย่างไรก็ดีโดยปกติแล้วนั้นต่อให้คำเหล่านี้จะไม่ถูกกรองออกก่อน เนื่องด้วยเรามักจะพบคำเหล่านี้ในเอกสารต่างๆอยู่เสมอ เมื่อนำคำจากเอกสารต่างๆมาคำนวณหาค่า TF-IDF แล้ว คำเหล่านี้ส่วนมากจะถูกค่า IDF ปรับ ให้มีค่าต่ำลงมากจนไม่ปรากฏเป็นคำสำคัญของเอกสารอยู่ดี สาเหตุที่เรายังเห็นคำเหล่านี้มีค่า TF-IDF ที่สูงในตัวอย่างนี้นั้นเกิดมาจากเราทำการพิจารณาเอกสารทั้งหมดเพียงแค่ 2 เอกสาร ซึ่งแต่ละเอกสารมีเพียงแค่ประโยคเดียวเท่านั้น

ในบทความต่อไปเราจะมาทำการเขียนโปรแกรมอย่างง่ายๆเพื่อลองใช้งาน TF-IDF กันดูครับ