使用 Python 部署机器学习模型

python
机器学习
ML模型
使用 Python 部署机器学习模型 cover image

在数据科学领域工作时,你通常会发现自己在完成训练、微调和改进的长循环后面临新的挑战。恭喜您构建了一个具有良好性能并满足您需求的 ML 模型。现在您面临的挑战是如何向目标用户提供这项出色的技术?或者,您如何才能与公司的利益相关者有效地沟通您的结果?或者甚至如何有效地与同事共享模型结果以实现更好的协作?

部署机器学习有时可能很困难,因为我们将使用构建模型所需的常用技能之外的技术和技巧。

在本文中,我们将发现一种仅使用 python 部署机器学习模型的方法。在此过程中,我们将构建一个机器翻译模型和一个网页。

以下是我们将要看到的步骤:

  1. 使用Huggingface机器翻译模型。

  2. 发现 Anvil 并为我们的模型构建 Web UI。

3.连接后端和前端,服务世界!

构建机器翻译模型

Huggingface 是一个致力于“使良好的机器学习民主化”的人工智能社区。在此倡议下,您可以找到许多针对不同机器学习任务训练的模型:图像分割、文本转语音、文本生成......还有机器翻译!

机器翻译只是由一个软件执行的两种语言之间的翻译任务,在我们的例子中,是一个用变压器构建的机器学习模型。

Transformer 是一种基于注意力的深度学习架构。让我们让它在你的机器上运行吧!

我们将使用 python 库 transformers 来下载 MT 模型并执行翻译。

pip install torch
pip install transformers

安装所需的包后,导入以下模块:

from transformers import MarianTokenizer, MarianMTModel
from typing import List

让我们建立一个将句子从德语翻译成英语的模型。我们需要模型的名称:

src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'

现在让我们使用以下几行导入经过训练的模型和分词器:

model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)

下载大小约为 300mb,完成后您可以使用以下命令将模型存储在本地目录中:

model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")

我们来看看模型:

text="ich habe keine ahnung"
gen = model.generate(**tok.prepare_seq2seq_batch(src_texts=[text], return_tensors="pt"))
words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)
print(words[0])

现在您应该将句子的英文翻译存储在“words[0]”中。

发现 Anvil 并构建 Web UI

Anvil 是一个框架和一系列解决方案,允许您仅使用 python 代码构建 Web 应用程序。它有一个拖放编辑器来构建 Web UI,它允许您将代码从本地计算机连接到您构建的 UI,并通过为您提供可共享的链接来托管您的应用程序。

因此,让我们从此处开始创建应用程序。选择空白应用程序,然后选择材料设计。

你应该看到这样的东西:

Anvil

现在我将指望您使用编辑器并构建类似于以下内容的内容:

Anvil Editor

在这个简单的用户界面中,我们有两个下拉菜单用于选择源语言和目标语言。我们还有一个用于输入源文本的 TextBox 和一个用于显示翻译后的文本的 richText 组件。您还可以看到一个启动翻译任务的按钮。

要与下面将看到的代码片段同步,请为组件提供相同的 ID。下面是一个可以设置组件 id 的示例:

Anvil Editor Rename Component

我们使用的 ID 是:

<表边框=“2”>

<标题>

<第>

组件

<第>

身份证

</标题>

<正文>

源语言下拉列表 source_lang 目标语言下拉列表 dest_lang 源语言文本框 source_text 翻译文本富文本 translated_text

</表>

点击函数

我们添加了一个用于开始翻译的按钮。从编辑器中单击按钮,然后在属性面板中向下滚动。在底部,您将看到一个事件部分。在“单击”旁边的文本区域中,输入“翻译”,然后单击该文本区域右侧的箭头。

这将带您进入代码视图,您将在其中看到一些自动生成的 python 代码。

你会发现anvil自动添加了一个叫做translate的功能。每次单击 UI 中的按钮时都会调用它。

该函数应如下所示:

def translate(self, **event_args):
 """This method is called when the button is clicked"""
 src_lang=self.source_lang.selected_value #get the selected source language
 dest_lang=self.dest_lang.selected_value #get the selected destination language
 text=self.source_text.text   #get the text written in source language
 #call the server function
 translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
 #write the translated text to the UI
 self.translated_text.content=translated_text

该函数执行 3 个主要任务:

  1. 从UI获取信息

2.使用服务器功能“翻译”将信息发送到我们的后端(我们将在下一节中解释)

  1. 将翻译后的文本发送到 UI。

服务器功能

我们重点关注这行代码:

translated_text=anvil.server.call("translation",text,src_lang,dest_lang)

我们使用 anvil.server.call 来调用一个名为“translation”的服务器函数,我们将在本地计算机的后端代码中定义该函数。

此函数将充当 Web UI 和将在我们的机器翻译模型上运行的后端代码之间的连接。

正如您所注意到的,我们还在函数“anvil.server.call”中发送该函数的参数。

部署我们的 MT 模型

我们首先安装砧座

pip install anvil-uplink

现在我们已经在 anvil 编辑器中构建了 Web 界面,并且有了基本的代码块来运行机器翻译模型并进行翻译。

下一步是定义我们在上一节中讨论过的服务器函数。

这是该函数的代码:

@anvil.server.callable
def translation(text,src,dest):
 lang_code={"English":"en",
       "German":"de",
       "French":"fr",
       "Spanish":"es"}
      model=MarianMTModel.from_pretrained("./models/"+lang_code[src]+"_"+lang_code[dest])
 tok=MarianTokenizer.from_pretrained("./models/"+lang_code[src]+"_"+lang_code[dest]+"/tok")
 gen = model.generate(**tok.prepare_seq2seq_batch(src_texts=[text], return_tensors="pt"))
 words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)
 return words[0]

该函数将获取前端发送的 3 个参数,将源语言和目标语言转换为各自的语言代码,然后加载模型并计算翻译并返回结果。

将此函数声明为 anvil 作为服务器函数的方法是使用装饰器

@anvil.server.callable

我们还有最后一步要做,将可以在 jupyter 笔记本中运行的后端代码连接到我们的 anvil 应用程序。

转到 anvil 在线编辑器,单击齿轮图标,然后单击“Uplink...”。

请参阅下面的屏幕

Anvil Editor Uplink

您将看到一个弹出窗口,然后单击“为此应用程序启用服务器上行链路”以获取您复制的连接代码。

Anvil Uplink

您将代码粘贴到以下代码行中:

anvil.server.connect("code here")

此行将启动一个服务器,将本地代码脚本或 jupyter 笔记本连接到 anvil 应用程序,并将“translation”函数注册为服务器函数。

最后一步

至此,您的后端服务器已运行一个服务器函数,该函数加载机器翻译模型,并在考虑从前端发送的参数后进行翻译。该图总结了我们迄今为止共同实施的内容。

Anvil Uplink

最后一步是通过单击 anvil 编辑器顶部中心的运行按钮来运行应用程序。

运行应用程序后,您会在右上角看到一个“发布此应用程序”按钮,该按钮将为您提供一个链接,您可以共享该链接以访问该应用程序并进行翻译!

## 结论

通过阅读本文,您已经能够部署 MT 模型并构建一个 Web 界面来使用它。

关于如何使用 anvil 有效部署模型,还有很多东西有待发现,但现在您已经掌握了开始部署之旅的基础知识,并进一步发挥了 Python 先前知识的潜力,可以做更多事情!

参加我们的免费研讨会之一

通过我们的免费研讨会 开始您作为数据科学家的职业生涯,这些研讨会基于适应性强的课程并由行业专家指导。


Career Services background pattern

职业服务

Contact Section background image

让我们保持联系

Code Labs Academy © 2024 版权所有.