• 娄江国
    2019-03-08
    新增文档后,N肯定会发生变化,有很多的 df也会发生变化。
    但当数据量大到一定程度时,少量的新增文档而导致的idf变化不大。实际处理时,应该不会每新增一个文档,就重新构建原文档的向量,而是在一定条件下触发原文档向量的构建,如:多长时间重新构建一次;或新增了多少文档重新构建一次;或手工触发重新构建。

    作者回复: 结合实际工程,从不同的场景出发,很好的思考👍

    
     9
  • qinggeouye
    2019-03-20
    整个文档集合的词典的单词和词组的个数假设为 M ,文档数量假设为 N ,每个文档向量的维度是一致的吧,那么文档向量的维度应该也是 M 吧;所有文档向量就可以构成一个 M*N 的矩阵;

    这样看来,假设文档集合新增了文档之后,要看从新增文档中提取出来的单词或词组,是否已经在包含在已有的词典当中,如果不是,那么就需要将这些单词或词组添加进词典,原有的文档向量就可能需要进行调整。

    不知是否应该这样理解?

    作者回复: 是的,完全正确,如果使用了idf可能还需要更新idf的值

    
     4
  • 三木子
    2019-03-06
    这就是elasticesearch 查询原理吧

    作者回复: Solr,es默认都会用这种,或者是变体

    
     2
  • gaoch
    2019-10-24
    我想到这个向量的夹角可以描述不同文本的相似度,这里介绍了原理,就是不知道有没有哪个包可以实现向量构建?

    作者回复: 很多nlp的包都支持,例如Python里的nltk,sklearn等等

    
     1
  • Paul Shan
    2019-09-24
    关键词匹配技术是基于特定关键词是否存在的判断,可以看作一个关于布尔类型向量的的函数。

    向量空间方法的四个步骤
    1.将文章转化成向量空间的一个向量。
    2.将查询转化成向量空间的一个向量,检查文章向量和查询向量的相关性,例如求余弦。
    3.按照相关性给文档排序,返回相关性高的文档
    4.评估相关性

    构建向量空间
    向量空间的一个维度是某一单词
    维度上的值,简单的做法就是单词的次数,也就是单词出现的次数代表了文章类型信息。这里从0到1,影响较大,1到2,影响就少了一些,这也符合实际情况。但是,某些单词对某些文章特别有用,例如阿司匹林就和医学文章相关和其他文章无关,而某些其他词例如中国,反应文档的信息量就很少。为了把这个因素也考虑进来,统计这个词的唯一程度,用逆文档频率调整词频。

    文档的向量用词频+逆文档频率
    查询的向量用稀疏词频+文档逆文档频率
    计算余弦和排序

    向量构造需要O(m)的复杂度,m为向量维度
    n篇文章需要O(m*n)的复杂度

    新增文档会影响逆文档频率,全部都得重算!应该有些中间变量例如词频可以记录下来,重算得时候用的上。


    展开
    
    
  • CC9098
    2019-05-11
    第二,查询里出现了文档集合里没有的词。简单的做法是直接去除这维分量,也可以使用相对于其他维度来说极小的一个数值,这和分类中的平滑技术类似。

    这里的去除这维分量,是说构建查询词的向量时,直接忽略词典没有的维度,保持和文档向量维度一致吗?

    如果需要保持维度一致,那么选择极小值如何理解,这个是已经查询词向量已经比文档向量多了一个维度了吧?向量空间模型不需要保持两边维度一致吗?多出来的一些维度采用极小值就可以了吗?不会影响相似度计算效果吗?
    展开

    作者回复: 好问题,这个时候可以在原有文档中增加一个维度,取值为0

    
    
  • danvid
    2019-05-08
    elasticsearch和新版本的lucene使用的评分模型是BM25

    作者回复: 是的,BM25是比较主流的评分模型

    
    
  • 村长@极客时间
    2019-03-06
    我来打个卡
    
    
我们在线,来聊聊吧