含未见过词汇的查询如何计算TF-IDF向量并进行余弦相似度匹配?
含未见过词汇的新查询TF-IDF向量处理方案
当已有训练好的TF-IDF矩阵,遇到带未出现过的词汇的新查询时,核心问题是这类新词在原有文档库中没有IDF记录,处理方式主要分以下几种,再结合余弦相似度计算的要求来落地:
一、最常用的处理方式:直接忽略新词
这类词汇在训练用的文档库中完全没出现,说明它对区分现有文档没有参考价值,直接从查询里剔除即可。之后按照原有词汇表生成查询的TF-IDF向量:
- 对原有词汇表中的每个词,计算其在查询中的出现次数(TF),再乘以训练时得到的对应IDF值
- 词汇表中没在查询里出现的词,向量对应位置赋值为0
- 最后用这个向量和文档库的TF-IDF向量做余弦相似度计算
这种方法简单高效,不会引入无意义的噪声,适合大多数常规场景。
二、给新词赋默认IDF值(需注意向量维度匹配)
如果不想丢失新词的信息,可以给它赋一个合理的默认IDF值,但要注意:原有TF-IDF矩阵的维度是训练词汇表的大小,查询向量必须和它维度一致,所以这种方法通常只在你愿意扩展原有词汇表并重新计算文档矩阵时使用,或者把新词的权重合并到类似语义的现有词上(但实现复杂)。常用的默认值设定方式:
- 取训练集中最大的IDF值:新词在所有文档中都没出现,理论上IDF趋近于无穷大,用现有最大IDF近似,代表它是极稀有的关键词
- 取训练集中IDF的平均值:比较保守,不会让新词的权重过高,避免干扰原有结果
- 手动设定为
log((N+1)/1)(N是文档总数):相当于把新词当成在1个文档中出现过,避免了除以0的计算问题,同时给它一个合理的稀有度权重
三、用外部语料补充IDF(进阶方案)
如果有和目标文档库领域一致的外部语料,可以用这个语料计算新词的IDF值,再把新词和对应的IDF加入原有词汇表,之后重新生成所有文档的TF-IDF矩阵(或者用增量方式更新)。但要注意外部语料的领域匹配度,否则会引入偏差,增加计算成本。
余弦相似度计算的注意事项
不管用哪种方法处理新词,最终查询向量的维度必须和原有TF-IDF矩阵的列数完全一致。如果选择忽略新词,直接按原有词汇表生成向量即可;如果选择保留新词,必须确保文档矩阵也同步扩展维度,否则无法完成余弦相似度的计算。
内容的提问来源于stack exchange,提问作者Mina
相关产品推荐
相关产品推荐

