V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leiuu
V2EX  ›  程序员

弱弱的请教一个算法类 API 实现的疑惑

  •  
  •   leiuu · 2019-11-06 16:05:41 +08:00 · 2722 次点击
    这是一个创建于 1843 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个问题貌似有点模糊,更具体如下:

    以百度的这个API为例子。 既然是 web 服务,自然想到了 spring 全家桶,假设我想用 Java 实现这个 API。
    其中涉及算法的地方,很多基础的算法 Java 本身没有,比如自然语言处理中的算法:TFIDF。

    可能的解决这个算法库缺失的办法:

    1. 重新造轮子,将需要的算法都用 Java 实现一遍,封装为算法库,web 后台直接调包。
    2. 将 python 的 sklearn 封装一些基础的算法 API 出来,Java 直接调用这个 API。
    

    或者:

    直接使用 python 作为后台语言。
    

    想了解一下,大家是怎么解决这类问题的?

    22 条回复    2019-11-07 14:56:20 +08:00
    ayase252
        1
    ayase252  
       2019-11-06 16:08:08 +08:00 via iPhone
    算法部分本身包装成一个服务,让后台通过 HTTP 等协议来取?
    ml1344677
        2
    ml1344677  
       2019-11-06 16:11:14 +08:00
    咋说呢,不是特别明白你的需求。java 的机器学习库是有的而且不少,tf-idf 也只是非常基础的一个算法,自己写也没啥问题。python 的优势就是库多呗。
    dswyzx
        3
    dswyzx  
       2019-11-06 16:18:31 +08:00
    python 算法包装起来,搭个 flask 架子 api 接口请求.(以前实现过,感觉配合起来比较简单
    MinQ
        4
    MinQ  
       2019-11-06 16:21:36 +08:00
    自己写或者 python 做一个后台服务,Java 去调用
    sadfQED2
        5
    sadfQED2  
       2019-11-06 16:26:20 +08:00 via Android
    大公司后台都是多种语言混合的,然后通过 rpc 或者 http 互相调用
    LeeSeoung
        6
    LeeSeoung  
       2019-11-06 16:27:05 +08:00   ❤️ 1
    很多算法是有 java 实现的 nlp 方面的可以参考 dl4j 或者其他机器学习的包 挺多的。至于一些算法实现难的 可以用 python 包装成 web 服务,python 做 web 服务 感觉挺多东西都要自己实现。。
    mxT52CRuqR6o5
        7
    mxT52CRuqR6o5  
       2019-11-06 16:29:58 +08:00 via Android
    按照减少技术栈的思路选 2 比较好
    leiuu
        8
    leiuu  
    OP
       2019-11-06 16:30:19 +08:00
    @ayase252 感谢,我也是这么想的。

    @dswyzx 感谢,明白,就是再启一个子服务,用 python 实现。


    @ml1344677 感谢回复,java 机器学习库有没有一些推荐?
    「 python 的优势就是库多呗」,对的就是想利用这一点。
    其实本质是想了解一下实现这样一个算法 API,后台的大致架构是怎么样的?
    怎么解决算法库的问题,自己实现还是复用现有的库,如果算法库和后台实现跨语言的话怎么解决呢?


    @MinQ 感谢,真的可以这样哈哈。


    @sadfQED2 感谢,原来真的是这样,之前只是猜测!


    @LeeSeoung 感谢,dl4j 好评。大致理解实现方式了!
    Raymon111111
        9
    Raymon111111  
       2019-11-06 16:30:55 +08:00
    算法作为 jar 包提供 api 啊

    简单点参考 java 自带的排序算法是怎么对外提供 api 的
    lihongjie0209
        10
    lihongjie0209  
       2019-11-06 16:33:31 +08:00
    rpc 啊
    leiuu
        11
    leiuu  
    OP
       2019-11-06 16:33:48 +08:00
    @mxT52CRuqR6o5 会减少一些造轮子!不过又会加一套开发语言以及一堆框架过来。😄。


    @Raymon111111 可能我没表述清晰,不是这个问题。
    luozic
        12
    luozic  
       2019-11-06 17:35:51 +08:00
    基于微服务构建系统,除了开发和维护成本,其他成本区别不大;如果是传统方式,运维 /沟通成本会增加不少。
    secsilm
        13
    secsilm  
       2019-11-06 18:00:43 +08:00
    就像楼上各位说的,用 Python 起一个算法服务,Java 去调
    littleylv
        14
    littleylv  
       2019-11-06 18:09:27 +08:00
    人不是有 SDK 了么。。。
    liuxu
        15
    liuxu  
       2019-11-06 18:12:00 +08:00
    php 合理的方案可以是直接 PHP,考虑到性能可以用 C 写 php mod,然后加载调用开放出来的方法
    leiuu
        16
    leiuu  
    OP
       2019-11-06 18:25:05 +08:00
    @lihongjie0209 rpc+1,不过可能这里涉及另外一个问题,rpc 还是 http+json
    @secsilm +1
    @luozic +1
    @littleylv 可否详细说说?
    @liuxu php 虽然最好还不懂,😄。用 c 做 php 扩展直接实现算法库?
    liuxu
        17
    liuxu  
       2019-11-06 18:28:41 +08:00
    @leiuu 对的,像 pecl 扩展一样,用 C 实现
    littleylv
        18
    littleylv  
       2019-11-06 18:30:42 +08:00
    @leiuu #16 不好意思,我理解错了
    ipwx
        19
    ipwx  
       2019-11-06 20:18:23 +08:00
    @liuxu 你先仔细看看楼主的需求。提到的是已经有的算法,通过组合的方式变成一个算法的应用,同时 Python 基本都已有对应的库。这时候当然优先 Python 做 API。
    quietnight
        20
    quietnight  
       2019-11-07 00:36:20 +08:00 via iPhone
    tf serving
    liuxu
        21
    liuxu  
       2019-11-07 09:39:44 +08:00
    @ipwx 你先仔细看看楼主的需求,然后理解一下楼主的意思。留意下“可能”、“比如”、“了解一下”,再看下我的回复。
    我是以 PHP 的角度回复问题,如果算法有 PHP sdk 就直接用 PHP,没有就用 C 开发扩展有什么问题?

    你不回楼主贴,专门挑我的刺?为什么会有这种风气。
    leiuu
        22
    leiuu  
    OP
       2019-11-07 14:56:20 +08:00
    @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)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1648 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 16:51 · PVG 00:51 · LAX 08:51 · JFK 11:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.