为了准备用于微调 Sentence Transformer 的训练数据,您通常需要根据训练目标将数据组织成**句子对**或**三元组**。对于**句子对**,格式包含两个句子和一个指示其相似度的标签(例如,介于 0 和 1 之间的数值)。例如,像("The cat sits on the mat","A feline rests on the carpet")这样的句子对可能有较高的相似度得分(0.9)。这种格式与**余弦相似度损失函数 (CosineSimilarityLoss)** 一起使用,后者训练模型对相似句子的嵌入向量进行对齐。对于**三元组**,格式包含一个锚定句子、一个正面句子(语义相似)和一个负面句子(不相似)。例如,像“如何重置我的密码?”这样的锚定句可以与一个正面句(“恢复账户访问的步骤”)和一个负面句(“最佳密码管理器应用”)配对。这种结构与**三元组损失函数 (TripletLoss)** 相符,后者促使模型最小化锚定句和正面句之间的距离,同时最大化锚定句和负面句之间的距离。
数据准备过程包括**收集或生成相关示例**。如果使用现有数据集(例如,用于句子对的 STS Benchmark 或用于三元组的 Quora Question Pairs),您需要将它们预处理成所需的格式。对于自定义数据,您可以从用户查询及其相应的支持文章中收集句子对,或通过回译或释义等技术生成合成示例。对于三元组,选择有效的负面句至关重要:困难负面句(语义相关但有区别)通常比随机负面句能产生更好的结果。例如,在 FAQ 检索任务中,对于“如何安装软件?”,一个困难负面句可能是“如何卸载软件?”,而不是像“今天天气预报”这样不相关的句子。数据应该进行清理(删除重复项、纠正拼写错误)和标准化(转小写、标准化标点符号)以减少噪声。Python 中的 pandas 等工具或像 Hugging Face 的 Datasets 这样的专用库可以简化这一过程。
这里有一个具体的例子:假设您正在为一个客户支持聊天机器人进行微调。对于句子对,您可以创建一个包含 text1
、text2
和 score
列的 CSV 文件,其中 text1
是用户查询(“我的订单还没到”),text2
是支持回复(“请在这里跟踪您的包裹”),而 score
是 0.8。对于三元组,一个 JSON 文件可以包含类似 {"anchor": "Payment failed error", "positive": "Troubleshoot payment issues", "negative": "How to request a refund"}
的条目。模型随后学习区分密切相关的意图。像 sentence-transformers
这样的工具为这些格式提供了内置的数据加载器,简化了与训练管道的集成。妥善组织的数据确保模型能够学习到针对您特定用例量身定制的鲁棒嵌入向量。