การวัดความคล้ายคลึงกันของเอกสาร


21

ในการจัดกลุ่มเอกสาร (ข้อความ) คุณต้องมีวิธีการวัดความคล้ายคลึงกันระหว่างคู่ของเอกสาร

สองทางเลือกคือ:

  1. เปรียบเทียบเอกสารเป็นคำเวกเตอร์โดยใช้Cosine Similarity - และ TF / IDF เป็นน้ำหนักสำหรับคำศัพท์

  2. เปรียบเทียบการแจกแจงความน่าจะเป็นของเอกสารแต่ละฉบับโดยใช้ f-divergence เช่นKullback-Leibler divergence

มีเหตุผลที่เข้าใจง่ายหรือไม่ที่จะต้องการวิธีหนึ่งกับอีกวิธีหนึ่ง (สมมติว่าขนาดเอกสารเฉลี่ย 100 คำ)?

คำตอบ:


23

สำหรับเอกสารข้อความเวกเตอร์คุณลักษณะสามารถมีมิติสูงและเบาบางได้ภายใต้การนำเสนอมาตรฐานใด ๆ (ถุงคำหรือ TF-IDF เป็นต้น) การวัดระยะทางโดยตรงภายใต้การนำเสนอดังกล่าวอาจไม่น่าเชื่อถือเนื่องจากเป็นความจริงที่ทราบกันว่าในมิติที่สูงมากระยะห่างระหว่างจุดสองจุดใด ๆ จะเริ่มเหมือนกัน วิธีหนึ่งในการจัดการกับสิ่งนี้คือการลดมิติข้อมูลโดยใช้PCAหรือ LSA ( การวิเคราะห์ความหมายแฝงซึ่งเรียกอีกอย่างว่าการทำดัชนีความหมายแฝง ) และจากนั้นวัดระยะทางในพื้นที่ใหม่ การใช้บางอย่างเช่น LSA บน PCA นั้นมีประโยชน์เนื่องจากสามารถให้ความหมายที่เป็นตัวแทนในแง่ของ "แนวคิดเชิงความหมาย" นอกเหนือจากการวัดระยะทางในพื้นที่มิติที่ต่ำกว่า

การเปรียบเทียบเอกสารตามการแจกแจงความน่าจะเป็นมักจะเกิดจากการคำนวณการแจกแจงหัวข้อของแต่ละเอกสารเป็นครั้งแรก (ใช้บางอย่างเช่นการปันส่วน Dirichlet แบบแฝง ) จากนั้นคำนวณการแตกต่างบางอย่าง (เช่น KL divergence) ระหว่างการแจกแจงหัวข้อของเอกสาร ในทางกลับกันมันคล้ายกับการทำ LSA ก่อนแล้วจึงวัดระยะทางในอวกาศ LSA โดยใช้ KL-divergence ระหว่างเวกเตอร์ (แทนที่จะเป็นความคล้ายคลึงโคไซน์)

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

นอกจากนี้ยังเห็นหัวข้อที่เกี่ยวข้องที่นี่


ขอบคุณ LDA ต้องการให้คุณรู้หัวข้อก่อนหน้าหรือไม่? ในกรณีของเราเราไม่ทราบว่าหัวข้อใดเป็นของแต่ละเอกสารและเราจะใช้มาตรการความคล้ายคลึงกันเพื่อดำเนินการจัดกลุ่ม (EM- G-Means หรือ GAAC)
Joel

@ ebony1 การอ้างอิงที่ดีกับ LSA ฉันได้รับคำตอบที่คล้ายกันเมื่อไม่นานมานี้ที่ stats.stackexchange.com/questions/369/…
chl

1
@Joel: ไม่ LDA ไม่คิดว่าคุณจะรู้หัวข้อของเอกสารแต่ละฉบับล่วงหน้า BTW เพียงเพื่อให้ชัดเจน LDA แสดงถึงเอกสารแต่ละรายการเป็นการผสมผสานของหัวข้อไม่ใช่เพียงหัวข้อเดียว ดังนั้นแต่ละหัวข้อจะมีส่วนร่วมในเอกสารบางส่วน (และแต่ละเศษส่วนจะรวมเป็น 1) โดยทั่วไป LDA ถือว่าแต่ละคำในเอกสารถูกสร้างโดยบางหัวข้อ
ebony1

@ebony - ขอบคุณ! มีความเสี่ยงที่จะต้องใช้คำถามใหม่และทำซ้ำตัวเอง LDA ต้องการให้คุณรู้จำนวนหัวข้อที่รอบคอบหรือไม่?
Joel

ใช่. แต่มีตัวแปรของ LDA (HDP-LDA) ที่ไม่จำเป็นต้องระบุจำนวนหัวข้อ ดูกระดาษนี้: cse.buffalo.edu/faculty/mbeal/papers/hdp.pdf
ebony1

0

คุณอาจต้องการลองใช้บริการออนไลน์นี้เพื่อดูความคล้ายคลึงกันของเอกสาร cosine http://www.scurtu.it/documentSimilarity.html

import urllib,urllib2
import json
API_URL="http://www.scurtu.it/apis/documentSimilarity"
inputDict={}
inputDict['doc1']='Document with some text'
inputDict['doc2']='Other document with some text'
params = urllib.urlencode(inputDict)    
f = urllib2.urlopen(API_URL, params)
response= f.read()
responseObject=json.loads(response)  
print responseObject

2
โปรดระบุรายละเอียดเพิ่มเติม
ซีอาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.