Argilla Sentence Transformers 实战指南用句子嵌入加速文本分类的数据标注与弱监督工作流【免费下载链接】argillaArgilla is a collaboration tool for AI engineers and domain experts to build high-quality datasets项目地址: https://gitcode.com/GitHub_Trending/ar/argilla本篇指南聚焦 Argilla 与 Sentence Transformers 的组合应用涵盖三大实战场景利用嵌入相似度在标注界面中进行语义批量标注、基于相似度阈值扩展弱监督规则覆盖范围、以及为多模态图像 文本数据生成双通道向量后训练少样本分类器。读完本文你将掌握如何在 Argilla 中上传向量、调用相似记录功能、使用faiss与snorkel扩展WeakLabels并用SetFit训练出显著优于零样本基线的小样本分类模型。为什么需要 Sentence Transformers 参与数据标注Sentence Transformers 是用于生成句子、文本与图像嵌入embedding的 Python 框架其核心价值在于将任意文本乃至经 CLIP 编码的图像映射为稠密向量使语义相近的内容在向量空间中彼此靠近。Argilla 正是借助这一特性把人工逐条判断语义转化为以向量相似度组织标注工作流从而在有限人力下成倍提升标注效率。在 Argilla 官方文档中与 Sentence Transformers 相关的教程被编排为一个总览页 sentencetransformers.md共收录三篇 NotebookBulk Labelling Multimodal Datalabelling-textclassification-sentencetransformers-semantic.ipynb面向图像 文本的多模态数据用 CLIP 与 MiniLM 分别编码图像与文本上传双向量后批量标注并训练 SetFit 少样本分类器。Extending weak supervision workflows with sentence embeddingslabelling-textclassification-sentencetransformers-weaksupervision.ipynb把 Sentence Transformers 嵌入注入 Snorkel 弱监督流程通过相似度阈值扩展标注函数覆盖。Speed-up data labelling with Sentence Transformer embeddingslabelling-textclassification-sentence-transformers-semantic.ipynb基于 Argilla 相似度搜索功能在标注界面中快速批量标注语义相近的样本。三篇教程覆盖了标注 → 弱监督 → 训练的完整数据工作流下面对其逐一展开。环境准备启动 Argilla 并连接客户端三篇教程均以 Argilla Server 已运行为前提官方给出两条部署路径在 Hugging Face Spaces 上部署 Argilla最快的方案适合连接外部 Notebook例如 Google Colab使用 Argilla 的 quickstart Docker 镜像在本地启动适合在本地机器上完整运行教程。更多部署选项可参考 how-to-deploy-argilla-with-docker.md 等部署文档。启动服务后在 Notebook 中初始化客户端import argilla as rg # 若使用本地 Docker 或 Spaces请替换 api_url 与 api_key rg.init( api_urlhttps://localhost:6900, api_keyadmin.apikey )如果运行的是私有 Hugging Face Space还需要设置HF_TOKEN并通过extra_headers传递认证信息# import os # os.environ[HF_TOKEN] your-hf-token # rg.init( # api_urlhttps://[your-owner-name]-[your_space_name].hf.space, # api_keyadmin.apikey, # extra_headers{Authorization: fBearer {os.environ[HF_TOKEN]}}, # )依赖安装方面各教程略有差异语义搜索教程argillasentence-transformersdatasetstransformers弱监督教程argilla faiss-cpu sentence_transformers transformers datasets snorkelfaiss-cpu用于最近邻检索snorkel用于弱监督矩阵建模多模态教程argilla setfit~0.2.0 datasets~2.3.0 transformers sentence-transformers场景一相似度搜索驱动的语义批量标注该场景对应 labelling-textclassification-sentence-transformers-semantic.ipynb利用的是 Argilla 从 1.2.0 版本开始提供的基于嵌入的相似度搜索能力。官方说明强调该特性不绑定任何厂商或模型Sentence Transformers、OpenAI、Co:here等任意嵌入方法均可使用并且可以和关键字搜索、过滤、编程式标注、模型预标注及人工在环工作流自由组合。生成并上传嵌入首先用 Sentence Transformer 对文本进行编码这里使用快速的all-MiniLM-L6-v2可指定在 CPU 上运行from sentence_transformers import SentenceTransformer encoder SentenceTransformer(all-MiniLM-L6-v2, devicecpu)随后通过rg.log把携带向量的记录上传到 Argilla。注意向量需要以vectors字典形式传入TextClassificationRecordrecords [ rg.TextClassificationRecord( textsample[text], vectors{text: encoder.encode(sample[text]).tolist()}, ) for sample in dataset ] rg.log(records, namesemantic_search_dataset)在底层Argilla SDK 通过argilla/_api/_vectors.py中的向量 API 与服务器通信rg.log会在写入记录时一并提交向量数据而服务器端argilla-server/src/argilla_server的搜索与向量模块负责存储与检索。服务器还通过ARGILLA_METADATA_FIELD_LENGTH环境变量控制元数据字段长度多模态教程中因图片 URL 较长将其设为200可据此推断向量与元数据在服务端有统一的长度与容量约束。在标注界面中使用相似度搜索数据上传后进入标注界面打开相似记录find similar功能即可为当前记录展示向量空间中语义最接近的邻居。配合已有的搜索、过滤与批量标注能力标注员可以一次处理一大批语义一致的样本这正是教程标题中加速标注的核心机制。其背后的技术原理对应 Argilla 文档中的 semantic_search.md感兴趣的读者可以进一步深入相似度检索的参数与实现细节。场景二用句子嵌入扩展弱监督工作流该场景对应 labelling-textclassification-sentencetransformers-weaksupervision.ipynb解决的是弱监督标注函数labeling function覆盖率不足的问题。核心思路教程给出的方法非常直观对于未标注记录在嵌入空间中寻找与其最接近的已标注邻居当二者余弦相似度高于某个阈值时把邻居的标签赋给该未标注记录。通过调整相似度阈值与选择不同的句子嵌入模型可以显著改善下游弱监督分类器的准确率。其可验证依据来自教程本身宣称的实验结论同时也与 Argilla 仓库中 weak_supervision.md 这一弱监督技术文档相互印证。详细工作流教程将完整流程归纳为五步在 Argilla 中创建含未标注数据与测试数据的数据集并用TextClassificationRecord构建已标注记录用于评估启发式规则并优化阈值定义基于规则/启发式的标注函数使用 Snorkel 的WeakLabels建模弱监督矩阵为WeakLabels扩展句子嵌入为每条记录矩阵的行生成嵌入向量并为每条规则矩阵的列设定相似度阈值进而用最近邻 阈值策略给未覆盖记录打上伪标签使用扩展后的WeakLabels矩阵配合所选库/方法构建训练集或直接训练下游文本分类模型。在步骤 4 与步骤 5 之间可反复迭代尝试多种阈值与嵌入组合直到取得满意结果。为保证公平比较教程在验证集上优化阈值将测试集留作最终评估。环境依赖中的faiss-cpu用于高效最近邻检索snorkel提供WeakLabels等弱监督原语sentence_transformers负责生成嵌入。WeakLabels的扩展矩阵既可用作 Snorkel 下游模型的输入也支持与 Argilla 生态之外的自定义训练流程对接这与 Argilla 弱监督文档中强调的规则与模型组合、在环迭代的思路一致。场景三多模态数据的批量标注与少样本训练该场景对应 labelling-textclassification-sentencetransformers-semantic.ipynb是三个教程中链路最完整的一个以真实世界常见的图像 文本电子商品数据为例完成从零样本评估、向量化上传、语义批量标注到 SetFit 少样本训练的全流程。数据与零样本基线数据来自虚构电子商店的商品页面每个样本包含page_name、page_descriptions与label数据集划分为labelled与unlabelled两部分。教程首先建立两个零样本基线图像零样本分类用transformers的pipeline(zero-shot-image-classification)openai/clip-vit-large-patch14在测试集 20% 切片上得到约0.82的准确率耗时约 2 分钟文本零样本分类用pipeline(modelfacebook/bart-large-mnli)耗时更短但准确率约0.79。作者据此指出零样本方案既未充分利用图像与文本中的互补信息又依赖计算量巨大的大模型因而催生了结合双模态信息、训练轻量少样本模型的动机。用 Sentence Transformers 生成图像与文本双向量关键在于CLIP 与 Sentence Transformers 同属嵌入模型可统一用SentenceTransformer接口调用。图像侧使用clip-ViT-B-32文本侧使用all-MiniLM-L6-v2from sentence_transformers import SentenceTransformer # 图像嵌入CLIP image_encoder SentenceTransformer(clip-ViT-B-32) def encode_image(image_url): image Image.open(get(image_url, streamTrue).raw) return image_encoder.encode(image).tolist() # 文本嵌入MiniLM批量编码 page_name encoder SentenceTransformer(all-MiniLM-L6-v2) dataset dataset.map( lambda batch: {text_vectors: encoder.encode(batch[page_name]).tolist()}, batch_size32, batchedTrue )随后将两路向量合并为vectors字典并上传 Argilladataset dataset.map( lambda r: {vectors: {image: r[image_vectors], text: r[text_vectors]}} ) records [ rg.TextClassificationRecord( textsample[page_name], metadatadict(_image_urlsample[image_url]), vectorssample[vectors] ) for sample in dataset ] rg.log(recordsrg.DatasetForTextClassification(records), nameelectronics_with_vectors)这段代码同时演示了两个值得注意的实践点多个向量通道只需使用独立键名image、text即可共存于同一记录较长的图片 URL 元数据需要先设置os.environ[ARGILLA_METADATA_FIELD_LENGTH] 200。加载已标注数据可直接使用rg.load(electronics_with_vectors)配合prepare_for_training(frameworktransformers)转换成训练集。在 Argilla 界面中批量标注上传双向量后标注员即可在界面中通过find similar按图像语义或文本语义批量寻找相似样本并统一标注该功能详见语义搜索场景本教程直接复用。由此得到的electronics_with_vectors数据集便成为后续少样本训练的新标注来源。训练 SetFit 少样本分类器少样本训练使用 SetFitSentenceTransformer Fine-tuning 的缩写其默认骨干来自sentence-transformers因此与本文主题一脉相承from setfit import SetFitModel, SetFitTrainer from sentence_transformers.losses import CosineSimilarityLoss model SetFitModel.from_pretrained(sentence-transformers/paraphrase-mpnet-base-v2) trainer SetFitTrainer( modelmodel, train_datasetlabelled_dataset, eval_datasettest_dataset, loss_classCosineSimilarityLoss, batch_size16, num_iterations10, column_mapping{page_name: text, label: label} ) trainer.train() metrics trainer.evaluate()在教程示例输出中trainer.evaluate()返回{accuracy: 0.9117647058823529}即约0.91的准确率同时显著高于两个零样本基线图像 0.82、文本 0.79且 SetFit 的推理延迟远低于零样本大模型。教程总结指出该方法适用于数据量有限的分类任务能以最小的人力投入训练出可用的分类器作者还推荐了配套的 labelling-textclassification-setfit-zeroshot.ipynb 教程以深入了解 SetFit 与 Argilla 的组合用法。三个场景的对比与选型建议场景核心手段适用问题关键依赖对应教程语义批量标注上传向量 界面相似记录人工逐条判断耗时、语义聚类明确sentence-transformers、Argilla ≥ 1.2sentence-transformers-semantic弱监督扩展最近邻嵌入 相似度阈值标注函数覆盖率低、伪标签扩充faiss-cpu、snorkel、sentence-transformerssentencetransformers-weaksupervision多模态少样本训练图像/文本双向量 SetFit多模态数据、少量标注、追求低延迟setfit、clip-ViT-B-32、all-MiniLM-L6-v2sentencetransformers-semantic三者可以按需组合先用语义搜索快速建立一批高质量标注再用弱监督阈值扩展覆盖未标注部分最后把扩展后的数据交给 SetFit 训练轻量分类器形成一条标注 → 扩样 → 训练的完整链路。深入阅读相似度搜索功能的深度解析semantic_search.md弱监督技术原理weak_supervision.mdArgilla 向量写入的 SDK 层实现argilla/_api/_vectors.py 与 argilla/records/_dataset_records.py服务器端搜索与向量存储相关模块argilla-server/src/argilla_server其他 Sentence Transformers 相关教程的整合入口sentencetransformers.md【免费下载链接】argillaArgilla is a collaboration tool for AI engineers and domain experts to build high-quality datasets项目地址: https://gitcode.com/GitHub_Trending/ar/argilla创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考