工业级软件的核心要求
工业级软件追求的是模块化、透明、可解释、注重数据隐私、可靠且成本可控。这与当前大型语言模型(LLM)作为“黑盒模型”或依赖“第三方API”的现状形成了鲜明对比。
生成式模型与预测式模型
在自然语言处理(NLP)任务中,存在两类模型:
- 生成式模型:擅长文本摘要、问题解答、释义、推理、风格迁移等任务,输出结果更偏向人类可读的自然语言。
- 预测式模型:擅长文本分类、实体识别、关系抽取、语义分析等任务,输出结果是结构化的、机器可读的数据。
大模型与小模型的协同
可以将大型生成模型与经过知识蒸馏的、针对特定任务的小模型结合使用。
- 大型生成模型:具备上下文学习能力,适合在原型阶段快速探索。
- 蒸馏后的任务特定模型:通过迁移学习技术,将大模型的能力“压缩”到像ELECTRA、T5这样的小模型中。值得注意的是,像BERT-base这样的小模型在众多任务中依然非常有竞争力。
迈向结构化数据:spacy-llm 方案
[某机构] 开发的开源库 spacy-llm 旨在弥合LLM与传统NLP流程的差距。其核心思想是:
- 标准化输入输出:通过统一的提示模板调用LLM,并将LLM返回的非结构化文本解析并填充到结构化的
Doc对象中。这使得LLM可以无缝地融入现有的NLP流程,支持命名实体识别、文本分类、关系抽取等多种任务。 - 技术混搭:在一个处理流程中,可以自由地混合使用LLM、传统的监督学习模型和基于规则的方法,根据需求替换或组合不同的技术。
弥合原型与生产之间的鸿沟
为了将基于LLM的原型成功推向生产,需要遵循以下实践:
- 标准化输入输出:定义统一的接口,确保不同技术组件可以相互替换。
- 从评估开始:在项目启动时就建立评估体系。不仅要关注模型的准确率,更要评估其对业务的实际效用。
- 迭代式数据工作:持续地优化和改进训练数据。
- 考虑语言的模糊性:在设计系统时,充分考虑自然语言的结构性和歧义性。
原型到生产的流程:
在原型阶段,可以使用 spacy-llm 构建一个由LLM驱动的处理管道,将非结构化文本转换为结构化数据。进入生产阶段后,则可以将管道中的LLM组件替换为一个或多个经过优化的、更小、更快的生产级模型(如经过微调的BERT模型),这些模型可以高效地在内部运行。
人机协同的工作流:知识蒸馏
一个高效的NLP项目工作流应包含持续评估和人工参与。
- 从基于提示词的LLM基线开始,快速验证可行性。
- 利用LLM辅助标注工具(如 [某机构] 开发的Prodigy)进行数据标注和迭代。
- 基于高质量的标注数据,通过迁移学习训练一个针对特定任务的、更小更快的蒸馏模型。
- 将蒸馏模型部署到生产环境,同时持续评估其表现,并在必要时再次引入LLM和人工进行优化。
案例研究:从Reddit帖子中提取信息
在PyData NYC 2023的一个工作坊中,有一个从Reddit烹饪版帖子中提取菜肴、配料和厨具的任务。工作流程如下:
- 在标注阶段使用LLM辅助生成候选标签,提升标注效率。
- 仅用 8小时 的数据开发和标注时间,训练出了一个 400MB 大小的任务特定模型。
- 该模型在推理速度上实现了 20倍 的提升,每秒可处理 2000+ 词。
- 最终模型的表现(F1分数)超越了少样本学习下的LLM基线(0.74)。
结论
- 组件化:LLM可以是产品或流程中的一个可替换组件,能够根据需求灵活地与其他技术进行交换。
- 迭代与工具:持续的迭代和合适的工具是突破原型瓶颈、实现产品化的关键。
- 无需妥协:可以在利用LLM强大能力的同时,坚持工业级软件开发的最佳实践和数据隐私原则。FINISHED