如何实现语法的自解释(MLSQL易用性设计有感)

题图:

image.png

突然想明白了一件事, 语法应该是自解释的。什么意思呢,就是用户需要有一个学习语法的语法,而这个语法应该极度简单,他只要花上一分钟,甚至依靠直觉就能知道怎么用,透过这个口,以点窥面,让用户具备自主学习其他语法的能力。

系统如果能从这个层面考虑,那么易用性就会好很多。通常而言,文档少了没安全感,文档多了,寻找到对应的信息又是难事,然后只能各种Google。

但是如果语法自解释了,会是个什么样子的呢?

比如在MLSQL里,对于模型,用户只要记住一个关键字model 一个简单的load语法,然后完了就可以了。

第一次是这样:

 load model.`` as output;

会呈现如下三个信息:

image.png

接着用户用户使用

load model.`list` as output;

得到可用模型的列表:

name                        type
---------------------------
PythonAlg                process
RandomForest        algorithm
.....

然后我想试试RandomForest:

 load model.`params` where alg="RandomForest"  as output;
-- or
 load modelParams.`RandomForest ` as output;

结果如下:

image.png

接着能给我例子么?

 load model.`example`  where alg="RandomForest" as output;
-- or
 load modelExample.`RandomForest ` as output;

则显示如下内容

-- create test data
set jsonStr='''
{"features":[5.1,3.5,1.4,0.2],"label":0.0},
{"features":[5.1,3.5,1.4,0.2],"label":1.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
{"features":[4.4,2.9,1.4,0.2],"label":0.0}
{"features":[5.1,3.5,1.4,0.2],"label":1.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
{"features":[4.7,3.2,1.3,0.2],"label":1.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
''';
load jsonStr.`jsonStr` as data;
select vec_dense(features) as features ,label as label from data
as data1;

-- use RandomForest
train data1 as RandomForest.`/tmp/model` where

-- once set true,every time you run this script, MLSQL will generate new directory for you model
keepVersion="true" 

-- specicy the test dataset which will be used to feed evaluator to generate some metrics e.g. F1, Accurate
and evaluateTable="data1"

-- specify group 0 parameters
and `fitParam.0.labelCol`="features"
and `fitParam.0.featuresCol`="label"
and `fitParam.0.maxDepth`="2"

-- specify group 1 parameters
and `fitParam.0.featuresCol`="features"
and `fitParam.0.labelCol`="label"
and `fitParam.1.maxDepth`="10"
;

自此,用户其实已经自助看完了一篇文档。这么做的好处是:

  1. 写代码的同时也是写文档
  2. 所有参数/模型都有自省机制。比如Spark MLlib params就做的非常好,可以很容易的罗列出可用参数。那么其实模型也是可以做到的。比如这个模型是用来做数据处理的还是做算法的,我们需要在类里面有对应的信息,无论是通过Annotation或者是方法。
  3. 用户在使用load语法查看功能的时候,就已经熟悉了MLSQL的使用模式了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python数据科学

Python爬虫之一个海贼迷的呐喊

海贼王已经10年了,一路陪伴了我们的点点滴滴。它热血,激情,感人,欢乐,吸引了无数男女老少的紧紧跟随。

13630
来自专栏逆向技术

计算机基础知识_硬件知识

  硬件知识 计算机之父(冯·诺依曼)提出了一种结构 电子管-晶体管-集成电路-大规模集成电路 主要的要点是: 1.)计算机存储是按照二进制存储的 作用是 可...

20000
来自专栏牛客网

今日头条三面面经

4.       优先队列的底层数据结构?插入和删除一个节点的时间复杂度是多少? 

1.1K20
来自专栏瓜大三哥

流水灯

module led_test ( clk, // 开发板上输入时钟: 50Mhz ...

29280
来自专栏极客生活

python爬虫隔一段时间一乐之海子的诗

每隔一段时间(一周到一个月)拿出1到2天来做一个好玩的东西,不求回报,只为快感。 前两天刚买了一本电子书《海子的诗》,晚上读了快一半,好多诗里面都提及了麦子和...

10910
来自专栏Golang语言社区

C++ 实现银行排队服务模拟

教程简介:使用 C++对银行排队服务进行模拟,以事件驱动为核心思想,手动实现模板链式队列、随机数产生器等内容,进而学习概率编程等知识。作为可选进阶,这个模型同时...

52950
来自专栏Flutter入门

ffplay.c 源码分析- 音频部分

1. 读取线程-read_thread 在main方法中会启动的读取的线程。 这个和视频的线程模型中是一致的。不同的是,循环读取的数据是音频数据。

19720
来自专栏Golang语言社区

C++ 实现银行排队服务模拟

教程简介:使用 C++对银行排队服务进行模拟,以事件驱动为核心思想,手动实现模板链式队列、随机数产生器等内容,进而学习概率编程等知识。作为可选进阶,这个模型同时...

424120
来自专栏CDA数据分析师

Python进阶学习之阅读代码

起因 最近在公司的任务是写一些简单的运营工具,因为是很小的工具,所以就用了github上面的一个开源项目flask-admin,可以省去很多的事情。 但是,这个...

30070
来自专栏有趣的Python和你

Python数据分析之dataframe的groupbygroupby函数highcharts绘图

15430

扫码关注云+社区

领取腾讯云代金券