所有文档

          EasyDL定制AI训练平台

          EasyDL经典版-文本分类快速开始

          示例场景说明

          目前不少互联网内容平台或者电商平台中有用户评论模块,往往都需要人工维护评论信息,如将评论信息中好的评论与坏的评论进行分类,或者将评论信息中的广告信息能有效过滤/甄别出来,当评论内容越来越高时,人工维护评论的成本就越高。而越来越多的垂直内容平台由于评论信息内容多样,内容不一,为实现更好的文本分类效果,往往需要定制企业专属的文本分类能力。

          某个酒店信息聚合平台,希望在其官网的评论模块中增加自动分类功能,能支持将好的评价和不好的评价自动分类,方便酒店管理者在后台查看,同时该网站缺少相关AI算法工程师及算力资源,如何能更高效更低成本的获取定制文本分类服务,成为该服务商面临的一大难题。无意中了解到百度EasyDL可以灵活定制并可以快速上手获得业务所需的高精度AI能力,刚好可以解决该服务商面临的问题。

          实现步骤

          只需四步即可完成定制文本分类AI模型的训练,以及将模型以云端API形式发布并集成在自有网站中使用。

          Step1:成为百度AI开放平台的开发者

          要训练百度AI开放平台EasyDL文本分类模型先要成为百度AI开放平台的开发者,首先让我们花5分钟来注册百度AI开放平台的开发者 (如果您已经是开发者可跳过此步骤)

          先点击此处注册百度账户进入 如下图 的页面快速的建立一个百度账号吧。

          图片

          Step2:提前准备训练数据

          文本分类需要的训练集都是文本数据,为实现一个文本分类模型,在数据准备上需要为希望实现的每个分类建立不同的文件夹,每个文件夹的名称定义为一个分类,每个文件夹下是每个分类的训练文本,每个文本保存为一个txt文件。

          例:这是一个两分类的数据集,good文件夹内有许多txt文件,每个文件的内容都是好评评论,bad文件夹内类似,都是差评评论数据集。

          图片

          Step3:使用EasyDL经典版训练文本分类

          我们有账号之后可以在EasyDL官网登录,并且进入经典版—文本分类 训练页面

          图片

          在创建模型之前,我们需要上传我们之前准备好存放有分类目录和文本文件的压缩包,我们先点击菜单 创建数据集 创建一个数据集

          图片

          接下来我们针对这个创建完成的数据集上传压缩包

          图片

          图片

          创建完数据集后,我们需要创建一个模型,简单填写完一些信息后我们就完成了模型的创建

          图片

          创建完成模型后我们就可以开始训练模型了,在模型列表中点击列表中的训练开始模型的训练

          图片

          训练模型步骤非常简单,在左上角选择完模型后,点击添加数据集按钮添加我们之前上传的文本数据集,就进入了后台训练环节

          图片

          之后完成模型的创建,创建完成后模型开始一段时间的训练,在进行下一步之前我们需要等待模型的训练完成

          图片

          等待训练完成后我们可以在列表中看到模型的效果指标数据,由于文本分类暂时只支持云端发布,我们在列表页中最后的操作栏选择发布云服务

          图片

          进入发布页后,需要我们输入一个自定义在线服务地址,即之后正式调用的服务地址

          图片

          等待发布完成后我们可以通过云服务的 服务详情 按钮查看服务地址

          图片

          接下来为了能够安全的使用刚刚创建的在线服务,我们点击立即使用,跳转到百度云控制台创建一个应用

          图片

          图片

          填写信息创建完成后,我们需要查看API KEY 以及 Secret KEY,之后在调用在线服务的时候需要它们,至此我们完成了模型的创建训练工作,之后让我们用一些简单的客户端代码来调用这个服务

          图片

          Step4: 通过使用在线API测试所训练的模型效果

          第三步最后API KEY 以及 Secret KEY,以及第二步的数据,我们就可以写一个示例代码调用我们之前创建并训练完成酒店评论文本分类模型

          准备开发环境

          我们选择用python来快速搭建一个原型,如果没有接下来需要安装一下python。可以参考下表列出的不同操作系统的安装方法进行安装。

          Python的官方下载地址:下载python

          Windows 快速测试包

          windows平台的用户如果对上述的python安装感到困难,可以下载我们的一键测试包,下载地址:windows测试包

          解压zip文件后,双击run.bat即可测试。

          编写代码

          新建一个 main.py

          粘贴以下内容,不要忘记替换你的 API_KEY 以及 SECRET_KEY

          # coding=utf-8
          
          import sys
          import json
          
          
          # 保证兼容python2以及python3
          IS_PY3 = sys.version_info.major == 3
          if IS_PY3:
              from urllib.request import urlopen
              from urllib.request import Request
              from urllib.error import URLError
              from urllib.parse import urlencode
              from urllib.parse import quote_plus
          else:
              import urllib2
              from urllib import quote_plus
              from urllib2 import urlopen
              from urllib2 import Request
              from urllib2 import URLError
              from urllib import urlencode
              reload(sys)  
              sys.setdefaultencoding('utf8')
          
          # 防止https证书校验不正确
          import ssl
          ssl._create_default_https_context = ssl._create_unverified_context
          
          # 百度云控制台获取到ak,sk以及
          # EasyDL官网获取到URL
          
          # ak
          API_KEY = 'RgdpDFjOHmRQvphsi8bLhIYE'
          
          # sk
          SECRET_KEY = 'ja1pDyGaF3vgwPNW3T0EqEkkd5hgl8ug'
          
          # url
          EASYDL_TEXT_CLASSIFY_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/text_cls/hotel_comment"
          
          """  TOKEN start """
          TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'
          
          """
              获取token
          """
          def fetch_token():
              params = {'grant_type': 'client_credentials',
                        'client_id': API_KEY,
                        'client_secret': SECRET_KEY}
              post_data = urlencode(params)
              if (IS_PY3):
                  post_data = post_data.encode('utf-8')
              req = Request(TOKEN_URL, post_data)
              try:
                  f = urlopen(req, timeout=5)
                  result_str = f.read()
              except URLError as err:
                  print(err)
              if (IS_PY3):
                  result_str = result_str.decode()
          
              result = json.loads(result_str)
          
              if ('access_token' in result.keys() and 'scope' in result.keys()):
                  if not 'brain_all_scope' in result['scope'].split(' '):
                      print ('please ensure has check the  ability')
                      exit()
                  return result['access_token']
              else:
                  print ('please overwrite the correct API_KEY and SECRET_KEY')
                  exit()
          
          
          """
              调用远程服务
          """
          def request(url, data):
              if IS_PY3:
                  req = Request(url, json.dumps(data).encode('utf-8'))
              else:
                  req = Request(url, json.dumps(data))
                  
              has_error = False
              try:
                  f = urlopen(req)
                  result_str = f.read()
                  if (IS_PY3):
                      result_str = result_str.decode()
                  return result_str
              except  URLError as err:
                  print(err)
          
          
          
          if __name__ == '__main__':
          
          
              # 获取access token
              token = fetch_token()
          
              # 拼接url
              url = EASYDL_TEXT_CLASSIFY_URL + "?access_token=" + token
          
              # 好评
              text_good = "这个酒店不错,干净而且安静,早餐也好吃"
          
              # 差评
              text_bad = "不怎么干净,服务员态度也差强人意,以后不会在预订了"
             
          
              # 请求接口
              # 测试好评
              response = request(url, 
                  {
                      'text': text_good,
                      'top_num': 2
                  })
          
              result_json = json.loads(response)
          
              result = result_json["results"]
          
              # 打印好评结果
              print(text_good)
              for obj in result:
                  print("  评论类别:" + obj['name'] + "    置信度:" + str(obj['score']))
              print("")
          
              # 请求接口
              # 测试差评
              response = request(url, 
                  {
                      'text': text_bad,
                      'top_num': 2
                  })
          
              result_json = json.loads(response)
          
              result = result_json["results"]
          
              # 打印差评结果
              print(text_bad)
              for obj in result:
                  print("  评论类别:" + obj['name'] + "    置信度:" + str(obj['score']))

          运行代码

          在命令行中运行python main.py

          您还可以在我们的github地址中找到main.py

          结果

          若代码正确运行,命令行界面上会显示出运行结果:

          这个酒店不错,干净而且安静,早餐也好吃
            评论类别:good    置信度:0.974235713482
            评论类别:bad    置信度:0.0257642995566
          
          不怎么干净,服务员态度也差强人意,以后不会在预订了
            评论类别:bad    置信度:0.850781261921
            评论类别:good    置信度:0.149218738079

          结果中返回了每个待分类文本的分类以及置信度,置信度高的分类说明预测的文本属于这个分类的可能越大,这样我们就能将上述酒店评论分为好评,差评了,详细的返回和参数文档需要参照API文档EasyDL 经典版文本分类API参考文档

          了解更多

          除上文提到的场景外,EasyDL还有更多的AI定制化能力用于满足各个行业的各种场景,您可以点击这里 了解更多

          示例源代码

          您可以在我们的官方github上下载示例源码

          https://github.com/Baidu-AIP/QuickStart/tree/master/EASYDL-TEXT-CLASSIFY

          产品特色

          一站式AI服务:

          EasyDL提供围绕AI服务开发的端到端的一站式AI开发和部署平台,包括数据上传、数据标注、训练任务配置及调参、模型效果评估、模型部署,同时EasyDL面向不同用户提供了不同的训练平台,包括适用AI零基础或追求高效率开发的用户使用的经典版、适用AI初学者和AI专业用户使用的专业版、专为零售行业客户提供的零售版三种平台级方案,方便各类企业用户及个人开发者使用。

          高精度模型效果

          EasyDL基于基于Paddle Paddle飞桨深度学习框架构建而成,内置丰富百度用户百亿级大数据训练的成熟预训练模型,底层结合百度自研的AutoDL/AutoML技术,基于少量数据就能获得出色效果和性能的模型。

          丰富的服务部署方式

          EasyDL模型训练阶段需要在线训练。训练完成后,可将模型部署在公有云服务器、私有本地服务器,封装成可离线运行的设备端SDK,或直接购买软硬一体方案,有效应对各种业务场景对模型部署要求。

          完善安全的数据服务

          数据对于模型效果至关重要,在数据服务上,EasyDL除提供基础的数据上传、存储、标注外,额外提供线下采集及标注支持、智能标注、多人标注、云服务数据管理等多种数据管理服务,大幅降低企业用户及开发者的训练数据处理成本,有效提高标注效率。

          更多参考

          百度EasyDL平台简介

          如何获取API Key及Secret Key

          上一篇
          经典版-物体检测快速开始
          下一篇
          专业版-图像分类快速开始