【百度AI语义分析实践】搭建批处理系统 您所在的位置:网站首页 语义分析系统官网 【百度AI语义分析实践】搭建批处理系统

【百度AI语义分析实践】搭建批处理系统

2023-10-13 12:29| 来源: 网络整理| 查看: 265

我正在参与掘金创作者训练营第4期,点击了解活动详情,一起学习吧!

故事背景

友圈一位要做毕设的小姐姐在求助postman怎么用,我就帮她答疑了一下。

我知道她的专业不是计算机相关的,所以很奇怪为什么要用postman。

原来她的毕设是要基于微博上最近10年关于房价的话题数据,来做分析,做未来房价的走势预测,训练模型。

她经过一番调研之后决定用百度的【语言处理技术】,实现基础数据的语义分析,即:情感极性分类结果,0负向、1中性、2正向。

a1a0b9f58a86437c3b543daa32e7459e.jpeg

官方提供的是基于postman的演示demo,虽然对咱们专业人士来讲很简答,但是对学文科的小姐姐还是有一定门槛的。

我教会小姐姐postman的使用之后问了她一个问题:

小姐姐你现在虽然知道了怎么用postman,能查询每条数据的语义分析结果。 但是微博关于房价的数据有几十万条,你总不能通过postman来一条一条来操作吧!?

小姐姐蒙了

技术男的春天

我告诉小姐姐不用担心,可以用编程工具来轻松解决,比如Python、Java、PHP都是可以的。

但是沟通下来发现小姐姐对编程并不感冒,虽然之前有学过,但是短时间内实现需求恐怕很困难。

是时候展示真正的技术了。

我便帮她搭建了基于百度AI开放平台的批量语义识别的系统,也算进行了百度【语言处理技术】的开箱测试。

暖男分析

考虑到小姐姐并不是很懂计算机,所以要以最简单的方式来实现需求。

尽量减少代码,能使用工具软件的尽量使用工具软件。

开发语言使用简单易学的PHP

数据库工具使用开箱即用的Navicat

开发环境使用一键安装工具LNMP一键安装包

说干就干,马上开始搞

搞定数据源

小姐姐已经通过某宝拿到了20W+关于房价的微博数据,现在需要做的就是基于语义分析来获得这20W+数据集对房价走势的判断(我们使用了百度提供的【语言处理技术 NLP】服务),通过Navicat直接导入Excel中的数据源即可。

首先根据数据源和百度语义接口返回结果,设计mysql表结构。

image.png

考虑到数据有20万+,利用了mysql的可视化工具[Navicat]导入数据,也方便小姐姐操作。

image.png

image.png

image.png

注意:要做好表格源字段和目标字段的匹配

image.png

首次导入选择直接追加;后续优化模型重复导入数据时选择更新。

image.png

点击开始即可导入Excel源数据到mysql数据库中

image.png

导入完成,在Navicat控制台通过查询命令,共查询到231007条数据

image.png

搭建开发环境

考虑到小姐姐最终的目的是训练模型,而非学习编程,所以搭建开发环境还是怎么简单怎么来, 所以我就推荐她使用LNMP一键安装包,10几分钟左右就把LNMP环境搭建好了

撸代码 脚本关键代码及思路: 字段说明:

mysql语句中 liuxx 是数据库名 semantic_analysis是表名

代码设计思路:

使用do while循环,批量循环请求百度AI语义分析接口,查询positive_prob=0的数据(即未进行语义分析的数据)。

当查询不到数据时,说明所有数据已经成功请求百度语义分析接口,且将返回结果更新到数据表中。

注意问题:

每次查询之后都会休眠1秒,因为百度免费版语义分析请求接口有QPS限制,避免出现无效请求

实现流程 查询数据:

查询条件是 positive_prob=0(代表本条数据未请求百度接口)

查询排序: 根据id倒序

查询翻页: 每次查询10条

处理数据,请求百度接口: 将查询到的数据进行json_encode()处理,进而请求百度接口 处理百度返回结果

异常处理:当百度返回的error_code为282131时,表示文本内容过长,超过了百度语义分析的字数限制。

mysql会将不符合百度语义分析的数据源删除,不再重复请求

输出返回结果,方便查询信息,定位问题

将返回结果更新到数据表中

当百度的返回结果 positive_prob 字段的值不为0时,表示语义分析成功,已返回结果

将返回的结果更新到mysql数据表中

批处理脚本核心文件代码:

文件名:batchProcessing.php

/** * 发起http post请求(REST API), 并获取REST请求的结果 * @param string $url * @param string $param * @return - http response body if succeeds, else false. */ function request_post($url = '', $param = '') { if (empty($url) || empty($param)) { return false; } $postUrl = $url; $curlPost = $param; // 初始化curl $curl = curl_init(); // 抓取指定网页 curl_setopt($curl, CURLOPT_URL, $postUrl); // 设置header curl_setopt($curl, CURLOPT_HEADER, 0); // 要求结果为字符串且输出到屏幕上 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // post提交方式 curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost); // 运行curl $data = curl_exec($curl); curl_close($curl); return $data; } 执行批处理脚本

nohup:表示脚本生成的log日志和打印信息输出到nohup.log文件中

&:表示脚本后台运行

nohup php batchProcessing.php & 获得结果

脚本运行完毕后,即可在mysql中查询到经百度语义分析接口处理过的数据,结果示例如下图:

image.png

导出数据

通过Navcat工具,小姐姐就可以方便的将mysql数据结果导出到Excel。

总结

编程真的是太有用了,对咱们这种每天都编程撸代码的技术人感触可能没那么深刻。

但是对小姐姐这种非计算机专业的人来讲,这套语义分析批处理系统真的帮了她大忙了。

用小姐姐的话讲,这下她不用头秃了。

基于编程技术,用最简单高效的方式,解决现实生活中遇到的问题,这就是攻城狮的价值所在吧。

最后

感谢阅读,欢迎大家三连:点赞、收藏、投币(关注)!!!

8e95dac1fd0b2b1ff51c08757667c47a.gif



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有