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

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

  •  
  •   leiuu · 35 天前 · 1100 次点击
    这是一个创建于 35 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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


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


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


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


    @LeeSeoung 感谢,dl4j 好评。大致理解实现方式了!
        9
    Raymon111111   35 天前
    算法作为 jar 包提供 api 啊

    简单点参考 java 自带的排序算法是怎么对外提供 api 的
        10
    lihongjie0209   35 天前
    rpc 啊
        11
    leiuu   35 天前
    @mxT52CRuqR6o5 会减少一些造轮子!不过又会加一套开发语言以及一堆框架过来。😄。


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

    你不回楼主贴,专门挑我的刺?为什么会有这种风气。
        22
    leiuu   34 天前
    @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)
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3125 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 11:07 · PVG 19:07 · LAX 03:07 · JFK 06:07
    ♥ Do have faith in what you're doing.