一面之猿网
让这个世界,因为我,有一点点的不一样
Where Caiss —— 谈谈我关于Caiss下一步做什么的想法

大家好,我是不会写代码的纯序员。

过年了,自己也在展望未来。我想,也需要简单梳理一下Caiss下一步几个可以走的方向了。其实,写展望的时候,很能够体现出一个人思维和技术的广度。

回想我刚开始工作的时候,经常想不到有什么可以做的,来一个需求做一个,整体感觉被动。几年过去了,了解的东西稍微多了一些,就总感觉有好多东西可以做,却很难抽出大块的时间来做了。终于意识到,发现问题的能力和解决问题的能力都很重要。

接下来我提到的这些方向,有的方面我稍有了解,有些地方我也只是“熟悉拼写”。随时欢迎有大佬可以一起共建,共同开源我们的星辰大海。

还是照例先上代码:Caiss源码路径

智能解析

相较于Facebook提供的Faiss,或者是市面上一些封装类的产品,支持sql查询是Caiss的一个创新点。实现的思路,主要就是在ExecuteSQL()方法中,将sql中的内容,解析成Caiss的增删查改的方法中对应的参数,然后再调用Caiss进行查询,并且返回结果。具体的实现,大家可以去爬源码,就不多说了。

不过,前段时间跟朋友聊天,得知了蚂蚁集团已经有技术,在postgreSQL中,通过类sql语法来完相似查询了。我想,Caiss作为一个纯智能搜索引擎,为何不再“智能”一些。有没可能实现一个ExecuteQuery()方法,这里传入的不是sql语句,而且普通的句子,也能根据语义完成增删查改的功能。比如,传入的参数是【Find five words in model A which is similar to 'water'】,甚至是中文【在模型A中,搜索与“水”关系最近的5个词语】。然后通过一些AI认知模型,将它转化成对应sql语句,或者直接提取出其中的信息:topK=5,query="water",从而进行查询呢。

感觉这是一个进一步智能化的方向,做出来一定很酷,而且一定是独创了!!!谁有兴趣可以一起搞一下。

image.png

GPU加速

之前做的工作,一直处于CPU的阶段,一些加速计算的工作是通过eigen来做的。如果通过GPU进行加速,效果应该会更加明显。有时间的话,可以看看
cuBLAS这种库类的使用,保守估计性能增加5倍以上。

如果有写过GPU计算的朋友,也可以来贡献一下代码。欢迎随时指导。

业务编排

Caiss做到现在,功能迭代了很多版本,但是基本框架基本没变。都是通过 api->manage->algo->utils->result 这条链路走下来的,流程相对固定,线性成分也很大。

我想,如果重构的话,是否可以把所有的内容都设计成一个Object类型,并且提供一些编排能力,使得上层用户可以通过写一些编排逻辑,来实现对底层算法或者是处理工具的控制。比如,信息进来以后,可以通过多种algo Object进行并发查询,然后再根据需求,通过utils Object对结果进行合并或者去重。甚至加载keras的模型,从而使得训练和查询不需要在不同的地方实现。

整体上想下来,大概就是tensorflow的那种感觉,上层写编排逻辑控制底层算子运行。这种控制方法,可以使得功能更灵活,也更方便抽象出独立可服用的算子了。缺点也很明显:针对简单逻辑也需要学写编码逻辑,而且对线性流程会略降低性能。

既然是这样,能不能两种方式mix一下。这种东东,有时候想想觉得挺简单的,自己写个注册和分发中心,写好了啥都能搞。有时候想想又觉得挺难的,比如,纯手写的话咋控制削峰填谷,如何控制异常导致的阻塞和恢复等。

希望有时间的话,可以试一试吧。最后能做出来个命令行控制,也说不定捏[手动狗头]

分布式服务

现在后端服务流行分布式,市面上也流行着很多支持分布式的组件。Caiss中也包含了一些服务化的内容,不过写的是单点的,后期希望可以加入一些分布式的元素。

做了分布式之后,还可以尝试去实现与sql的jion语法联动。一条sql语句,比如:【select * from ModelA join ModelB where word like 'water'】,在不同的机器的不同的模型中,查询类似的信息,获取不同的结果然后合并。感觉这样也会很酷。

我们也可以基于此,实现一些专业化、定制化的功能。比如,在modelA中包含了化学方面的关于"water"的专业词汇,modelB中包含了计算机方面的关于"water"的词汇(对,你没有理解错,就是水逼的意思)。各自再有一些权重的概念,最简单的千人千面一下子就出来了。

做分布式的组件和方法有很多,但做好做合理却不简单。想成为一个好的架构师,需要一定的积累和沉淀。我自己也没啥思路,跪求大佬帮忙。

image.png

结束语

在早些的文章里,我也零零散散的提过一些想法。其中,有些功能已经实现了,有些还在排期中,就差一个程序员了,哈哈。今天,算是分别在算法、引擎和服务这三个方向,提出了一点自己想法吧。无论我畅享什么功能,我最希望看到的两个结果:一个是共建,一个是赋能。希望一起做过Caiss的朋友,或者是想加入的朋友,又或者是在做类似的工作的朋友们,大家可以形成合力,互相分享,共同进步。

最近过年在家,小区门口就能看到针对小学生的AI早教课的广告,美其名曰不要让孩子输在起跑线上,也不知道在教点啥。也会听到有些朋友,提到人工智能就认为是人工智障,说是瞎吹概念。我自己用天猫精灵,觉得蛮实用的,就给家里也买了一个。爸妈用了两天,却总说这是骗钱的,问啥都说不知道。

我想,也许这就是这个技术时代的样子吧。第三次AI技术革命,随着大数据技术的流行和算力的提升而兴起,世界各国最顶尖的科学家和工程师都汇聚于此。但到现在为止,仍没有任何迹象表明,这波浪潮不会像前两次一样黯然退场。实验室里,图像处理的能力空前强大,但较高级别的自动驾驶还是没有落地;指标上看,AI语义理解的能力已经超过人类,但天猫精灵还是没法跟我爸妈对话。不过这又怎样,这次不行还有下次嘛,有些东西总要有人做啊。

最近,偶尔也会听到一些声音,说有些公司不注重科技创新,只顾着跟小商小贩抢生意。我想这话,对,也不对。对,是因为,外人能够看到的现象,目前的确如此;不对,是因为,有些创新,因为提升幅度小,就会有人关注不到;很多尝试,因为暂时没结果,就会有人不知道正在进行。

我最近常想,如果有一天,科技创新的星辰大海,能够照到了几捆蔬菜和几斤水果的流量上,那是不是也能点亮小贩们黑夜里回家的路?

    					[2021.02.14 by Chunel]

个人信息

微信: ChunelFeng
邮箱: chunel@foxmail.com
个人网站:www.chunel.cn
github地址: https://github.com/ChunelFeng