搜索引擎算法之Query Similarity (query relevance、查询的相似性或相关性)

本文探讨了多种Query相似性计算方法,从简单的编辑距离到基于点击数据、协同过滤、商品向量表示、深度语义网络DSSM及图计算等高级技术。详细介绍了每种方法的优缺点及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

介绍:

      一、计算相似性的方法很多,最简单是是根据字面的编辑距离来计算相似性。例如:

      二、更近一步,很自然想到搜索点击的结果来计算两个Query的相似性。

      三、当然我们也可以借助协同过滤的方法,把query和点击item作为一个评分矩阵,按照协同过滤的方法来计算相关性。

      四、由于点击数据受到搜索结果的影响,由于排序质量的问题,点击的位置bias,有很多办法来纠正;以及部分Query的点击比较稀疏,商品的点击比较稀疏。

     五、第二种方法是用商品向量来表示Query,也有一些方法借鉴了simrank和向量的思想,用词向量来表示Query和Title。

      六、如今深度学习大行其道,Query相关性也可以用深度语义网络DSSM (cikm 2013)  https://www.cnblogs.com/baiting/p/7195998.html  。

     七、我们在推荐算法中看到,一个用户在一个session中点击的商品序列可以用来做embedding ,得到商品id到embedding vector。

      八、目前图计算有很多方法。


目录

介绍:

        一、计算相似性的方法很多,最简单是是根据字面的编辑距离来计算相似性。例如:

         二、更近一步,很自然想到搜索点击的结果来计算两个Query的相似性。

        三、当然我们也可以借助协同过滤的方法,把query和点击item作为一个评分矩阵,按照协同过滤的方法来计算相关性。

        四、由于点击数据受到搜索结果的影响,由于排序质量的问题,点击的位置bias,有很多办法来纠正;以及部分Query的点击比较稀疏,商品的点击比较稀疏。

        五、第二种方法是用商品向量来表示Query,也有一些方法借鉴了simrank和向量的思想,用词向量来表示Query和Title。

        六、如今深度学习大行其道,Query相关性也可以用深度语义网络DSSM (cikm 2013)  https://www.cnblogs.com/baiting/p/7195998.html  。

      7、我们在推荐算法中看到,一个用户在一个session中点击的商品序列可以用来做embedding ,得到商品id到embedding vector。

    8、目前图计算有很多方法。


   

介绍:

       关键词是用户使用搜索引擎的常见输入条件,但是用户在搜索的时候不仅仅是用关键词。当你在淘宝上面搜索的时候,可能通过男装、女装类目去搜索。话说当年yahoo 起家的时候就是通过类目导航,但是yahoo小看了关键词搜索,错过了成为第一大搜索引擎的机会。接着说用户在淘宝用关键词搜索之后,还可以点击各种属性、价格区间来搜索。一个完整的Query包括几个部分:关键词、类目、属性(可以有多个)、价格区间、地域限制等。如果要推荐相关Query,我们应该对整个Query去找相关Query。


      一、计算相似性的方法很多,最简单是是根据字面的编辑距离来计算相似性。例如:

           sim(QA,QB) = 编辑距离(QA->QB) / length(AB) ,显然这种计算相似性的方法误差很大。所以我们可以考虑同义词、单复数、词形还原考虑一部分同义词。但是对于精确的计算两个Query的相似性就无能为力了。

      二、更近一步,很自然想到搜索点击的结果来计算两个Query的相似性。

              例如QA有一个点击的商品集合,QB有两个点击的商品集合,用点击数量或者点击率作为商品的权重来设计一个向量,这样两个Query就可以通过cosin(vector(QA),vector(QB)) 来计算相关性。还有比较简单的方法是计算两个Query(x和y)在session 中的互信息,PMI(x,y)=p(x,y)/(p(x)*p(y))

      三、当然我们也可以借助协同过滤的方法,把query和点击item作为一个评分矩阵,按照协同过滤的方法来计算相关性。

           由于协同过滤没有考虑点击的次数信息,因此推荐词的点击次数和原始词的搜索次数、长度可能不够匹配,还需要很多方法来纠正。

      四、由于点击数据受到搜索结果的影响,由于排序质量的问题,点击的位置bias,有很多办法来纠正;以及部分Query的点击比较稀疏,商品的点击比较稀疏。

         例如simrank,simrank++(http://www.vldb.org/pvldb/1/1453903.pdf)等算法。

         前阿里妈妈的yangxudong 文章里面有mapreduce 的实现:https://blog.youkuaiyun.com/yangxudong/article/details/24788137 。主要是基于分块矩阵的计算。实现中利用二次排序,做了不少优化。

      另外git hub 上面有两个代码:

(1)https://github.com/thunderain-project/examples  其部分代码无法通过编译。

(2)https://blog.youkuaiyun.com/dengxing1234/article/details/78933187  编译通过,少量数据可以通过编译,大量数据还无法跑得结果。

 

      五、第二种方法是用商品向量来表示Query,也有一些方法借鉴了simrank和向量的思想,用词向量来表示Query和Title。

       例如yahoo研究院的这篇论文《Learning Query and Document Relevance from a Web-scale Click Graph》。

       六、如今深度学习大行其道,Query相关性也可以用深度语义网络DSSM (cikm 2013)  https://www.cnblogs.com/baiting/p/7195998.html  。

把Query 先和Title 先分别用word hash 到一个3万维的空间,然后一层层embedding 到一个128维的向量, 最后可以简单的用cosin来计算相似性。

 

      七、我们在推荐算法中看到,一个用户在一个session中点击的商品序列可以用来做embedding ,得到商品id到embedding vector。

           同时我们可以可以考虑把用户在一个session中输入的Query当成序列来做embedding 。按照这个思路找了一下论文,果然2018年有人用这个想法写了论文。《Querying Word Embeddings for Similarity and Relatedness》http://aclweb.org/anthology/N18-1062

       We tested vector spaces with varying dimensionalities (dim=100/200/300) and number of context words (win=3/6/10), as well as minimum occurrence cutoff (min=1/5), negative samples (neg=1/5) and iterations (iter=1/5). These variations were tested to ensure the observed patterns reported in the experiments, but we report numerical results only for best performing models. In particular, higher dimensional vectors with dim=300 produced consistently better alignment with human scoring data. We also found min=1, neg=5 and iter=5 to be the optimal parameter settings across all experiments.

    八、目前图计算有很多方法。

                我们尝试了用node2vec的方法来计算Query的相似性,也取得了非常好的效果。即把query和item 的二部图上面做node2vec。

                另外准备尝试用阿里妈妈的euler平台里面的图embedding方法来计算节点之间相关性。

 

 

### 关于相似性匹配(Similarity Matching)的实现方法 #### 1. 基于深度学习的相关性匹配模型 一种基于深度学习的方法被广泛应用于检索场景中的相似性匹配问题。这种方法通过构建深层神经网络来捕捉查询与文档之间的复杂交互关系[^1]。具体而言,该模型能够利用多层感知机结构提取特征表示,并进一步计算两者的语义相似度得分。 以下是其实现的核心逻辑: ```python import tensorflow as tf def deep_relevance_matching_model(query, doc): # 定义嵌入层 embedding_layer = tf.keras.layers.Embedding(input_dim=10000, output_dim=128) query_embedded = embedding_layer(query) doc_embedded = embedding_layer(doc) # 计算点积作为相似度分数 similarity_score = tf.reduce_sum(tf.multiply(query_embedded, doc_embedded), axis=-1) return similarity_score ``` 此代码片段展示了如何使用 TensorFlow 构建一个简单的深度相关性匹配模型。 --- #### 2. GPU 加速下的并行块匹配算法 当面对大规模数据集时,传统的 CPU 处理方式可能无法满足实时性的需求。此时可以考虑采用 GPU 的 SIMT (Single Instruction Multiple Threads) 架构来进行优化[^2]。相比于传统 SIMD 架构下单一处理单元的操作模式,在 CUDA 中每个线程束由 32 条独立运行但共享同一指令序列的线程组成。这种设计使得它特别适合用于解决诸如图像识别、视频编码以及本文提到的大规模相似性比较等问题。 下面是一个简化版的例子展示如何运用 Block-Matching 技术完成两个矩阵间的距离测量任务: ```cpp __global__ void blockMatchingKernel(const float* A, const float* B, int N, float* result){ int idx = threadIdx.x + blockIdx.x * blockDim.x; if(idx < N){ // 进行逐元素减法运算求平方差之和 float sum = 0.f; for(int i=0;i<N;i++) { float diff = A[idx*N+i]-B[i]; sum += diff * diff; } result[idx]=sqrt(sum); } } ``` 上述 C++/CUDA 编写的核函数实现了基本的距离计算功能,适用于多种类型的向量间相似度评估任务。 --- #### 3. 数据预处理的重要性 无论采取何种具体的算法策略,在实际应用之前都需要做好充分的数据准备工作。这通常包括但不限于去除噪声干扰项、标准化数值范围等步骤。只有这样才能够确保最终得到的结果既可靠又具有较高的准确性。 --- #### 总结 综上所述,针对案例库中 Similarity Matching 的实现可以从多个角度出发探索解决方案。既可以借助先进的机器学习框架开发智能化程度更高的预测工具;也可以充分利用现代硬件资源提升整体效率表现。当然每种方案都有其适用条件及局限所在,因此需根据实际情况灵活选用最合适的手段加以应对。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值