AutoGluon 语义匹配实战指南:文本/图像相似度、零样本跨模态检索与语义搜索

发布时间:2026/9/15 20:33:25
AutoGluon 语义匹配实战指南:文本/图像相似度、零样本跨模态检索与语义搜索 AutoGluon 语义匹配实战指南文本/图像相似度、零样本跨模态检索与语义搜索【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon本指南系统讲解 AutoGluon multimodalAutoMM模块中**语义匹配Semantic Matching**一族的完整能力如何用几行代码训练文本-文本、图像-图像、图像-文本语义匹配模型如何直接使用 CLIP 完成零样本跨模态检索以及如何借助语义嵌入与 BM25 组合构建高召回、高精度的语义搜索引擎。读完本文你将掌握MultiModalPredictor在text_similarity、image_similarity、image_text_similarity三种问题类型下的配置、训练、评估、预测与向量抽取全流程并能独立复现本仓库 docs/tutorials/multimodal/semantic_matching 下的全部 5 个实战教程。一、章节总览AutoMM 语义匹配的五种场景本章节导航页 index.md 将语义匹配能力组织为五个相互独立又层层递进的教程覆盖同模态匹配与跨模态匹配两大方向教程核心问题类型数据模态典型应用Text-to-Text Semantic Matchingtext_similarity文本-文本文本检索、问答、文档去重、自然语言推理、推荐Image-to-Image Semantic Matchingimage_similarity图像-图像商品同款识别、图像去重、相似图像召回Image-Text Semantic Matchingimage_text_similarity图像-文本跨模态检索、图文匹配、图像描述、文生图评测Zero Shot Image-Text Semantic Matchingimage_text_similarity免训练图像-文本开箱即用的图文检索、零样本分类Text Semantic Searchtext_similarity 检索工具文本语义搜索引擎、排序优化NDCG 评估三种问题类型在源码中被统一定义为常量见 constants.pyIMAGE_SIMILARITY image_similarity、TEXT_SIMILARITY text_similarity、IMAGE_TEXT_SIMILARITY image_text_similarity。它们的共同点是模型将每个样本编码为高维向量再通过余弦相似度cosine similarity、点积dot product或欧氏距离计算两个样本的相似程度——这正是语义匹配与语义搜索的底层基础。二、核心概念从匹配到搜索2.1 语义匹配把相似度问题建模为二分类无论哪种模态AutoMM 的语义匹配范式都是统一的把一对样本是否语义一致整理成二分类训练集1 表示匹配0 表示不匹配指定query列第一个样本与response列第二个样本的列名以及label标签列通过match_label显式声明哪个标签代表语义匹配用对比学习/分类目标训练双塔two-tower编码器。2.2 语义搜索把搜索简化为向量最近邻语义搜索的思路是不再用词频如 BM25直接匹配查询与候选而是先把文本 $x$ 编码为特征向量 $\phi(x)$再用向量空间中的距离度量比较相似性。这样同义词会落在相近的向量区域改写表述paraphrase也能被正确召回。候选向量的嵌入可以离线预计算并存储在线检索时只需编码查询并做近似最近邻搜索如 LSH、MIPS因此既语义化又高效还能自然地推广到多模态用文本查图、用图查网站。AutoMM 为此提供了三个开箱即用的工具函数全部实现在 utils/matcher.py 与 optim/metrics/ranking_metrics.py 中extract_embedding抽取样本向量离线建库semantic_search按余弦相似度做 top-k 检索compute_ranking_score/compute_semantic_similarity排序指标计算与相似度矩阵计算。三、文本-文本语义匹配text_similarity3.1 任务与数据文本相似度是 NLP 的常见任务广泛用于网页搜索、问答、文档去重、抄袭比对、自然语言推理、推荐引擎等。教程使用Stanford Natural Language InferenceSNLI语料——约 57 万条人工书写的句子对标注为entailment蕴含、contradiction矛盾、neutral中立。示例如下PremiseHypothesisLabelA black race car starts up in front of a crowd of people.A man is driving down a lonely road.contradictionAn older and younger man smiling.Two men are smiling and laughing at the cats playing on the floor.neutralA soccer game with multiple males playing.Some men are playing a sport.entailment教程把entailment作为正样本标签 1、contradiction作为负样本标签 0丢弃neutral。数据通过 AutoGluon 自带的数据加载器获取from autogluon.core.utils.loaders import load_pd import pandas as pd snli_train load_pd.load(https://automl-mm-bench.s3.amazonaws.com/snli/snli_train.csv, delimiter|) snli_test load_pd.load(https://automl-mm-bench.s3.amazonaws.com/snli/snli_test.csv, delimiter|)3.2 初始化与训练传统方法词频、TF-IDF只在词法层面工作无法捕捉语义。AutoMM 使用BERT将每个句子投影为高维向量并按 sentence-transformers 的思路把匹配问题建模为分类问题。用户只需声明列名与关键参数from autogluon.multimodal import MultiModalPredictor predictor MultiModalPredictor( problem_typetext_similarity, querypremise, # 第一个句子的列名 responsehypothesis,# 第二个句子的列名 labellabel, # 标签列名 match_label1, # 表示 query 与 response 语义一致的标签值 eval_metricauc, # 评估指标 ) predictor.fit( train_datasnli_train, time_limit180, )参数要点match_label必须与业务语义对齐。本任务中 1 表示两句语义一致实践中若任务是是否重复则应把重复类标作为match_label标签必须是二分类eval_metricauc对应 ROC-AUC适合匹配二分类场景time_limit180表示训练最多 180 秒。从源码看默认骨干网络为hf_text编码器默认google/electra-base-discriminator也可切换为bert-base-cased见 configs/model/default.yaml而匹配训练本身采用对比损失 余弦相似度 难样本挖掘的配置见 configs/matcher/default.yamlcontrastive_losspos_margin: 0.8、neg_margin: 0.2、cosine_similarity距离、pair_margin_minerpos_margin: 0.6、neg_margin: 0.4。这意味着模型被显式训练成正对相似度高、负对相似度低的嵌入空间。3.3 评估、预测与概率输出score predictor.evaluate(snli_test) print(evaluation score: , score) pred_data pd.DataFrame.from_dict({ premise: [The teacher gave his speech to an empty room.], hypothesis: [There was almost nobody when the professor was talking.], }) predictions predictor.predict(pred_data) print(Predicted entities:, predictions[0]) probabilities predictor.predict_proba(pred_data) print(probabilities)evaluate返回测试集上的 ROC-AUC 分数predict输出二分类预测结果0/1predict_proba输出匹配概率可用于自定义阈值决策。3.4 抽取嵌入extract_embedding支持分别对两组句子抽取向量返回形状为(样本数, 嵌入维度)的数组embeddings_1 predictor.extract_embedding({premise: [The teacher gave his speech to an empty room.]}) print(embeddings_1.shape) embeddings_2 predictor.extract_embedding({hypothesis: [There was almost nobody when the professor was talking.]}) print(embeddings_2.shape)四、图像-图像语义匹配image_similarity4.1 任务与数据图像相似度在计算机视觉中同样常见典型应用如判断商品是否同款。教程使用简化版Stanford Online ProductsSOP度量学习数据集12 个商品类别bicycle、cabinet、chair、coffee maker、fan、kettle、lamp、mug、sofa、stapler、table、toaster每个商品有不同视角的多张图片。同一商品的不同视角视为正对1不同商品视为负对0。download_dir ./ag_automm_tutorial_img2img zip_file https://automl-mm-bench.s3.amazonaws.com/Stanford_Online_Products.zip from autogluon.core.utils.loaders import load_zip load_zip.unzip(zip_file, unzip_dirdownload_dir) dataset_path os.path.join(download_dir, Stanford_Online_Products) train_data pd.read_csv(f{dataset_path}/train.csv, index_col0) test_data pd.read_csv(f{dataset_path}/test.csv, index_col0) image_col_1 Image1 image_col_2 Image2 label_col Label match_label 1由于标注文件中的图片路径是相对路径需要先扩展为绝对路径注意路径可能以;拼接多张图因此按;分割后逐一处理def path_expander(path, base_folder): path_l path.split(;) return ;.join([os.path.abspath(os.path.join(base_folder, path)) for path in path_l]) for image_col in [image_col_1, image_col_2]: train_data[image_col] train_data[image_col].apply(lambda ele: path_expander(ele, base_folderdataset_path)) test_data[image_col] test_data[image_col].apply(lambda ele: path_expander(ele, base_folderdataset_path))4.2 训练模型AutoMM 使用Swin Transformer将每张图投影为高维向量并计算特征向量间的余弦相似度。训练代码与文本版本同构from autogluon.multimodal import MultiModalPredictor predictor MultiModalPredictor( problem_typeimage_similarity, queryimage_col_1, # 第一张图的列名 responseimage_col_2, # 第二张图的列名 labellabel_col, # 标签列名 match_labelmatch_label, # 表示语义匹配的标签值 eval_metricauc, ) predictor.fit( train_datatrain_data, time_limit180, )图像骨干的默认配置为swin_base_patch4_window7_224见 configs/model/default.yaml同样配合 matcher 默认的对比损失与难样本挖掘策略。4.3 评估、预测、概率与嵌入score predictor.evaluate(test_data) print(evaluation score: , score) pred predictor.predict(test_data.head(3)) print(pred) proba predictor.predict_proba(test_data.head(3)) print(proba) embeddings_1 predictor.extract_embedding({image_col_1: test_data[image_col_1][:5].tolist()}) embeddings_2 predictor.extract_embedding({image_col_2: test_data[image_col_2][:5].tolist()}) print(embeddings_1.shape, embeddings_2.shape)需要留意的是predict使用朴素概率阈值 0.5概率大于 0.5 取匹配类若业务对查准/查全有不同要求应改用predict_proba并结合业务上下文自定义阈值。五、图像-文本语义匹配image_text_similarity5.1 任务与数据图像与文本是理解真实世界的两大通道图文语义匹配度量图像与句子的视觉-语义相似度是跨模态检索、图像描述、文生图、多模态神经机器翻译等任务的基础。教程使用Flickr30K数据集31,783 张日常生活图片每张图配 5 条描述性 caption。download_dir ./ag_automm_tutorial_imgtxt zip_file https://automl-mm-bench.s3.amazonaws.com/flickr30k.zip from autogluon.core.utils.loaders import load_zip load_zip.unzip(zip_file, unzip_dirdownload_dir) dataset_path os.path.join(download_dir, flickr30k_processed) train_data pd.read_csv(f{dataset_path}/train.csv, index_col0) val_data pd.read_csv(f{dataset_path}/val.csv, index_col0) test_data pd.read_csv(f{dataset_path}/test.csv, index_col0) image_col image text_col caption同样需要用path_expander把相对图片路径转为绝对路径。数据集中每行是一对图像-文本二者互相匹配一张图对应五条 caption因此图片路径被复制五次。评估/检索时需要从 test 数据中抽取唯一的图片集合与文本集合并为每个 test 样本加上标签列test_image_data pd.DataFrame({image_col: test_data[image_col].unique().tolist()}) test_text_data pd.DataFrame({text_col: test_data[text_col].unique().tolist()}) test_data_with_label test_data.copy() test_label_col relevance test_data_with_label[test_label_col] [1] * len(test_data)5.2 初始化直接加载预训练 CLIP图文匹配的初始化只需两列即可——query与response在图文匹配中是等价且可互换的querytext_col, responseimage_col或反之均可from autogluon.multimodal import MultiModalPredictor predictor MultiModalPredictor( querytext_col, responseimage_col, problem_typeimage_text_similarity, eval_metricrecall, )初始化image_text_similarity预测器即加载了预训练CLIP骨干openai/clip-vit-base-patch32见 configs/model/default.yaml。CLIP 是双塔架构一个图像编码器、一个文本编码器通过对比学习目标在数亿图文对上联合训练从而对齐视觉与语言的嵌入空间。5.3 零样本评估直接评测预训练模型无需任何训练即可评测预训练模型在自有数据上的检索表现。evaluate支持传入query_data、response_data与cutoffs分别计算文本→图像与图像→文本两个方向的召回txt_to_img_scores predictor.evaluate( datatest_data_with_label, query_datatest_text_data, response_datatest_image_data, labeltest_label_col, cutoffs[1, 5, 10], ) img_to_txt_scores predictor.evaluate( datatest_data_with_label, query_datatest_image_data, response_datatest_text_data, labeltest_label_col, cutoffs[1, 5, 10], ) print(ftxt_to_img_scores: {txt_to_img_scores}) print(fimg_to_txt_scores: {img_to_txt_scores})这里返回的指标即初始化时设置的eval_metricrecallcutoffs[1, 5, 10]表示按 top-1/top-5/top-10 检索结果计算得分。一个值得理解的细节是由于每张图配 5 条文本图像→文本方向 recall1 的上限只有 20%top-1 只能命中 5 个正确答案中的 1 个因此教程中文本→图像的召回通常显著高于图像→文本。5.4 微调与再评估predictor.fit( train_datatrain_data, tuning_dataval_data, time_limit180, )微调后以同样的evaluate调用重新计算两个方向的 recall可观察到相对零样本预测器的明显提升——这说明在自定义数据上微调 CLIP 通常能获得更好效果。5.5 预测、概率与嵌入pred predictor.predict(test_data.head(5)) print(pred) proba predictor.predict_proba(test_data.head(5)) print(proba) # 第二列是匹配的概率 image_embeddings predictor.extract_embedding({image_col: test_image_data[image_col][:5].tolist()}) text_embeddings predictor.extract_embedding({text_col: test_text_data[text_col][:5].tolist()}) print(image_embeddings.shape, text_embeddings.shape)六、零样本图文匹配与向量检索zero-shot零样本方案完全复用上一节的 CLIP 能力但不指定列名、不训练直接把图文数据编码为向量后做检索。得益于 CLIP 在千万级图文对上训练的对比学习目标其嵌入天然对齐视觉与语言可用于检索与匹配。6.1 准备数据与抽取嵌入用autogluon.multimodal.utils.download下载若干 COCO 图片并准备一组文本候选from autogluon.multimodal.utils import download texts [ A cheetah chases prey on across a field., A man is eating a piece of bread., The girl is carrying a baby., There is an airplane over a car., A man is riding a horse., Two men pushed carts through the woods., There is a carriage in the image., A man is riding a white horse on an enclosed ground., A monkey is playing drums., ] urls [http://farm4.staticflickr.com/3179/2872917634_f41e6987a8_z.jpg, ...] image_paths [download(url) for url in urls]初始化problem_typeimage_text_similarity无需其他参数并分别抽取图文嵌入as_tensorTrue返回 PyTorch 张量from autogluon.multimodal import MultiModalPredictor predictor MultiModalPredictor(problem_typeimage_text_similarity) image_embeddings predictor.extract_embedding(image_paths, as_tensorTrue) text_embeddings predictor.extract_embedding(texts, as_tensorTrue) print(image_embeddings.shape, text_embeddings.shape)6.2 文本查图Image Retrieval with Text Query标准流程三步走离线抽取全部图片嵌入 →在线抽取文本查询嵌入 → 计算余弦相似度取 top 候选。semantic_search支持直接传入已抽取的嵌入from autogluon.multimodal.utils import semantic_search hits semantic_search( matcherpredictor, query_embeddingstext_embeddings[6][None,], response_embeddingsimage_embeddings, top_k5, ) print(hits)查询文本为 There is a carriage in the image.返回结果的response_id指向检索到的图片下标命中马车图片。6.3 图查文本Text Retrieval with Image Query只需交换query_embeddings与response_embeddings的角色即可完成反向检索hits semantic_search( matcherpredictor, query_embeddingsimage_embeddings[4][None,], response_embeddingstext_embeddings, top_k5, ) print(hits) print(texts[hits[0][0][response_id]])6.4 图文对匹配预测带 query/response 列若要判断给定的图文对是否匹配需要重新初始化预测器并额外指定query、response两个自定义列名这里的列名是占位名用于声明数据中哪个字段是图像、哪个是文本predictor MultiModalPredictor( queryabc, responsexyz, problem_typeimage_text_similarity, ) pred predictor.predict({abc: [image_paths[4]], xyz: [texts[3]]}) print(pred) proba predictor.predict_proba({abc: [image_paths[4]], xyz: [texts[3]]}) print(proba)predict_proba返回匹配概率可据此施加自定义阈值做更精细的决策。七、semantic_search工具函数源码剖析semantic_search是贯穿图文检索与文本搜索的核心工具完整实现位于 utils/matcher.py。其关键设计如下入参二选一query_data/response_data原始数据内部调用matcher.extract_embedding实时编码与query_embeddings/response_embeddings预计算嵌入必须且只能提供其中一种二者同时/同时不提供都会触发断言分块处理query_chunk_size默认 128与response_chunk_size默认 500000用于控制内存查询与候选库都按块迭代相似度计算调用compute_semantic_similarityutils/matcher.py支持cosine默认先做 L2 归一化再矩阵乘法与dot_prod两种similarity_typetop-k 与堆排序对每个查询用torch.topk取块内前 k再通过heapq维护全局前 k最终返回按分数降序的{response_id: ..., score: ...}列表id_mappings当数据只含 query/response 的 ID 而非内容时可通过{列名: {id: 内容}}的映射字典在编码前还原内容文本语义搜索一节会用到。八、文本语义搜索与 NDCG 排序评估8.1 语义嵌入的价值语义嵌入是现代搜索引擎的核心构件它端到端在大规模语料上训练使同义词嵌入到相近区域、词间关系可由向量代数揭示。相比词袋/TF-IDF其优势有三按语义而非词面召回改写文本候选向量可预计算并配合 LSH/MIPS 等可扩展近似检索技术计算更高效同一套算法可平滑推广到多模态检索。8.2 数据集准备教程使用ir_datasets包中的NF CorpusNutrition Facts数据集beir/nfcorpus/test共 323 个查询、3633 篇文档、12334 条相关性标注并把查询、文档、相关性标注转成 dataframeimport ir_datasets dataset ir_datasets.load(beir/nfcorpus/test) doc_data pd.DataFrame(dataset.docs_iter()) query_data pd.DataFrame(dataset.queries_iter()) labeled_data pd.DataFrame(dataset.qrels_iter()) label_col relevance query_id_col query_id doc_id_col doc_id text_col text id_mappings{query_id_col: query_data.set_index(query_id_col)[text_col], doc_id_col: doc_data.set_index(doc_id_col)[text_col]}预处理要点查询数据删除url列文档数据把title拼入text列后删除title与url。8.3 NDCG 指标公式排序场景中用户最关心排在前面的结果是否相关教程选用NDCGNormalized Discounted Cumulative Gain衡量排序质量由以下公式递进定义累计增益 $\mathrm{CG}p \sum{i1}^p \mathrm{rel}_i$直接累加前 $p$ 位的相关性得分折扣累计增益 $\mathrm{DCG}p \sum{i1}^p \frac{\mathrm{rel}_i}{\log_2(i 1)}$按位置对数折扣位置越靠后惩罚越大理想 DCG $\mathrm{IDCG}_p$按最优排序得到的 DCG作为归一化基准$\mathrm{NDCG}_p \frac{\mathrm{DCG}_p}{\mathrm{IDCG}_p}$把实际排序质量归一化到 0~1。其背后两条假设是高相关文档应尽量靠前高相关 边缘相关 不相关。AutoMM 提供compute_ranking_score工具函数optim/metrics/ranking_metrics.py统一计算NDCG、MAP、Recall、Precision在多个cutoffs下的分数默认 cutoffs 为[5, 10, 20]。8.4 BM25 基线BM25Okapi BM25是 OpenSearch 等引擎广泛使用的词法排序算法作为本教程的对照基线$$score_{BM25} \sum_i^n \mathrm{IDF}(q_i) \cdot \frac{f(q_i, D) \cdot (k1 1)}{f(q_i, D) k1 \cdot \left(1 - b b \cdot \frac{fieldLen}{avgFieldLen}\right)}$$其中 $k1$默认 1.2限制单个查询词对文档分数的贡献上限$b$默认 0.75控制文档长度相对语料平均长度的惩罚力度。教程借助rank_bm25包实现基线评估代码大致为from rank_bm25 import BM25Okapi def tokenize_corpus(corpus): stop_words set(stopwords.words(english) list(string.punctuation)) tokenized_docs [] for doc in corpus: tokens nltk.word_tokenize(doc.lower()) tokenized_doc [w for w in tokens if w not in stop_words and len(w) 2] tokenized_docs.append(tokenized_doc) return tokenized_docs def evaluate_bm25(doc_data, query_data, qrel_dict, cutoffs): tokenized_corpus tokenize_corpus(doc_data[text_col].tolist()) bm25_model BM25Okapi(tokenized_corpus, k11.2, b0.75) results rank_documents_bm25( query_data[text_col].tolist(), query_data[query_id_col].tolist(), doc_data[doc_id_col].tolist(), max(cutoffs), bm25_model) ndcg compute_ranking_score(resultsresults, qrel_dictqrel_dict, metrics[ndcg], cutoffscutoffs) return ndcg8.5 用 AutoMM 做语义排序对于文本数据初始化text_similarity预测器并指定 ID 列与标签列这里通过hyperparameters把文本骨干换成句子嵌入模型sentence-transformers/all-MiniLM-L6-v2from autogluon.multimodal import MultiModalPredictor predictor MultiModalPredictor( queryquery_id_col, responsedoc_id_col, labellabel_col, problem_typetext_similarity, hyperparameters{model.hf_text.checkpoint_name: sentence-transformers/all-MiniLM-L6-v2} )evaluate一键完成自动抽嵌入 → 算余弦相似度 → 排序 → 算分数的完整链路借助id_mappings把 ID 映射回文本内容predictor.evaluate( labeled_data, query_dataquery_data[[query_id_col]], response_datadoc_data[[doc_id_col]], id_mappingsid_mappings, cutoffscutoffs, metrics[ndcg], )与 BM25 基线对比语义排序的 NDCG 有显著提升。语义搜索与嵌入抽取同样一行完成from autogluon.multimodal.utils import semantic_search hits semantic_search( matcherpredictor, query_dataquery_data[text_col].tolist(), response_datadoc_data[text_col].tolist(), query_chunk_sizelen(query_data), top_kmax(cutoffs), ) query_embeds predictor.extract_embedding(query_data[[query_id_col]], id_mappingsid_mappings, as_tensorTrue) doc_embeds predictor.extract_embedding(doc_data[[doc_id_col]], id_mappingsid_mappings, as_tensorTrue)教程中semantic_search的实现用torch.topk线性复杂度 O(nk)完成最近邻实际生产环境通常换用Faiss等专用近似最近邻库以支撑更大规模候选库。extract_embedding的意义在于数据库侧嵌入离线抽取并存储在线只需编码查询再做高效匹配这与 predictor.py 中文档描述的设计一致。8.6 Hybrid BM25词法召回 语义重排教程提出一种可落地的混合排序方法Hybrid BM25先用 BM25 做第一阶段召回如每个查询召回 1000 篇文档再用预训练语言模型PLM对召回文档打分最终分数为$$score \beta \cdot normalized_BM25 (1 - \beta) \cdot score_of_plm$$其中 BM25 分数按全局最大/最小值做 min-max 归一化$\beta$ 为可调权重教程默认 0.3def hybridBM25(query_data, query_embeds, doc_data, doc_embeds, recall_num, top_k, beta): # 1. BM25 召回 tokenized_corpus tokenize_corpus(doc_data[text_col].tolist()) bm25_model BM25Okapi(tokenized_corpus, k11.2, b0.75) bm25_scores rank_documents_bm25( query_data[text_col].tolist(), query_data[query_id_col].tolist(), doc_data[doc_id_col].tolist(), recall_num, bm25_model) # 2. 对召回文档计算语义相似度 all_bm25_scores [score for scores in bm25_scores.values() for score in scores.values()] max_bm25_score, min_bm25_score max(all_bm25_scores), min(all_bm25_scores) q_embeddings {qid: embed for qid, embed in zip(query_data[query_id_col].tolist(), query_embeds)} d_embeddings {did: embed for did, embed in zip(doc_data[doc_id_col].tolist(), doc_embeds)} results {qid: {} for qid in query_data[query_id_col].tolist()} for idx, qid in enumerate(query_data[query_id_col].tolist()): rec_docs bm25_scores[qid] rec_doc_emb torch.stack([d_embeddings[doc_id] for doc_id in rec_docs.keys()]) scores compute_semantic_similarity(q_embeddings[qid], rec_doc_emb) scores[torch.isnan(scores)] -1 top_k_values, top_k_idxs torch.topk(scores, min(top_k 1, len(scores[0])), dim1, largestTrue, sortedFalse) for doc_idx, score in zip(top_k_idxs[0], top_k_values[0]): doc_id list(rec_docs.keys())[int(doc_idx)] results[qid][doc_id] ((1 - beta) * float(score.numpy()) beta * (bm25_scores[qid][doc_id] - min_bm25_score) / (max_bm25_score - min_bm25_score)) return results def evaluate_hybridBM25(query_data, query_embeds, doc_data, doc_embeds, recall_num, beta, cutoffs): results hybridBM25(query_data, query_embeds, doc_data, doc_embeds, recall_num, max(cutoffs), beta) ndcg compute_ranking_score(resultsresults, qrel_dictqrel_dict, metrics[ndcg], cutoffscutoffs) return ndcg recall_num 1000 beta 0.3 query_embeds predictor.extract_embedding(query_data[[query_id_col]], id_mappingsid_mappings, as_tensorTrue) doc_embeds predictor.extract_embedding(doc_data[[doc_id_col]], id_mappingsid_mappings, as_tensorTrue) evaluate_hybridBM25(query_data, query_embeds, doc_data, doc_embeds, recall_num, beta, cutoffs)在 NF Corpus 上Hybrid BM25 的 NDCG 相比纯 BM25 进一步提升——这验证了词法召回保证覆盖率、语义重排提升精度这一工业界检索管线的通用范式。九、底层实现MatchingLearner 与嵌入抽取所有匹配类任务的执行引擎是MatchingLearnerlearners/matching.py。其extract_embeddingmatching.py的关键逻辑自动判定签名signature若预测器配置了query/response会检查输入数据列名自动选择走 query 编码器还是 response 编码器若未配置零样本场景则默认走 query 塔输入为list且配置了列名时会报错此时应改用 dict 或 DataFrame前向推理调用predict_per_run后从输出中抽取FEATURES返回格式as_tensorTrue返回 PyTorch 张量as_pandasTrue返回带索引的 DataFrame否则为 numpy 数组。MultiModalPredictor.extract_embeddingpredictor.py是对它的薄封装并补充了realtime参数小数据量推理时开启可提升效率。仓库测试 test_matcher.py 覆盖了匹配器相关的数据预处理、损失计算与检索流程。十、总结与延伸阅读本文覆盖了 AutoMM 语义匹配家族的全部五种实战形态text_similarityBERT/sentence-transformers 编码 对比损失搞定文本匹配与文本语义搜索image_similaritySwin Transformer 编码搞定图像同款/去重image_text_similarityCLIP 双塔天生支持零样本图文检索微调后可进一步提升领域效果semantic_search统一的向量检索工具支持原始数据或预计算嵌入两种输入Hybrid BM25以 BM25 召回 语义重排的组合拳获得更好的排序质量。进一步学习方向想要替换骨干网络、调节对比损失超参数等高级定制可阅读 Customize AutoMM其对应的默认配置见 configs/matcher/default.yaml三种问题类型常量与更多问题类型定义见 constants.py排序指标与检索工具的实现见 ranking_metrics.py 与 utils/matcher.py。无论是搭建一个小型语义搜索引擎还是为推荐、去重、跨模态检索业务建模以上 API 与源码路径都能让你在保持三行代码式简洁的同时深入掌控每一个技术细节。【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询