fbpx

TF-IDF ประตูสู่การทำ Text Analysis ด้วย Machine Learning

Nuttapong Netjinda
21 มี.ค. 22
2
ปกติในการใช้ Machine Learning เพื่อสร้าง Model ประเภทต่าง ๆ อย่างเช่น Clustering, Regression หรือ Classification เรามักจะคุ้นเคยกับการมีข้อมูลที่เป็น structured data ซึ่งเห็นชัดเจนว่าเรามี feature อะไรบ้าง แต่ถ้าข้อมูลที่เราต้องทำงานด้วยเป็น Text ซึ่งเป็น unstructured data ล่ะ เราจะใส่ ข้อมูลพวกนี้เข้าไปในโมเดลได้อย่างไร
เราอาจจะคุ้นเคยกับการทำ feature extraction แบบทั่ว ๆ ไป อย่างเช่นการนับจำนวนครั้งที่ซื้อ การรวมปริมาณสินค้าและค่าสินค้าที่ซื้อในแต่ละครั้ง ซึ่งมี meaningful ในตัวมันเอง แต่สำหรับ text นั้น เราสามารถใช้วิธีการนับหรือการรวมได้หรือเปล่านะ
คำตอบคือ ได้ และ ไม่ได้ครับ
ได้ คือ พื้นฐานการนับคำนั้น ก็มีความหมายที่จะนำไปใช้กับ machine learning ต่อได้
ไม่ได้ คือ แค่การนับจำนวนคำเฉย ๆ มันยังไม่เพียงพอครับ

เอาล่ะ เรามาลองเริ่มคิดจากพื้นฐานนะครับว่า สิ่งที่เราต้องการทำคืออะไร

ขอยกตัวอย่างโจทย์ในลักษณะของการทำ Classification ในมุมของการทำ feature extraction เราก็อยากได้ feature ที่สามารถใช้แยกความแตกต่างของแต่ละ document ได้ดีที่สุด

ทีนี้ ปัญหาคือ ถ้าเราใช้วิธีการนับคำที่มีอยู่ในแต่ละ document ตรง ๆ แล้วเอาแต่ละคำมาตั้งเป็น feature เราก็คงจะได้ feature ที่ไม่ได้มีความสามารถในการแยกความแตกต่างได้ดีซักเท่าไหร่ เพราะเราให้น้ำหนักกับทุกคำเท่ากันยังไงละครับ

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

TF-IDF จึงเกิดขึ้นมา เพื่อทำการปิด gap ตรงนี้นี่แหละครับ โดยแทนที่จะนับแค่ความถี่ของคำที่ปรากฎในแต่ละ document เรายังนับจำนวน document ที่มีคำนั้น ๆ ปรากฎอยู่ด้วย โดยหลักการง่าย ๆ ก็คือว่า คำที่ปรากฎแค่ในบาง document น่าจะเป็น feature ที่ใช้แยกความแตกต่างได้ดี ส่วนคำที่ปรากฎในเกือบทุก document ก็คงเป็น feature ที่ไม่น่าสนใจซักเท่าไหร่

สำหรับในรายละเอียดนั้น TF-IDF ประกอบด้วยสองส่วน คือ

Term Frequency (TF) – ความถี่ของคำ ๆ หนึ่งที่ปรากฎใน document นั้น ๆ

Inverse Document Frequency (IDF) – ส่วนกลับของจำนวน document ที่มีคำนั้น ๆ ปรากฎอยู่

ยิ่งคำ ๆ นั้น เป็นคำทั่วไปซึ่งปรากฎอยู่ในหลาย document ค่า IDF นี้ก็ยิ่งมีค่าน้อยลง (เข้าใกล้ 0) ซึ่งก็จะเป็นการลดน้ำหนักของคำ ๆ นั้นนั่นเองครับ

เมื่อนำทั้งสองส่วนมาคูณกัน ก็จะได้เป็นค่า TF-IDF ของคำหนึ่งที่ปรากฎใน document ครับ

ยกตัวอย่างเช่น เรามีข้อมูลอยู่ทั้งหมด 100 document โดยมี 2 document ที่เราหยิบมาเป็นตัวอย่าง Document 1 มีความยาว 70 คำ, Document 2 มีความยาว 80 คำ เราลองมาดูกันครับว่า เมื่อเราลองหยิบ 3 คำที่ปรากฎใน document เหล่านี้ ซึ่งมีจำนวนครั้งที่ปรากฎในแต่ละ document และจำนวน document ที่มีคำ ๆ นั้นอยู่ตามตารางด้านล่างมาคำนวณค่า TF-IDF ผลที่ได้จะเป็นอย่างไร

Wordจำนวนครั้งที่ปรากฎใน Document 1จำนวนครั้งที่ปรากฎใน Document 2จำนวน document ที่มีคำนั้นอยู่
High15580
Screw4110
Blade1512

ค่า TF ของแต่ละคำใน Document 1 ก็จะคำนวณได้ตามนี้

TF(High) = 15/70 = 0.214

TF(Screw) = 4/70 = 0.057

TF(Blade) = 1/70 = 0.014

ส่วนค่า TF ของแต่ละคำใน Document 2 ก็จะเป็นตามนี้

TF(High) = 5/80 = 0.063

TF(Screw) = 1/80 = 0.013

TF(Blade) = 5/80 = 0.063

สำหรับ IDF ของคำ ๆ หนึ่ง จะมีค่าเท่าเดิมไม่ว่าสำหรับ document ไหนอยู่แล้วครับ

IDF(High) = ln(100/80) = 0.223

IDF(Screw) = ln(100/10) = 2.303

IDF(Blade) = ln(100/12) = 2.120

ทำให้ได้ค่า TF-IDF ของแต่ละคำบนแต่ละ document เป็นแบบนี้ครับ

 HighScrewBlade
TF-IDF ใน Document 10.0480.1320.030
TF-IDF ใน Document 20.0140.0290.133

จะเห็นได้ว่า ถึงจำนวนคำว่า High ในทั้งสอง Document จะต่างกันมาก แต่เพราะคำว่า High ปรากฎอยู่ถึงใน 80 จาก 100 document จึงแสดงว่า High เป็นคำที่ค่อนข้าง common และไม่น่าเป็น feature ที่ใช้ในการแยกความแตกต่างที่ดี TF-IDF ที่ได้จะเห็นว่ามีค่าต่างกันเพียง 0.034 เมื่อเทียบกับอีกสองคำซึ่งปรากฎอยู่ในไม่กี่ document และค่า TF-IDF ต่างกันประมาณ 0.1 ถึงแม้จำนวนครั้งที่ปรากฎในแต่ละ document จะแตกต่างกันไม่มากก็ตาม ซึ่งแสดงว่า คำว่า Screw และ Blade ก็น่าจะเป็น feature ที่ดีในการเอาไปใช้งานเพื่อแยกความแตกต่างของแต่ละ document ต่อไปครับ

เท่านี้เราก็ได้ meaningful feature ที่พร้อมจะนำไปทำ Machine Learning Model ต่อได้แล้วครับ แล้วในโอกาสหน้า เรามาดูกันต่อว่ามีเครื่องมืออะไรบ้าง ที่สามารถนำมาใช้ในการทำงานจริงได้ครับ

Reference
https://monkeylearn.com/blog/what-is-tf-idf/
http://www.tfidf.com/
https://www.capitalone.com/tech/machine-learning/understanding-tf-idf/
https://en.wikipedia.org/wiki/Tf-idf
Images source: https://pixabay.com
Tag: text; unstructured; machine learning; feature extraction
Level: Intermediate