十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于机器翻译与知识蒸馏训练多语言语义搜索模型:MS MARCO 多语言训练实战指南

基于机器翻译与知识蒸馏训练多语言语义搜索模型:MS MARCO 多语言训练实战指南 人工智能NLPEmbedding微调【免费下载链接】sentence-transformersState-of-the-Art Embeddings, Retrieval, and Reranking项目地址https://gitcode.com/gh_mirrors/se/sentence-transformers点击查看免费下载本指南聚焦 sentence-transformers 仓库中 examples/sentence_transformer/training/ms_marco/multilingual/README.md 所展示的多语言语义搜索模型训练方案针对仅含英文的 MS MARCO Passage Ranking 数据集先用 EasyNMT 机器翻译生成多语言训练数据再通过多语言知识蒸馏Multilingual Knowledge Distillation将英文检索模型扩展为支持多种语言的模型。读完本文你将掌握从英文语料翻译、平行句对蒸馏训练到多语言语义搜索评估的完整落地链路。背景英文数据集如何支撑多语言语义搜索语义搜索Semantic Search通过把查询与语料文本映射到同一向量空间再以向量相似度召回相关文本能够处理同义词、缩写与拼写错误等关键词检索难以覆盖的场景。针对短查询检索长段落这类非对称检索任务Asymmetric Semantic SearchMS MARCO Passage Ranking 数据集是业界常用的训练数据它由约 50 万条来自 Bing 搜索引擎的真实用户查询以及每条查询对应的相关文本段落组成详见 examples/sentence_transformer/training/ms_marco/README.md。然而该数据集只有英文版本而当前缺少规模足够大、可直接用于训练语义搜索模型的多语言数据集。因此仓库给出的路线是分两步走使用EasyNMT将 MS MARCO 的查询与段落机器翻译成目标语言使用多语言知识蒸馏Multilingual Knowledge Distillation把在 MS MARCO 上训练好的英文模型转换为多语言模型。这条路线同时服务于语义搜索与检索重排Retrieve Re-Rank两类典型应用。第一步用 EasyNMT 翻译 MS MARCO 训练数据仓库在examples/sentence_transformer/training/ms_marco/multilingual/目录下提供了数据翻译脚本 translate_queries.py用于把 MS MARCO 训练集查询翻译为指定目标语言。安装与运行脚本基于 Hugging Facedatasets与 EasyNMT先安装依赖pip install easynmt datasets运行方式为在脚本后直接传入目标语言代码python translate_queries.py [target_language]例如将查询翻译为德语python translate_queries.py de脚本执行要点翻译脚本的核心逻辑可分为四步对应源码 translate_queries.py 中的实现断点续译翻译结果写入multilingual-data/train_queries.en-{target_lang}.tsv每行格式为qid\t翻译后的查询。脚本启动时会先读取该文件把已翻译的qid记录到集合中后续只翻译缺失部分因此翻译中途中断后可以随时重新运行继续不会重复翻译。读取英文查询从mteb/msmarco数据集的trainsplit 取出带相关性标注relevance judgements的查询 ID再从queriessplit 补齐查询文本。翻译模型使用EasyNMT(opus-mt)加载 OPUS-MT 翻译模型并以流式方式逐批翻译source_langen源语言为英文target_langtarget_lang目标语言由命令行参数指定beam_size2束搜索宽度perform_sentence_splittingFalse不做句子拆分保持查询整体翻译chunk_size256、batch_size64控制分批大小以平衡速度与显存/内存占用。增量落盘每翻译完一条查询立即写入文件并flush()同时把查询文本中的制表符替换为空格避免破坏 TSV 格式。提示该脚本只翻译了查询queries。原文档指出翻译查询和段落作为整体思路实际落地时可按同样方式处理段落语料并将翻译后的数据整理为平行句对用于蒸馏训练。第二步多语言知识蒸馏核心原理数据翻译只是第一步。翻译得到的多语言数据要真正让模型学会跨语言语义一致靠的是多语言知识蒸馏其完整方案记录在 examples/sentence_transformer/training/multilingual/README.md 中。Teacher–Student 架构蒸馏基于一对固定的教师模型teacher与待训练的学生模型student教师模型单语如英文句子嵌入模型具备我们期望的语义编码能力例如sentence-transformers/paraphrase-distilroberta-base-v2。它负责为英文句子生成目标向量。学生模型多语言模型例如FacebookAI/xlm-roberta-base。训练目标是让同一句子的英文原文与各语言译文映射到与教师模型英文向量相同的向量位置。以图为例学生模型应当把英文Hello World与其德语翻译Hallo Welt都映射到teacher_model(Hello World)对应的向量。训练损失为均方误差MSEteacher_model(英文句)与student_model(译文)的嵌入向量越接近损失越小。这样学生模型在推理时无论输入哪种语言都会得到语义对齐的向量从而支持跨语言检索。平行句对数据蒸馏训练依赖平行句对parallel sentences即同一句话在不同语言下的翻译对。仓库配套脚本 make_multilingual.py 会从sentence-transformers/parallel-sentences-talks数据集集合中按en-de、en-es等子集加载平行句对也可以换成parallel-sentences-europarl、parallel-sentences-opensubtitles、parallel-sentences-wikimatrix等其它平行语料。数据集格式为from datasets import load_dataset train_dataset load_dataset(sentence-transformers/parallel-sentences-talks, en-de, splittrain) print(train_dataset[0]) # {english: ..., non_english: ...}即english列存放教师模型可理解的源语言句子non_english列存放对应译文。对于 MS MARCO 场景翻译后的查询/段落即可组织成这种平行句对格式。训练数据准备在 make_multilingual.py 中训练数据通过prepare_dataset函数预处理用教师模型对english列批量编码把得到的嵌入向量写入label列随后用MSELoss(modelstudent_model)作为训练损失让学生模型输出的英文与译文嵌入都逼近该label向量。训练超参数示例该脚本中的默认值参数默认值说明student_model_nameFacebookAI/xlm-roberta-base多语言学生模型初始权重student_max_seq_length128学生模型最大输入长度词片数train_batch_size64训练批大小inference_batch_size64教师模型编码批大小max_sentences_per_language500000每种语言最多使用的平行句数num_train_epochs5训练轮数num_evaluation_steps5000每多少步评估一次learning_rate2e-5学习率fp16/bf16True / False半精度训练开关GPU 不支持 FP16 时置 False支持 BF16 时可开save_total_limit2最多保留的检查点数量训练使用SentenceTransformerTrainer与SentenceTransformerTrainingArguments源码位置trainer.py、training_args.py训练完成后模型保存到本地输出目录并可通过push_to_hub上传到模型中心。第三步多语言检索效果的三种评估方式make_multilingual.py 在训练过程中会组合三类评估器分别从不同角度衡量学生模型是否学到了跨语言语义对齐。MSE 评估嵌入距离用MSEEvaluator源码evaluation/mse.py计算学生嵌入与教师嵌入之间的均方误差。教师模型对英文句子编码学生模型对译文编码两者向量距离越小越好from datasets import load_dataset eval_dataset load_dataset(sentence-transformers/parallel-sentences-talks, en-fr, splitdev) dev_mse MSEEvaluator( source_sentenceseval_dataset[english], target_sentenceseval_dataset[non_english], nameen-fr-dev, teacher_modelteacher_model, batch_size32, )翻译准确率评估对齐检索命中率TranslationEvaluator源码evaluation/translation.py验证检索到的译文是否恰好是对应翻译对每个句对检查target_sentences[i]是否在全部目标句中与source_sentences[i]相似度最高命中则计为一次 hit。该指标报告准确率越高越好直接反映跨语言对齐质量dev_trans_acc TranslationEvaluator( source_sentenceseval_dataset[english], target_sentenceseval_dataset[non_english], nameen-fr-dev, batch_size32, )跨语言语义文本相似度评估STSEmbeddingSimilarityEvaluator源码evaluation/embedding_similarity.py在 STS17 跨语言测试集如mteb/sts17-crosslingual-sts的nl-en子集上评估模型对跨语言句对相似度打分的质量分数需从 0–5 归一化到 0–1test_dataset load_dataset(mteb/sts17-crosslingual-sts, nl-en, splittest) test_emb_similarity EmbeddingSimilarityEvaluator( sentences1test_dataset[sentence1], sentences2test_dataset[sentence2], scores[score / 5.0 for score in test_dataset[score]], batch_size32, namests17-nl-en-test, show_progress_barFalse, )三类评估器通过SequentialEvaluator组合并以平均分数作为主评估指标main_score_functionlambda scores: np.mean(scores)训练过程中按eval_steps周期性运行。现成的多语言预训练模型与开箱即用如果不想从零训练可以直接使用已有的多语言预训练模型。仓库文档 docs/sentence_transformer/pretrained_models.md 中列出了多语言模型清单例如支持 50 语言的sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2、paraphrase-multilingual-mpnet-base-v2等它们正是通过上述知识蒸馏路线训练而来。加载与使用方式from sentence_transformers import SentenceTransformer model SentenceTransformer(sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2) embeddings model.encode([Hello World, Hallo Welt, Hola mundo, Bye, Moon!]) similarities model.similarity(embeddings, embeddings) # tensor([[1.0000, 0.9429, 0.8880, 0.4558], # [0.9429, 1.0000, 0.9680, 0.5307], # [0.8880, 0.9680, 1.0000, 0.4933], # [0.4558, 0.5307, 0.4933, 1.0000]])可以看到Hello World英文与Hallo Welt德文之间的相似度高达 0.94而与非语义相关的Bye, Moon!相似度仅 0.46说明跨语言语义对齐有效。完整流程串讲与延伸阅读将上述步骤串联起来一次完整的多语言语义搜索模型训练之旅为在 MS MARCO 上训练或复用英文检索模型作为教师模型训练方法参考 examples/sentence_transformer/training/ms_marco/README.md支持MultipleNegativesRankingLoss、MarginMSELoss及其组合、知识蒸馏DistillKLDivLoss等多种策略运行 translate_queries.py 把 MS MARCO 查询翻译成目标语言生成平行句对参考 make_multilingual.py 以MSELoss对学生多语言模型执行知识蒸馏训练用MSEEvaluator、TranslationEvaluator、EmbeddingSimilarityEvaluator在验证集上持续监控跨语言对齐效果训练完成的模型即可部署到语义搜索或检索重排管线中支持任意目标语言的查询输入。如需更系统的多语言蒸馏背景与性能对照可进一步阅读 examples/sentence_transformer/training/multilingual/README.md含 STS2017 跨语言评测的性能表格相关评估器与损失函数的完整参数说明可在 sentence_transformer 评估模块 与 MSELoss 实现 的源码中查阅。赞分享人工智能NLPEmbedding微调【免费下载链接】sentence-transformersState-of-the-Art Embeddings, Retrieval, and Reranking项目地址https://gitcode.com/gh_mirrors/se/sentence-transformers点击查看免费下载相关推荐Fairseq 多语言翻译实战指南基于 translation_multi_simple_epoch 训练与微调任意方向的多语翻译模型Fairseq 多语言翻译实战指南基于 translation_multi_simple_epoch 训练与微调任意方向的多语翻译模型 本文围绕 decodi人工智能大模型预训练深度学习NLP计算机视觉多模态语音音频微调fairseq 神经机器翻译实战指南预训练模型加载、WMT/IWSLT 训练与多语言翻译基于 KOSMOS-2 内置 fairseqfairseq 神经机器翻译实战指南预训练模型加载、WMT/IWSLT 训练与多语言翻译基于 KOSMOS 2 内置 fairseq 本指南以 KOSMO人工智能大模型预训练深度学习NLP计算机视觉多模态语音音频微调fairseq WMT19 预训练模型实战指南基于 torch.hub 的多语种翻译与语言模型推理fairseq WMT19 预训练模型实战指南基于 torch.hub 的多语种翻译与语言模型推理 导读 本文以 fairseq 仓库中 WMT19 模型说明人工智能大模型预训练深度学习NLP计算机视觉多模态语音音频微调上一篇对抗性攻击研究前沿从MNIST挑战到实际应用场景下一篇最完整Transformer代码示例库从基础架构到生产优化全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表