搜索算法
搜索引擎,搜索算法
FocusOneThread
ACL/NAACL/EMNLP审稿人,
金庸群侠传MOD大侠梦/曹操传MOD禾下霸业作者
展开
-
【搜索算法】以扩召回为目标,item-tag不如query-tag能扩更多数量
如果扩召回的逻辑是:query-tag等于item-tag时,输入query召回该item,那么每个query-tag可平均召回500个item,,(1-item --> 1tag --> 1500query),如果想给item挖掘tag打上,每个item要挖掘1500个tag之多!如果item类目体系一共20个类目,每个item都有一个类目,一共有10000个item,则平均每个类目tag下有500个item,,如果一共30000个query,那么。那么给每个query打上一个类目,原创 2024-09-16 08:12:20 · 173 阅读 · 0 评论 -
ElasticSearch索引和搜索词匹配的一些细节
一个item“麦当劳”:被切词成“麦当 + 劳”原创 2024-08-28 15:51:00 · 383 阅读 · 0 评论 -
GPT4 > 搜索引擎,如同 向量召回(做得好的话) > BM25文本召回
所以向量召回的结果起码会是BM25文本召回的补充。向量召回(做得好的话)的结果是。BM25文本召回的结果是。原创 2024-07-24 14:24:53 · 51 阅读 · 0 评论 -
Lucene 英文词根处理
【代码】Lucene 英文词根处理。原创 2024-05-11 10:01:49 · 293 阅读 · 0 评论 -
【搜索算法】靠item标签召回,超越ElasticSearch+分词的baseline
要超越ElasticSearch+(item名)分词的baseline,如果都要求 有相关性的item(有token匹配),其实就是相当于优化分词,而分词优化的极限就是把 item名和query词 切分成字级token。所以标签召回,只能是相当于 扩充更多的 推荐的item。搜【健身】,搜出【哑铃】就相当于是推荐出的item。比如搜【杠铃】,搜出【哑铃】可以,原创 2024-04-12 21:02:40 · 272 阅读 · 0 评论 -
【搜索算法】加item标签扩充召回
就是热门的query词召回数量提升了10倍,但是ElasticSearch的召回数量阈值不够,item侧标签的一种来源是 item类目的同义词 直接打到item上,这些 item类目同义词 则多去覆盖 非热门的query词。同时其他的query词召回数量没有增益。原创 2024-04-12 15:29:35 · 106 阅读 · 0 评论 -
【ElasticSearch】DisMaxQueryBuilder 和 BoolQueryBuilder 的结合使用
【代码】【ElasticSearch】DisMaxQueryBuilder 和 BoolQueryBuilder 的结合使用。原创 2024-04-12 10:56:36 · 176 阅读 · 0 评论 -
ElasticSearch 的 ConstantScoreQuery 的理解
可以查找所有 匹配上(分数为1)的doc,没匹配上(分数为0)的doc不返回。原创 2024-04-11 09:21:12 · 338 阅读 · 0 评论 -
ElasticSearch 的 DisMaxQueryBuilder 的理解
就是DisMaxQueryBuilder可以用来选择出 最高的。DisMaxQueryBuilder的定义。最高分的分值是相同的,最高分的doc就只返回。原创 2024-04-10 18:21:10 · 476 阅读 · 1 评论 -
ElasticSearch 两个BoolQueryBuilder满足其中一个
【代码】ElasticSearch 两个BoolQueryBuilder满足其中一个。原创 2024-04-10 11:22:17 · 246 阅读 · 0 评论 -
ElasticSearch 的 BoolQueryBuilder 使用
【代码】ElasticSearch的BoolQueryBuilder使用。原创 2024-04-08 21:50:45 · 606 阅读 · 0 评论 -
Lucene 自定义词库
【代码】Lucene 自定义词库。原创 2024-03-11 10:00:40 · 301 阅读 · 0 评论 -
Lucene 分词 示例代码
【代码】Lucene 分词。原创 2024-03-11 09:44:54 · 194 阅读 · 0 评论 -
query作为tag打在item上,理论上能解决所有搜索的召回问题
比如搜 奶茶 在 呷哺 下单,(呷哺也在卖奶茶),有上万个 奶茶query 都在 呷哺item 下单,那么给 呷哺item 打上 奶茶tag 肯定是OK的一条数据,通过 高频query的订单 找到的query-item的绑定关系,作为训练数据,有了模型后,然后对 比如 item呷哺呷哺 进行预测出 奶茶tag。在订单越大的时候,数据是越置信的,原创 2024-02-29 19:26:18 · 413 阅读 · 0 评论 -
无人工标注 实现搜索 分词/标签召回/query改写/query-item相关性
高频/低频 用户行为(浏览/点击/下单)是相当于 已经去掉噪声 的数据,数据质量是可以的,可以一起用 比如 高频1gram+高频2gram+高频3gram+高频4gram。以 同一query 的 高频订单/低频订单,作为正负样本,训练二分类模型。这里 面馆A,面馆B 的标签 必须是已有的,都是 面类饭店,那么可以认为 牛肉面 和 牛肉拉面 是很相似的词了。然后认为 牛肉面 和 牛肉拉面 互为相似词,如果没有好的分词工具的话,训练一个文本生成模型,训练一个文本生成模型,训练一个文本生成模型。原创 2024-02-20 15:04:19 · 490 阅读 · 0 评论 -
【搜索算法】分词模型的冷启动替换
可以一起用 比如 高频1gram+高频2gram+高频3gram+高频4gram。如果没有好的分词工具的话,原创 2024-02-20 14:17:21 · 335 阅读 · 0 评论 -
基于用户搜索行为,训练query-item相关性模型
高频用户行为(点击/下单)是相当于 已经去掉噪声 的数据,数据质量是可以的,以 同一query 的 高频订单/低频订单,作为正负样本,训练二分类模型。原创 2024-02-20 11:43:36 · 410 阅读 · 0 评论 -
基于用户搜索行为,给item打上query标签 / 把query看成标签打在item上
用户搜 牛肉拉面 — 高频下单 面馆A 面馆B。用户搜 牛肉面 — 高频下单 面馆A 面馆B。然后对 面馆C 进行预测。训练一个文本生成模型,原创 2024-02-04 18:00:47 · 372 阅读 · 0 评论 -
基于用户搜索行为,寻找query的相似词/同义词/扩展词/改写词
用户搜 牛肉拉面 — 高频下单 面馆A 面馆B 面馆D。用户搜 牛肉面 — 高频下单 面馆A 面馆B 面馆C。那么可以认为 牛肉面 和 牛肉拉面 是很相似的词了。原创 2024-02-04 17:56:39 · 455 阅读 · 0 评论 -
模拟请求ElasticSearch
在这个searchBuilder变量里,对里面query变量点右侧 view按钮,在IDEA的debug模式,走到Java代码的searchBuilder,IDEA里会显示出一个json,把这个json填到。打开插件,GET的json填什么。安装chrome的这个插件。原创 2024-02-02 15:31:22 · 626 阅读 · 0 评论 -
lucene 部分更新,实例
import java.io.IOException;import java.nio.file.Paths;import java.util.ArrayList;import java.util.List;import org.apache.lucene.index.IndexReader;import org.apache.lucene.analysis.cn.smart.Smart...原创 2018-11-29 10:50:38 · 622 阅读 · 2 评论 -
tfidf python 中文 实例
from sklearn.feature_extraction.text import TfidfTransformerfrom sklearn.feature_extraction.text import CountVectorizerif __name__ == "__main__": corpus = ["我 来到 北京 清华大学", # 第一个文本切词后的结果,词之间以空格...原创 2019-07-25 10:19:37 · 2681 阅读 · 0 评论 -
python 计算1个向量和1组向量的cosine距离
import scipy.spatialimport numpy as npquery_embedding = np.array([0,0,1])corpus_embeddings = np.array([[0,0,1],[1,0,0],[0,1,0]])distances = scipy.spatial.distance.cdist([query_embedding], corpus_e...原创 2019-08-04 10:21:44 · 1999 阅读 · 0 评论 -
IR(Information Retrieval)初筛算法
https://github.com/faneshion/MatchZoo/issues/72筛出多个候选doc用lucene其中也提到SumBasic算法是在一个已选定为answer的长的doc里挑几个最重要的sentence的好办法原创 2018-05-22 16:30:23 · 3589 阅读 · 0 评论 -
Document Expansion by Query Prediction 划重点
用doc_train和query_train训练一个生成式model,doc_test过来用model生成query_test_v2,再把doc_test和query_test_v2拼起来作为doc_test_v2,还用query_test查原创 2019-07-03 09:50:49 · 554 阅读 · 0 评论 -
一个向量 和 一组向量 的attention计算,mxnet实现
user_input = mx.sym.reshape(user_input_before_reshape, shape=(-1, total_group_length, eb_dim))att_user_input = mx.sym.reshape(user_input, (bs, total_group_length, eb_dim))att_node_input = mx.sym.res...原创 2019-07-10 11:50:17 · 521 阅读 · 0 评论 -
python实现一棵树及其搜索
import numpy as npfrom scipy.spatial.distance import cosinedef findTopNindex(array,N): # return np.argsort(array)[::-1][:N] # 从大到小 return np.argsort(array)[:N] # 从小到大def cos_distance(vect...原创 2019-08-05 16:56:52 · 1304 阅读 · 0 评论 -
GEN Encoder 摘要速览
Generic Intent Representation in Web Search本文提出GEneric iNtent Encoder (GEN Encoder),为用户搜索意图训练一个向量表示,使用大规模必应搜索的用户点击日志作为用户意图的弱监督GEN Encoder 端对端的 训练将 查询和点击信息 映射到相似向量,之后再在多个任务finetune,实验在 一个 查询意图相似性 数...原创 2020-03-13 11:20:38 · 281 阅读 · 0 评论 -
IR里的Ad-hoc Retrieval的adhoc意思
The term ad-hoc refers to the scenario where documents in the collection remain relatively static while new queries are submitted to the system continually.by《A Deep Look into Neural Ranking Models f...原创 2019-08-14 17:23:27 · 2052 阅读 · 0 评论 -
locality-sensitive hashing 简单理解
LSH是为了将向量hash到多个桶里以索引以缩小计算向量相似度时的候选。原创 2021-02-18 12:13:38 · 300 阅读 · 0 评论 -
python的 MAP, RPrec, MRR, NDCG, MRR@10 计算代码
import numpy as npdef average_precision(gt, pred): """ Computes the average precision. This function computes the average prescision at k between two lists of items. Parameters ------...原创 2019-08-09 15:44:26 · 5740 阅读 · 6 评论 -
Learning to Rank for Information Retrieval 的Part1阅读笔记
Pointwise输入一个query一个doc输出一个scorePairwise输入两个doc输出一个scoreListwise输入一个query一组doc整体输出一组score原创 2019-08-13 09:07:23 · 721 阅读 · 0 评论 -
bm25 python
https://github.com/dorianbrown/rank_bm25原创 2022-05-13 08:51:40 · 684 阅读 · 0 评论 -
MS MARCO数据集,Passage Ranking数据格式说明
摘自https://github.com/microsoft/MSMARCO-Passage-Ranking原创 2019-07-05 14:50:33 · 4529 阅读 · 0 评论 -
A Deep Look into Neural Ranking Models for Information Retrieval 笔记
ad-hoc retrievaldoc retrieval(相关性)(一短句一长句)数据集TRECRobustClueWebGOV2MicroblogAOL logBing Search logquestion answeringanswer retrieval(相关性)(一短句一长句)answer span locating(阅读理解)answer synthesizi...原创 2019-08-20 14:37:08 · 536 阅读 · 0 评论 -
TDM阅读笔记,在推荐系统的应用
《Learning Tree-based Deep Model for Recommender Systems》问题•每个商品的 向量表示/embedding 随机初始化。•每个用户的历史信息的 向量表示/embedding 随机初始化。•我们输入深度模型这两个embedding,输出他们关联程度的得分。•也就是如果我们要得到 一个用户对所有商品 的每个得分,然后排序,取出得分最高几个。...原创 2019-07-08 16:00:33 · 1247 阅读 · 0 评论 -
python BM25
安装pip install rank-bm25from rank_bm25 import BM25Okapicorpus = [ "Hello there good man!", "It is quite windy in London", "How is the weather today?"]tokenized_corpus = [doc.split(" ...原创 2019-07-18 10:33:28 · 1620 阅读 · 0 评论 -
Lucene 按字级分词
import java.io.StringReader;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;pub原创 2022-02-15 08:56:27 · 89 阅读 · 0 评论 -
Spark 集成 Lucene
研究 https://github.com/agile-lab-dev/sparksearchengine 发现,似乎在每个worker节点进行全局的search似乎是不可能的,只能建立全局index后在driver进行search。原创 2020-12-07 17:14:30 · 424 阅读 · 0 评论 -
Spark Lucene BM25 TFIDF 集成
从 https://github.com/agile-lab-dev/sparksearchengine 下载源码,复制进自己的项目import it.agilelab.bigdata.spark.search.SearchableRDDimport it.agilelab.bigdata.spark.search.dsl._import it.agilelab.bigdata.spark.search.impl.analyzers.{DefaultAnalyzer, EnglishWikipedi原创 2020-09-16 12:11:18 · 439 阅读 · 0 评论