准备智能分析助手数据
使用智能分析助手,建议准备“干净”、“简单”、“适量”的数据才能发挥更好的效果。
“干净”的数据
- 数据内容需与业务口径一致。
某些原始表,为了节省存储空间,会使用数值/代码来存储枚举值,如用0、1、2来存储男性、女性、未知,如果不对数据做清洗,模型无法将数字和性别做出对应。其余类似的情况还有口语表达和书面表达之间的区别,比如数据中存储了书面表达的内容,而用户提问往往采用口语表达。DataArts Insight提供了三种能力,可以帮助缓解上述问题:
- 新建维度:用户可以通过新建一个虚拟列,将数字/代码映射为具有语义的文本。
通过“数据管理 > 数据集”在数据集详情中新建维度来完成内容映射,请参考新建维度。
图1 新建维度入口图2 新建维度字段表达示例 - 同义词和关键词:
- 对于一些口语化的表达,可以通过编写同义词和字段描述来帮助模型理解。例如:农业银行的全称是“中国农业银行”,可能会缩写为“农行”,DataArts Insight提供了同义词配置,来帮助模型检索、理解。
通过“数据管理 > 数据集”在数据集详情问答配置页签中配置同义词来提升模型理解。请参考问答配置(可选)。
图3 同义词配置入口图4 同义词配置示例 - 同义词的作用是将某个数据中存在的枚举值,映射为一个用户常用问法。但有时候则需要反方向做映射,比如在金融行业,“基保理”是一个业内术语,指代的是“基金”、“保险”、“理财”,它是三个词汇的组合词,无法通过配置同义词完成。DataArts Insight提供了关键词改写,能将用户提问中包含的“基保理”改写成“基金”、“保险”、“理财”。
通过“问答管理 > 智能分析助手”在智能分析助手详情页“知识库配置 > 问题关键词改写”配置关键词改写,来改变用户问题。请参考配置关键词。
图5 添加关键词入口图6 添加关键词示例图7 智能分析助手关键词改写效果图
- 对于一些口语化的表达,可以通过编写同义词和字段描述来帮助模型理解。例如:农业银行的全称是“中国农业银行”,可能会缩写为“农行”,DataArts Insight提供了同义词配置,来帮助模型检索、理解。
- 新建维度:用户可以通过新建一个虚拟列,将数字/代码映射为具有语义的文本。
- 数据内容尽量不具有歧义。
大模型在缺少业务知识背景的情况下,难以鉴别歧义。比如数据中如果同时存在“客户名称”、“用户名称”两列,或者存在非常近似的两个枚举值,比如“吉林省”和“吉林市”,当前模型无法确认要使用哪一列和枚举值来回答用户问题(比如“王强的销售额”,“吉林的GDP”),请尽量避免此类数据歧义。DataArts Insight智能分析助手具备一定的歧义检测能力,主动提示用户确认问题中的歧义。图8 DataArts Insight会主动提示用户问题的歧义
- 数据内容尽量不存在冗余。
某些加工后的业务表的首要目的是用于报表展示,所以其内容可能存在冗余。例如,某用户的消费记录的维表和明细表同时加工到某数据表后,会存在冗余(年收入一列被冗余存储),在此表中提问用户的年收入时,则需要提前将聚合方式改为“无聚合”才能正确回答。
通过“数据管理 > 数据集”在数据集详情页数据预览页签中进行字段配置,设置默认聚合方式。请参考字段配置。表1 数据表示例 用户ID
消费日期
消费金额
商品类别
年收入
3130102182
2024-12-13
301.13
日用品
100,000
3130102182
2024-12-14
345.59
食品
100,000
3130102182
2024-12-14
1.29
云服务
100,000
3130102182
2024-12-15
103.1
服装
100,000
- 字段类型被正确设置。
ChatBI对字段类型是敏感的,特别是时间字段。错误设置的字段类型容易使ChatBI生成的SQL无法执行。
“简单”的数据
- 指标已计算/可计算。
当前大模型对指标的计算能力偏弱,往往无法写出合适的指标加工逻辑。如果能够提前将指标加工好,作为数据列加入到数据中,让大模型专注于执行查询而非计算。DataArts Insight提供了指标管理平台,用户可以提前定义指标的计算逻辑,模型将定义好的指标视作数据列即可。
新建指标请参考创建指标。
图9 编辑指标示例图
- 单一的宽表。
当前的ChatBI对自动选取多个数据表,JOIN后再执行查询的准确率较低。我们建议用户提前将数据加工成一个单一的宽表,让ChatBI专注于做好数据查询。为此,DataArts Insight提供了提前定义多表关联的能力,用户可提前定义好数据关联关系,模型将其视作宽表,专注于宽表的数据查询。
通过“数据管理 > 数据集”在数据集详情页定义多表关联关系。请参考多表级联建模。
图10 选取多个数据表示例图图11 建立多表关联示例图 - 数据粒度保持统一。
一些企业可能会在同一个数据表中存储不同粒度的数据,以便制作报表。比如在不同层级结构上数据会不断进行汇总,并且汇总数据和明细数据被同时存在一个表中。比如,省、市、区/县的GDP数据都同时存在一个宽表中,如下表所示:
表2 2023年广东省GDP数据示例表 省
市
区/县
GDP(亿元)
人均GDP(元)
广东
-
-
135,673
106,986
广东
深圳
-
34,606
195,959
广东
深圳
福田
5,705
375,053
广东
深圳
罗湖
2,808
273,623
…
ChatBI习惯将上述表作为明细表,只存储最细粒度的数据,如果需要取粗粒度数据则向上汇总,如提问广东省的GDP时,ChatBI往往会写出如下SQL,从而得到错误的结论,数据存在冗余。
SELECT SUM(`GDP(亿元)`) FROM table WHERE `省`='广东'
解决此类问题,最好从源头抓起,杜绝在一张表中存储不同数据粒度的数据。DataArts Insight中,可以利用绑定条件来适配上述数据结构,比如可以为“省”这一列绑定“市”为空且“区县”为空。
通过“数据管理 > 数据集”在数据集详情页数据预览页签中进行字段配置,为字段绑定条件。请参考字段配置。
图12 绑定条件入口图13 为字段设置绑定条件示例生成SQL时则会增加如下条件,即可获得正确查数结果。
SELECT SUM(`GDP(亿元)`) FROM table WHERE `省`='广东' AND `市` IS NULL AND `区县` IS NULL
“适量”的数据
列数不建议超过100。
一般而言,数据列越多,而模型的输入token数量则会相对变多,对模型的准确率造成影响。此时需引入检索来筛选与用户问题相关的列,而检索的准确率和召回率则又会为模型提示词生成的精度带来影响。所以,我们推荐宽表的列数要适量,最好控制在100列以内。