Benzer belgeleri bulmak için vektör uzay modeli kosinüs tf-idf


10

Milyondan fazla belgeye sahip olmak

Belirli bir belge için vektör uzay modelinde olduğu gibi kosinüs kullanarak benzer belgeler bulmak istiyorum

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

Tüm tf, bu tf-idf'deki gibi daha uzun belgelere yönelik önyargıları önlemek için artırılmış frekans kullanılarak normalleştirilmiştir :

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

Tümünü önceden hesapla ||d||
Payda hesaplanan önceden değerlerini sahip
belirli bir Yani d1 1 milyon skoru ihtiyaç d2
Var benzerlik 0.6 kosinüs bir eşik

Belirli bir için gözlemleyebilirim oldukça dar bir dizi var | | d 2 | | kosinüs 0,6 için Örneğin bir aramada 0,6 kosinüs ve benzeri | | d 1 | | 7.7631 sonra | | d 2 | | 7,0867 ila 8,8339 arasında değişir Kosinüs 0,6 eşiğinin dışında nerede | | d 2 | | 0.7223 ila 89.3395 aralığında||d1||||d2||
||d1||||d2||
||d2||
Bu standart tf belge normalizasyonu ile
oldu Bir sürü bakıyor 0.6 kosinüs olma şansı olmayan ||d2||

Sonunda soru:
Bir vermek için ve kosinüs aralığını belirlemek nasıl> = 0.6 arasında | | d 2 | | bir şansı var mı? Hangi | | d 2 | | güvenli bir şekilde ortadan kaldırabilir miyim? ||d1||||d2||
||d2||

Terim sayım aralığı varsa ve d 2'deki terim sayısını da biliyorum .d1d2

Deneme yoluyla
ve | | d 2 | | < | | d 1 | | / .8 güvenli görünüyor ancak umarım güvenli olduğu kanıtlanmış bir aralık vardır ||d2||>.8||d1||||d2||<||d1||/.8

Bazı benzersiz terimlerle, bazıları çok benzersiz olmayan ve bazıları yaygın olan bazı test senaryoları oluşturdu. Tabii ki en eşsiz terimi alabilir ve karşılaştırmada bu frekansı artırabilirsiniz. Pay (nokta ürün) yukarı çıkacak ve || || || ve 1'e çok yakın bir kosinüs alacak.

Tür ilgili ve değil soru.
Ayrıca belgeleri gruplar halinde gruplandırmak için tf-idf kullanıyorum. Satış yaptığım müşteri tabanı yakın çift gruplara alışkın. Orada en küçük terim sayımı olarak görüyorum ve 3x'e kadar terim sayımına göre değerlendiriyorum. Yani 10'luk bir terim sayısı 10'dan 30'a bakar (4-9 zaten 10'a vurdu). Burada bir başkasını aldı var özledim göze alabilir. Ben% 10 yapıldım ve en büyük oran 1.8.

Lütfen bu analizdeki kusurları tanımlayın
AN6U5 tarafından işaret edildiği gibi , bu analizde bir kusur var
Belgenin ağırlıklı
olarak normalleştirilmesi durumunda artık bir kosinüs değildir ve Mathew'in işaret ettiği gibi d1⋅d2≤d1⋅d1
de hala bana bir şey vermeyi umuyor ama bu şeyleri biliyor gibi görünen insanlar bana hayır
sorusunu sormak istemiyorum, bu
yüzden bunu görmezden geliyorum, bazı analizler yapacağım ve belki de belge normalleştirmesi
için ayrı bir soru göndereceğim. Bu sorunun amacı, belgenin ham tf üzerinde normalleştirildiğini varsayalım
Üzgünüz, ama denklemleri yapmak için kullanılan biçimlendirme ile iyi değilim
Yani benim gösterimde
|| d1 || = sqrt (toplam (w1 x w1))
d1 dot d2 = sum (w1 X w2)
d1'in daha kısa bir belge olduğunu varsayalım.
En iyi d1 dot d2 elde edilebilir d1 dot d1
d1 evlenirse 100 paul 20
Ve d2 evlenir 100 paul 20 peter 1
Normalleştirilmiş
d1 evlenir 1 paul 1/5
d2 evlenmek 1 paul 1/5 peter 1/100
Açıkça evlenmek ve paul her iki belgede de aynı IDF'ye sahiptir
Mümkün olan en iyi d1 dot d2 d1 dot d1 d1 ile
mümkün olan maksimum eşleşme d1
cos = d1 dot d1 / || d1 || || d2 ||
her iki tarafı da kare
X cos = (d1 nokta d1) X (d1 nokta d1) / ((d1 nokta d1) X (d2 nokta d2)) cos X cos = (d1 nokta d1) / (d2 nokta d2)
kareyi alır her iki tarafın kökü
cos = || d1 || / || d2 ||
|| d2 || cos tarafından sınırlı değil mi?
Sadece || d2 || > = cos || d1 || ve || d2 || <= || d1 || / çünkü ihtiyacım olan hesaplama hızını elde ediyorum


C o s = | tarafından belirlenen bir sınırla sonuçlanan argümanınız | d 1 | |çalışmıyor "En iyi d1 nokta d2 elde edilebilir d1 nokta d1" yanlıştır. Süred1d2cos=||d1||||d2||,d1d2d1d1 için geçerli değildir. Bu belirli vektör sınıfı için, bunun iyi bir yaklaşım olması yeterli durumlarda işe yarayabilir, ancak her zaman böyle olduğunu tespit etmek oldukça zor olacaktır. d1d2||d1|| ||d2||d1d1||d1|| ||d1||d1d2d1d1
Matthew Graves

@MatthewGraves Sanırım sana katılıyorum. Uzmanlığım değil ama hala hack ediyorum.
paparazzo

Yanıtlar:


4

Ne yazık ki, matematik, vektörlerin uzunluklarına göre kosinüs benzerlik karşılaştırmasını kısıtlamayı titizlikle haklı çıkaramayacağınızı göstermek için basitleştirir.

Kilit nokta, kosinüs benzerlik metriğinin uzunluğa göre normalleşmesidir, böylece sadece birim vektörler dikkate alınır. Bunun mutlaka istediğiniz cevap olmadığını biliyorum, ancak matematik açıkça kosinüs benzerlik metriklerinin vektör uzunluğuna agnostik olduğunu gösteriyor.

Matematiğe daha ayrıntılı bakalım:

Bir kosinüs benzerlik metriği uyguluyorsunuz ve bu metriğin 0,6'dan büyük olmasını gerektiriyorsunuz:

.

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

Ancak alt kısımdaki skaler uzunluklar yukarıdaki çapraz ürünlere dağıtılabilir (dağıtım özelliği):

.

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

Şimdi A ve B ile aynı yönde nokta, vektörlerdir A ve B ancak uzunluğu bir normalize edilmiştir. Kosinüs benzerlik metriğinin tanımı, orijinal vektörlerin alınması, bir uzunluğa normalleştirilmesi ve daha sonra birim vektörlerin nokta çarpımının ölçülmesidir.A^B^AB

şöyle ki:

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

sadece vektörlerin yönüne bağlıdır, büyüklüklerine (yani uzunluklarına) bağlı değildir.

Bunu yaptığınız şeyle uzlaştırmak:

Doğrusal cebirin sonuçlarına rağmen, yine de istatistiksel olarak anlamlı bir sonuç görüyor olabilirsiniz. Pratik olarak, istatistiklerin verileriniz için uzunluk kısıtlamalarının geçerli olduğunu gösterdiğini fark ediyor olabilirsiniz. Örneğin, tweets bir kosinüs benzerliği paylaşan asla bulgu olabilir Tolstoy "Savaş ve Barış" ile karşılaştırıldığında. İstatistikleriniz kullanmak için iyi görünüyorsa | | d 2 | | > .8 | | d 1 | | ve | | d 2 | | < | | d 1 | |0.6||d2||>.8||d1|| o zaman onunla gitmenizi öneririm, çünkü bu tür kanopi kısıtlamaları hesaplama süresinde çok faydalıdır.||d2||<||d1||/.8

Belki de Öklid mesafesini de dikkate alarak ne yaptığınızı mesafe metrikleriyle uzlaştırabilirsiniz. Kosinüs benzerliği, iki vektör arasındaki açıya bağlı olarak sadece -1 ile 1 arasında bir değer döndürdüğü zaman, Öklid mesafeleri iki vektörün uzunluğuna bağlı olan değerleri döndürecektir. Bir anlamda, Öklid mesafesinin yönlerini kosinüs benzerliği ile birleştiriyorsunuz.

Göreceli uzunlukların, hesaplama süresini kısaltan grupla kanopiler oluşturmak için Öklid mesafesinin bir yönünü birleştirmesi açısından göreceli uzunlukların birbirinin% 25'i içinde olmasını zorunlu kılmak oldukça mantıklıdır, daha sonra agnostik kosinüs benzerliği kullanılabilir. nihai belirleyici.

1 / .8 = 1.25 olduğundan, d2> =. 8d1, d2 <= d1 / .8'den daha sıkı bir kısıtlamadır. Simetrik olduğu için d2> =. 75d1 ve d2 <= 1.25d1 kullanmanızı öneririm.

Bu yardımcı olur umarım!


Bence bu, normal uzunlukları kullandığından, vektör uzunluklarının çoğunlukla paylaşılan idf ağırlıklarından geldiği gerçeğini kullanmıyor. Bir belgenin çok düşük bir normu varsa, bu, nadir sözcükler içermediğini (veya çok düşük bir kesirli frekansta içerdiğini) gösterir; bu, yalnızca nadir sözcükler içeren bir belgeye benzer şekilde dışlanabileceği anlamına gelir. Ancak bu kısıtlamanın genel olarak ne kadar sıkı olduğu benim için belirsiz görünüyor. Muhtemelen teorik sınırların gözlemlenen ampirik sınırlara kıyasla çok geniş olduğu görülmektedir.
Matthew Graves

@Matthew Graves, Tek söylediğim, kosinüs benzerliğinin vektör uzunluğuna agnostik olduğu. Vektör uzunluğundaki farklılıkların ortaya çıkan kosinüs benzerliğini nasıl etkileyebileceğini soruyor ve cevap: yapamıyorlar.
AN6U5

1
Ampirik korelasyon göz ardı edilemez. Eğer sadece istatistiksel ise korpusun rastgelelik ile bolluk arasında ilişki kurmanın bir yolu vardır. Bu oyunda kaydolmak için yeterli sayıda temsilcim yok.
paparazzo

İşte burada katılmıyorum. Uzunluğa göre normalleşmez. En yaygın tek terimle normalleşir. Daha uzun bir belge sadece seyreltilebilir. Destekleyebileceğim bir sınır elde etmek için normalleştirmenin nasıl yapıldığını ayarlamaya hazırım.
paparazzo

Sorunuzu değiştirdiğiniz için teşekkür ederiz. Neyi başarmaya çalıştığınızı daha iyi açıklar. Değiştirilmiş normalleştirmenizin bunu aslında bir kosinüs benzerliği yapmadığına dikkat edin , çünkü bu kesinlikle tanımlanmıştır. Bunu hecelemek için birkaç ek düzenleme öneriyorum. Kendine iyi bak ve iyi şanslar.
AN6U5

3

İlk olarak, bunun neden işe yarayacağını sezgi almaya çalışalım. ||dben|| seems to serve as a word rarity measure, which seems plausible as something to filter on. If documents use dissimilar numbers of rare words, it'll be difficult for them to line up on the cosine similarity measure. But it seems unlikely to me that this cutoff will only depend on ||di||, rather than also on the structure in the tf or idf weights that go into ||di||.

To work through some algebra, let me introduce a few more terms (and rename some to shorter ones):

Let d1 be a vector of tf weights [t1,t2,...] element-wise multiplied by a vector of idf weights [w1,w2,...] to get the final weights [d1,d2,...]. We know that 0.5ti1 and 0wi6 (because of the corpus size and assuming we're using base 10, it doesn't matter if we're not). Let D1=||d1||.

Knowing d1, we want to construct a delta vector x, such that d1+x has the minimal (or maximal) X subject to the constraints that:

X=iwi2(ti+xi)2

0.6D1Xiwi2ti(ti+xi) (1)

0.5ti+xi1

Because we didn't use the raw tf weight for x, xi=0 i is in the solution space. I'm also ignoring the more complicated constraint that at least one di+xi=1, because we can't express that linearly. We'll leave it as is and hope that the optimizer ends up setting one of them to 1.

Intuitively, it seems like the set of possible x should be convex, but even if so we're already in the realm of quadratically constrained programming. Note that we can solve for minimal X2 instead of minimal X, because X>0, but we probably can't use this methodology to maximize X (i.e. minimize X). But thankfully this'll be easily solvable if P is positive semidefinite. So what is P? We need to rewrite (1) in the correct form, which starts by squaring both sides:

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

We can rewrite this as 0xTPx+qTx+r where Pi,j=0.36D12wi2titj if i=j and wi2titj otherwise.

It's non-obvious to me that P has to be positive semidefinite, but that'll be easy to check for any individual d1. If so, pop this into a QP solver and you'll get a lower bound on X. If not, we're in trouble.

Can we also get a practical upper bound? I'm not sure. Obviously there's some finite upper bound, since we can calculate the maximum possible X from the idf vector w easily. But the fact that the minimum tf weight is 0.5 instead of 0 is throwing off my intuitions about how to create an adversarial x with maximum X, and so the best approach that I'm coming up with is gradient descent, which may or may not find the actual global maximum but will probably be close.


I don't agree with ||d|| with seems to serve as a rarity measure. It is normalized. "Mary had a little lamb" will have a smaller || than "Marry had a white little lamb". And "oddxxA oddxxB oddxxC" will have a smaller || than "oddxxA oddxxB oddxxC oddxxD" in roughly the same same ratio. And those two comparisons will have similar cos.
paparazzo

@Frisbee, are you sure about that comparison? Supposing the idfs are 0 for 'a', 0.5 for 'had' and 'Mary', 1 for 'little' and 'white', and 2 for 'lamb', I calculate 2.4 for "Mary had a little lamb" and 2.55 for "Mary had a white little lamb", but 1.83 for "A Mary had a little lamb". That is, the only way to decrease the norm is by increasing the frequency of the most frequent term, not by adding new words. Or are we not using the same formula?
Matthew Graves

I was thinking you normalized the document on the weighted (with IDF) not the raw frequency. That would change things. It makes more sense to me to normalize on weighted. Significantly changing a document || by making 'a' the most common term messes with stuff.
paparazzo

Sure; I just want to be sure we're working with the same formula. I think I agree with you that one will get superior results by normalizing based on raw tf * idf, that is: dt=wt(0.5+0.5wtf(t,d)max{wtf(t,d):td}) where wt=logN|{dD:td}|. (With a somewhat unclear but hopefully acceptable collision between d, the vector of weights di, and d, the document associated with that vector.) I'll have to think more tonight about whether or not this would improve the bound (but that probably involves a lot of algebra).
Matthew Graves

0

I post an answer but clearly I will award the bonus to someone else

I think there is a maximum numerator if the document tf is normalized

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

Assume d1 has same or less terms (or just take the d with less terms)
The maximum possible normalized tf is 1
So the maximum possible numerator sum(tf1,i * idf,i * 1 * idf,i)

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

As for a minimum I am working on that but clearly there is a minimum.
If you are going to match you are going to have ||d||

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.