这个问题貌似有点模糊,更具体如下:
以百度的这个API为例子。
既然是 web 服务,自然想到了 spring 全家桶,假设我想用 Java 实现这个 API。
其中涉及算法的地方,很多基础的算法 Java 本身没有,比如自然语言处理中的算法:TFIDF。
可能的解决这个算法库缺失的办法:
1. 重新造轮子,将需要的算法都用 Java 实现一遍,封装为算法库,web 后台直接调包。
2. 将 python 的 sklearn 封装一些基础的算法 API 出来,Java 直接调用这个 API。
或者:
直接使用 python 作为后台语言。
想了解一下,大家是怎么解决这类问题的?
1
ayase252 2019-11-06 16:08:08 +08:00 via iPhone
算法部分本身包装成一个服务,让后台通过 HTTP 等协议来取?
|
2
ml1344677 2019-11-06 16:11:14 +08:00
咋说呢,不是特别明白你的需求。java 的机器学习库是有的而且不少,tf-idf 也只是非常基础的一个算法,自己写也没啥问题。python 的优势就是库多呗。
|
3
dswyzx 2019-11-06 16:18:31 +08:00
python 算法包装起来,搭个 flask 架子 api 接口请求.(以前实现过,感觉配合起来比较简单
|
4
MinQ 2019-11-06 16:21:36 +08:00
自己写或者 python 做一个后台服务,Java 去调用
|
5
sadfQED2 2019-11-06 16:26:20 +08:00 via Android
大公司后台都是多种语言混合的,然后通过 rpc 或者 http 互相调用
|
6
LeeSeoung 2019-11-06 16:27:05 +08:00 1
很多算法是有 java 实现的 nlp 方面的可以参考 dl4j 或者其他机器学习的包 挺多的。至于一些算法实现难的 可以用 python 包装成 web 服务,python 做 web 服务 感觉挺多东西都要自己实现。。
|
7
mxT52CRuqR6o5 2019-11-06 16:29:58 +08:00 via Android
按照减少技术栈的思路选 2 比较好
|
8
leiuu OP |
9
Raymon111111 2019-11-06 16:30:55 +08:00
算法作为 jar 包提供 api 啊
简单点参考 java 自带的排序算法是怎么对外提供 api 的 |
10
lihongjie0209 2019-11-06 16:33:31 +08:00
rpc 啊
|
11
leiuu OP |
12
luozic 2019-11-06 17:35:51 +08:00
基于微服务构建系统,除了开发和维护成本,其他成本区别不大;如果是传统方式,运维 /沟通成本会增加不少。
|
13
secsilm 2019-11-06 18:00:43 +08:00
就像楼上各位说的,用 Python 起一个算法服务,Java 去调
|
14
littleylv 2019-11-06 18:09:27 +08:00
人不是有 SDK 了么。。。
|
15
liuxu 2019-11-06 18:12:00 +08:00
php 合理的方案可以是直接 PHP,考虑到性能可以用 C 写 php mod,然后加载调用开放出来的方法
|
16
leiuu OP @lihongjie0209 rpc+1,不过可能这里涉及另外一个问题,rpc 还是 http+json
@secsilm +1 @luozic +1 @littleylv 可否详细说说? @liuxu php 虽然最好还不懂,😄。用 c 做 php 扩展直接实现算法库? |
19
ipwx 2019-11-06 20:18:23 +08:00
@liuxu 你先仔细看看楼主的需求。提到的是已经有的算法,通过组合的方式变成一个算法的应用,同时 Python 基本都已有对应的库。这时候当然优先 Python 做 API。
|
20
quietnight 2019-11-07 00:36:20 +08:00 via iPhone
tf serving
|
21
liuxu 2019-11-07 09:39:44 +08:00
@ipwx 你先仔细看看楼主的需求,然后理解一下楼主的意思。留意下“可能”、“比如”、“了解一下”,再看下我的回复。
我是以 PHP 的角度回复问题,如果算法有 PHP sdk 就直接用 PHP,没有就用 C 开发扩展有什么问题? 你不回楼主贴,专门挑我的刺?为什么会有这种风气。 |
22
leiuu OP @quietnight 简单了解了一下,tf serving 应该是足够满足需求的,不过 tf 会比较重。
@littleylv 没关系哈 握抓。 总体来说,大家都推荐用创建多个服务,服务间用 http/rpc 通信。 简单总结一下可能的方案: 1. python web 框架( flask / django )+python 机器学习框架 ( sklearn ) + [可选] Java web 框架( spring boot ) 2. java 机器学习库(dl4j、weka)/自己实现库 + Java web 框架( spring boot ) 3. tensorflow serving + [可选] Java web 框架( spring boot ) 4. php + php mod 用 C/C++ 扩展机器学习库 相关的参考: 1. [flask + sklearn]( https://towardsdatascience.com/a-flask-api-for-serving-scikit-learn-models-c8bcdaa41daa) 2. [tensorflow serving]( https://www.tensorflow.org/tfx/serving/serving_basic) |