将对话式人工智能产品部署到生产环境中,与Jason Flaks一起
将对话式人工智能产品部署到生产环境中
本文最初是MLOps Live的一集,这是一个互动的问答环节,机器学习从业者回答其他机器学习从业者的问题。
每一集都专注于一个特定的机器学习主题,在这一集中,我们与Jason Falks讨论了将对话型AI产品部署到生产环境中。
您可以在YouTube上观看:
或者作为播客收听:
- 埃隆·马斯克的xAI在Twitter的Feed上训练
- 记录和管理机器学习模型的顶级工具
- “LLMs反映的是谁的观点?这篇来自斯坦福大学的人工智能论文通过公众舆论调查的视角,研究了语言模型LMs所反映的观点”
- Spotify
- Apple Podcasts
但如果您更喜欢文字版本,这里有:
在这一集中,您将学到:
-
1
如何开发具有对话型AI的产品 -
2
部署对话型AI产品的要求 -
3
是在企业内部使用专有数据构建产品还是使用现成的产品更好 -
4
对话型AI的测试策略 -
5
如何为大型企业构建对话型AI解决方案
Sabine:大家好,欢迎回到MLOps Live的另一集。我是您的主持人Sabine,我一如既往地与我的合作主持人Stephen一起。
今天,我们有Jason Flaks与我们一起,我们将讨论将对话型AI产品部署到生产环境中。嗨,Jason,欢迎。
Jason:嗨Sabine,进展如何?
Sabine:非常顺利,期待这次对话。
Jason,您是Xembly的联合创始人兼首席技术官。它是一个自动化的首席助理,可以自动化对话任务。所以它有点像一款执行助理机器人,对吗?
Jason:是的,这是一个很好的描述。大多数公司的首席执行官都有人帮助他们,可能是一个行政助理,可能是一个首席助理。这样做是为了让首席执行官可以将时间集中在真正重要和有意义的任务上,从而推动公司发展。助理们的工作是帮助处理他们一天中的其他任务,比如安排会议或记录会议纪要。
我们的目标是自动化这个功能,以便组织中的每个员工都能像首席执行官或公司中的其他人一样获得这种帮助。
Sabine:太棒了。
我们马上就要深入探讨这个问题了。但是先来了解一下您的背景,您的背景相当有趣。
在您进入软件工程领域之前,您在音乐作曲、数学和科学方面有一些学历。但您最初是从软件设计工程开始的,对吗?
Jason:是的,没错。
正如您提到的,我早年是一名音乐家。我对音乐产生了很大的兴趣,而且我在数学方面也很擅长。
我在大学时是音乐作曲专业和数学专业的学生,然后最终寻找一种将这两者结合起来的方法。我进入了一个硕士项目,这个项目专门研究职业音频设备的电气工程,这使我最初的职业生涯是在信号处理方面进行软件设计。
那是我刚开始的工作。
Sabine:所以您发现自己处在不同有趣领域的交汇点上,我猜。
Jason:是的,没错。我一直试图与音乐、音频和工程保持一定的联系,甚至到现在。
虽然我在一定程度上偏离了专业音频、音乐、现场音响、语音和自然语言,但它们仍然与音频领域密切相关,所以这一方面一直是我整个职业生涯中的一部分。
Sabine:确实如此。在设备的主题上,您曾参与开发Connect(或者Xbox),对吗?
那是您第一次接触语音识别和机器学习应用吗?
Jason:这是个很好的问题。有趣的是,语音识别实际上是一个两阶段的流程:
大多数语音识别系统的第一个组件(至少历史上如此)是特征提取。这在音频信号处理领域非常重要,这是我在职业生涯的其他部分中非常擅长的领域。
虽然我并没有从事语音识别,但我对快速傅里叶变换以及构成前端的许多组件都很熟悉。
但你说得对,当我加入“连接摄像头”团队时,这是语音识别真正应用在我脸上的第一次。我自然而然地被吸引过去,因为我深入理解了堆栈的早期部分。
我发现从我之前研究音频信号处理世界(我试图制作吉他失真效果)到突然分解语音组件进行分析真的是很容易的转变。这对我来说真的很有意义,也是我开始的地方。
这是一个非常引人注目的项目,因为“连接摄像头”实际上是第一个没有按键的开放式麦克风语音识别的消费者商业产品。当时市场上没有产品允许您与设备对话而无需按按钮。
你总是需要按下某个按钮然后对话。现在我们都有Alexa或Google Home。这些是常见的,但在这些产品出现之前,有的是Xbox Connect Camera。
您可以查看专利文献,看看Alexa设备如何引用那些原始的Connect专利。这真是一个创新的产品。
Sabine:是的,我记得我曾经有一位讲师说过有关人类语言的话,他说它是宇宙中最复杂的信号,所以我想在这个领域一般不会缺少挑战。
Jason:是的,这真的很正确。
什么是对话式人工智能?
Sabine:好的,那么,Jason,为了让你有点热身…你如何在1分钟内解释对话式人工智能?
Jason:哇,1分钟的挑战。我很兴奋…
所以人类对话或对话基本上是一个无限的领域。对话式人工智能是关于构建能够在这个无限对话领域中与人类交互的技术和产品。
那么我们如何构建能够理解你和我正在谈论的事情,参与对话,并实际上在对话发生时进行交易的东西。
Sabine:太棒了。而且非常简洁。就像,嗯,在一分钟之内。
Jason:我感到很大的压力,以至于加快了速度。
Xembly目前在对话式人工智能方面的工作重点是什么?
Sabine:我想问一下你们团队目前正在做什么。你们正在做对话式人工智能的哪个特定方面吗?
Jason:是的,这是一个非常好的问题。我们在对话式人工智能堆栈的两个方面进行工作。
聊天机器人
这是关于通过对话式语音使人们能够与我们的产品进行互动。正如我们在对话开始时提到的,我们的目标是成为一个自动化的首席助理或执行助手。
在这个角色中与某人交流通常是以对话的方式进行的,因此我们通过对话回应员工是非常有帮助的。
自动记录会议笔记
问题是,我们如何参与像Zoom或Google Meet或任何其他视频会议提供商这样的对话,并生成您会立即发送给会议上的人的书面笔记,解释会议中发生的事情。
所以这不仅仅是一个记录。这是我们如何提取行动项和决策,并将会议总结成可读的摘要,以便如果你不在场,你也可以知道发生了什么。
这些可能是我们在对话式人工智能领域所做的两个重要部分,而要实现这一点还有很多其他因素,但这是我们今天所涵盖的两个重要产品领域。
Sabine: 所以如果你能从高层次上总结一下,你是如何为你的产品开发这个功能的?
Jason: 是的,我们来谈谈记笔记。我觉得这是一个有趣的问题可以深入讨论一下…
我们的第一步是分解问题。
会议记录在某种程度上实际上是一件非常复杂的事情。每个人发送不同的笔记方式都有一些微妙之处,所以我们需要退后一步来弄清楚-
是什么使会议记录对人们有价值,并且我们能否将其量化成一些结构化的内容,以便我们可以重复生成?
机器无法处理模糊不清的内容。你需要对你想要做的事情有一个结构化的定义,这样你的数据标注员才能为你标注信息。
如果你不能给他们提供非常清晰的指示,告诉他们他们要标注什么,你将得到一些不确定的结果。
但是,总的来说,如果你真的想要构建一个产生可重复结果的清晰的具体系统,你真的需要定义这个系统,所以我们花了很多时间来确定什么是正确的会议记录结构。
在我们的早期阶段,我们确实得出了一个结论,即所有会议记录实际上有两个关键部分。
-
1
会议中涉及到的需要后续跟进的行动。 -
2
一个线性的总结,概括了会议中发生的事情-最好是按主题划分,以覆盖会议的各个部分。
一旦你有了这个框架,你就必须迈出下一步,然后定义这些个别部分的样子,以便你了解你需要构建哪些不同的模型来实现它。
对话式人工智能问题陈述的范围
Sabine: 还有其他你想要补充的吗?
Jason: 是的,如果我们稍微考虑一下行动项这样的东西,那么一个人如何定义这个空间,使得机器可以找到它?
一个很好的例子是,几乎在每次会议上,人们都会说一些类似于我要去遛狗之类的事情,因为他们只是在与会议中的人谈论与工作无关的事情。
所以在会议中有一些与工作无关的事情,有一些实际上正在会议中发生并且正在进行交易的事情。我要更新电子表格中的那一行,然后你还有真正的首字母缩略词,即那些实际上是工作的,必须在会议结束后由某个人负责发起的事情。
那么你如何定义和清晰地限定这一点,以便你可以教会机器找到它?
这实际上是一个非常具有挑战性的问题。我们花了很多精力来完成所有这些范围的界定,然后启动数据收集过程,以便我们可以开始构建这些模型。
除此之外,你还必须弄清楚构建这些对话式人工智能系统的流程;实际上是双重的。
-
1
第一部分是理解对话本身-仅仅是理解语音,但是要对这些数据进行交易,在很多情况下,需要将这些数据规范化为机器可以理解的东西。一个很好的例子就是日期和时间。 -
2
系统的第一部分是理解某个人说了什么,比如“我下周会做这个”,但仅凭这些是不足以进行交易的。如果你想要在下周进行交易,你必须真正理解在计算机语言中“下周”实际上意味着什么。
这意味着你必须有一些参考当前日期的方式。你需要足够聪明地知道“下周”实际上意味着一段时间范围,也就是从你所在的当前周的下一周开始。
这涉及到很多复杂性和不同的模型,你必须运行这些模型才能做到所有这些并且取得成功。
准备一个对话式人工智能产品
Stephen: 太棒了…我有点想更深入地了解那个你提到的笔记产品。
当然,我会从生产的角度出发,以满足用户需求,并且其中的模糊性就源于此。
所以,在我深入探讨这个复杂性之前,我想先了解一下你是如何部署这样的产品的。我想知道是否有特定的细微差别或要求,或者这只是典型的流程部署,然后工作流程,就这样。
Jason: 是的,这是一个很好的问题。
我想说,首先,也许与世界上现有的更大的传统机器学习领域相比,对话式人工智能在笔记堆栈中的部署可能是最大的不同之一,因为它是一个无限制的领域。
快速迭代的数据标注对于我们的堆栈至关重要。如果你想想对话、交流或者一般语言是如何工作的,你和我现在甚至可以创造一个词,即使是全球最大的语言模型——比如我们现在想用GPT-3——对他们来说,那也是一个未定义的标记。
我们刚刚创造了一个词,它是词汇表之外的,他们不知道它是什么,也没有向量来支持这个词。所以语言是一个活的东西,它在不断变化。所以,如果你想支持对话式人工智能,你真的需要准备好应对语言的动态性。
这听起来可能不像是一个真正的问题(人们一直在即兴创造词汇),但实际上它确实是一个问题。它不仅仅是在两个朋友聊天时的问题,从商业的角度来看,它实际上是一个更大的问题。
每天,都有人起床并创造一个新的品牌产品,他们会发明一个新的词,比如Xembly,放在他们的产品上,你需要确保你理解这一点。
所以我们的堆栈,首先,从一开始就要确保我们有良好的数据标注工具。我们做很多半监督类型的学习,所以我们需要能够快速收集数据。
我们需要能够快速标注数据。我们需要能够在从实时数据源获取的数据上生成指标,这样我们就可以在我们的标注数据中混入一些未标注数据。
我认为另一个重要的组成部分,就像我之前提到的那样,对话式人工智能往往需要大规模的机器学习管道。你通常不能只做一次,“这是一个模型”,然后无论你今天读什么它都能处理。
在大型语言模型的世界中,通常有很多部分组成一个端到端的堆栈。所以我们实际上需要有一个完整的模型管道。我们需要能够快速地将管道添加到堆栈中。
这意味着你需要一个良好的管道架构,这样你就可以在需要的时候在管道的任何位置插入新的模型,使一切都按需要工作。
解决不同的对话式人工智能挑战
Stephen: 如果你能为我们介绍一下你的端到端堆栈,以解决出色产品的挑战。
我们来看看每个挑战实际上会有多大的挑战,并且也许你的团队是如何解决它们的。
Jason: 是的,这个堆栈由多个模型组成。
语音识别
它从基本上将语音转换为文本开始;这是一个基础组件——传统的语音识别。
我们想要回答的问题是,“我们如何将这里的音频记录转换为文本文档?”
说话者分割
由于我们处理的是对话,而且在许多情况下,对话和交流中我们没有为每个说话者单独的音频通道,所以我们的堆栈还有另一个重要组件——说话者分割。
例如,我可能会遇到这样的情况,一个Zoom录音中有三个独立的人在通道上,然后有六个人在一个会议室里用一个音频通道交谈。
为了确保从语音识别系统得出的转录正确地映射到对话流中,我们需要确切地了解谁在说话。
仅仅说”那是B会议室,那里有六个人”是不够的,我只了解到是B会议室。我真正需要了解每个不同的说话人,因为我们的解决方案的一部分要求我们确切地理解对话-来回的互动。
盲目说话人分割
我需要知道这个人对这个人的请求说了”不”。通过与文本并行,我们得到一个我们认为在说话的说话人分配。我们从所谓的”盲目说话人分割”开始。
这意味着我们不一定知道谁是谁,但我们知道有不同的人。然后我们尝试在其上运行音频指纹算法,以便如果我们以前见过他们,我们可以确切地识别出那些人是谁。即使在此之后,我们的流程中还有最后一个阶段。我们称之为”格式化阶段”。
格式化阶段
我们运行标点算法和其他一些小软件,以便我们可以得到看起来像是结构良好的转录,我们现在已经着陆在这个阶段,我们知道Sabine正在和Stephen说话,Stephen正在和Jason说话。我们有分配给这些边界的文本。它被合理地标点。现在我们有了一份希望是可读的转录。
分叉的机器学习流程
从那里,我们分叉我们的流程。我们并行运行两个路径:
-
1
生成行动项 -
2
生成摘要。
对于行动项,我们在内部运行专有模型,试图在转录中找到口头行动项。但是这证明是不够的,因为在会议上,人们说的很多时候是“我可以做到”。如果我在会议结束时给你会议记录,你得到的是”Stephen说,我可以做到”这样的行动项,对你来说就不是特别有用,对吧?
有一堆事情发生在我找到那个短语之后,使其成为写得很好的提案,就像我之前提到的那样:
- 我们必须解开代词的引用。
- 我们必须回顾转录,找出那是什么。
- 我们重新格式化它。
我们试图将那个句子重构为一些写得很好的东西。就像以动词开头,替换所有那些代词,所以”我可以做到”变成”Stephen可以用新的架构幻灯片更新幻灯片。”。
我们在流程中做的其他事情是运行组件,既进行所谓的所有者提取,又进行截止日期提取。所有者提取是理解陈述的所有者是我,然后知道我在对话中指的是谁,并正确地分配所有者。
截止日期检测,正如我们提到的,是如何在系统中找到日期?如何对其进行标准化,以便可以将其呈现给会议中的每个人?
不仅仅是说它是在星期二,而是星期二实际上意味着2023年1月3日,这样也许我可以在你的日历上安排一些事情,以便你可以完成它。这是我们堆栈的行动项部分,然后我们有了我们堆栈的摘要部分。
在我们堆栈的那一部分[摘要部分],我们真正想做两件事。
一,我们试图进行盲目主题分割,”我们如何划分对话中与某种主题大致对应的线条?”
在这里完成后,可能有人会回过头来听这个会议或这个播客,并能够将其分成似乎与某种主题相关的部分。我们需要这样做,但我们真的不知道这些主题是什么,所以我们使用一些算法。
我们喜欢称这些为改变点检测算法。我们寻找语言性质中的某种系统性变化,告诉我们这是一个断点。
一旦我们这样做了,我们就基本上进行抽象化摘要。所以我们使用一些现代大型语言模型来生成对话片段的写得很好的摘要,以便在堆栈的这一部分完成时,你得到两个部分或行动项和写得很好的摘要,所有这些都是写得很好的陈述,你可以在会议结束后立即发送给人们。
建立 vs. 开源:选择哪种对话式人工智能模型?
Stephen:看起来有很多模型和序列。感觉有点复杂,而且有很多开销,对我们来说很令人兴奋,因为我们可以削减大部分这些东西。
你提到大多数这些模型都是内部专有的。
我只是好奇,你在哪些地方利用这些最先进的策略或现成的模型,在哪些地方你觉得已经解决了问题,哪些地方你认为可以在内部解决?
Jason:我们尽量避免“非此即彼”的问题。如果有公开可用的模型,并且它们能帮助我们达到目标,我们非常乐意使用。
在会话式语音中,通常存在一个主要问题,需要你构建自己的模型,而不是使用现成的模型。这是因为我们之前提到的领域非常庞大,实际上,通过使用非常大的模型,你可能会得到相反的问题。
统计上来说,大规模语言可能无法反映你所处领域的语言,这种情况下使用大型模型可能无法得到你要寻找的结果。
我们在语音识别中经常遇到这种情况;一个很好的例子就是,假设谷歌拥有一套专有的语音识别系统。
我们会发现其中一个问题是,谷歌必须训练他们的系统来处理所有的YouTube转录。YouTube的语言实际上通常与企业会议的语言不匹配。
这并不意味着他们在更广泛的领域中不正确,事实上他们是正确的。我的意思是YouTube可能更好地代表了宏观领域空间中的语言。
我们正在处理商业演讲的子领域。这意味着,如果你像大多数机器学习模型一样,根据一般语言集合来预测单词,而不是根据我们所处领域的受限领域,你经常会预测错误的单词。
在这些情况下,我们发现最好的方法是构建一些东西 – 如果不是专有的,至少是使用你自己的专有数据进行训练的 – 而不是使用现成的系统。
也就是说,在我提到的总结概述方面,确实有一些情况我们会进行总结概述。我认为我们已经达到了一个使用像GPT-3这样的大型语言模型来进行总结的点。
它需要进行微调,但我认为如果不使用它作为基础系统,那将是愚蠢的,因为结果会超出你能做到的范围。
总结文本是很困难的,特别是要使其极易阅读,而且你需要获取大量文本数据来训练一个能做到这一点的东西,对于一个小公司来说,这已经不可行了。
现在,我们有了这些伟大的公司,比如OpenAI,他们已经为我们做好了这些工作。他们已经花费了大量的资金在大量数据上训练大型模型,而这对于任何较小的组织来说都很困难。
我们现在可以利用这些模型,并获得这些非常好的摘要的好处。我们现在只需要进行适应和微调,以获得我们需要的结果。
运行复杂对话式人工智能系统的挑战
Stephen:是的,这非常有趣,也许我希望我们能更深入地讨论你面临的这些挑战,因为运行一个复杂的系统意味着涉及到团队建设、计算问题,然后你还谈到了数据质量。
根据你的经验,有哪些挑战会“破坏系统”,然后你会回过头去修复它们,让系统重新运行起来?
Jason:是的,运行这些类型的系统存在很多问题。让我试着涵盖一些。
在进入实时推断生产方面之前,一个最大的问题是我们所说的“机器学习技术债务”,当你运行这些级联系统时。
我们有一系列相互依赖或可能相互依赖的模型,这可能会成为问题。
这是因为当你训练你的下游算法处理来自上游算法的错误时,引入一个新系统可能会造成混乱。
例如,假设我的转录引擎在转录单词时犯了很多错误。我的团队中有一个先生,他的名字总是被错误地转录(这不是一个传统的英文名字)。
如果我们构建下游语言模型来试图掩盖并补偿这个错误,当我突然改变我的转录系统或者安装一个新系统来处理它时,会发生什么呢?现在一切都会崩溃和破裂。
我们尽量不把上游系统的错误融入到下游系统中。我们始终尝试假设我们管道下游的模型操作的是纯数据,这样它们就不会耦合,这使我们能够独立升级所有模型和系统,理想情况下不付出代价。
现在,我们并不完美。我们努力去做到这一点,但有时你会遇到一个境地,你别无选择,只有这样才能获得高质量的结果。
但理想情况下,我们追求系统中模型的完全独立,这样我们可以更新它们,而不必去更新管道中的每个其他模型——这是一个你可能会遇到的危险。
突然间,当我更新我的转录系统时,我不再获得那个我不再转录的单词,但现在我必须去升级我的标点系统,因为它改变了标点的使用方式。我必须去升级我的行动项检测系统。我的摘要算法不再工作。我必须去修复所有这些东西。
你真的可以陷入一个危险的境地,做出改变的代价变得极高。这是其中之一。
我们发现的另一件事是,当你运行一个机器学习算法的雏菊链堆栈时,你需要能够快速重新运行系统通过你的管道中的任何组件。
基本上,回到你的问题的根本,我们都知道在生产系统中会出现故障。这种情况经常发生。我希望它不会发生,但它确实发生。
当你运行排队的机器学习算法时,如果你不小心,你可能会遇到数据开始积压的系统,如果你没有足够的存储容量和你在管道中保存数据的地方,事情可能开始崩溃。你可能会丢失数据。各种坏事可能发生。
如果你正确地维护系统各个状态之间的数据,并构建了良好的工具,以便你可以不断快速重新运行你的管道,那么你会发现你可以摆脱麻烦。
我们内部建立了许多系统,这样如果我们有客户投诉或他们没有收到他们期望收到的东西,我们可以快速找到在我们的管道中哪个环节出了问题,并从管道的那一步迅速重新启动。
在我们修复任何我们发现的问题之后,可能我们部署了一个小错误,可能只是一个异常情况,或者我们有一些奇怪的内存峰值或其他导致容器在管道中间崩溃的原因。
我们可以快速地运行该步骤,将其推送到系统的其余部分,并将其从顾客的端口退出,而不是系统到处积压并发生灾难性故障。
Stephen:对,这些管道运行作为独立服务,还是有不同的架构来运行它们?
Jason:是的,我们几乎所有的模型和系统都作为独立的服务运行。我们使用:
- Kubernetes和容器:用于扩展。
- Kafka:我们的管道解决方案,用于在所有系统之间传递消息。
- Robin Hood Faust:帮助协调管道中不同的机器学习模型。我们也利用了这个系统。
Xembly是如何建立机器学习团队的?
Stephen:是的,这是一个很好的观点。
就团队设置而言,团队是否在某种程度上利用语言专家的知识?在运营方面,是否有一个单独的运营团队,然后有研究或机器学习工程师负责这些管道等工作?
基本上,你们团队是如何组建的?
Jason:就我们机器学习方面来说,我们团队主要由三个部分组成:
- 应用研究团队:他们负责模型构建,研究“我们需要哪些模型”,“哪种类型的模型”,“如何训练和测试它们”等方面的研究工作。他们通常构建模型,并不断测量精确度和召回率,并进行改进以提高准确性。
- 数据标注团队:他们的角色是对我们的一些数据进行持续的标注。
- 机器学习流水线团队:这个团队负责进行核心软件开发工作,为所有这些模型提供托管,找出输入和输出方面的数据形式,以及在不同模型之间以及整个堆栈之间进行交换的方式。
例如,在我们谈论的所有部分中,我们提到了Kafka、Faust和MongoDB数据库。他们关心的是如何使所有这些东西相互交互。
在生产中的计算挑战和大型语言模型(LLMs)
Stephen:很好,谢谢你分享。所以我认为部署大型语言模型时,与计算能力相关的挑战是另一个主要问题,对吗?这也是GPT面临的挑战,正如Sam Altman经常在推特上提到的。
我只是很好奇,你们是如何应对生产中的计算能力挑战的?
Jason:我们确实面临计算挑战。语音识别一般来说需要较高的计算资源。说话者分割以及其他涉及原始音频方面的工作往往需要大量的计算资源,所以这些系统通常需要使用GPU来进行处理。
首先,我们必须了解我们堆栈中的不同模型。我们必须知道哪些模型需要在不同的机器上运行,并确保我们可以获得这些不同类型的机器。
我们利用Kubernetes和Amazon(AWS)来确保我们的机器学习流水线具有不同的机器集,以适应不同类型的模型。因此,我们有我们的高性能GPU机器,还有我们更传统的面向CPU的机器,可以在上面运行一些任务。
在处理所有这些的成本和处理过程方面,我们通常尝试做两件事:
- 1. 在Kubernetes中独立扩展我们的Pods
- 2. 同时扩展底层的EC2主机
这样做有很多复杂性,而且要做好。再次提到我们系统中的一些早期问题,如管道数据、备份和崩溃,你可能会遇到灾难性的故障。
你不能承担过度或不足的机器规模。你需要确保你能够有效地启动和关闭机器,并在流量到来之前完成这些操作。
基本上,你需要了解你的流量流向。你需要确保设置了正确的指标,无论是基于CPU负载还是一般的请求。
理想情况下,你应该在合适的时间启动机器,这样你可以在进入的流量之前提前足够地准备好。但对于大多数我们这个领域的人来说,自动扩展是绝对关键的。
在我从事语音识别的职业生涯的不同阶段,我们不得不运行数百台甚至数千台服务器来实现规模化运营。这可能非常昂贵。如果你的流量通常是美国国内的流量,那么在凌晨03:00运行这些服务器就是在浪费金钱。
如果你能在夜间将机器负载降低,那么你可以节省大量的资金。
在构建NLP产品时如何确保数据质量?
Stephen:很好。我想我们可以直接从社区的一些问题开始。
对的,所以这个人问的第一个问题是,建立和部署会话式人工智能和普通自然语言处理产品需要高质量的数据,对吗?
那你会如何确保产品的整个生命周期内数据的高质量呢?
Jason:确实,没错。这是一个很好的问题。数据质量非常关键。
首先,我要说我们实际上努力收集自己的数据。我们发现总的来说,很多公共数据集实际上对我们的需求是不足够的。这在会话式语音领域尤为严重。
原因有很多。首先,回到数据的规模上,我曾经大致估计过会话式语音的大致规模,得出了一个数字,像是需要大约1.25百万亿个话语才能大致覆盖会话式语音的整个规模。
这是因为语音除了包含大量的单词外,还可以无限地串联在一起。正因为有无尽的组合方式,所以我们说话时经常会不连贯,但没关系,我们能够理解彼此。
口语并没有很多实际的语法结构。我们尽力了,但它实际上通常不遵循像书面语言那样的语法规则。因此,书面语言领域的数据规模是有限的。
而会话式语音领域实际上是无限的。人们会口吃,会重复单词。举个例子,如果你使用三元组进行操作,你必须接受“我 我 我”这样的话语,也就是连续三次重复了“我”,因为这种情况时常发生。
现在将这个扩展到所有单词和所有组合的世界中,你就进入了一个无限的数据集。所以在首位,实际上就不存在足够的数据。
但还有其他问题,比如隐私、法律等各种问题。为什么没有大量的会话式数据集存在呢?很少有公司愿意将他们的会议录音放到互联网上供全世界收听。
这种情况在现实中是不会发生的。如果你寻找现有的会话式数据集,比如实际的音频录音,其中一些是人工制作的,一些是会议数据,都与真实世界无关。
有时你可以找到政府会议的录音,但同样,它们也与你所处理的现实世界无关。总的来说,你最终不得不放弃利用互联网上的数据。你需要收集自己的数据。
接下来的问题是,一旦你拥有了自己的数据,你如何确保数据的质量是足够的?这是一个非常困难的问题。
首先,你需要一个优秀的数据标注团队,并且需要非常好的工具。我们使用了开源的Label Studio,我想也有付费版本。我们善于利用这个工具快速标注大量的数据,你需要为数据标注人员提供好的工具。
我认为人们很少意识到数据标注工具的重要性。我们还尝试在我们的数据之上应用一些指标,以便我们可以分析数据集的质量变化。
我们经常运行我们所称的“不匹配文件”。这是我们将标注员标记的内容通过我们的模型运行,并查看我们得到的差异的过程。
当这一过程完成后,我们会进行一些人工评估,以查看数据是否被正确标注,并在以后的时间里重复这个过程。
实际上,我们不断地将新的数据标注与我们的模型预测进行比对,以确保我们的数据集保持高质量。
机器学习团队在哪些领域工作?
Stephen:是的,我想我们忘了在本期节目的前面部分问这个问题,我很好奇,机器学习团队在哪些领域工作?是商业领域还是通用领域?
Jason:是的,一般来说,是商业领域。总的来说,在企业会议中,这个领域的范围仍然相对广泛,我们并没有特别专注于某一个具体的业务领域。
世界上有很多不同的企业,但主要是企业之间的交流。这不是消费者之间的交流。这不是我给我妈妈打电话,而是企业员工之间的对话。
测试对话式 AI 产品
Stephen:是的,我很好奇,下一个问题是一些公司想要问的,关于对话式 AI 和自然语言理解产品的测试策略是什么?
Jason:我们发现在自然语言上进行测试在模型构建方面非常困难。我们当然有训练和测试数据集。我们遵循传统的机器学习模型构建规则,确保我们有一个评估数据的良好测试集。
我们有时会尝试分配一些黄金数据集,为我们的记录管道提供黄金会议,以至少检查一下情况,看看“嘿,这个新系统在全面的情况下是否正确运行”。
但由于系统太大,我们经常发现这些测试只是一种直观的检查,对于真正的大规模评估来说并不可行,所以我们通常进行实时测试 – 这是我们发现在一个无限领域中足够进行的唯一方法。
这在开发过程中有两种不同的方式。有时我们部署模型并对实时数据进行运行,但实际上不会将结果使用给客户。
我们构建了所有的系统,因为我们有这个完善的多层级机器学习系统,我们可以在任何管道中注入机器学习步骤,并运行并行步骤,这使我们有时可以说,“嘿,我们将以静默模式运行一个模型。”
我们有一个新模型来预测行动项,我们将运行它,并输出结果。但是,其他管道将继续使用旧模型运行。但至少现在,我们可以进行广告测试,并查看两个模型产生的结果,看看是否看起来我们获得了更好的结果还是更差的结果。
但即使在这之后,往往我们会将新模型仅推送给部分流量,然后评估一些顶线启发式方法或指标,看看我们是否获得了更好的结果。
在我们的世界中,一个很好的例子是我们希望客户能分享我们发送给他们的会议摘要。所以对我们来说,例如在管道中更改算法然后去查看,“嘿,我们的客户是否更频繁地分享我们的会议记录?”是非常容易的。
因为会议记录的分享往往是我们向客户提供的质量的一个很好的代理。所以我们可以跟踪一个很好的启发式方法来说,“嘿,我们变得更好了还是更差了?”
这通常是我们的测试方式。很多实时的野外测试。再次强调,主要是由于领域的特点。如果你处在一个几乎无限的领域中,可能没有测试集能够最终量化你是否变得更好。
在机器学习监控和测试之间保持平衡
Stephen:在生产中监控和实际测试之间的界限在哪里?
Jason:我是说,我们始终在监控我们的整个系统。我们不断寻找模型输出的简单启发式方法,可能会告诉我们某些事情出了问题。
有一些度量指标,如困惑度,我们在语言中使用它来检测我们是否产生了胡言乱语。
我们可以做一些简单的事情,比如只计算我们在会议中预测的行动项的数量,我们不断跟踪这种情况,这种情况可以告诉我们我们是否偏离了轨道,或者类似的情况,以及我们对系统的各种监控。
例如:
- 所有的 Docker 容器是否运行正常?
- 我们是否消耗了过多的 CPU 或内存?
这是堆栈的一侧,我认为与模型构建的部分有点不同。在模型构建的一侧,我们不断构建并运行我们的训练数据,我们将结果作为我们模型的每日构建的一部分进行发送。
当我们在标记数据并获取新数据时,我们不断地观察我们的精确率-召回率指标。我们可以不断地测试模型构建本身,以查看我们的精确率-召回率指标是否可能朝着某个方向偏离了正轨。
用于对话式人工智能的开源工具
Stephen:是的,这很有趣。好的,让我们马上进入下一个问题:你能推荐一些用于对话式人工智能的开源工具吗?
Jason:当然可以。在语音识别领域,有一些像Kaldi这样的语音识别系统 – 我强烈推荐它;它已经是语音识别的支柱之一了。
当然,也有一些更新的系统,但是你可以用Kaldi做一些惊人的事情,快速启动和运行语音识别系统。
显然,像GPT-3这样的系统,我强烈推荐给大家。它是一个很棒的工具。我认为它需要适应。如果你对它进行微调,你将会获得更好的结果,但他们在提供API和使其易于根据需要更新方面做得非常出色。
我们在实体检测方面经常使用类似SpaCy的系统。如果你想要在任何方面开始进行自然语言处理,我强烈推荐你熟悉SpaCy。它是一个很棒的系统。它开箱即用,效果很好。有各种各样的模型。它在这些年里一直在稳步改进。
我之前提到过,对于数据标注,我们使用Label Studio,这是一个支持音频、文本和视频等各种类型内容标注的开源工具。它们非常容易上手,可以快速开始标注数据。我强烈推荐给那些想要入门的人。
为大型企业构建对话式人工智能产品
Stephen:好的,谢谢分享。下一个问题。
这个人问,“你如何为大型企业构建对话式人工智能产品?在项目开始时需要考虑哪些因素?”
Jason:是的,我想说,在处理非常高的流量负载时,对于大型组织来说,我认为最大的问题实际上是成本和规模。
在大型组织中,你将需要大量的服务器容量来处理这种规模。因此,我的建议是你真的需要考虑堆栈的真正运维方面。无论你是否使用Kubernetes,无论你是否使用亚马逊,你都需要考虑那些自动扩展的组件:
- 哪些指标将触发自动扩展?
- 如何让它工作?
在自动扩展的EC2主机上面构建Pod和Kubernetes是一项非常重要的任务。我们之前也谈到了一些类型的模型的复杂性,这些模型通常需要GPU进行计算,而其他模型则不需要。
那么,如何将系统分配到合适的节点并独立扩展它们呢?我认为这也是一个如何分配这些机器的考虑因素。
根据流量购买哪些机器?哪些机器需要预留?是否购买竞价实例以降低成本?这些都是大型企业在启动这些项目时必须考虑的因素,如果你想要成功地进行规模化。
在边缘设备上部署对话式人工智能产品
Stephen:太棒了。谢谢你的分享。
那么我们来谈谈下一个问题。你如何处理在设备上部署和一般生产中的挑战,特别是对于设备上的对话式人工智能产品?
Jason:当我们说设备上时,是指服务器上还是指性能有限的设备上?
Stephen:哦,是指性能有限的设备。所以是边缘设备和没有那么强大计算能力的设备。
Jason:嗯,我个人而言,多年来我没有处理过将模型部署到小型计算设备的情况。我可以分享一些历史上部署连接的相机等设备时的经验。
我们在设备和云之间分配了一些负载。对于快速响应、低延迟的事物,我们会在那里运行系统的小规模组件,然后将更复杂的组件转移到云上。
我不知道这与回答这个用户的问题有多大关系,但这是我过去处理过的事情,基本上你在设备上运行一个非常轻量级的小型语音识别系统,也许用于检测唤醒词或者仅仅是让系统起步运行。
但是,一旦开始运行,你将所有大规模的请求都转移到云实例上,因为你一般无法在小型的受限设备上处理这些系统的计算。
关于ChatGPT的讨论
Stephen: 我认为如果不讨论ChatGPT,这一集就是一种罪过。顺便问一下,这是一个常见的问题。
你对ChatGPT以及人们如何使用它有什么看法?
Jason: 是的。哦天哪,你应该在一开始就问我这个问题,因为我可能能够讲上一个半小时。
ChatGPT和GPT,总的来说,都非常棒。我们已经谈论了很多关于这个的内容,但因为它经过了大量的语言训练,所以它可以以非常少的输入做出非常惊人的事情,并且写出优美的文本。
但是使用这些系统确实有一些注意事项。
首先,正如我们提到的,它仍然是一个固定的训练集。它不会动态更新,所以需要考虑的一个问题是它是否能在一个会话中维持一些状态。如果你在与它对话时发明了一个新词,它通常可以在后续对话中利用那个词。
但是如果你结束会话然后再回来,它就不再有关于那个词的任何知识了。还有一些其他的事情需要关注,因为它是固定的,它只知道2021年及之前的事情。
最初的GPT3是从2018年及之前的,所以它对现代事件是不知情的。但我认为也许最重要的一点是我们通过使用它得出的结论是,它是一个大型语言模型,它的功能实际上是预测下一个单词。它并不具备智能,也不具备任何智能。
它采用了人类对数据的编码,我们将其编码为语言,然后它学会了预测下一个单词,这实际上是智能的一个很好的代理,但它本身并不是智能。由于这个原因,GPT3或ChatGPT会编造数据,因为它只是在预测下一个可能的单词,有时下一个可能的单词并不是事实上的正确,但从概率上来说是正确的。
ChatGPT有一点让人有点害怕,它写得非常好,以至于能够以一种令人信服的方式发表虚假言论,如果你不仔细注意,实际上可能会忽略掉它。这也许是最可怕的部分。
它可以是一个非常微妙的否定。如果你没有认真阅读它返回的内容,它可能只是做了一个简单的否定,而本应该是一个肯定的陈述。它可能会将一个是变成一个否,或者在某个词的末尾添加一个撇号。
如果你快速阅读,你的眼睛只会扫过去,并不会注意到它,但它可能完全是事实上错误的。在某种程度上,我们正在遭受众多伟大之处的困扰。它变得如此出色,写作得如此出色,以至于我们现在面临的问题是,评估它的人可能会错过它所写的内容实际上是事实上不正确的。
我认为这些系统很棒,我认为它们将从根本上改变很多人的机器学习和自然语言处理的工作方式,它将改变人们的互动方式。
总的来说,我认为我们都应该注意到它并不是一个开箱即用的神奇东西,过于相信它实际上是危险的。如果你想要使用它,我强烈建议你对其进行精调。
如果你要尝试直接使用它为人们生成内容或其他类似的事情,我强烈建议你建议你的客户进行审核和阅读。不要盲目地分享他们从中获取到的内容,因为其中的信息有合理的可能不是百分之百正确的。
总结
Stephen:太棒了。谢谢,Jason。这就是我全部要说的。
Sabine:是的,谢谢你对这个仍然像说服力一样的东西的额外评论,尽管现在它只是虚构的。所以让我们看看它会走到哪里。但是,非常感谢你,Jason,为我们分享你的专业知识和建议。
很高兴有你的加入。
Jason:是的,非常感谢Stephen,真的很棒。我非常享受这次对话。
Sabine:在我们让你离开之前,人们如何关注你在网上的活动?也许想联系你?
Jason:是的,你可以在www.xembly.com上关注Xembly的最新动态。你也可以联系我,我的名字是[email protected]。如果你有任何问题,我很乐意回答。另外,你也可以查看我们的网站,了解最新信息。我们会定期更新。
Sabine:太棒了。非常感谢。我们在两周后的MLOps Live再见。下次我们将会有Silas Bempong和Abhijit Ramesh与我们一起,我们将讨论临床研究领域的MLOps。
在此期间,我们会在社交媒体和MLOps社区slack上见。很快我们会再见。谢谢,保重。