เวกเตอร์สเปซโมเดลโคไซน์ tf-idf สำหรับค้นหาเอกสารที่คล้ายกัน


10

มีคลังเอกสารมากกว่าล้านฉบับ

สำหรับเอกสารที่ต้องการต้องการค้นหาเอกสารที่คล้ายกันโดยใช้โคไซน์เหมือนกับในแบบจำลองเวกเตอร์สเปซ

d1d2/(||d1||||d2||)

TF ทั้งหมดได้รับการทำให้เป็นมาตรฐานโดยใช้ความถี่ที่เพิ่มขึ้นเพื่อป้องกันความเอนเอียงไปสู่เอกสารที่ยาวขึ้นดังเช่นในtf-idf นี้ :

tf(t,d)=0.5+0.5f(t,d)max{f(t,d):td}

คำนวณล่วงหน้าทั้งหมด มีค่าสำหรับตัวหารคำนวณล่วงหน้า ดังนั้นสำหรับd 1 ที่ต้องการคะแนนมากกว่า 1 ล้านd 2 มีเกณฑ์ 0.6 โคไซน์สำหรับความคล้ายคลึงกัน ||d||

d1d2

ฉันสามารถสังเกตได้ว่าสำหรับมีช่วงที่ค่อนข้างแคบของ| | d 2 | | สำหรับโคไซน์ 0.6 ตัวอย่างเช่นในการค้นหาเดียวสำหรับโคไซน์ของ 0.6 และ a | | d 1 | | จาก 7.7631 จากนั้น| | d 2 | | ช่วงจาก 7.0867 ถึง 8.8339 ซึ่งอยู่นอกเกณฑ์ของโคไซน์ 0.6 | | d 2 | | ช่วงจาก 0.7223 ถึง 89.3395||d1||||d2||
||d1||||d2||
||d2||
นี่คือมาตรฐานการจัดทำเอกสาร TF มาตรฐาน
มันดูมากที่ไม่มีโอกาสได้เป็นโคไซน์ 0.6 แมทช์ ||d2||

ในที่สุดคำถาม:
สำหรับการให้และ cosine ของ> = 0.6 จะกำหนดช่วงของ| | d 2 | | ที่มีโอกาส ซึ่ง| | d 2 | | ฉันสามารถกำจัดได้อย่างปลอดภัย? ||d1||||d2||
||d2||

ฉันยังทราบจำนวนเทอมในและd 2หากมีช่วงการนับเทอมd1d2

ผ่านการทดสอบ
และ| | d 2 | | < | | d 1 | | / .8 ดูเหมือนว่าจะปลอดภัย แต่หวังว่าจะมีช่วงที่พิสูจน์แล้วว่าปลอดภัย ||d2||>.8||d1||||d2||<||d1||/.8

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

ประเภทที่เกี่ยวข้องและไม่ใช่คำถาม
ฉันยังใช้ tf-idf เพื่อจัดกลุ่มเอกสารเป็นกลุ่ม ฐานลูกค้าที่ฉันขายเข้านั้นถูกใช้เพื่ออยู่ใกล้กับกลุ่มที่อยู่ใกล้เคียง ที่นั่นฉันกำลังใช้วิธีการที่เกี่ยวข้องในขณะที่ฉันมองว่าเป็นคำที่เล็กที่สุดและประเมินมันเทียบกับคำที่มากถึง 3 เท่า จำนวนเทอมของ 10 จึงดูที่ 10 ถึง 30 (4-9 มีการยิงที่ 10) ที่นี่ฉันสามารถที่จะพลาดใครมีมันหยิบขึ้นมาในอีก ฉันทำไปแล้ว 10% และอัตราส่วนที่ใหญ่ที่สุดคือ 1.8

กรุณาระบุข้อบกพร่องในการวิเคราะห์นี้
ในฐานะที่เป็นออกแหลมโดย AN6U5 มีข้อบกพร่องในการวิเคราะห์นี้
มันไม่มีโคไซน์ถ้าเอกสารที่มีนัยในการถ่วงน้ำหนัก
และเป็นแหลมออกโดยแม็ตธิวยังไม่สามารถสรุปd1⋅d2≤d1⋅d1
ผม ยังคงหวังบางสิ่งบางอย่างที่จะให้ฉันฮาร์ดผูกพัน แต่คนที่ดูเหมือนว่าจะรู้ว่าสิ่งนี้จะบอกฉันไม่มี
ฉันไม่ต้องการที่จะเปลี่ยนคำถามดังนั้นเพียงแค่สนใจนี้
ฉันจะทำวิเคราะห์บางส่วนและอาจจะโพสต์คำถามแยกต่างหากในการฟื้นฟูเอกสาร
สำหรับ จุดประสงค์ของคำถามนี้ถือว่าเอกสารนั้นเป็นมาตรฐานของ raw tf
ขออภัย แต่ฉันไม่ดีกับสิ่งที่เคยใช้มาร์กอัปในการสร้างสมการ
ดังนั้นในสัญกรณ์ของฉัน
|| d1 | | = sqrt (ผลรวม (w1 x w1))
d1 dot d2 = SUM (w1 X w2)
สมมติ d1 เป็นเอกสารสั้น
ที่ดีที่สุดมาก d1 dot d2 ที่สามารถทำได้คือ d1 dot d1
ถ้า d1 คือแต่งงานกับ 100 paul 20
และ d2 คือแต่งงานกับ 100 paul 20 เปโตร 1
ปกติ
d1 คือแต่งงาน 1 paul 1/5
d2 แต่งงาน 1 paul 1/5 peter 1/100
ชัดเจนแต่งงานและ paul มี idf เดียวกันในเอกสารทั้งคู่
d1 dot d2 ที่ดีที่สุดที่เป็นไปได้คือ d1 dot d1
การจับคู่ที่เป็นไปได้สูงสุดคือ d1
cos = d1 dot d1 / || d1 || || || d2
ตารางทั้งสองฝ่าย
cos X cos = (d1 dot d1) X (d1 dot d1) / ((d1 dot d1) X (d2 dot d2)) cos X cos = (d1 dot d1) / (d2 dot d2)
ใช้ตาราง รากของทั้งสองด้าน
cos = || d1 || / || d2 ||
คือ || d2 || ไม่ได้ล้อมรอบด้วย cos?
ถ้าฉันใช้ || d2 || > = cos || d1 || และ || d2 || <= || d1 || / cos ฉันได้รับความเร็วในการคำนวณที่ฉันต้องการ


อาร์กิวเมนต์ของคุณที่สรุปด้วยขอบเขตที่กำหนดโดย ไม่ทำงานเพราะ "สิ่งที่ดีที่สุด d1 จุด d2 ที่สามารถทำได้คือ d1 จุด d1" ไม่ถูกต้อง ในขณะที่d1d2cos=||d1||||d2||มันไม่ได้เป็นกรณีที่d1d2d1d1 สำหรับคลาสเวกเตอร์นี้โดยเฉพาะมันอาจใช้งานได้ในกรณีที่เพียงพอซึ่งเป็นการประมาณที่เหมาะสม แต่มันยากมากที่จะพิสูจน์ว่ามันเป็นกรณีเสมอ d1d2||d1|| ||d2||d1d1||d1|| ||d1||d1d2d1d1
Matthew Graves

@ MatthewGraves ฉันคิดว่าฉันเห็นด้วยกับคุณ ไม่ใช่ความเชี่ยวชาญของฉัน แต่ฉันก็ยังแฮ็คมันอยู่
paparazzo

คำตอบ:


4

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

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

ให้ดูคณิตศาสตร์ในรายละเอียดเพิ่มเติม:

คุณกำลังใช้การวัดความคล้ายคลึงกันแบบโคไซน์และกำหนดให้เมตริกนั้นมีขนาดใหญ่กว่า 0.6:

similarity=cos(θ)=AB||A||||B||0.6

แต่ความยาวเซนต์คิตส์และเนวิสที่ด้านล่างสามารถกระจายเข้าไปในผลิตภัณฑ์ข้ามด้านบน (คุณสมบัติการกระจาย):

AB||A||||B||=A||A||B||B||=A^B^

A^B^AB

ดังนั้น:

similarity=cos(θ)=d1d2||d1||||d2||=d1^d2^0.6

ขึ้นอยู่กับทิศทางของเวกเตอร์เท่านั้นและไม่ขึ้นกับขนาด (ความยาว)

กระทบยอดสิ่งนี้กับสิ่งที่คุณกำลังทำ:

0.6||d2||>.8||d1||||d2||<||d1||/.8

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

มันค่อนข้างสมเหตุสมผลที่จะต้องให้ความยาวสัมพัทธ์อยู่ภายใน 25% ของอีกอันหนึ่งในแง่ที่ว่านี้รวมแง่มุมของระยะทางแบบยุคลิดเพื่อสร้างกลุ่มโดยหลังคาซึ่งลดเวลาในการคำนวณ ปัจจัยสุดท้าย

โปรดทราบว่า 1 / .8 = 1.25 ดังนั้น d2> =. 8d1 เป็นข้อ จำกัด ที่เข้มงวดกว่า d2 <= d1 / .8 ฉันแนะนำให้ใช้ d2> =. 75d1 และ d2 <= 1.25d1 เนื่องจากสมมาตร

หวังว่านี่จะช่วยได้!


ฉันคิดว่านี่ไม่ได้ใช้ประโยชน์จากความจริงที่ว่าความยาวของเวกเตอร์มาจากน้ำหนัก idf ที่ใช้ร่วมกันส่วนใหญ่เนื่องจากแผนการปรับมาตรฐาน tf ที่เขาใช้ หากเอกสารมีบรรทัดฐานที่ต่ำมากนั่นก็หมายความว่ามันไม่มีคำที่หายาก (หรือมีความถี่น้อยมาก) ซึ่งหมายความว่ามันสามารถตัดออกได้คล้ายกับเอกสารที่มีคำที่หายากเท่านั้น แต่ข้อ จำกัด นี้โดยทั่วไปดูเหมือนจะไม่ชัดเจนสำหรับฉัน อาจเป็นกรณีที่ขอบเขตทางทฤษฎีนั้นกว้างมากเมื่อเทียบกับขอบเขตเชิงประจักษ์ที่สังเกตได้
Matthew Graves

@ Matewew Graves สิ่งที่ฉันพูดก็คือความคล้ายคลึงกันของโคไซน์นั้นไม่เชื่อเรื่องความยาวเวกเตอร์ เขาถามว่าความแตกต่างของความยาวเวกเตอร์สามารถส่งผลต่อความเหมือนโคไซน์ที่เกิดขึ้นได้อย่างไรและคำตอบก็คือพวกมันไม่สามารถ
AN6U5

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

ที่นี่ฉันไม่เห็นด้วย มันไม่ได้ทำให้ปกติตามความยาว มัน normalizes คำที่พบบ่อยที่สุดเดียว เอกสารที่ยาวขึ้นสามารถเจือจางได้เท่านั้น ฉันยินดีที่จะปรับวิธีการดำเนินการฟื้นฟูให้เป็นขอบเขตที่ฉันสามารถสนับสนุนได้
paparazzo

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

3

||di||||di||||di||

ในการทำงานผ่านพีชคณิตบางส่วนให้ฉันแนะนำเพิ่มเติมอีกสองสามคำ (และเปลี่ยนชื่อเป็นคำที่สั้นกว่า):

d1[t1,t2,...][w1,w2,...][d1,d2,...]0.5ti10wi6D1=||d1||

d1xd1+xX

X=iwi2(ti+xi)2

0.6D1Xiwi2ti(ti+xi)

0.5ti+xi1

xxi=0 idi+xi=1

xX2XX>0XXPP

00.36D12iwi2(ti+xi)2i,jwi4titj(ti+xi)(tj+xj)

0xTPx+qTx+rPi,j=0.36D12wi2titji=jwi2titj

Pd1X

XwxX


ฉันไม่เห็นด้วย | | d || ด้วยดูเหมือนว่าจะทำหน้าที่เป็นมาตรการหายาก มันเป็นมาตรฐาน "แมรี่มีลูกแกะตัวน้อย" จะมีขนาดเล็กกว่า || กว่า "Marry มีลูกแกะตัวน้อยสีขาว" และ "oddxxA oddxxB oddxxC" จะมีขนาดเล็กกว่า || กว่า "oddxxA oddxxB oddxxC oddxxD" ในอัตราส่วนเดียวกันโดยประมาณ และการเปรียบเทียบทั้งสองนั้นจะมีค่า cos ใกล้เคียงกัน
paparazzo

@ Crisbee คุณแน่ใจเกี่ยวกับการเปรียบเทียบนั้นหรือไม่ หากว่า idfs คือ 0 สำหรับ 'a', 0.5 สำหรับ 'had' และ 'Mary', 1 สำหรับ 'little' และ 'white' และ 2 สำหรับ 'lamb' ฉันคำนวณ 2.4 สำหรับ "Mary มีแกะน้อย" และ 2.55 สำหรับ "Mary มีลูกแกะตัวน้อยสีขาว" แต่ 1.83 สำหรับ "Mary มีลูกแกะตัวน้อย" นั่นคือวิธีเดียวที่จะลดบรรทัดฐานคือการเพิ่มความถี่ของคำที่บ่อยที่สุดไม่ใช่โดยการเพิ่มคำศัพท์ใหม่ หรือเราไม่ได้ใช้สูตรเดียวกัน
Matthew Graves

ฉันคิดว่าคุณทำให้เอกสารบนมาตรฐานถ่วงน้ำหนัก (ด้วย IDF) ไม่ใช่ความถี่ดิบ นั่นจะเปลี่ยนสิ่งต่าง ๆ มันสมเหตุสมผลมากขึ้นสำหรับฉันที่จะทำให้น้ำหนักปกติ การเปลี่ยนเอกสาร | | โดยการทำให้ 'a' คำศัพท์ที่พบบ่อยที่สุดยุ่งกับเนื้อหา
paparazzo

dt=wt(0.5+0.5wtf(t,d)max{wtf(t,d):td})wt=logN|{dD:td}|ddid

0

ฉันโพสต์คำตอบ แต่ชัดเจนว่าฉันจะมอบโบนัสให้คนอื่น

ฉันคิดว่ามีตัวเศษสูงสุดหากเอกสาร tf เป็นมาตรฐาน

d1⋅d2 / (|| d1 d2 |||| ||)

สมมติว่า d1 มีเงื่อนไขเหมือนกันหรือน้อยกว่า (หรือใช้ d กับเงื่อนไขน้อยกว่า)
tf ที่ทำให้เป็นมาตรฐานสูงสุดที่เป็นไปได้คือ 1
ดังนั้นผลรวมของตัวเลขที่เป็นไปได้สูงสุด (tf1, i * idf, i * 1 * idf, i)

|| || d2 = sum (tf1, i * idf, i * 1 * idf, i) / || d1 || / .6

สำหรับขั้นต่ำฉันกำลังดำเนินการอยู่ แต่ชัดเจนว่ามีจำนวนขั้นต่ำ
หากคุณกำลังจะจับคู่คุณจะได้ | | d ||

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