精华内容
下载资源
问答
  • 向量空间模型(VSM)算法

    千次阅读 2017-09-17 14:19:21
     文章 D=(k1,k2,k3,k4,k5.....kn),这是一个多维向量。  如果维数很多,将来计算起来很麻烦,我们需要降维处理,所谓的降维就是,选出有代表性的特征词,这样就降低了维数。 可以人工选择。也可以自动选择,自

    (转载他人 以备自己查阅)

    在该方法中,我们把一篇文章抽象成一个向量。

        假设向量由n个词组成,每个词的权重是kn。假设文章D是你喜欢的文章,那么
        文章 D=(k1,k2,k3,k4,k5.....kn),这是一个多维的向量。

        如果维数很多,将来计算起来很麻烦,我们需要降维处理,所谓的降维就是,选出有代表性的特征词,这样就降低了维数。 可以人工选择。也可以自动选择,自动选择的话,可以采用开方拟和检验方法,如果有时间,我会在以后详细介绍该方法。


    有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到?


    这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通人只用10分钟就可以理解,这就是我今天想要介绍的TF-IDF算法


    让我们从一个实例开始讲起。假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的关键词。


    一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现。于是,我们进行"词频"(Term Frequency,缩写为TF)统计。


    结果你肯定猜到了,出现次数最多的词是----"的"、"是"、"在"----这一类最常用的词。它们叫做"停用词"(stop words),表示对找到结果毫无帮助、必须过滤掉的词。


    假设我们把它们都过滤掉了,只考虑剩下的有实际意义的词。这样又会遇到了另一个问题,我们可能发现"中国"、"蜜蜂"、"养殖"这三个词的出现次数一样多。这是不是意味着,作为关键词,它们的重要性是一样的?


    显然不是这样。因为"中国"是很常见的词,相对而言,"蜜蜂"和"养殖"不那么常见。如果这三个词在一篇文章的出现次数一样多,有理由认为,"蜜蜂"和"养殖"的重要程度要大于"中国",也就是说,在关键词排序上面,"蜜蜂"和"养殖"应该排在"中国"的前面。


    所以,我们需要一个重要性调整系数,衡量一个词是不是常见词。如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。


    用统计学语言表达,就是在词频的基础上,要对每个词分配一个"重要性"权重。最常见的词("的"、"是"、"在")给予最小的权重,较常见的词("中国")给予较小的权重,较少见的词("蜜蜂"、"养殖")给予较大的权重。这个权重叫做"逆文档频率"(Inverse Document Frequency,缩写为IDF),它的大小与一个词的常见程度成反比


    知道了"词频"(TF)和"逆文档频率"(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词

    下面就是这个算法的细节。

    第一步,计算词频。




    从上表可见,"蜜蜂"的TF-IDF值最高,"养殖"其次,"中国"最低。(如果还计算"的"字的TF-IDF,那将是一个极其接近0的值。)所以,如果只选择一个词,"蜜蜂"就是这篇文章的关键词。

    除了自动提取关键词,TF-IDF算法还可以用于许多别的地方。比如,信息检索时,对于每个文档,都可以分别计算一组搜索词("中国"、"蜜蜂"、"养殖")的TF-IDF,将它们相加,就可以得到整个文档的TF-IDF。这个值最高的文档就是与搜索词最相关的文档。

    TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)


    转载网址



    展开全文
  • 在lucene4以前,一直都是使用经典的向量空间模型作为其检索模型,这种方式虽然统一了评分算法,简化了计算,但是带来的问题是很难去调整,一旦向量空间模型不适合,也很难去替换一种更好的算法。  而lucene4则将...

    在lucene4以前,一直都是使用经典的向量空间模型作为其检索模型,这种方式虽然统一了评分算法,简化了计算,但是带来的问题是很难去调整,一旦向量空间模型不适合,也很难去替换一种更好的算法。

      而lucene4则将检索模型与事实上的搜索做了解耦和抽象,并且加入了另外几种检索模型的实现,其中就有经典的BM25。

      经典的向量空间模型的理论基础及其在lucene中的应用

      向量空间模型是信息检索领域中一种成熟和基础的检索模型。这种方法以3维空间中的向量作为类比,维度就是做好索引的term,比如这里以3个主要的关键词奥巴马,叙利亚和战争为三个维度,通过文档在各个维度上的权重,每个文档以及查询都会在空间中有一个向量,直观的看起来,两个向量越相似,则他们的夹角越小,所以,用起反比的cos,则可以得到,cos值越大,则两个向量越相似。同理便可以将3维空间推广到多维空间去。  

      用向量空间模型,便将相关性转化为相似性,根据点积和模的定义,可以得到下式:

      

      现在的问题就变成,如何求得每个维度上的term在文档中的权重,在向量空间模型中,特征权重的计算框架是TF*IDF框架,这里TF就是term在文档中的词频,TF值越大,说明该篇文档相对于这个term来说更加重要,因此,权重应该更高;而IDF则是term在整个文档集中占的比重,即n/N,其中n是含该term的文档数,N是总文档数,但是,实际使用中往往习惯用

      

      即所包含的该term的文档数越少说明该term越重要。可以举个例子,有100篇文档,其中80篇都在说红楼梦,其中只有几篇讲到计算机,当你在这个文档集中搜索到计算机时,可以肯定这几篇讲计算机的比较重要,而搜索红楼梦时,则很难区分哪篇更加重要,换句话说,在这个文档集合中,计算机比红楼梦更有区分度,相对来说,计算机比红楼梦更有信息量,所以IDF就是评判所含信息量大小的一个值。

      一般情况,使用TF*IDF作为这里的权重w,从而计算出dj,q的相似度sim(dj,q)。

      那么,在lucene中,是如何应用这个模型的呢?根据向量空间模型的的数学推导(见参考文档3),可以看到,在lucene中实际上是将sim(dj,q)变形和调整后应用了如下一个打分公式

      

      该公式各项参数解释如下,在DefaultSimilarity中都有每一项参数的基本定义:

      coord(q,d): 协调因子,它的计算是基于文档d中所包含的所有可供查询的词条数量

      queryNorm: 在给出每个查询条目的方差和后,计算某查询的标准化值,即(关于valueForNormalization,见后面分析第a步)


      tf: 单词t在文档d中出现的词频,对词频开根号是希望对一篇出现太多相同关键词的文章进行相应的惩罚,即

      idf: 单词t在文档集中的比重。注意这个公式,首先为什么要加1,假设不加1,设想极端情况后面的log为0时(numDocs/docFreq+1 = 1), 带入打分公式,则该文档打分为0,也就是说该关键词分布得广反而一点分都没有了,事实上我们在这里只需要稍作惩罚,加1之后保证任何情况下这里都是有值的。其次,docFreq后为什么要加1呢,当然是为了防止docFreq为0作为除数的情况。所以原始的公式其实是idf(t) = log(numDocs/docFreq),与上面的分析一致


      t.getBoost(): 在搜索过程中影响评分的参数

      norm(t,d): 字段的标准化值,表明在字段中存储了多少词条,这个数值是在索引过程中计算出来的,并且也存储在索引中,可以在TFIDFSimScorer中的norms找到,其中一个参数LengthNorm是在DefaultSimilarity中定义的,另一个参数则是每次索引过程中每次处理一个field时累乘上去的。


        在3.0以前还有另一个参数用来提升Document的加权,可以在Document中找到setBoost,但是4.0以后取缔了,如需要模拟文档的加权,在IndexableField中建议应当自行加权多个Field。


      lucene中如何组织这个公式

      在TFIDFSimScorer中,可以找到

    [java] view plain copy
     print?
    1. public float score(int doc, float freq) {  
    2.   final float raw = tf(freq) * weightValue; // compute tf(f)*weight  
    3.     
    4.   return norms == null ? raw : raw * decodeNormValue(norms.get(doc));  // normalize for field  
    5. }  
      注意到weightValue其实是stats.value,即IDFStats中的value,该value的计算其实是IndexSearcher中createNormalizedWeight产生的,如下
    [java] view plain copy
     print?
    1. float v = weight.getValueForNormalization();            a)  
    2. float norm = getSimilarity().queryNorm(v);              b)  
    3. weight.normalize(norm, 1.0f);                           c)  
      其中,a)的计算其实就是

      b)的计算就是


      通过这两步计算得出打分公式中的queryNorm。

      c)步的计算可以得到,可以看出来,这是打分公式的一部分


      从score()中可以看出来,score的结果其实是,其实已经基本是打分公式了。

      到这里,已经基本上解释了打分公式在代码中的组织。接下来,我们最关心的就是。


      打分公式能够如何去影响我们的文档打分和排序

      下面是彩色的打分公式,接下来打分公式如何去影响文档的打分和排序时的文字色彩就对应了该彩色打分公式的色彩:


      1. 搜索时加权,即上式中t.getBoost(),在搜索时加权,即在搜索关键字后带^和权值


      2. 索引时加权,即上式中的norm(t, d)部分中的所有field的boost之积

      如下例,将文档1的加权设置为2之后,同样的搜索条件,文档1的评分增加了


      在索引过程中可以通过下面的语句设置字段加权,这也是影响评分最常见的方式

    [java] view plain copy
     print?
    1. Field.setBoost(boost)  

      3. 继承TFIDFSimilarity或DefaultSimilarity,对整个公式的控制。

       coord:当你键入搜索关键词“奥巴马 叙利亚”的时候,你一定希望同时出现两个词的文档排在只出现"奥巴马"的文档之前,某种程度上讲,同时出现两个词意味着更加精确。请看例子,第1篇文档只命中一个词,而第二篇文档同时命中2个词,因而得分较高(此处还有tf的因素,即lucene出现了两次,但是在这里影响不大)


       coord的计算是在DefaultSimilarity中定义的,因而可以修改它,maxOverlap其实就是搜索的总词数,而overlap则是该文档中实际出现了多少搜索词数

    [java] view plain copy
     print?
    1. public float coord(int overlap, int maxOverlap) {  
    2.   return overlap / (float)maxOverlap;  
    3. }  

        queryNorm:queryNorm并不能影响不同文档的得分顺序,但是可以影响整体的评分大小,比如,可以修改实现,让其变为1/sumOfSquaredWeights以便减小所有文档的得分或者增大文档得分。

    [java] view plain copy
     print?
    1. public float queryNorm(float sumOfSquaredWeights) {  
    2.   return (float)(1.0 / Math.sqrt(sumOfSquaredWeights));  
    3. }  

        tf:tf的在DefaultSimilarity中的定义不能影响文档得分排序,但是它的参数freq,即词频是会影响得分的,可以看以下例子


      我们会发现它的得分提升并不是线性的,跟下式吻合

    [java] view plain copy
     print?
    1. public float tf(float freq) {  
    2.   return (float)Math.sqrt(freq);  
    3. }  

       idf:idf主要跟单词在文档中的个数有关系,如下,同样搜索关键词“过程 算法”,第一个例子中由于第2篇文档长度较长,因而得分较低;但是如果加入一篇新的文档,由于第1,3篇文档都含有关键字"过程",因而增加了文档频率docFreq,故根据程序,评分会下降,而只含有"算法"的文档2评分就相对高了


    [java] view plain copy
     print?
    1. public float idf(long docFreq, long numDocs) {  
    2.   return (float)(Math.log(numDocs/(double)(docFreq+1)) + 1.0);  
    3. }  

       lengthNorm同等的搜索条件下,文档长度较长者得分较低

       请看如下文档长度对得分和顺序影响的例子,从中可以看出来,对“索引 算法”这组关键词,文档1中有前者,文档2中有后者 ,同样搜索这组关键词,当文档2长度较长时得分较低,而当文档2长度较短时得分较高

      

       在DefaultSimilarity中程序如下

    [java] view plain copy
     print?
    1. public float lengthNorm(FieldInvertState state) {  
    2.   final int numTerms;  
    3.   if (discountOverlaps)  
    4.     numTerms = state.getLength() - state.getNumOverlap();  
    5.   else  
    6.     numTerms = state.getLength();  
    7.  return state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)));  
    8. }  
    展开全文
  • 由于工作需要,我需要判断一篇文章是否是你喜欢的文章。...向量空间模型(VSM)算法。  在该方法中,我们把一篇文章抽象成一个向量。  假设向量由n个词组成,每个词的权重是kn。假设文章D是你喜欢的文

    转自:http://blog.sina.com.cn/s/blog_a1304cff0101aj29.html

    由于工作需要,我需要判断一篇文章是否是你喜欢的文章。

        这涉及到文本分析,有一个简单的方法可供参考。向量空间模型(VSM)算法。

        在该方法中,我们把一篇文章抽象成一个向量。

        假设向量由n个词组成,每个词的权重是kn。假设文章D是你喜欢的文章,那么

        文章 D=(k1,k2,k3,k4,k5.....kn),这是一个多维的向量。

        如果维数很多,将来计算起来很麻烦,我们需要降维处理,所谓的降维就是,选出有代表性的特征词,这样就降低了维数。 可以人工选择。也可以自动选择,自动选择的话,可以采用开方拟和检验方法,如果有时间,我会在以后详细介绍该方法。

         选择特征词后,就需要计算它的权重了,可以采用词频来计算,Term frequency TF = N/M M为文章的词数,N为该特征词出现的词数。 当然了,如果你选择的特征词是 “的” 这个很一般的词 ,我们还需要为其修正。计算Inverse documentfrequency 逆向文本频率,是用于衡量关键词权重的指数 IDF = log(D/Dw)  (手画的公式,请多包涵。) 其中D为总文章数,Dw为关键词 出现过的文章数。

         这样一来,就需要一群你喜欢的文章,才可以计算IDF。

         计算结束后,我们得出你喜欢的文章D = (w1,w2,w3....wm); 共有m个关键词,权重依次为w1,w2...wm。

         好,下面,重点来了,给出一篇文章E,判断它和你喜欢的D 的相似度是多少,如果相似度很高的话,则可以认为E也是你喜欢的文章。

         采用上面的方法,计算出E = (q1,q2,q3...qm);

         我们来通过两个多维向量的夹角的余弦值来表征 2个文章的相似度。 为啥?两个向量的夹角越小,它们越靠近,我们就认为2个文章越相似呗。夹角越小,越相似,余弦值越高。

         2个多维向量的夹角余弦计算公式:cosθ =    (公式还是手画的。呵呵。)

      

         亲,你知道的,就是两个向量的点积 除以 2个向量的模的积。

     

         计算过后,就可以得到相似度了。 我们可以事先人工选择2个相似度高的文档,计算相似值,然后规定其为阀值。

     

         编外:这是判定一个文章和你喜欢的文章的相似度,但是如何判定一个文章和一群你喜欢的文章的相似度呢?就是如何判定一个文章和一类文章相似度的问题。我们可以一一计算,然后取平均值。但是我希望找到几何上能够表征一群向量的中心的方法,这样,计算给定向量和中心向量的余弦似乎更合理。

         编外的编外:向量空间模型(VSM)算法把一个语言的问题转化成了一个数学问题,这种思想非常的好,我们可以尝试着,把一些问题转化为数学问题,用数学的手段来解决。这就需要我们赋予问题,数学上的意义,例如本文,将文章赋予 多维向量的意义。

         编外的编外的编外: 为啥那个你喜欢的文章我取名叫D? 有没有看过《吸血鬼猎人D》主角的名字就叫做D,他是吸血鬼王和人类女人的儿子,所以不怕阳光,还有吸血鬼的能力,专门猎杀吸血鬼,而且永远不老。超酷的动画电影,画风精致。


    展开全文
  • 在文本挖掘中计算2篇文章相似度常用向量空间模型中的余弦定理公式判断。     1、 向量空间模式介绍     2、 余弦定理   在空间模型中,两条线的夹角越小,它们的余弦值就越大...

    参考:http://blog.sina.com.cn/s/blog_5caa94a0010122dz.html


    在文本挖掘中计算2篇文章相似度常用向量空间模型中的余弦定理公式判断。

     

     

    1、  向量空间模式介绍

     






     

    2、  余弦定理

     

    在空间模型中,两条线的夹角越小,它们的余弦值就越大,而它们越相似(重叠或者平行)。

     

    从上面看出空间模型中两条连线夹角的余弦值为:


    举一个具体的例子,假如文档X和文档Y对应向量分别是x1,x2,...,x64000 和y1,y2,...,y64000,

    那么它们夹角的余弦等于



     

    3、  文本挖掘中把文档转换为向量空间

              在文本挖掘中,对文档A分词,得到A1,A2,….An,计算得到分词的Tf-Idf: k1,k2,…kn;同样对文档C分词,得到C1,C2…Cn, 计算得到分词的Tf-Idf:d1,d2,…dn。以tf-idf作为分词的权重,则得到文档A的向量P={k1A1 ,k2A2…knAn},转换为P={x1,x2,…Xn}文档C的向量Z={d1C1,d2C2…dnCn},转换为Z={y1,y2….yn},计算文档A和C的相似度就是在向量空间模型中计算它们余弦值.


     

      


    展开全文
  •  其次想到的向量空间模型,影响一组文章(5篇为例)选择显示模板有几个因素(有多少4:3的图片文章,有多少16:9的图片文章····),从中抽象出一组 “独立互斥”的维度(为什么需要独立互斥?脑补一下吧),以...
  • 在lucene4以前,一直都是使用经典的向量空间模型作为其检索模型,这种方式虽然统一了评分算法,简化了计算,但是带来的问题是很难去调整,一旦向量空间模型不适合,也很难去替换一种更好的算法。  而lucene4则将...
  • Lund & Burgess, 1996),还有一些最近的研究(Landauer, McNamara, Dennis, & Kintsch, 2007)可以完全归进VSMs的范围里,正如上面的定义,因为这些研究使用了向量空间模型,值是来源于事件频率,比如说在给定的...
  • 在提升支持向量机分类算法精度的问题上,提出了一种基于混合高斯模型空间模糊度的支持向量机算法。该算法通过采用多维混合高斯模型的求带分布密度概率函数的二次规划问题的最优解,减少不同的输入样本数据对分类超...
  • 第三章 使用距离向量构建模型 作者:Trent Hauck 译者:飞龙 协议:CC BY-NC-SA 4.0 这一章中,我们会涉及到聚类。聚类通常和非监督技巧组合到一起。这些技巧假设我们不知道结果变量。这会使结果模糊,以及...
  • 向量及语言模型

    万次阅读 2018-06-21 10:23:24
    一、词向量向量(word embedding):词的向量表征。很多初识机器学习、深度学习等的同学,包括我,一定对词向量比较迷惑,为什么说前者之前都要提到词向量?答案:为了将输入数据表示成向量,在向量上进行数学建模...
  • IDF的特征提取方式对文本进行向量化表示,所产生的文本表示矩阵是一个稀疏矩阵,本篇采用的词向量是一个稠密向量,可以理解为将文本的语义抽象信息嵌入到了一个具体的多维空间中,词之间语义关系可以用向量空间中的...
  • 本文翻译自Annoy(高维空间向量快速计算相似性的开源工具)的作者Erik Bernhardsson写的介绍Annoy的系列博客。这是第一篇,主要介绍了向量空间模型,降维等。作者曾是Spotify的数据科学家。
  • 向量和语言模型

    2018-11-27 20:34:01
    1 词向量是什么        NLP里面,最细粒度的是 词语,词语组成句子,句子再组成段落、篇章、文档。所以处理 NLP 的问题,...
  • 转自:[Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型 阅读目录 1. 词向量 2.Distributed representation词向量表示 3.词向量模型 4.word2vec算法思想 5.doc2vec算法...
  • doc2vec词向量模型 阅读目录1. 词向量2.Distributed representation词向量表示3.词向量模型4.word2vec算法思想5.doc2vec算法思想6.参考内容 深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和...
  • 向量模型4.word2vec算法思想5.doc2vec算法思想6.参考内容 深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展。深度学习一直被人们推崇为一种类似于人
  • 你可以理解为word2vec就是将词表征为实数值向量的一种高效的算法模型,其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的...
  • 云脑科技机器学习训练营第二期,对自然语言处理及词向量模型进行了详细介绍,量子位作为合作媒体为大家带来本期干货分享~ 本期讲师简介 樊向军 云脑科技核心算法工程师,清华大学学士,日本东京大学与...
  • 支持向量机是啥有一次公司项目上的同事一起吃饭(面前是一锅炒土鸡),提到了支持向量机,学文的同事就问支持向量机是什么,另一个数学物理大牛想了一下,然后说,一种鸡。。。确实很难一句话解释清楚这只鸡。。。...
  • 1、线性模型和非线性模型 2、如何在线性模型中画出一条直线(优化过程——vplink) 1)多少条? 2)如何画出最好的直线? 3、如何去描述这个优化的过程(数学描述) 1)几个重要的名词(间隔、支持向量) 2)...
  • 基于典型相关分析的词向量

    千次阅读 2018-01-09 16:49:10
    在NLP领域中,为了能表示人类的语言符号,一般会把这些符号转成一种数学向量形式以方便处理,我们把语言单词嵌入到向量空间中就叫词嵌入(word embedding)。 比如有比较流行的谷歌开源的 word2vec ,它能生成词...
  • 利用Bag-of-words模型构造了Codebook高维空间,将图像向量映射成Codebook空间中的样本点,并根据仿生信息学的同源连续性原理,使用神经网络分类器找到不同类别目标在Codebook空间中的最佳划分,从而提出了一种基于仿生...
  • 推广到多维空间圆盘模型就升级成庞加莱球 庞加莱球: {x∈Rn∣ ∣∣x∣∣<1}\{x∈R^n |\space||x||<1\}{x∈Rn∣ ∣∣x∣∣<1} 其中∣∣x∣∣||x||∣∣x∣∣是欧式距离 u,v两点距离:
  • 支持向量

    千次阅读 2019-04-04 16:08:39
    支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类(binary classification)的广义线性分类器(generalized linear classifier)。 其决...
  • 支持向量机通俗导论(理解SVM的三层境界)

    万次阅读 多人点赞 2012-06-01 22:48:43
    支持向量机通俗导论(理解SVM的三层境界) 作者:July 。致谢:pluskid、白石、JerryLead。 说明:本文最初写于2012年6月,而后不断反反复复修改&amp;优化,修改次数达上百次,最后修改于2016年11月。 声明:...
  • 数学建模常用模型18 :多维标度法

    千次阅读 2018-08-21 09:33:51
    在实际中往往会碰到这样的问题:有n个由...我们希望仅由这种距离或者相似性给出的信息出发,在较低维的欧氏空间把这n个客体(作为几何点)的图形描绘出来,从而尽可能揭示这n个客体之间的真实结果关系,这就是多维标...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,216
精华内容 5,686
关键字:

多维向量空间模型