Thursday, May 28, 2009

What is tf-idf?

28/05/09

ขึ้นหัวข้อมาอย่างงี้ ... แน่นอนเลยว่า เมื่อก่อนไม่ทราบ T_T เหอะๆ แต่ก่อนหน้านี้ก็ได้แค่อ่านผ่านๆ ว่าความหมายคืออะไร ... แต่ไม่เคยที่จะทราบเลยว่า ... การคำนวณค่ามันคำนวณมาได้อย่างไร

งานวิจัยที่ผมทำอยู่ที่ญี่ปุ่นเป็นเรื่องเกี่ยวกับ Patent Mining ซึ่งจำเป็นต้องใช้เจ้า tf-idf เข้ามาเกี่ยวข้องด้วย ... เอาล่ะสิ งานเข้า ก็ต้องศึกษาสิคร้าบบบบบบ (มือใหม่หน่อยนะคร้าบ ^^")

มาดูกันเลยรับว่ามันคืออะไรกันแน่ ...

tf-idf ย่อมากจา Term Frequency-Inverse Document Frequency เป็นการวัดค่าน้ำหนักที่เอาไว้ประเมินค่าความสำคัญของคำนั้นๆ ในกลุ่มของเอกสาร (a collection) ซึ่ง tf-idf มักจะใช้ในงาน information retrieval และ text mining

tf-idf มันมาจากสองตัวคือ tf และ idf

tf มาจาก term frequency หรือ แทนด้วย จำนวนที่มีการปรากฎ term t ใน document d

idf มาจาก inverse document frequency โดยค่านี้จะได้มาจากการคำนวณด้วยสมการ

\begin{displaymath} \mbox{idf}_t = \log {N\over \mbox{df}_t}. \end{displaymath}

โดยที่ N แทนจำนวณเอกสารทั้งหมด (the total number of documents in a collection)
และ df แทนจำนวนเอกสารที่พบ term t ทั้งหมด

ผมขอยกตัวอย่างเพื่อให้เห็นภาพได้ง่ายหน่อย เช่น ... ในเอกสารทั้งหมด (ใน collection) 806,791 documents ดังตาราง

\begin{figure} % latex2html id marker 7963 \par \begin{tabular}{\vert\vert l\ver... ...quencies in the Reuters collection of 806,791 documents.} \par \par \end{figure}

ค่าของ idf ของ term car ได้มาจาก log(806791/18165) = 1.6475...

ทีนี้มาถึงการคำนวณค่า weighting ของเอกสารนี้บ้างครับ ... ค่าการคำนวณนี้ก็คือค่า tf-idf นี่เอง ซึ่งจะได้มาจากสมการ

\begin{displaymath} \mbox{tf-idf}_{t,d} = \mbox{tf}_{t,d} \times \mbox{idf}_t. \end{displaymath}

ยกตัวอย่างอีก ... จากตารางด้านล่างนี้ เราจะคำนวณค่า tf-idf ของแต่ละ term และแต่ละเอกสาร

\begin{figure}\begin{tabular}{\vert\vert l\vert r\vert r\vert r\vert\vert} \hlin... ...rance & 0 & 33 & 29 \\ best & 14 & 0 & 17 \\ \hline \end{tabular} \end{figure}

จะได้ว่า term car ที่ Doc1 มีค่า tf-idf = 1.65x27 = 44.55 ... และก็คำนวณไปเรื่อยๆ ครับ ... ก็จะได้ว่า

car - 44.55, 6.6, 39.6
auto - 6.24, 68.64, 0
insurance - 0, 53.46, 46.98
best - 21, 0, 25.5

^^"

สำหรับการคำนวณค่า Score ก็คำนวณได้จากสมการ

\begin{displaymath} \mbox{Score}(q,d)=\sum_{t\in q} \mbox{tf-idf}_{t,d}. \end{displaymath}

จะได้ว่า ... car = 44.5 + 6.6 + 39.6 = 90.75 ประมาณนั้นครับ ^^"

ผมมือใหม่กับเรื่อง IR ครับ ... ถ้าผิดตกบกพร่องประการใด รบกวนช่วยแก้ให้ด้วยนะครับ ^^"

reference:
- http://nlp.stanford.edu/IR-book/html/htmledition/tf-idf-weighting-1.html
- http://en.wikipedia.org/wiki/Tf-idf

2 comments:

  1. แหะๆ ถามหน่อยได้มั้ยค่ะ
    คืออยากรู้ว่า idf นี่มันคืออะไรค่ะ คือ แบบว่ามันมี significanceอย่างไรในการใช้หา weight อ่ะคะ

    ReplyDelete
  2. อ่านเข้าใจง่ายมากครับ ผมต้องใช้เรื่องนี้ในงานวิจัยเหมือนกันครับ ขอบคุณมากนะครับ ^^

    ReplyDelete

ZAMACHITA - I AM ZAM