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

MySQL微服务机器学习

写在前面

大家好,我是刘聪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  

      

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

核心代码如下:


          
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进行展示时,总归是不美观的。如果仅需要极小的代价,有一个很好的观感,为什么不尝试一下呢?(也许还能装一下~~~)

请多多关注本人知乎「刘聪NLP」,有问题的朋友也欢迎加我微信「logCong」**** 私聊,交个朋友吧,一起学习,一起进步** 。**

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

往期推荐

Python加密器:修改CPython解释器来保护Python代码

EMNLP2021之AEDA:一种更简单的文本分类数据增强技术

授人以鱼不如授人以渔

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
vivo 容器化平台架构与核心能力建设实践
为了实现规模化降本提效的目标,vivo 确定了基于云原生理念构建容器化生态的目标。在容器化生态发展过程中,平台架构不断演进,并针对业务的痛点和诉求,持续完善容器化能力矩阵。本次演讲将会介绍 vivo 容器化平台及主要子系统的架构设计,并分享重点建设的容器化核心能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论