文章

在树莓派上部署神经机器翻译(附API)

在完成?这一章的环境搭建,接着就可以开心地搭建神经机器应用了!

warning 注意
本教程树莓派的环境是树莓派4B+4G,Ubuntu20.04LTS,Linux ubuntu 5.4.0-1041-raspi #45-Ubuntu SMP PREEMPT Thu Jul 15 01:17:56 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux。您可以命令 uname -a 来查看。

导入仓库

这里从GitHub上找来了一个成品,在此感谢作者。仓库链接:taoztw/Transformer: pytorch实现Transformer,提供机器翻译案例和简单的翻译api接口(flask)。评分组件使用BLEU。 (github.com)

克隆一下:

git clone https://github.com/taoztw/Transformer.git

GitHub速度慢的可以自行百度换源。克隆完成后,进入文件夹目录。

cd Transformer/

这时还不能直接运行,需要修改一下代码。

打开model.py

找到第75、76行,替换成以下内容:

        div_term = torch.exp(torch.tensor(torch.arange(0,d_model,2,device=DEVICE) *
                             (-math.log(10000.0) / d_model),dtype=torch.float))

将第79、80行替换成:

        pe[:,0::2] = torch.sin(position.float() * div_term)
        pe[:,1::2] = torch.cos(position.float() * div_term)

改完后如图所示:

安装依赖库

warning 警告
请保持所有您命令行中python、pip的版本和原来安装pytorch的版本一致,否则无法使用。

安装nltk

pip install nltk

最后安装成功:

Installing collected packages: typing-extensions, zipp, importlib-metadata, click, regex, tqdm, joblib, nltk
Successfully installed click-8.0.1 importlib-metadata-4.6.1 joblib-1.0.1 nltk-3.6.2 regex-2021.7.6 tqdm-4.61.2 typing-extensions-3.10.0.0 zipp-3.5.0

下载punkt

如果您使用nltk.download()来下载punkt,恐怕不是非常好用。您很可能会失败。这里用wget直接下载导入。

在仓库的主目录创建一个文件夹tokenizers并进入。

TIP:这里同时新建一个save文件夹,用来存放训练好的东西。

mkdir tokenizers
mkdir save
cd tokenizers

用国内源下载,解压:

wget https://codechina.csdn.net/mirrors/nltk/nltk_data/-/raw/gh-pages/packages/tokenizers/punkt.zip
unzip punkt.zip

最后结构如图所示:

运行,开始训练

返回主目录,然后运行训练模块。

cd ..
python train.py

遇到如下输出不用着急:

/home/ubuntu/Transformer/model.py:75: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
  (-math.log(10000.0) / d_model),dtype=torch.float))

不用理会,慢慢等待数据跑完(CPU满负荷ing...)。

此时,不要浪费时间了,我们应该去干一些有意义的事情 ,比如——学习

启动服务

安装依赖

首先安装依赖。

pip install flask
pip install flask_sqlalchemy
pip install flask_cors
pip install pymysql
pip install mysqlclient

然后往服务器上添加如图所示的数据库。数据库名:message,编码:utf-8,用户名:message,密码随意。

warning 警告
数据库一般来说是MySQL类型,不是的话请您自行百度。

打开app.py,将第17行修改如下:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://message:密码@127.0.0.1:3306/message?charset=utf8'

训练完成,启动服务。运行:

python app.py

一开始会有几行警告内容。然后输出:

 * Debugger is active!
 * Debugger PIN: 133-091-512

此时说明服务启动成功了。

测试!

下面随便测试了一些字词:

翻译结果有些奇奇怪怪,大概是训练次数不够多。不过强差人意,勉强能用。

flask api请求参数

简单api,没有进行检查校验和异常处理

转作者readme.md

// POST请求参数
{
  "sentence": "your  translation sentences"
}
// return
{
  "result": "翻译结果",
  "msg": 'success',
  "code": 200
}

本文由作者按照 CC BY 4.0 进行授权

© Dignite. 保留部分权利。 由  提供CDN加速。

浙ICP备2023032699号 | 使用 Jekyll 主题 Chirpy