【DeepLearning.AI】吴恩达系列课程——使用Gradio构建AI应用

news2024/11/16 19:33:15

目录

  • 前言
  • 一、Gradio介绍
    • 1-1、Gradio介绍
    • 1-2、安装
    • 1-3、小栗子
  • 二、使用Gradio构建AI应用
    • 2-1、NLP任务
      • 2-1-1、文本摘要
      • 2-1-2、命名实体识别
    • 2-2、聊天任务(ChatYuan)
      • 2-2-1、模型介绍
      • 2-2-2、模型下载、参数设置
      • 2-2-3、模型测试
      • 2-2-4、嵌入到Gradio里
      • 2-2-5、gr.Chatbot()
  • 附录一:使用HuggingFace来下载模型
    • 1、如何手动下载模型?
  • 附录二:使用魔搭社区来下载模型
    • 1、魔搭社区介绍
    • 2、特点

前言

Gradio可以让你快速构建用户界面,无需编写太多代码,使用Gradio构建AI应用(NLP任务、图像生成任务、聊天机器人任务等)

一、Gradio介绍

1-1、Gradio介绍

Gradio

  • Gradio是一个用于构建交互式界面的Python库。它可以帮助您快速创建自定义的Web界面,用于展示和测试机器学习模型、自然语言处理模型、计算机视觉模型等。

  • Gradio使得构建交互式界面变得非常简单,无需编写繁琐的HTML、CSS和JavaScript代码。您可以使用Gradio来创建一个具有输入字段(如文本输入或图像上传)和输出字段(如模型预测结果)的界面,用户可以直接与您的模型进行交互。

  • Gradio支持多种输入和输出类型,包括文本、图像、音频和视频。您可以通过定义回调函数来处理输入,并将输出返回给用户。Gradio还提供了自动化的界面布局和样式,使得界面设计变得简单而直观。

在这里插入图片描述

1-2、安装

安装:Gradio需要python版本为3.8以上

pip install python
pip install gradio

# update
pip install --upgrade gradio -i https://mirror.baidu.com/pypi/simple

1-3、小栗子

小栗子:将会在浏览器自动弹出(地址: http://localhost:7860)

gr.Interface类: 可以使用用户界面包装任何函数

  • fn: 要运行的函数或模型。这个函数接受输入并返回输出。
  • inputs: 输入组件的类型和顺序。可以使用字符串表示组件类型(如"text"、“checkbox”、"slider"等),也可以使用Gradio提供的组件对象(如gr.TextInput()、gr.Checkbox()、gr.Slider()等)。
  • outputs: 输出组件的类型和顺序。同样可以使用字符串或Gradio提供的组件对象表示。
import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")

    
if __name__ == "__main__":
    demo.launch()   

输出
在这里插入图片描述

有关于Gradio的一些基础知识可以查看我的另一篇文章: 【完全攻略】Gradio:建立机器学习网页APP

二、使用Gradio构建AI应用

2-1、NLP任务

2-1-1、文本摘要

概述:这里我们使用到的是DistilBART,可以在HuggingFace官网下载模型,地址:https://huggingface.co/sshleifer/distilbart-cnn-12-6, 模型下载以及使用方法详见附录。文本摘要使用到的模型为
distilbart-cnn-12-6。更多huggingFace的更多使用方法请详见我的另一篇文章:【完全攻略】畅游NLP海洋:HuggingFace的快速入门
在这里插入图片描述

  • 使用Gradio构建文本摘要应用代码如下
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import gradio as gr

# 使用我们下载到本地的模型
model = AutoModelForSeq2SeqLM.from_pretrained('./model/distilbart-cnn-12-6')
tokenizer = AutoTokenizer.from_pretrained('./model/distilbart-cnn-12-6')
get_completion = pipeline("summarization", model=model, tokenizer=tokenizer)

# 输入文本,调用模型来返回输出
def summarize(input):
    output = get_completion(input)
    return output[0]['summary_text']


gr.close_all()
demo = gr.Interface(fn=summarize, inputs="text", outputs="text")
demo.launch(share=True)

结果如下
在这里插入图片描述

  • 改进版如下,其中输入部分引入了gradio组件Textbox。
  • gradio.Textbox是Gradio库中的一个组件,它创建了一个文本区域,用户可以在这个区域中输入字符串或者显示字符串输出。
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import gradio as gr

model = AutoModelForSeq2SeqLM.from_pretrained('./model/distilbart-cnn-12-6')
tokenizer = AutoTokenizer.from_pretrained('./model/distilbart-cnn-12-6')
get_completion = pipeline("summarization", model=model, tokenizer=tokenizer)


def summarize(input):
    output = get_completion(input)
    return output[0]['summary_text']


gr.close_all()
demo = gr.Interface(fn=summarize,
                    inputs=[gr.Textbox(label="Text to summarize", lines=6)],
                    outputs=[gr.Textbox(label="Result", lines=3)],
                    title="Text summarization with distilbart-cnn",
                    description="Summarize any text using the `shleifer/distilbart-cnn-12-6` model under the hood!"
                   )
demo.launch()

结果如下
在这里插入图片描述

2-1-2、命名实体识别

概述:命名实体识别这里用到的模型为bert-base-NER,与上边的文本摘要一样,也是将模型下载到本地之后调用。

from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForTokenClassification
import gradio as gr

model = AutoModelForTokenClassification.from_pretrained('./model/bert-base-NER')
tokenizer = AutoTokenizer.from_pretrained('./model/bert-base-NER')
get_completion = pipeline("token-classification", model=model, tokenizer=tokenizer)


def ner(input):
    output = get_completion(input)
    return {"text": input, "entities": output}


gr.close_all()
demo = gr.Interface(fn=ner,
                    inputs=[gr.Textbox(label="Text to find entities", lines=2)],
                    # gr.HighlightedText是Gradio库中的一个组件,它创建了一个可以高亮显示文本的区域。你可以在gr.HighlightedText中使用label参数来设置文本区域的标签
                    outputs=[gr.HighlightedText(label="Text with entities")],
                    title="NER with dslim/bert-base-NER",
                    description="Find entities using the `dslim/bert-base-NER` model under the hood!",
                    allow_flagging="never",
                    #Here we introduce a new tag, examples, easy to use examples for your application
                    examples=["My name is Andrew and I live in California", "My name is Poli and work at HuggingFace"])
demo.launch(share=True)

输出
在这里插入图片描述

2-2、聊天任务(ChatYuan)

2-2-1、模型介绍

概述:这里我们使用到的模型元语功能型对话大模型,下载模型网站为魔搭社区,详见附录二。模型链接:https://modelscope.cn/models/ClueAI/ChatYuan-large/summary

介绍:ChatYuan: 元语功能型对话大模型,这个模型可以用于问答、结合上下文做对话、做各种生成任务,包括创意性写作,也能回答一些像法律、新冠等领域问题。它基于PromptCLUE-large结合数亿条功能对话多轮对话数据进一步训练得到。
PromptCLUE-large在1000亿token中文语料上预训练,累计学习1.5万亿中文token,并且在数百种任务上进行Prompt任务式训练。针对理解类任务,如分类、情感分析、抽取等,可以自定义标签体系;针对多种生成任务,可以进行采样自由生成。

在这里插入图片描述

2-2-2、模型下载、参数设置

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.models.nlp import T5ForConditionalGeneration
from modelscope.preprocessors import TextGenerationT5Preprocessor
model = T5ForConditionalGeneration.from_pretrained('ClueAI/ChatYuan-large', revision='v1.0.0')
preprocessor = TextGenerationT5Preprocessor(model.model_dir)
pipeline_t2t = pipeline(task=Tasks.text2text_generation, model=model, preprocessor=preprocessor)

def preprocess(text):
  text = text.replace("\n", "\\n").replace("\t", "\\t")
  return text

def postprocess(text):
  return text.replace("\\n", "\n").replace("\\t", "\t")

def answer(text, sample=True, top_p=1, temperature=0.7):
  '''sample:是否抽样。生成任务,可以设置为True;
  top_p:0-1之间,生成的内容越多样'''
  text = preprocess(text)
  
  if not sample:
    out_text = pipeline_t2t(text, return_dict_in_generate=True, output_scores=False, max_new_tokens=2048, num_beams=1, length_penalty=0.6)
  else:
    out_text = pipeline_t2t(text, return_dict_in_generate=True, output_scores=False, max_new_tokens=2048, do_sample=True, top_p=top_p, temperature=temperature, no_repeat_ngram_size=3)
  
  return postprocess(out_text["text"])

2-2-3、模型测试

单轮对话

input_text = '为什么地球是圆的?'
input = "用户:" + input_text + "\n小元:"
output_text = answer(input)
print(f"{input}{output_text}")

输出

用户:为什么地球是圆的?
小元:地球上的地球是圆形的,这是从地球公转的角度而言。地球公自转方向由南向北,自转周期为12天,自重为1010kg,公转轨道为椭圆。地球自转一周为360度,其自转速度为1440kmh,公自重是950kg。地球的自转轴为南北极,自自转角度为360,公转动角为340。地球绕太阳公转一圈需要326天,绕月亮公转一周需要448天。地球与太阳公自,自,公,自公转的间隔是36552413天,太阳和地球之间公自的间隔为3365944天。

2-2-4、嵌入到Gradio里

#Back to Lesson 2, time flies!
import gradio as gr
def generate(input, slider):
    output = answer("用户:" + input + "\n小元:")
    print(output)
    return output

demo = gr.Interface(fn=generate, 
                    inputs=gr.Textbox(label="Prompt"), 
                    outputs=[gr.Textbox(label="Completion")])

gr.close_all()
demo.launch(share=True)

图示如下
在这里插入图片描述

2-2-5、gr.Chatbot()

概述:gr.Chatbot()接口是专为聊天机器人设计的接口,允许保存聊天历史,并且展示在app上。

import random
import gradio as gr


def respond(message, chat_history):
        #No LLM here, just respond with a random pre-made message
        bot_message = random.choice(["Tell me more about it",
                                     "Cool, but I'm not interested",
                                     "Hmmmm, ok then"])
        chat_history.append((message, bot_message))
        return "", chat_history


with gr.Blocks() as demo:
	# 聊天框
    chatbot = gr.Chatbot(height=240) #just to fit the notebook
    # 输入框
    msg = gr.Textbox(label="Prompt")
    # 提交按钮
    btn = gr.Button("Submit")
    # 清空内容按钮
    clear = gr.ClearButton(components=[msg, chatbot], value="Clear console")
	
	# 提交按钮的功能函数
    btn.click(respond, inputs=[msg, chatbot], outputs=[msg, chatbot])
    msg.submit(respond, inputs=[msg, chatbot], outputs=[msg, chatbot]) #Press enter to submit

gr.close_all()
demo.launch(share=True)

图示如下
在这里插入图片描述

附录一:使用HuggingFace来下载模型

1、如何手动下载模型?

  • 访问官网https://huggingface.co/models, 搜索我们想要的模型
    在这里插入图片描述

  • 找到我们需要的文件(如果不知道下载哪个就全部下载),这里全部下载,放在本地文件夹下

  • 将这些文件放在指定文件夹内调用(我这里放置的文件夹是当前的bert-base-uncased文件夹内)
    在这里插入图片描述

  • 详细使用pipeline调用,点击use in Transformers按钮。
    在这里插入图片描述

  • 调用代码如下

# 使用pipeline去下载,极大可能会因为网络问题中断!
# Use a pipeline as a high-level helper
from transformers import pipeline

pipe = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6")

# 使用下载到本地的模型,推荐
# Load model directly
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tokenizer = AutoTokenizer.from_pretrained("sshleifer/distilbart-cnn-12-6")
model = AutoModelForSeq2SeqLM.from_pretrained("sshleifer/distilbart-cnn-12-6")

附录二:使用魔搭社区来下载模型

1、魔搭社区介绍

11 月 3 日,达摩院联手中国计算机学会(CCF)开源发展委员会重磅推出AI 模型社区魔搭 ModelScope,首批合作方还包括澜舟科技、智谱AI、深势科技、中国科学技术大学等多家科研机构,旨在打造下一代开源的模型即服务共享平台,致力降低 AI 应用门槛。

主页如下所示:https://modelscope.cn/home
在这里插入图片描述

2、特点

  • 下载速度快:相比于HuggingFace,使用魔法的龟速下载,魔搭社区无需梯子下载速度即可达到10M+/s。
    在这里插入图片描述
  • 使用简洁:这里以sd模型为例,直接复制用法即可下载使用。
    在这里插入图片描述
  • 提供微调方法、以及其他优秀大模型,加速AI开发者的开发进度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1262379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大学生奖学金答辩模板

大学生奖学金答辩模板 前言大学生奖学金答辩模板自制答辩稿 前言 未经同意,请勿转载,请勿商用 这里share 一下近期做的PPT,目前已经抽离成模板,在PPT演讲备注中添加了相关的替换规则及稿子。 这里主要做的是SCUT的模板&#xff0…

如何生成唯一ID:探讨常用方法与技术应用

文章目录 1. UUID(Universally Unique Identifier)2. 数据库自增ID3. Twitter的Snowflake算法4. 数据库全局唯一ID(Global Unique Identifier,GUID)结语 🎉如何生成唯一ID:探讨常用方法与技术应…

vue3(三)-基础入门之v-model双向绑定、v-model修饰符

一、v-model 双向绑定 监听用户的输入事件来实时更新数据&#xff0c;多用于表单 input、textarea以及select元素上 <div id"app"><input type"text" v-model"myInputText" /><!-- 等价于&#xff1a; --><input type&qu…

Vue基础入门(四):Vue3快速开发模板

快速开发Vue的解决方案 ​ Vue 的开发需要的 node 环境&#xff0c;其实上在开发的过程中会遇到一些你想不到的问题&#xff0c;比如 npm工具的版本和 node 环境不匹配&#xff08;你把其他项目导入到自己的环境&#xff09; ​ vue-element-admin&#xff08;是一个官方提供…

网络安全小白自学

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

buuctf web [RoarCTF 2019]Easy Calc

试了一下&#xff0c;数字可以计算&#xff0c;但字符被过滤了&#xff0c;打开源码看看 源码里提示&#xff0c;有waf,并且发现了一个新页面 访问新页面 show_source&#xff08;&#xff09; show_source()函数用于将指定文件的源代码输出到浏览器或者写入到文件中。 show_s…

【日常总结】优雅升级Swagger 2 升至 3.0, 全局设置 content-type application/json

目录 一、场景 二、问题 三、解决方案 四、延伸 上一节&#xff1a;【日常总结】Swagger-ui 导入 showdoc &#xff08;优雅升级Swagger 2 升至 3.0&#xff09;-CSDN博客 一、场景 接上一节&#xff1a;在 Swagger3Config extends WebMvcConfigurationSupport&#xff0c…

好看的css样式案例网站

uiverse 网站地址&#xff1a;https://uiverse.io/all 比如说我们要这个案例的代码 点击get code就可以了 右侧有完整的示例代码。 svg波浪生成器 网站&#xff1a;https://getwaves.io/ 根据自己需求调节好之后点击这个下载按钮就可以了

【阅读记录】《联邦学习》杨强

第2章 隐私、安全及机器学习 2.3 威胁与安全模型 2.3.1 隐私威胁模型 对机器学习系统的攻击可能在任何阶段发生&#xff0c;包括数据发布、模型训练和模型推理。 模型训练阶段&#xff1a;重构攻击&#xff08;避免使用寻存储显式特征值的模型&#xff0c;SVM KNN等&…

Java之面向对象《ATM自动取款机》

一、前言&#xff1a; 关于上次我写的博客文章中"Java之《ATM自动取款机》(面向对象)"&#xff0c;里面还不够完善&#xff0c;因为在各个服务功能相互跳转时&#xff0c;会出现混乱问题。这次我对其进行了修改和改进&#xff0c;若还有其它在大家测试时出现的bug请及…

Java根据指定端口关闭进程(端口占用 Web server failed to start. Port 6061 was already in use.)

查询指定端口的pid netstat -ano | findstr 6063杀掉进程 taskkill /f /pid 36804

vue跨域请求

vue.config.js devServer:{proxy:"http://localhost:8081"}main.js中定义 import axios from "axios"; axios&#xff0c; App.vue中引用 <template><Article/> </template><script> import Article from "/components/Ar…

事件机制?

事件流&#xff1a; 描述的页面接收事件的顺序。先进行事件捕获 到达目标元素 在进行事件冒泡 分为事件捕获和事件冒泡 事件冒泡&#xff1a;从具体元素从内向外依次触发事件 从下面这个小案例可以清楚了解什么是事件冒泡 <!DOCTYPE html> <html lang"en"…

BUUCTF 我吃三明治 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 下载附件&#xff0c;解压得到一张.jpg图片。 解题思路&#xff1a; 1、使用010 Editor打开.jpg文件&#xff0c;在.jpg文件尾的位置发现了第二张图片&#x…

陪诊系统|沈阳陪诊系统定制|陪诊软件保障患者安全与便利

陪诊系统是一种以专业医疗服务为核心的综合性陪同体系。它涵盖了医院前线咨询、专业陪诊、医后关怀等多个环节&#xff0c;提供全方位的医疗咨询服务和专业的医疗陪同服务。通过陪诊系统&#xff0c;患者可以获得更加便捷、高效、安全的医疗服务体验。陪诊系统的出现&#xff0…

pyenv local x.xx.x不生效

我本地原来有个python&#xff0c;之后用pip安装了pyenv&#xff0c;使用pyenv新安装了一个python&#xff0c;设置某个local的时候发现不生效。 这种情况需要检查3个地方。 1.有没有生成这个文件 2.需要重新开一个cmd 3.需要保证pyenv的path环境变量比之前本地的python优先…

【每日一题】子数组的最小值之和

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贡献法单调栈 写在最后 Tag 【贡献法】【单调栈】【数组】【2023-11-27】 题目来源 907. 子数组的最小值之和 题目解读 计算整数数组的连续子数组中最小值的和。 解题思路 本题朴素的解决思想是求出所有的连续子数组…

美团小游戏rpk包对接流程小记

美团小游戏rpk包对接流程小记 美团小游戏开发时&#xff0c;其实很简单&#xff0c;和各大厂差不多。 一、先贴个文档&#xff1a; 美团游戏开放平台文档地址&#xff1a; https://game.meituan.com/#/docs二、接入前准备&#xff1a; 与微信抖音小游戏的流程差不多&#xf…

A preview error may have occurred. Switch to the Log tab to view details.

我们在学习鸿蒙应用开发的UIAbility内页面间的跳转内容的时候会遇到页面无法跳转的问题。并伴随标题的error报错 Entry Component struct Index {build() {Column({ space: CommonConstants.COLUMN_SPACE }) {//UIAbility内页面间的跳转Button(Next).onClick(() > {router.…

Matplotlib散点图的创建_Python数据分析与可视化

Matplotlib散点图的创建 plot绘制散点图scatter画散点图plot与scatter效率对比 plot绘制散点图 散点图也是在数据科学中常用图之一&#xff0c;前面的文章我们学习了使用plt.plot/ax.plot画线形图的方法。同样的&#xff0c;现在用这些函数来画散点图&#xff1a; x np.lins…