算法不会前端,也可以做出好看的界面-Streamlit

写在前面

大家好,我是刘聪NLP。

之前在做Demo的时候,一般都采用「Flask+HTLM」,由于个人知识储备原因,导致界面会奇丑无比。当有人质疑我的时候,我就会说:“为什么要求我算法把前端做的那么好看,能用就行呗,要啥自行车。”如果实在没办法的时候,会求前端帮忙美化一波。

今天给大家推荐一个超级好用的工具Streamlit,无需任何前端知识(HTML、CSS、JS),只需要python写写markdorn就可以构建一个蛮不错的Demo页面。

并且把我之前开源的GPT2项目进行了一波页面优化,看起来更舒服了。

Streamlit介绍

Streamlit是一个可以快速搭建Web应用的Python库,官方定位是服务于机器学习和数据科学的Web应用框架。目前已经有非常详细文档、非常多样的应用案例和非常活跃的社区。

官方网址:https://streamlit.io/
实例和源码:https://awesome-streamlit.org/

由于API简明易用,结构清晰,很多内容可以直接用markdorn表示,本人评估最多「一天」就可以学会。

案例

以本人之前开源的GPT2项目为例,简单修改之前的页面。

项目介绍:
https://zhuanlan.zhihu.com/p/338171330
or
https://mp.weixin.qq.com/s/yexDvEF-kLj1rfSgG6-OTQ

先上效果图,原来的页面如下:

现在的页面如下: 将模型部分参数开放出来,可以给用户更好地交互体验,使其有很强的参与感,并且页面也变得虽然简洁但五脏俱全。

核心代码如下:

def writer():
    st.markdown(
        """
        ## NewsTitleGenerate DEMO
        """
    )
    st.sidebar.subheader("配置参数")
    batch_size = st.sidebar.slider("batch_size", min_value=0, max_value=10, value=3)
    generate_max_len = st.sidebar.number_input("generate_max_len", min_value=0, max_value=64, value=32, step=1)
    repetition_penalty = st.sidebar.number_input("repetition_penalty", min_value=0.0, max_value=10.0, value=1.2,
                                                 step=0.1)
    top_k = st.sidebar.slider("top_k", min_value=0, max_value=10, value=3, step=1)
    top_p = st.sidebar.number_input("top_p", min_value=0.0, max_value=1.0, value=0.95, step=0.01)

    parser = argparse.ArgumentParser()
    parser.add_argument('--batch_size', default=batch_size, type=int, help='生成标题的个数')
    parser.add_argument('--generate_max_len', default=generate_max_len, type=int, help='生成标题的最大长度')
    parser.add_argument('--repetition_penalty', default=repetition_penalty, type=float, help='重复处罚率')
    parser.add_argument('--top_k', default=top_k, type=float, help='解码时保留概率最高的多少个标记')
    parser.add_argument('--top_p', default=top_p, type=float, help='解码时保留概率累加大于多少的标记')
    parser.add_argument('--max_len', type=int, default=512, help='输入模型的最大长度,要比config中n_ctx小')
    args = parser.parse_args()

    content = st.text_area("输入新闻正文", max_chars=512)
    if st.button("一键生成摘要"):
        start_message = st.empty()
        start_message.write("正在抽取,请等待...")
        start_time = time.time()
        titles = predict_one_sample(model, tokenizer, device, args, content)
        end_time = time.time()
        start_message.write("抽取完成,耗时{}s".format(end_time - start_time))
        for i, title in enumerate(titles):
            st.text_input("第{}个结果".format(i + 1), title)
    else:
        st.stop()

具体API内每个函数的功能就不一一介绍了,可以直接去看API文档,非常详细。如果嫌英文看得麻烦的话,有很多中文翻译好的文档,大家可以自行检索。

API文档:https://docs.streamlit.io/

运行命令:

streamlit run app.py
or
streamlit run app.py --server.port your_port

目前github项目已经更新,可以直接clone后进行体验。

总结

真不是水了一篇,真的是想把好的东西带个大家。

有时候给模型做了优化或者做了一个新功能,给领导汇报时,用excel和postman进行展示时,总归是不美观的。如果仅需要极小的代价,有一个很好的观感,为什么不尝试一下呢?(也许还能装一下~~~)

喜欢的的同学们,记得点赞,关注,转载请说明出处哟!!!

整理不易,请多多点赞,关注,有问题的朋友也欢迎加我微信「logCong」、公众号「NLP工作站」、知乎「刘聪NLP」私聊,交个朋友吧,一起学习,一起进步。

我们的口号是“生命不止,学习不停”。

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值