在数据科学领域工作时,你通常会发现自己在完成训练、微调和改进的长循环后面临新的挑战。恭喜您构建了一个具有良好性能并满足您需求的 ML 模型。现在您面临的挑战是如何向目标用户提供这项出色的技术?或者,您如何才能与公司的利益相关者有效地沟通您的结果?或者甚至如何有效地与同事共享模型结果以实现更好的协作?
部署机器学习有时可能很困难,因为我们将使用构建模型所需的常用技能之外的技术和技巧。
在本文中,我们将发现一种仅使用 python 部署机器学习模型的方法。在此过程中,我们将构建一个机器翻译模型和一个网页。
以下是我们将要看到的步骤:
-
使用Huggingface机器翻译模型。
-
发现 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,并通过为您提供可共享的链接来托管您的应用程序。
因此,让我们从此处开始创建应用程序。选择空白应用程序,然后选择材料设计。
你应该看到这样的东西:
现在我将指望您使用编辑器并构建类似于以下内容的内容:
在这个简单的用户界面中,我们有两个下拉菜单用于选择源语言和目标语言。我们还有一个用于输入源文本的 TextBox 和一个用于显示翻译后的文本的 richText 组件。您还可以看到一个启动翻译任务的按钮。
要与下面将看到的代码片段同步,请为组件提供相同的 ID。下面是一个可以设置组件 id 的示例:
我们使用的 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 个主要任务:
- 从UI获取信息
2.使用服务器功能“翻译”将信息发送到我们的后端(我们将在下一节中解释)
- 将翻译后的文本发送到 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.server.connect("code here")
此行将启动一个服务器,将本地代码脚本或 jupyter 笔记本连接到 anvil 应用程序,并将“translation”函数注册为服务器函数。
最后一步
至此,您的后端服务器已运行一个服务器函数,该函数加载机器翻译模型,并在考虑从前端发送的参数后进行翻译。该图总结了我们迄今为止共同实施的内容。
最后一步是通过单击 anvil 编辑器顶部中心的运行按钮来运行应用程序。
运行应用程序后,您会在右上角看到一个“发布此应用程序”按钮,该按钮将为您提供一个链接,您可以共享该链接以访问该应用程序并进行翻译!
## 结论
通过阅读本文,您已经能够部署 MT 模型并构建一个 Web 界面来使用它。
关于如何使用 anvil 有效部署模型,还有很多东西有待发现,但现在您已经掌握了开始部署之旅的基础知识,并进一步发挥了 Python 先前知识的潜力,可以做更多事情!
参加我们的免费研讨会之一
通过我们的免费研讨会 开始您作为数据科学家的职业生涯,这些研讨会基于适应性强的课程并由行业专家指导。