开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
EasyDL零门槛AI开发平台

    EasyDL文本-文本分类快速开始

    示例场景说明

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

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

    实现步骤

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

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

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

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

    图片

    Step2:提前准备训练数据

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

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

    图片

    Step3:使用EasyDL训练文本分类

    我们有账号之后可以在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

    更多参考

    百度EasyDL平台简介

    如何获取API Key及Secret Key

    上一篇
    EasyDL图像-物体检测快速开始
    下一篇
    EasyDL零售行业版快速开始