基于Spring Boot的ALBERT词向量服务(4)

打包与应用示例

打包与启动

上述基于Spring Boot已经对词向量服务开发完毕,接下来要打成jar包,才算做真正完成一个流程,当然这里要借助maven,在IDEA的Terminal中输入:

mvn clean package

maven就会开始打包流程,如果没有问题,最终会提示BUILD SUCCESS。在生成的target目录下可以找到打好的包:
基于Spring Boot的ALBERT词向量服务(4)_第1张图片

取出来放到桌面上,使用java -jar命令启动:

基于Spring Boot的ALBERT词向量服务(4)_第2张图片

没什么问题的话应该是可以启动成功的。

应用示例

上述已经在本机成功搭建了一个向量生成服务,可以在任何可以发送POST请求的环境中调用。这里还是回到Python中来,借助requests工具包的强大功能发送请求:

import requests
import json

# 请求地址
url = "http://127.0.0.1:7777/vector"
# 请求头,务必正确,否则无法返回正确结果
headers = {
    "Content-Type": "application/json"
}

# 根据输入类的要求构建数据
dict_input = dict()
# 要生成向量的文本
dict_input["text"] = "自然语言 处理 后台"
# 设定有效长度,如为负数则按照有效字符个数处理
# 如小于实际长度则截取前validLength个字符,大于实际长度自动补充[PAD]
# 大于510个有效字符,自动截取前510个有效字符
dict_input["validLength"] = -1

# 发送post请求
ret = requests.post(url=url, json=dict_input, headers=headers)
# 获得反馈后json解码为Python词典
dict_ret = json.loads(ret.text)

# 取原始输入文本
raw_text = dict_ret["rawText"]

# 取原始输入有效长度
raw_valid_length = dict_ret["rawValidLength"]

# 取实际处理的有效文本
text = dict_ret["text"]

# 取实际处理有效长度
valid_length = dict_ret["validLength"]

# 取生成向量
vector = dict_ret["vector"]

# 输出结果
print("-----------")
print("原始输入文本:" + raw_text)
print("原始输入长度:" + str(raw_valid_length))
print("实际处理文本:" + text)
print("实际处理长度:" + str(valid_length))
print("ALBERT 向量 %d 维:\n" % len(vector) + str(vector))
print("-----------")

运行上述脚本,输出:

-----------
原始输入文本:自然语言 处理 后台
原始输入长度:-1
实际处理文本:自然语言处理后台
实际处理长度:8
ALBERT 向量 312 维:
[0.9969022, -0.5883448, 0.09190705,..., -0.99963963, 0.9510165, -0.9598719]
-----------

查看启动Spring Boot服务的控制台,可以看到其日志:

success-log.PNG

在纯用CPU(Intel i5-8250U)的情况下,生成向量耗费18ms。当然,这与文本长度有关,文本越长耗费时间越长,比如把上述输入有效长度改为最大的510:

long-log.PNG

相同硬件条件下耗费165ms。但总体来说ALBERT体积小,速度也很快,对于Tiny版本,直接打入jar包也是可行的。

小结

将服务打成jar包后,可以在不同的,具有jdk的环境中启动,并且在不同的环境中调用,可以是Python,Java或者是其他。上述Python应用示例代码已经放到了支持工程中:

Python支持工程开源代码:https://github.com/Aiwiscal/albert-vec-support
Java主工程开源代码:https://github.com/Aiwiscal/albert-vec

喜欢请给star哦~

你可能感兴趣的:(基于Spring Boot的ALBERT词向量服务(4))