在树莓派上部署神经机器翻译(附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 }