转自AI Studio,原文链接:【飞桨+5G】基于飞桨的创新能力插件教学指导 - 飞桨AI Studio

基于飞桨的创新能力插件教学指导

“启航计划2022年5G消息开发者马拉松”是硬核桃5G消息开发者社区面向广大开发者的大型创意比赛,致力于持续挖掘优秀的创新人才,探索5G消息创新应用场景,丰富5G消息能力应用。本次比赛硬核桃社区准备了完备的5G消息技术基座,为不同特点的开发者提供在5G消息中实现奇思妙想的机会。鼓励开发者运用先进的技术、丰富的经验,开发出具有全新体验、全新交互的5G消息应用,解决生活中的实际问题。

比赛官网:启航计划2022年5G消息开发者马拉松 - 飞桨AI Studio

一、基于PaddleHub快速接入AI能力

PaddleHub封装了PaddlePaddle生态下的预训练模型,对模型进行统一管理并且可以一键预测。下面,我们一起来看看怎么用PaddleHub快速调用AI“超能力”!

代码仓库:GitHub - PaddlePaddle/PaddleHub: Awesome pre-trained models toolkit based on PaddlePaddle.(300+ models including Image, Text, Audio and Video with Easy Inference & Serving deployment)

In [ ]

# 在使用之前,我们需要一键安装PaddleHub
!pip install --upgrade paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple

1.机器翻译

2017 年,Google机器翻译团队在其发表的论文Attention Is All You Need中,提出了用于完成机器翻译(Machine Translation)等序列到序列(Seq2Seq)学习任务的一种全新网络结构——TransformerTranformer网络完全使用注意力(Attention)机制来实现序列到序列的建模,并且取得了很好的效果。

飞桨基于Transformer结构实现了transformer_zh-en模型,参数量为64M。该模型在CWMT2021的数据集进行了预训练,加载后可直接用于预测, 提供了中文翻译为英文的能力,如下所示,1行代码即可调用模型。

In [ ]

import paddlehub as hub

model = hub.Module(name='transformer_zh-en', beam_size=5)
src_texts = [
    '今天天气好棒!',
    '要不我们一起去颐和园逛逛吧?',
]

n_best = 3  # 每个输入样本的输出候选句子数量
trg_texts = model.predict(src_texts, n_best=n_best)
for idx, st in enumerate(src_texts):
    print('-'*30)
    print(f'src: {st}')
    for i in range(n_best):
        print(f'trg[{i+1}]: {trg_texts[idx*n_best+i]}')
------------------------------
src: 今天天气好棒!
trg[1]: The weather is wonderful this day!
trg[2]: The weather is great this day!
trg[3]: The weather is fine this day!
------------------------------
src: 要不我们一起去颐和园逛逛吧?
trg[1]: Shall we take a stroll around the Summer Palace?
trg[2]: Shall we take a look at the Summer Palace?
trg[3]: Why don't we take a stroll around the Summer Palace?

更详细的参数说明可查看文档:

2.语音识别

PaddleHub提供了一种适用于英文和中文的端到端语音识别模型U2 Conformer模型。

In [ ]

# 下载示例音频
!wget https://paddlehub.bj.bcebos.com/paddlehub_dev/test.wav

我们试听一下这段音频(需要运行本项目,并执行下面的代码):

In [ ]

import IPython
# 输入音频路径
wav_file = 'test.wav'

# 播放音频
IPython.display.Audio(filename=wav_file)
<IPython.lib.display.Audio object>

In [ ]

import paddlehub as hub

# 载入模型
asr = hub.Module(name='u2_conformer_wenetspeech', version='1.0.0')

# 模型预测
asr_output = asr.speech_recognize(wav_file)
print("Text:", asr_output)
Text: 未来的波及你当上国王了吗

更多详细参数说明可查看文档:

3.多轮对话

近年来,人机对话系统受到了学术界和产业界的广泛关注并取得了不错的发展。开放域对话系统旨在建立一个开放域的多轮对话系统,使得机器可以流畅自然地与人进行语言交互,既可以进行日常问候类的闲聊,又可以完成特定功能,以使得开放域对话系统具有实际应用价值。具体的说,开放域对话可以继续拆分为支持不同功能的对话形式,例如对话式推荐,知识对话技术等,如何解决并有效融合以上多个技能面临诸多挑战。

PaddleHub提供了plato-mini模型。该模型在十亿级别的中文对话数据上进行预训练,通过PaddleHub加载后可直接用于对话任务。

In [ ]

# 交互模式
import paddlehub as hub

model = hub.Module(name='plato-mini')
with model.interactive_mode(max_turn=3):
    # while True: # 如果需要一直对话,可以写成死循环
    for item in range(3):
        human_utterance = input().strip()
        print("[Human]: {}".format(human_utterance))
        robot_utterance = model.predict(human_utterance)[0]
        print("[Bot]: {}".format(robot_utterance))
[2022-04-26 13:17:02,820] [    INFO] - Already cached /home/aistudio/.paddlenlp/models/plato-mini/plato-mini.pdparams
[2022-04-26 13:17:11,988] [    INFO] - Found /home/aistudio/.paddlenlp/models/plato-mini/plato-mini-vocab.txt
[2022-04-26 13:17:11,991] [    INFO] - Found /home/aistudio/.paddlenlp/models/plato-mini/plato-mini-spm.model
[Human]: 你好,很高兴认识你!
[Bot]: 我也很高兴认识你,你是做什么工作的呀?
[Human]: 我是AI开发者,你呢?
[Bot]: 我现在还没有工作,我现在还在读高中。
[Human]: 你最喜欢哪一门课呀
[Bot]: 我喜欢生物学,你呢?

更多详细参数说明可查看文档:

4.OCR文本识别

PaddleHub提供了用于识别图片当中的汉字的OCR文本识别模型chinese_ocr_db_crnn_mobile Module。基于检测得到的文本框,继续识别文本框中的中文文字。之后对检测文本框进行角度分类。最终识别文字算法采用CRNN即卷积递归神经网络。该模型是一个超轻量级中文OCR模型,支持直接预测。

In [ ]

import paddlehub as hub
import cv2

ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")
result = ocr.recognize_text(images=[cv2.imread('test.png')], visualization=True)

print("识别结果:{}".format(result))

检测结果可视化:

特别地,在疫情期间,我们还可以基于OCR文字识别完成核酸统计,助力抗疫! 

更多关于OCR文字识别的应用,可参考:

5.本文审核

色情检测模型可自动判别文本是否涉黄并给出相应的置信度,对文本中的色情描述、低俗交友、污秽文爱进行识别。porn_detection_lstm模型采用LSTM网络结构并按字粒度进行切词,具有较高的分类精度。该模型最大句子长度为256字。

In [ ]

import paddlehub as hub

# 一键加载文本审核模型
porn_detection_lstm = hub.Module(name="porn_detection_lstm")

# 待审核文字
test_text = ["黄片下载", "打击黄牛党"]
input_dict = {"text": test_text}

results = porn_detection_lstm.detection(data=input_dict,use_gpu=True, batch_size=1)

for index, result in enumerate(results):
    print("'{}'有{:.2%}的概率是色情文本;有{:.2%}的概率不是色情文本".format(test_text[index], result['porn_probs'], result['not_porn_probs']))
[2022-04-25 22:37:07,822] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
'黄片下载'有98.79%的概率是色情文本;有1.21%的概率不是色情文本
 
'打击黄牛党'有0.04%的概率是色情文本;有99.96%的概率不是色情文本
 

更详细的参数说明可查看文档:

6.情感分析

情感倾向分析(Sentiment Classification,简称Senta)针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度,能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。该模型基于一个双向LSTM结构,情感类型分为积极、消极。

In [ ]

import paddlehub as hub

senta = hub.Module(name="senta_bilstm")
test_text = ["这家餐厅很好吃", "这部电影真的很差劲"]
results = senta.sentiment_classify(texts=test_text, batch_size=1)

for result in results:
    print("'{}'有{}的概率是积极的;有{}的概率是消极的".format(result['text'], result['positive_probs'], result['negative_probs']))
[2022-04-25 22:45:43,932] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
[2022-04-25 22:45:46,909] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
'这家餐厅很好吃'有0.9407的概率是积极的;有0.0593的概率是消极的
'这部电影真的很差劲'有0.02的概率是积极的;有0.98的概率是消极的

更详细的参数说明可查看文档:

7.词法分析

Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务。

In [ ]

import paddlehub as hub

lac = hub.Module(name="lac")
test_text = ["你今天做核酸了吗?"]

results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True)

for result in results:
    print(result['word'])
    print(result['tag'])
[2022-04-25 22:55:41,791] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
['你', '今天', '做', '核酸', '了', '吗', '?']
 
['r', 'TIME', 'v', 'n', 'xc', 'xc', 'w']
 

二、基于飞桨端到端开发套件创造AI能力

上面为大家提供了非常典型,同时也是非常实用的AI能力,你只需要1行代码就能完成调用。

但是,上面提供的AI能力可能并不能满足开发者的需求,因此,下面介绍如何针对开发者的场景创造新的AI能力。

1.自然语言处理任务:PaddleNLP

PaddleNLP支持12大任务:

  • 知识关联:包括首个覆盖中文全词类的知识库-百科知识树、中文知识标注框架,以及非常适用于中文挖掘任务的预训练语言模型。
  • 情感分析:情感预训练模型SKEP利用情感知识增强预训练模型, 在观点抽取、句子级和对象级情感分析等任务中获得SOTA效果。
  • 文本分类:提供基于RNN、CNN,以及ERNIE、BERT等预训练模型的文本分类方案。适用于情感分析、垃圾短信识别、新闻主题分类等多类任务。
  • 词法分析:百度词法分析(LAC),能够完成中文分词、词性标注、专名识别等任务。适用于语音指令解析、多轮交互式搜索、实体数据库构建等场景。
  • 信息抽取:针对命名实体识别、关系抽取、事件抽取等NLP领域核心信息抽取任务,提供传统RNN+CRF网络、预训练模型等多种方案,适用于信息挖掘、知识图谱构建等场景。
  • 语义匹配:基于SimNet 和 Sentence Transformers两种方案完成文本匹配任务。适用于文本相似度计算、自然语言推理、问答系统、信息检索等,
  • 问答系统:提供基于阅读理解的问答系统,着重提升模型鲁棒性、答案中观点极性判断的准确性等。提供基于BERT、ERNIE等预训练模型的成熟方案。
  • 对话系统:包含对话通用理解模型DGU,开放领域对话模型PLATO-2、UnifiedTransformer等前沿模型,并在百度千言数据集、聊天任务数据集DuConv上验证。
  • 文本生成:文本生成任务在各领域应用广泛。基于Sequence to Sequence网络和ERNIE-GEN等预训练模型,完成机器人对对联、写诗等任务。
  • 机器翻译:针对文本翻译任务提供基于Sequence to Sequence网络,以及预训练模型的两种方案。针对同声传译任务,开源业界领先模型STACL的PaddlePaddle 实现。
  • 文本摘要:文本摘要任务按照输出类型可分为抽取式摘要和生成式摘要。这里提供生成式模型—指针生成网络的PaddlePaddle 实现。
  • 文本图学习:图神经网络在工业中有众多应用,如搜索场景,社交推荐。飞桨PGL-ErnieSage ,有效结合GraphSAGE和ERNIE的优点,可以同时建模文本语义与图结构信息。

In [ ]

# 安装PaddleNLP 安装好以后请重启环境
!pip install --upgrade paddlenlp>=2.0.0rc -i https://pypi.org/simple

快速上手:一键加载预训练词向量

In [ ]

from paddlenlp.embeddings import TokenEmbedding

wordemb = TokenEmbedding("w2v.baidu_encyclopedia.target.word-word.dim300")

# 计算2个词之间的相似度
print(wordemb.cosine_sim("国王", "王后"))
[2022-04-26 14:43:21,521] [    INFO] - Loading token embedding...
[2022-04-26 14:43:28,477] [    INFO] - Finish loading embedding vector.
[2022-04-26 14:43:28,480] [    INFO] - Token Embedding info:             
Unknown index: 635963             
Unknown token: [UNK]             
Padding index: 635964             
Padding token: [PAD]             
Shape :[635965, 300]
0.63395125

开发者应用案例

因为本文篇幅有限,所以上面提到的任务就不在这里详细介绍了,有很多开发者基于PaddleNLP开发了很多AI应用,大家可以参考:

更多案例详见:开源项目 - 飞桨AI Studio - 人工智能学习与实训社区

更多功能详见GitHub - PaddlePaddle/PaddleNLP: Easy-to-use and Fast NLP library with awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications.

2.语音技术:PaddleSpeech

PaddleSpeech是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型,一些典型的应用示例有语音识别语音翻译 (英译中)语音合成

In [ ]

# 环境准备:安装paddlespeech和paddleaudio
!pip install --upgrade pip && pip install paddlespeech paddleaudio -U

In [ ]

# 获取示例音频
!test -f ./dog.wav || wget https://paddlespeech.bj.bcebos.com/PaddleAudio/dog.wav

快速上手:声音分类

安装完成后,开发者可以通过命令行快速开始,改变 --input 可以尝试用自己的音频或文本测试。

In [ ]

!paddlespeech cls --input dog.wav
Dog 0.7919361591339111 

语音识别

输入一段语音,输出这段语音的文字。

In [14]

!paddlespeech asr --lang zh --input test.wav

如果需要训练或者微调,请查看语音识别文档

语音合成

除了识别语音里的文字,我们还可以给定一段文字,输出它的语音。

In [15]

!paddlespeech tts --input "你好,欢迎使用百度飞桨深度学习框架!" --output output.wav

如果需要训练或者微调,请查看语音合成文档

开发者应用案例

因为本文篇幅有限,所以上面提到的任务就不在这里详细介绍了,有很多开发者基于PaddleSpeech开发了很多AI应用,大家可以参考:

更多案例详见:开源项目 - 飞桨AI Studio - 人工智能学习与实训社区

更多功能详见GitHub - PaddlePaddle/PaddleSpeech: Easy-to-use Speech Toolkit including SOTA/Streaming ASR witch punctuation, influential TTS with text frontend, Speaker Verification System and End-to-End Speech Simultaneous Translation.

3.计算机视觉:PaddleCV

PaddleCV是飞桨视觉模型库,提供大量高精度、高推理速度、经过产业充分验证的智能视觉模型,覆盖各类任务场景。可使用PaddleClasPaddleDetPaddleSeg等端到端的开发套件,打通模型开发、训练、压缩、部署全流程,并支持超大规模分类等进阶功能,为开发者提供高效顺畅的开发体验。

在计算机视觉领域中,有着非常多的应用案例:

基于PaddleCV的图像分类任务的实现

图像分类是计算机视觉的基础任务,卷积神经网络通过利用图像像素信息作为输入,最大程度保留输入图像的所有信息,并通过卷积操作提取特征,模型直接输出图像分类的结果,实现端到端的学习。

基于PaddleCV的人体姿态估计与追踪任务的实现

人体骨骼关键点检测主要通过检测人体的关键点,如关节和五官等,描述人体的骨骼信息进而估计人体的姿态以及追踪人体的动作。

基于PaddleCV的语义分割任务的实现

语义分割是在像素级别上的分类,将属于同一类的像素分为一类。

基于PaddleCV的目标检测任务的实现

目标检测是计算机视觉领域的核心问题之一,不同于关心图像整体的分类任务,检测更关注特定的物体目标,以获得目标的类别信息和位置信息。

三、总结与升华

PaddlePaddle针对文本语音图像等类型的数据提供了很多优质的模型,也欢迎各位开发者基于现有模型做创新,创造出更多AI超能力!

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐