NLP产品级系统设计模式
摘要: 在本文中,作者从六个方面描述了一些生产NLP系统的常见设计和部署模式。这些是团队为了使产品开发与技术、业务、战略和操作目标保持一致而必须做出的选择或权衡。
虽然构建NLP系统可能很复杂,但是在构建NLP系统时,重要的是要记住,构建的系统需要解决某一个任务,并且只是实现这个目标的一种方法。在系统构建过程中,工程师、研究人员、设计师和产品经理通常有多个选择。虽然我们的书主要集中在技术或基础构建块上,但是将这些构建块放在一起来设计复杂的结构来满足你的需求将需要一些模式思考。模式思维和描述模式的语言是“在专业领域中描述好的设计实践或有用的组织模式的方法”。这在许多学科中都很流行(Alexander, 1979),包括软件工程。因此我们主要从以下从六个方面来研究这些设计选择:
1、在线系统和离线系统:在线系统是指需要实时或接近实时地进行模型预测的系统。有些任务,如打击垃圾邮件、内容审核等,本质上需要一个在线系统。另一方面,离线系统不需要实时运行。它们可以被构建并利用像Transductive Learning这样的方法同时在一批输入上高效运行。有些在线系统可能是被动的,甚至可以以在线方式(也就是在线学习)进行学习,但是许多在线系统是通过定期的离线模型构建来构建和部署的,并将其推向生产。使用在线学习构建的系统应该对敌对环境特别敏感。最近的一个例子是著名的Twitter聊天机器人Tay,一开始从通过网络进行在线学习。但是很快Tay就开始用攻击性的推特回应,其母公司微软在推出后不到一天就不得不关闭这项服务。系统构建的一个典型轨迹是首先构建一个离线系统,将其作为一个“在线”系统进行大量的工作,然后通过添加反馈循环并适当的改变学习方法使其成为一个“在线学习”系统。虽然这种方案在代码库中增加了不少的复杂性,但有的时候是非常有必要的。下图显示了“Facebook免疫系统”作为一个在线系统检测垃圾邮件的例子(大约2012年)。注意在线系统比类似的离线系统需要更多的工作。
2、交互系统与非交互系统:大多数自然语言系统都是非交互的,因为预测仅仅来自一个模型。实际上,许多产品级NLP模型都深入到数据处理的“Extract-Transform-Load”(ETL)管道的转换步骤中。因此在某些情况下,人类参与到预测的循环中可能会有帮助。下图展示了Lilt Inc.的一个交互式机器翻译接口示例,其中模型和人共同参与了所谓的“混合主动模型”(Green 2014)的预测制作。虽然交互式系统很难设计,但通过将人带入循环,仍然可以实现非常高的准确性。
3、单模式系统与多模式系统:在学习和预测过程中合并多个模式可能会有帮助。例如,新闻转录系统不仅要使用音频流,还要使用视频帧作为输入。例如,谷歌最近的一项名为“Look to Listen”(Ephrat et al 2018)的工作,使用多模态输入来解决演讲者源分离的难题(又称鸡尾酒会问题)。多模态系统的构建和部署是昂贵的,但是对于将来自多个模态的输入组合在一起的困难问题,提供的信号在其他情况下是单模态无法实现的。我们在NLP中也看到了这样的例子。例如,在多模式翻译中,我们可以通过在可用的情况下合并来自多种源语言的输入来提高翻译质量。在为web页面生成主题(主题建模)时,可以将从其中包含的图像中提取的特性与页面上的文本合并在一起。
4、端到端系统与分段系统:自深度学习问世以来,研究人员和工程师的另一个选择是构建一个复杂的NLP系统,要么作为不同单元的管道,要么作为一个整体端到端系统。端到端设计在机器翻译、总结和语音识别等许多领域都很有吸引力,在这些领域,精心设计的端到端系统可以显著地降低实现和部署的复杂性,当然还可以减少代码行数。分段系统将复杂的NLP任务分解为子任务,每个子任务分别进行优化,独立于最终的任务目标。分段系统中的子任务使它变得模块化,并且很容易“修补”生产中的某个特定问题,但通常伴随着一些“技术债务”。
5、封闭域与开放域系统:封闭域系统是为了单一目的而明确优化的,以便在该域中表现良好。例如,可以明确优化机器翻译系统使之与生物医学期刊一起工作——这需要对生物医学平行语料库进行训练。开放域系统旨在用于通用目的(例如Google Translate)。再举一个例子,考虑一个文档标记系统。如果系统只预测它所训练的许多类中的一个(典型的情况),那么它将导致一个封闭域系统。但是,如果系统被设计成在运行时发现新的类,那么它就是一个开放域系统。在翻译和语音识别系统中,封闭域系统也被称为“有限词汇”系统。
6、单语与多语系统:为使用单一语言而构建的NLP系统称为单语系统。建立和优化单语系统是很容易的。相反,多语言系统可以处理多种语言。当它们在一个不同语言的数据集上接受训练时,它们的结果是显而易见的。虽然构建一个多语言系统很有吸引力,但是专注于一个单语版本有它的优势。研究人员和工程师可以利用该语言中广泛且可用的资源和领域专业知识,以生产高质量的系统,而在一般的多语言系统中,这是不可能的。由于这个原因,我们经常发现许多单语系统集合的多语言产品被单独优化,并使用语言标识组件将输入分发给单语系统。
本文作者:【方向】
本文为云栖社区原创内容,未经允许不得转载。