Friday, June 5, 2009

Calculate tf-idf

04/06/09

คืนวันนี้ต้องเตรียมสัมนาซักหน่อย หลังจากแก้งานหลายงาน แล้วก็เสียเวลาไปดูงานข้างๆ ทำให้ไม่ได้ทำงานหลัก ... ผมเนี่ยตัวมารเยอะเหมือนกันแฮะ

วันนี้เขียนโปรแกรมคำนวณค่า tf-idf จากฐานข้อมูลตัวอย่างบน notebook ตัวเอง ... เพราะอย่างที่ได้บอกไปว่าผมเผลอไปลบข้อมูลทั้งฐานข้อมูลจากเครื่องเซิร์ฟเวอร์ซะงั้น ... แหง่วๆ เลย

ผมคำนวณค่า tf-idf จากฐานข้อมูล inverted-index ที่ผมเก็บข้อมูลดังนี้

term-----doc_freq-----posting_list

โดย doc_freq ผมได้มากจากว่า term นั้นๆ ปรากฎกี่อยู่ในกี่เอกสารใน collection ทั้งหมด ... ส่วน posting_list ก็เก็บว่า doc นั้นๆ มี term ที่พบเท่าไหร่ ... ซึ่งเมื่อรวมผลรวมของค่าใน posting_list ก็จะได้เยอะกว่า doc_freq แน่นอน ... แต่เจ้าจำนวนของ posting_list จะเท่ากับ doc_freq x 2 ครับ

doc_freq ผมเอาไปคำนวณค่า idf = log(N/df)

posting_list ผมเอาไปคำนวณ score ครับ ... จาก score= Sum(tf x idf)

แต่เมื่อเขียนโปรแกรมแล้ว ได้ความถูกต้องตามสมการ แต่ ... เหมือนไม่ถูกยังไงไม่รู้ ...

ประการแรก ... ค่าที่ได้ > 1 แน่นอน ... แต่ค่าที่ดูๆ อ่านๆ มา ... ส่วนใหญ่มันน้อยกว่า 1 ... ก็เลยเริ่มไม่แน่ใจ

ประการที่สอง ... ค่า score ใช้เวลาคำนวณนานมาก ... และก็ไม่รู้ว่าจะเอาค่าไหนใน java ไปเก็บ ... double รึก็ไม่แน่ใจ ... สมมติค่า 12 x 60k เนี่ย ... double มันเก็บได้ป่าวหว่า ... อันนี้คือจิ๊บๆ ครับ

ก็เลยว่า ... บ่ายนี้ถามอาจารย์อีกทีล่ะกัน

สรุป... งานที่ทำ ไม่เหมือนดังใจคิดน่ะดิ ... มันต้องมีอะไรมากกว่านี้หรือเราไม่รู้กันแน่ ?

No comments:

Post a Comment

ZAMACHITA - I AM ZAM