v1.2-fixPicMarkdown

This commit is contained in:
Tang Wuguo 2023-08-25 09:29:45 +08:00
parent f5cde607a5
commit b93bdfc345
21 changed files with 26 additions and 29 deletions

View File

@ -5,7 +5,7 @@
在openGauss中提供了完善的日志系统其中的审计日志中就记录了用户每次的操作日志中每一条记录表示: 时间t用户A对客体B进行了操作C。首先对原始的审计日志进行筛选过滤去除噪声记录然后使用特征工程设计了基于统计学上的特征。最后让AI模型使用前面的特征自动学习数据更深层的特征。最后模型具有识别不同类型用户的能力。
![用户操作模型](./doc/p_用户操作模型.png)
![用户操作模型](./doc/assert/p_用户操作模型.png)

View File

@ -1,7 +1,7 @@
# openGauss中的AI模块调研
*Tang Wuguo, tangwg@csu.edu.cn*
这篇博客中对openGauss中的AI模块进行介绍并且以iris鸢尾花数据集为例介绍AI模块的使用.
这篇博客中对openGauss中的[AI模块](https://docs.opengauss.org/zh/docs/5.0.0/docs/AIFeatureGuide/AI%E7%89%B9%E6%80%A7.html)进行介绍并且以iris鸢尾花数据集为例介绍AI模块的使用.
openGauss将AI与数据库结合其中的AI特性大致可分为AI4DB和DB4AI两个部分:
@ -10,15 +10,15 @@ openGauss将AI与数据库结合其中的AI特性大致可分为AI4DB和DB4AI
## DB4AI概要
在我们的用户操作模型的构建中主要使用DB4AI模块借助其中的类似SQL语句的形式直接在openGauss数据库中对数据进行建模、训练及预测。
![DB4AI中的关键字](https://cdn.nlark.com/yuque/0/2023/png/21528568/1688912742558-8b17a5b9-7835-4494-9a26-98e102e82bf6.png#averageHue=%23a9baa8&clientId=ua651ef91-cbbb-4&from=paste&height=398&id=ua8d13ce8&originHeight=497&originWidth=956&originalType=binary&ratio=1.25&rotation=0&showTitle=true&size=33658&status=done&style=none&taskId=ubfbc2031-bc2f-4586-b0e7-21bd33e12bd&title=DB4AI%E4%B8%AD%E7%9A%84%E5%85%B3%E9%94%AE%E5%AD%97&width=764.8 "DB4AI中的关键字")
![DB4AI支持的算法](https://cdn.nlark.com/yuque/0/2023/png/21528568/1688913278733-f973add3-8df8-48f5-bcac-f34e01b79085.png#averageHue=%23eaeacd&clientId=ua651ef91-cbbb-4&from=paste&height=594&id=uf6558da4&originHeight=743&originWidth=930&originalType=binary&ratio=1.25&rotation=0&showTitle=true&size=41287&status=done&style=none&taskId=u5538221a-4ea2-4e48-9f5a-fa7db6b3f45&title=DB4AI%E6%94%AF%E6%8C%81%E7%9A%84%E7%AE%97%E6%B3%95&width=744 "DB4AI支持的算法")
![算法对应的超参数](https://cdn.nlark.com/yuque/0/2023/png/21528568/1688913513261-294838fc-164e-4ff4-8158-1e4e601cbfa1.png#averageHue=%23efefd0&clientId=ua651ef91-cbbb-4&from=paste&height=545&id=ud2629f78&originHeight=681&originWidth=915&originalType=binary&ratio=1.25&rotation=0&showTitle=true&size=119740&status=done&style=none&taskId=ua0478dd5-804b-422f-8fb7-bdd6758d875&title=%E7%AE%97%E6%B3%95%E5%AF%B9%E5%BA%94%E7%9A%84%E8%B6%85%E5%8F%82%E6%95%B0&width=732 "算法对应的超参数")
![DB4AI中的关键字](./assert/p_DB4AI中的关键字.png)
![DB4AI支持的算法](./assert/p_DB4AI支持的算法.png)
![算法对应的超参数](./assert/p_算法对应的超参数.png)
## 鸢尾花分类模型实践
下面我们已鸢尾花数据集为例使用openGauss中的DB4AI模块搭建两种模型二分类模型多分类模型。同时还利用内置的函数`_gs_explain_model_`查看模型的详细信息,`_PREDICT BY_`关键字来进行模型的推理。
### Iris数据集
iris数据集是ML中最经典的数据集之一其中共包括150个样本对于每个样本有花萼长度、花萼宽度、花瓣长度、花瓣宽度4个特征我们需要依据这4个特征区分3种花型山鸢尾、变色鸢尾还是维吉尼亚鸢尾。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689905148831-3470aab1-3871-46de-b762-313ec710f821.png#averageHue=%23050403&clientId=u1918a2c5-2fd8-4&from=paste&height=359&id=ub78bca1f&originHeight=359&originWidth=895&originalType=binary&ratio=1&rotation=0&showTitle=false&size=19999&status=done&style=none&taskId=udfdfd0ed-c801-4b51-bc69-9970db879a1&title=&width=895)
![iris数据集](./assert/p_iris数据集.png)
### 划分数据集
我们对iris数据集随机打乱选择80%的数据作为训练集,剩下的作为测试集。
训练集用于模型的训练,模型训练好后可以分别在计算训练集和测试集上的准确率。
@ -43,7 +43,7 @@ WHERE row_num > total_rows * 0.8;
```
### 二分类模型
假定我们现在的目标是要区分是否为山鸢尾yes or no这是一个二分类问题这里我们选择使用逻辑回归来解决。
假定我们现在的目标是要区分是否为山鸢尾yes or no这是一个二分类问题这里我们选择使用逻辑回归算法来解决。
**CREATE MODEL**
```sql
@ -56,11 +56,11 @@ WITH batch_size=20;
执行上面的脚本后正常会输出:`MODEL CREATED. PROCESSED 1`
表示模型构建好了,下面测试模型的预测效果
通过查询`gs_model_warehouse`表可以看到数据库中的所有模型
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689908710289-e0e5598d-1663-41b5-b548-30d7634e82e7.png#averageHue=%230d0a06&clientId=u1918a2c5-2fd8-4&from=paste&height=295&id=ue1c9ecea&originHeight=295&originWidth=1351&originalType=binary&ratio=1&rotation=0&showTitle=false&size=34756&status=done&style=none&taskId=uda9291a2-b250-4773-8739-b50fea9be9f&title=&width=1351)
![查询所有模型](./assert/p_查询所有模型.png)
通过使用`gs_explain_model`函数可以查看指定模型的详细参数:
`select gs_explain_model('iris_m1');`
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689908757667-b92f9a0f-d725-409a-90ae-bb4db56a779b.png#averageHue=%23020201&clientId=u1918a2c5-2fd8-4&from=paste&height=625&id=ud46d24ff&originHeight=625&originWidth=1706&originalType=binary&ratio=1&rotation=0&showTitle=false&size=31306&status=done&style=none&taskId=u1a8174e3-9c8f-41b9-af61-b5e3906bbda&title=&width=1706)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689908832575-392f5e6e-c01f-44a5-a688-27c4bc363131.png#averageHue=%23040301&clientId=u1918a2c5-2fd8-4&from=paste&height=447&id=uced53a58&originHeight=447&originWidth=1084&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16641&status=done&style=none&taskId=ub641b4e5-7a7c-406a-a3e4-4ae393f7b6d&title=&width=1084)
![查看模型详细参数](./assert/p_查看模型详细参数.png)
**PREDICT BY**
```sql
@ -75,8 +75,7 @@ PREDICT BY iris_m1 (FEATURES sepal_length,sepal_width,petal_length,petal_width)
target_id < 2 as "LABEL"
FROM iris_test;
```
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689908938404-268daf45-26ef-40f0-8494-d7c8b73ca7e6.png#averageHue=%23010101&clientId=u1918a2c5-2fd8-4&from=paste&height=525&id=u863f6f89&originHeight=525&originWidth=1672&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21268&status=done&style=none&taskId=ub1d91d50-8181-444e-a495-bd86b1b5776&title=&width=1672)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689910200441-04103459-4afb-4908-ab3e-a6c5fe19840d.png#averageHue=%23020201&clientId=u1918a2c5-2fd8-4&from=paste&height=654&id=u9332e713&originHeight=654&originWidth=964&originalType=binary&ratio=1&rotation=0&showTitle=false&size=24319&status=done&style=none&taskId=u537e2315-adb6-4ffb-bbd7-aae94f1d4e7&title=&width=964)
![二分类模型预测](./assert/p_二分类模型预测.png)
**计算分类准确率**
准备率 = 分类正确的数量 / 样本总数
@ -96,7 +95,7 @@ SELECT
END AS accuracy
FROM temp_pred;
```
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689910258939-bcf185ba-f13c-4dd5-b40e-4a13295a087e.png#averageHue=%23050403&clientId=u1918a2c5-2fd8-4&from=paste&height=97&id=uf92bcd78&originHeight=97&originWidth=1236&originalType=binary&ratio=1&rotation=0&showTitle=false&size=4228&status=done&style=none&taskId=u029530e4-fd79-44af-8f9d-1050b76e77c&title=&width=1236)
![计算分类准确率](./assert/p_计算分类准确率.png)
### 多分类模型
假定现在的任务是给定一个样本要预测是3种花型中的哪一种这是一个多分类的问题。
@ -125,12 +124,11 @@ SELECT
FROM temp_pred;
```
batch_size=20
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689911528931-4a1c0444-7541-4125-bae1-e0f2631ab1cb.png#averageHue=%23060504&clientId=u1918a2c5-2fd8-4&from=paste&height=69&id=ua51023e9&originHeight=69&originWidth=509&originalType=binary&ratio=1&rotation=0&showTitle=false&size=2084&status=done&style=none&taskId=u91ebd585-9a27-4d86-b118-359bb92b9f4&title=&width=509)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689911625210-ad7c89a7-fc76-4f9d-9fc7-2babeabc4b45.png#averageHue=%23040403&clientId=u1918a2c5-2fd8-4&from=paste&height=70&id=u96b5144e&originHeight=70&originWidth=420&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1844&status=done&style=none&taskId=u3280af96-a388-4274-ab16-e767965c57a&title=&width=420)
![batchsize20](./assert/p_batchsize20.png)
经过调节超参数batch_size=4在训练集上的结果可以提升
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689911352977-03b556ed-b321-483b-a771-d1f72e062c6f.png#averageHue=%23040403&clientId=u1918a2c5-2fd8-4&from=paste&height=73&id=ue3370894&originHeight=73&originWidth=430&originalType=binary&ratio=1&rotation=0&showTitle=false&size=2000&status=done&style=none&taskId=ud6f60a09-cfa8-429b-b429-da1cb8f80ee&title=%E8%AE%AD%E7%BB%83%E9%9B%86%E4%B8%8A%E7%BB%93%E6%9E%9C&width=430)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689911363647-25e11954-1953-49f2-8519-ecca0a73ae6f.png#averageHue=%23070504&clientId=u1918a2c5-2fd8-4&from=paste&height=65&id=u33bf56ed&originHeight=65&originWidth=491&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1871&status=done&style=none&taskId=u6ee262f6-cdb6-4ed1-a4d0-8ba0e52999f&title=%E6%B5%8B%E8%AF%95%E9%9B%86&width=491)
![batchsize4](./assert/p_batchsize4.png)
## 小结
最后总结下使用openGauss中AI模块的流程

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -6,11 +6,9 @@
## 1.日志位置
查询到各种配置文件的路径:
例如postgresql.conf文件路径`/var/lib/opengauss/data/postgresql.conf`
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1687868951719-99e12dd1-bef9-4450-8ddf-9ff16f346e57.png#averageHue=%23070503&clientId=u93c09203-c893-4&from=paste&height=208&id=cD64M&originHeight=208&originWidth=768&originalType=binary&ratio=1&rotation=0&showTitle=false&size=14234&status=done&style=none&taskId=u6e163485-ae62-4245-a892-333fae562f5&title=&width=768)
查看审计日志的文件夹名:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1687858604714-bedd0ddf-35f3-4968-b86a-0c1320a49535.png#averageHue=%23080808&clientId=u93c09203-c893-4&from=paste&height=103&id=M6FaW&originHeight=103&originWidth=324&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1348&status=done&style=none&taskId=u03c625ec-d12c-43c0-a413-100daa7b306&title=&width=324)
审计日志完整路径:`/var/lib/opengauss/data/pg_audit`
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1687864775610-3f3c3bae-7b6b-4ce6-94d7-c261cc41cb71.png#averageHue=%23f9f7f6&clientId=u93c09203-c893-4&from=paste&height=227&id=JA3Ic&originHeight=227&originWidth=842&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21903&status=done&style=none&taskId=u01767339-37fe-4aef-8afd-82d432f508a&title=&width=842)
![查询配置文件位置](./assert/p_查询配置文件位置.png)
查看审计日志的文件夹名:`show audit_directory;` 默认是pg_audit
所以审计日志完整路径为:`/var/lib/opengauss/data/pg_audit`
## 2.比较OG和PG 中的日志管理
@ -119,7 +117,7 @@ select * from pg_query_audit('2023-05-18 00:00:00','2025-05-18 08:00:00');
2021-03-04 08:00:08+08 | login_success | ok | 10 | omm | postgres | gsql@::1 | postgres | login db(postgres) success, SSL=off | dn_6001_6002_6003 | 140477687527168@668131208211425 |17778 | 46946
```
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1687913714166-d19bf778-e202-40cd-b9f3-01836e1758a2.png#averageHue=%23060503&clientId=ua93674ac-9042-4&from=paste&height=671&id=ube647c66&originHeight=671&originWidth=1699&originalType=binary&ratio=1&rotation=0&showTitle=false&size=82421&status=done&style=none&taskId=u694ca101-ad34-47ee-9cd1-1853f2eb591&title=&width=1699)
### 3.4审计日志存储到表格
在前面我们可以通过查询语句查看日志,但是仍不方便。我们可以使用下面的语句将查询到的日志信息存储到表格中,方便我们观察、过滤日志信息。
```sql
@ -146,7 +144,8 @@ CREATE TABLE audit_log
SELECT * INTO audit_log FROM pg_query_audit('2023-05-18 00:00:00','2025-05-18 08:00:00');
```
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1688043130992-5b7c70ea-b918-4137-bbdf-26a6b8275297.png#averageHue=%23e5ebb5&clientId=u50dfbd15-fe5e-4&from=paste&height=827&id=u0abd4cb0&originHeight=827&originWidth=1197&originalType=binary&ratio=1&rotation=0&showTitle=false&size=120759&status=done&style=stroke&taskId=u906a0ed9-51c7-4409-af5f-1a76618f8d7&title=&width=1197)
审计日志的格式如下图所示:
![审计日志](./assert/p_审计日志.png)
*参考资料*

View File

@ -1,7 +1,7 @@
# 设计文档
*Tang Wuguo, tangwg@csu.edu.cn*
首先我们明确一下将用户的画像问题看作一个多分类任务确定好模型的输入输出。模型的输入是设计好的用户操作特征模型输出的是该用户的类型。而要从原始的审计日志到用户特征需要经过特征工程模块在用户操作模型中选用的是openGauss中定义好的机器学习模型。![用户操作模型](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689931339917-568c1737-b9d2-4e40-b013-776b846ec967.png#averageHue=%23f9f7f4&clientId=u862145d8-5212-4&from=paste&id=uc944a0f2&originHeight=302&originWidth=1217&originalType=url&ratio=1&rotation=0&showTitle=true&size=44504&status=done&style=none&taskId=u1ea3bcff-0c69-4d9d-91db-57306164042&title=%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C%E6%A8%A1%E5%9E%8B "用户操作模型")
首先我们明确一下将用户的画像问题看作一个多分类任务确定好模型的输入输出。模型的输入是设计好的用户操作特征模型输出的是该用户的类型。而要从原始的审计日志到用户特征需要经过特征工程模块在用户操作模型中选用的是openGauss中定义好的机器学习模型。![用户操作模型](./assert/p_用户操作模型.png)
整体的流程如下图所示:
1. 首先需要收集指定时间段的审计审计日志
@ -11,14 +11,14 @@
5. 根据指标的好坏,我们可以调整模型的超参数,使得模型在训练集上分类得更好;
6. 选定好超参数后模型就可以部署上线,之后数据库中又会产生许多的用户操作日志,我们可以重新收集日志来迭代模型;
![用户画像任务执行流程](https://cdn.nlark.com/yuque/0/2023/png/21528568/1689930304365-e9e46716-bd55-4c3c-aa54-8af83ed6a634.png#averageHue=%23f8f8f8&clientId=u862145d8-5212-4&from=paste&id=uf685c4ef&originHeight=812&originWidth=1005&originalType=url&ratio=1&rotation=0&showTitle=true&size=73439&status=done&style=none&taskId=u79639d8f-757c-4152-935f-d420127696a&title=%E7%94%A8%E6%88%B7%E7%94%BB%E5%83%8F%E4%BB%BB%E5%8A%A1%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B "用户画像任务执行流程")
![画像实现流程](./assert/p_画像实现流程.png)
## 1.模拟审计日志
由于没有找到公开的审计日志可以使用于是设计了一个多数据库用户操作的教务管理系统并使用python脚本模拟各个用户操作数据库从而得到审计日志。
模拟日志流程:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1688373361560-18f787c6-db66-4fe5-bc3d-15c122d2e0f0.png#averageHue=%23f5f5f5&clientId=uc9cc8d10-48e3-4&from=paste&id=u09112984&originHeight=1062&originWidth=1504&originalType=url&ratio=1&rotation=0&showTitle=false&size=169531&status=done&style=none&taskId=u0fc696c9-78c4-47c1-95f1-d096e3f10c6&title=)
![模拟日志流程](./assert/p_模拟日志流程.png)
### 1.1数据库db_school设计
该数据库包括两个模式教务管理系统中的各种数据存在public模式下操作日志、操作模型相关的数据都存在pm模式下。
@ -29,10 +29,10 @@
课程表(课程号,授课老师工号,课程名,学分)
成绩表(学号,课程号,成绩)
![数据库设计_用户操作模型.drawio.png](https://cdn.nlark.com/yuque/0/2023/png/21528568/1688179079909-62ff4099-5583-4b60-a785-1ff39dc1c060.png#averageHue=%23f9f9f9&clientId=ue9f5a0b9-ad20-4&from=paste&height=1022&id=u3bbe4e2d&originHeight=1022&originWidth=1502&originalType=binary&ratio=1&rotation=0&showTitle=false&size=115219&status=done&style=none&taskId=u53db3b75-75f7-40ef-8519-4068c15efa7&title=&width=1502)
![数据库设计_用户操作模型.drawio.png](./assert/p_数据库设计_用户操作模型.drawio.png)
![DBeaver中生成的ER图](https://cdn.nlark.com/yuque/0/2023/png/21528568/1688027613619-80928869-94e8-4197-b4af-ace2afdba452.png#averageHue=%23fbfafa&clientId=u50dfbd15-fe5e-4&from=paste&height=474&id=kUA7E&originHeight=535&originWidth=578&originalType=binary&ratio=1&rotation=0&showTitle=true&size=21126&status=done&style=stroke&taskId=ud81e2879-7c2d-49b6-8e2b-86c26d7d025&title=DBeaver%E4%B8%AD%E7%94%9F%E6%88%90%E7%9A%84ER%E5%9B%BE&width=512 "DBeaver中生成的ER图")
![DBeaver中生成的ER图](./assert/p_DBeaver中生成的ER图.png)
### 1.2多用户设计
opengauss超级管理员创建用户pm