向量空间模型余弦tf-idf,用于查找相似文档


10

拥有超过百万份文档的语料库

对于给定的文档,想像在向量空间模型中一样使用余弦查找相似的文档

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

所有tf均已使用增强频率进行了归一化,以防止像以下tf-idf那样偏向于较长的文档:

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

预先计算了所有 预先计算分母的值, 因此对于给定的需要得分超过100万d 2 相似度的阈值应为0.6余弦 d 1||d||

d1d2

我可以观察到给定|的||d1||范围相当狭窄 | d 2 | | 为余弦 0.6 例如,在一个搜索类似为的余弦 0.6和| | d 1 | | 之7.7631然后| | d 2 | | 范围从7.0867到8.8339, 超出余弦阈值0.6范围从到0.7223到89.3395, 这是标准tf文档归一化的||d2||
||d1||||d2||
||d2||

它正在查看很多没有机会成为余弦0.6的机会 ||d2||

最后的问题是:
对于给定的和余弦> = 0.6如何确定的范围 那有机会吗? 其中我可以安全地消除吗? ||d1||||d2||
||d2||

如果存在术语计数范围,我也知道和中的术语数。d1个d2

通过实验和 似乎是安全的,但希望范围已被证明是安全的
| | d 2 | | < | | d 1 | | / .8||d2||>.8||d1个||||d2||<||d1个||/.8

用一些非常独特的术语创建了一些测试用例,有些不是那么独特,还有一些很通用。当然,您可以采用最独特的条件并在比较中增加该频率。分子(点积)将上升,因此||比较|| 并得到一个非常接近1的余弦值。

有关的而不是问题。
我还使用tf-idf将文档分组。我要卖给的客户群习惯于近乎DUP的群体。我正在采用一种相关的方法,因为我认为这是最小的术语计数,并且可以对最多3倍的术语计数进行评估。因此,每10个学期的考生看10到30(4-9的命中率是10)。在这里,我不能错过一个被另一个拾起的东西。我完成了10%,最大比例是1.8。

请确定分析中的缺陷
正如AN6U5指出的那样,该分析中存在一个缺陷
如果对文档进行加权归一化就不再是余弦值了
,正如Mathew指出的那样,
不能得出d1⋅d2≤d1⋅d1的结论。仍然希望能给我一个硬性约束,但是似乎知道这些东西的人告诉我不,
我不想更改这个问题,所以只要忽略它,
我将进行一些分析,并可能在文档规范化上发布一个单独的问题,以
供参考。这个问题的目的是假设文档在原始tf上进行了标准化
抱歉,但是我对使用哪种标记来制作方程式
表示不好,所以在我的符号
|| d1 ||中 = sqrt(sum(w1 x w1))
d1点d2 = sum(w1 X w2)
假设d1是较短的文档
可以实现的最佳d1点d2是d1点d1
如果d1结婚100保罗20
并且d2结婚100保罗20彼得1
归一化
d1结婚1个保罗1/5
d2结婚1个保罗1/5彼得1/100
显然在两个文件中结婚和保罗具有相同的idf
最佳d1点d2是d1点d1
与d1 的最大匹配是d1
cos = d1点d1 / || d1 || || d2 ||
两侧均平方
cos X cos =(d1点d1)X(d1点d1)/((d1点d1)X(d2点d2))cos X cos =(d1点d1)/(d2点d2)
取平方两侧
cos的根= || d1 || / || d2 ||
是|| d2 || 不受cos约束?
如果我只是使用|| d2 || > = cos || d1 || 和|| d2 || <= || d1 || / cos获得所需的计算速度


您的论点以由c o s = |确定的界限结束 | d 1 | |不起作用,因为“可以实现的最佳d1点d2是d1点d1”是不正确的。而d1d2cos=||d1||||d2||,它不是的情况下d1d2d1d1。对于这种特定类型的向量,在足够的情况下它可能是一个不错的近似值,但是要确定总是如此,要困难得多。d1d2||d1|| ||d2||d1d1||d1|| ||d1||d1d2d1d1个
马修·格雷夫斯

@MatthewGraves我想我同意你的看法。不是我的专长,但我仍在努力。
狗仔队2015年

Answers:


4

不幸的是,数学简化了表明您不能严格证明限制基于矢量长度的余弦相似度比较的合理性。

关键在于,余弦相似性度量基于长度进行归一化,因此仅考虑单位矢量。我知道这不一定是您想要的答案,但是数学清楚地表明,余弦相似性度量标准与向量长度无关。

让我们更详细地看一下数学:

您正在应用余弦相似度指标,并要求该指标大于0.6:

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

但是底部的标量长度可以分配到上面的叉积中(分配属性):

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

现在是矢量,在相同的方向上点但它们已被归一化到一个长度。因此,余弦相似性度量的定义是采用原始向量,将其标准化为长度1,然后测量单位向量的点积。A^B^AB

为此:

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

仅取决于矢量的方向,而不取决于矢量的大小(即长度)。

将此与您正在做的事情调和:

尽管线性代数的结果显示了什么,您仍然可能会看到统计上有意义的结果。实际上,您可能会发现统计数据表明长度限制对您的数据有效。例如,你可能会发现,微博不共用一个余弦相似时与托尔斯泰的“战争与和平”进行比较。如果您的统计数据适合使用| | d 2 | | > .8 | | d 1 | | | | d 2 | | < | | d 1 | |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,我要说的是余弦相似度与向量长度无关。他在问向量长度的差异如何影响余弦相似度,答案是:它们不会。
AN6U5

1
经验相关性不容忽视。如果只有统计的话,有一种方法可以使语料库的随机性与大量相关。我在这个网站上没有足够的代表进行投票。
狗仔队2015年

这是我不同意的地方。它不会根据长度进行归一化。它以最常见的单个术语归一化。较长的文档只能稀释。我愿意调整标准化的执行方式,以获得我可以支持的界限。
狗仔队2015年

感谢您修改问题。它可以更好地阐明您要完成的工作。请注意,由于严格定义了修改后的归一化,因此实际上并不是余弦相似度。我建议进行一些其他修改以阐明这一点。保重,祝你好运。
AN6U5

3

首先,让我们尝试直觉一下为什么会起作用。似乎是一种稀有性的量度,似乎可以过滤。如果文档使用不同数量的稀有词,则它们很难排成余弦相似度度量。但是在我看来,这种临界值取决于| | d | | ,而不是在| tf或idf权重中的结构上 | d | | ||di||||di||||di||

为了研究一些代数,让我介绍一些术语(并将其重命名为较短的术语):

是TF的权重的矢量[ 12]逐元素乘以idf权重[ w 1w 2,...的向量]以获得最终权重[ d 1d 2...。]。我们知道,0.5 牛逼10 w ^ d1[t1,t2,...][w1,w2,...][d1,d2,...]0.5ti1(由于语料库大小,并假设我们使用的是10以底,所以如果不使用,则无所谓)。令 D 1 = | | d 1 | | 0wi6D1=||d1||

知道,我们想构造一个增量向量x,使得d 1 + x受到约束的最小(或最大)Xd1xd1+xX

X=iwi2(ti+xi)2

(1)0.6D1Xiwi2ti(ti+xi)

0.5ti+xi1

因为我们没有使用原始TF重量X = 0 是在解空间。我也忽略了至少一个d i + x i = 1的更复杂的约束,因为我们不能线性地表达这一点。我们将其保持不变,并希望优化器最终将其中之一设置为1。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 || 似乎是一种稀有措施。已标准化。“玛丽有只小羊羔”会变小|| 比“玛丽有只白色的小羊羔”。而“ oddxxA奇数xxB奇数xxC”将具有较小的||。比“ oddxxA奇数xxB奇数xx奇数”的比率大致相同。并且这两个比较将具有相似的余弦。
狗仔队2015年

@Frisbee,您确定该比较吗?假设idf为“ a”为0,为“ had”和“ Mary”为0.5,为“ little”和“ white”为1,为“ lamb”为2,我计算出“ Mary有一点羊羔”为2.4和2.55 “玛丽有一只白色的小羊羔”,而“玛丽有一只白色的小羊羔” 1.83。也就是说,降低规范的唯一方法是增加最常用词的频率,而不是增加新单词。还是我们不使用相同的公式?
马修·格雷夫斯

我想您是根据加权(使用IDF)而不是原始频率对文档进行归一化的。那会改变事情。对我而言,标准化加权更为有意义。重大更改文档|| 通过使“ a”成为最常见的术语来混淆事物。
狗仔队2015年

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 ||

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.