Adair品科技|阿里云云效智能化代码平台的探索与实践( 三 )


文章图片
近年来 , 业内发生多起敏感信息(APIKey、Databasecredential、Privatetoken)通过某些站点被无意识地泄露出去的事件 , 给企业带来了安全风险 。 开发者和企业管理者亟需一款稳定健全的敏感信息检测方法和系统 。 通过调研我们了解到 , 目前已有的敏感信息检工具要么单纯考虑规则匹配 , 要么采用信息熵技术实现 , 其召回率或准确率均无法满足预期 。 因此我们在规则匹配和信息熵技术的基础上 , 结合了多层检测模型和上下文语义检测 , 打造了一款敏感信息检测工具——SecretRadar 。
Adair品科技|阿里云云效智能化代码平台的探索与实践
文章图片
SecretRadar的技术实现思路主要分为三层 。
第一层采用规则匹配这种传统敏感信息识别技术 , ''规则匹配''具有良好的准确度和扩展性 , 但是非常依赖比较固化的长度、前缀、变量名 , 难以应对不同开发者的不同编码风格 , 容易造成漏报 。 针对难以固定规则捕捉的场景 。
第二层我们采用了信息熵算法 。 信息熵算法用于衡量代码行混乱程度 , 对随机生成型密钥和随机身份信息识别效果良好 。 但信息熵算法也有其局限性 , 伴随召回的提升是误报率的增加 。
在第三层我们采用了模板聚类的方法进行过滤优化 。 针对信息熵结果集聚合提取常见关键字 , 并结合上下文分析完成二次过滤 。 同时通过问题的修复情况建立二分类数据集 , 完成算法优化 。 进而从词法识别迭代为语义识别 。
智能研发助手云豆背后的能力:代码补全
代码补全是当前代码智能化领域研究的热点 。 目前代码补全工具主要分为三种:
基于语法解析器的代码补全;
基于统计机器学习的代码补全;
基于深度学习的代码补全 。
基于语法解析器的代码补全工具最为大家熟知 , 我们平时使用的IDE中内置的补全工具基本都属于这类 。 这种补全工具有个问题 , 就是补全结果没有进行合理排序 。 基于统计机器学习的代码补全工具不仅可以给出更加合理的补全候选方案 , 还可以从''补全概率''的维度对候选方案进行排序 。 但这种补全方式也有其局限性 , 推荐的结果比较固定 。
最近几年 , 随着NLP(自然语言处理)领域对自然语言建模能力的大幅度提升 , 这种能力也被应用到代码补全上 。 相对于基于统计机器学习的代码补全工具而言 , 基于深度学习的代码补全系统能够更大范围的了解上下文语义 , 并结合大量数据 , 给开发者提供动态的代码补全推荐 。 当然这种方式在训练阶段以及推理计算时会需要更强大的算力 , 因此在普通的PC机上基本没办法使用这种系统 。 业内通常的做法是将训练好的模型部署到远端服务器上 , 本地去进行实时查询 , 因此对网络的依赖比较强 。
在代码补全的探索中我们遇到很多挑战和难点 , 主要有四个方面:不完整代码上下文理解难度大;代码片段补全准确率要求极高 , 对错误的容忍度非常低;多Token补全搜索空间无限大 , 算法效率和准确度难以提升;代码中单词的数目是无限大的 , 一般模型难以处理如此大的词表 。
针对以上问题 , 我们的策略是采用''算法手段+工程手段''相结合的解决方案 。 算法方面 , 采用本地+深度模型共同补全 , 挑选合适的分词算法(如BPE分词算法) , 并结合规则匹配的手段进行实现 。 在工程方面 , 通过整合现有语法服务给用户带来综合体验的提升 。
Adair品科技|阿里云云效智能化代码平台的探索与实践
文章图片
我们的代码补全流程设计如图所示 , 分为预处理阶段、实时补全阶段、后处理阶段 。 在预处理阶段 , 会进行变量/字符串替换、分词、索引变量等处理 。 在实时补全阶段 , 采取本地个性化补全模型和云端深度补全模型相结合的方法 , 然后对多模型候选项进行合并、筛选和重排 。 在后处理阶段 , 会进行变量名替换和填充、语义格式化等操作 , 并将最终补全候选方案推荐给开发者 。


推荐阅读