基于上下文分析的 Python 实时 API 推荐

news2024/11/26 2:32:12

原文来自微信公众号“编程语言Lab”:基于上下文分析的 Python 实时 API 推荐
搜索关注 “编程语言Lab”公众号(HW-PLLab)获取更多技术内容!
欢迎加入 编程语言社区 SIG-程序分析 参与交流讨论(加入方式:添加文末小助手微信,备注“加入 SIG-程序分析”)。

作者 | 何欣程

编辑 | Skylar

作者简介

何欣程,南京大学计算机系软件质量研究所博士生,研究方向为程序分析,编程辅助。

视频回顾

编程语言技术沙龙|第16期:基于上下文分析的 python 实时 API 推荐

1 研究介绍

API 推荐一直是一个热门话题,相关的工作 1 也很多。当前的 API 推荐主要分为两类,一类是基于自然语言查询的 API 推荐,这类工作更加关注自然语言文本相关信息,像众包信息和 API 文档等。例如 16 年的 RACK,通过从 Stack Overflow 的众包知识中提取关键词 - API 映射提供相关 API 列表推荐。18 年的 BIKER 通过 word embedding 方法计算两段文本描述的相似度,根据 Stack Overflow 文本和 API 文档的相似度进行排序。
在这里插入图片描述
相比来说,基于代码上下文的 API 推荐在实际开发过程中使用更多的一般都是各大语言 IDE 中的智能代码补全插件,这类插件就涵盖了比较全面的 API 推荐功能,比如基于 Typeshed 的 Pycharm 补全功能以及 Vscode Intelli 系列的智能插件等等。
在这里插入图片描述
在论文方面,基于代码的 API 推荐更多的是应用在静态语言上,例如 Java,C,C++ 等,但针对动态语言的较少一些。关于 Python 的一共有三篇,其中两篇都是利用 AST 信息来进行学习决策。但在实时场景下,Python Parser 并不能解析出可用的 AST,这就在 IDE 等场景下,给具体的落地应用带来挑战。
在这里插入图片描述

2 实时场景下的 API 推荐

目标与挑战

基于这个问题,我们就尝试暂时从 AST 上挪开视线,提出一种利用如 Tokenflow、Dataflow 等上下文信息来进行实时 Python API 推荐的方法。具体来说,实时场景下的 API 推荐,我们将其定义为,针对形如 caller.API 的 recommendation hole,我们在仅知 hole 之前的代码情况下,提供排序后的 API 候选表。

而要达成这个目标,需要解决两方面的挑战。首先,是 Python 本身的动态特性。Python 具有类型动态性、路径敏感性,传统的静态分析方法在上面要么失败要么难以得到足够精准的结果。其次,在实时场景下,代码的语法语义都不完整,给静态程序分析带来很大难题,缺乏代码开发历史,针对一些基于历史变更学习的方法带来挑战。此外,实时性推荐也需要一些在线的轻量级的分析过程。

Visual Studio IntelliCode 的局限性

面对这些挑战,基于学习的 API 推荐方法往往比大多数传统方法具有更好的性能。然而,它们也有一些局限性。Visual Studio IntelliCode 是最先进的 Python 推荐工具之一。它是以学习为基础的。我们使用它来演示这种方法的一些局限性。

首先,推荐 API 的能力很大程度上依赖于 API 调用对象的类型推断结果。例如,当调用方类型未知时,没有可收集的候选 API。Intellicode 对推荐点 kwargs 产生 NULL 推荐。原因是它不能推断调用者对象的类型。
在这里插入图片描述
其次,即使可以成功推断对象类型,Intellicode 生成的推荐列表也有可能只包含字母顺序的候选对象。主要原因是基于学习的方法在推荐频繁调用的 API 方面做得很好,而不是项目特定的 API。
在这里插入图片描述
另外,即使 IntelliCode 成功地推荐了一些被标记为星号的候选人,这些推荐也可能是错误的。在例子中, IntelliCode 提供星号标记的 API,但排名前 4 的答案都不正确,但可能在训练集中使用频率更高。这个问题的产生部分是由于机器学习的不确定性。
在这里插入图片描述

PyART——从不完整的 Python 上下文中提取数据流

PyART 提供了一种从不完整的 Python 上下文中提取数据流的有效方法,我们称它为乐观的,因为这样的数据流既不 sound 也不 complete,但足以提供 API 建议,收集起来也具有成本效益。核心思想是模拟人类直觉,这与传统的数据流分析不同。传统的数据流分析试图在基本块的边界上获取过程中每个点的信息,并限定每个块的进入状态和退出状态。控制流用于确定一个值如何传播。然而这对于 Python 来说是困难的。

相比之下,人类主要基于局部符号信息来推断数据流。例如,他们考虑周围的变量和代码结构。因此,PyART 定义了从五个基本抽象语法单元派生近似数据流的规则。

Rule1: Assignment

规则 1 是对赋值做了一个约束,对于位于位置 l 之前的右侧操作数 e 中的任何变量和方法对象 u,都有数据流从 u 流向左侧操作数 v。这里,标识符 VM 表示表达式中的所有变量和方法对象,DFS(v) 表示涉及对象 v 的所有数据流路径。
在这里插入图片描述
Rule2: Loop

规则 2 是循环指定数据流提取,即从迭代器 e 到循环变量 v 中的任何变量或方法对象中有数据流流向。
在这里插入图片描述
Rule3: Object attribute access/invocation

规则 3 是关于属性加载和调用的,如果一个对象 u 访问了一个字段属性或调用了一个方法属性 v,在 u 和 v.n 之间有数据流。
在这里插入图片描述
Rule4: Container access

规则 4 是为容器访问指定了数据流,如果容器 v 通过索引 e 访问,则数据流从 e 中的任何对象 u 到容器对象 v。
在这里插入图片描述
Rule5: Function parameter passing

规则 5 是用于函数参数传递,它指定任何参数 e 中涉及的任何变量都有数据流流向函数 f。
在这里插入图片描述
Rule6: Function parameter passing

由于这五个单元可能以组合的形式出现,所以规则 6 聚合了从单个单元派生的数据流关系。
在这里插入图片描述
Rule7: Propagation

此外,PyART 根据传播规则对流的效果进行建模。例如,如果 line1 中有一个关于 x 的数据流,它将在 line1 之后关于 x 的其他位置传播。
在这里插入图片描述
Rule8: Preservation

最后,规则 8 保留所有变量或方法对象不受单位影响的数据流关系 (因此应该删除)。
在这里插入图片描述
编码器根据收集到的特征,生成一个包含四个元素的特征向量,包括:数据流提示,token 相似性、caller-API 共现频率以及上下文 token-API 共现频率。在训练过程中,模型构造器使用随机森林进行监督学习。
在这里插入图片描述
实验评估结果表明,我们提出的数据流分析方法、API 推荐方法均优于 baseline,且具有轻量级、实时性的优势。


  1. Peng Y, Li S, Gu W, et al, Revisiting, Benchmarking and Exploring API Recommendation: How Far Are We?[J]. arXiv preprint arXiv:2112.12653, 2021. ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICLR 2023 | LightGCL: 简单且高效的图对比学习推荐系统

论文题目:LightGCL: Simple Yet Effective Graph Contrastive Learning for Recommendation收录会议:ICLR 2023论文链接:https://arxiv.org/abs/2302.08191代码链接:https://github.com/HKUDS/LightGCL港大数据智能实验室 &#x…

billu_box靶场通关

billu靶场通关 靶机ip:192.168.112.134 信息收集 端口开放 80 目录扫描 images目录存在目录遍历 test.php(任意文件下载) add.php(文件上传) index.php(主页) head.php show.php c.php这个工具的字典不全,换py脚本重新扫多出了以下目录 phpmy in …

目标检测YOLOv5数据集怎么找?

完整的配置-标注-训练-识别在我这篇博客小白YOLOv5全流程-训练实现数字识别_yolov5数字识别_牛大了2022的博客-CSDN博客 模型部分剖析可以看我每周深度学习笔记部分。关于训练的数据集怎么搞很多人问过我,我在这篇文章给大家一点我的经验和建议。 数据集是什么 简…

Leetcode每日一题 1487. 保证文件名唯一

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

网上心理咨询系统的设计与实现

技术:Java、JSP等摘要:高等院校担负着培养高素质人才的使命,高素质人才不仅要有良好的思想道德素质、科学文化素质和身体素质,更要有良好的心理素质。然而随着近年来我国高校的连续扩招以及高额的学费居高不下,当代的大…

工程项目管理软件有哪些?这六款很好用!

工程项目管理软件哪个好用?这六款很不错! 在现代社会中,软件已经成为了企业信息化、项目管理等方面必不可少的工具。尤其是对于工程项目管理而言,借助软件进行协同、计划、控制等方面的工作,已经成为了必要的手段。但…

钡铼技术BL302 ARM工控机QT图形化界面开发的实践

QT是一种跨平台的应用程序框架,用于开发图形用户界面(GUI)、网络应用程序和嵌入式应用程序。QT提供了丰富的GUI组件和工具,使开发人员能够轻松地创建专业级别的应用程序。QT使用C编写,支持多种操作系统,包括Windows、Linux、macOS…

tuts4you上lena‘s40个crackme(1)

本来是不打算写文章了,因为懒,想以后通过录屏的形式保存一下自己学的路程。但奈何开学后一直没找到机会,在宿舍也不愿意大吼大叫的讲东西,只好再写写文章了 最近学了一些汇编语言和逆向工程,所以就想通过这40给题目来看…

hashCode 和 equals 的处理

文章目录hashCode 和 equals 的处理1. 阿里巴巴编程规范要求2. equals和hashcode的分析2.1 Object方法2.2 只覆写(Override)equals带来的问题问题演示问题分析问题处理hashCode 和 equals 的处理 1. 阿里巴巴编程规范要求 2. equals和hashcode的分析 2…

python实战应用讲解-【numpy专题篇】函数(附python示例代码)

NumPy 数学函数 NumPy 包含大量的数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。 三角函数 NumPy 提供了标准的三角函数:sin()、cos()、tan()等 import numpy as npa = np.array([0, 30, 45, 60, 90]) print(不同角度的正弦值:) # 通过乘 pi/180 转化…

园区智慧能源管理系统

实现对园区的用能情况实时、全方位监测,重点设备进行数据自动采集并智能统计、分析,根据需要绘制各种趋势曲线、能源流向图和分析报表。将物联网、大数据与全过程能源管理相融合,提供全生命周期的数字化用能服务,实现用能的精细化…

SpringBoot集成ElasticSearch,实现模糊查询,批量CRUD,排序,分页,高亮

导入elasticsearch依赖在pom.xml里加入如下依赖&#xff1a;<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>非常重要&#xff1a;检查依赖版本…

邮件发送,正文内容格式h5,模板字符串拼接使用及赋值,原生js

一、邮件发送 需求不难&#xff0c;传指定的参数给后端&#xff0c;调接口就直接发送了 就是参数里有个正文部分&#xff0c;一定要用h5写 写vue写习惯了&#xff0c;原生的都快忘光了&#xff0c;走了些弯路 二、h5 在页面上有个邮件发送的按钮&#xff0c;点击按钮打开弹窗…

10分钟搞定win11安卓子系统

10分钟搞定win11安卓子系统Android子系统的要求一、安装 Windows 虚拟化支持二、Win11 正式版安装安卓子系统方法教程 (离线包安装)三、在Win11 安卓子系统安装 APK 软件包教程Windows 11 WSA 安装 APK 方法&#xff1a;Windows 11上成功运行安卓APP安装国内的 Android 应用商店…

windows系统无法保存文件的解决方案

❤关注我&#xff0c;不迷路❤ 点击进入PC常见故障汇总专栏 近期收到部分反馈&#xff0c;在windows的电脑上保存一个文件的时候&#xff08;另存为&#xff09;&#xff0c;选择完目标文件夹后无法保存&#xff0c;点击系统的保存按钮&#xff08;有些系统展示为打开按钮&…

2023最新谷粒商城笔记之订单服务篇(全文总共13万字,超详细)

订单服务 页面环境搭建 配置动静环境 在服务器的mydata/nginx/html/static 路径下创建一个 order 文件夹&#xff0c;在order路径下分别创建以下几个文件夹&#xff0c;用来存放对应的静态资源 detail 文件夹下存放 等待付款的静态资源&#xff0c; 并将等待付款文件夹下的页…

DC-4 靶场学习

信息搜集&#xff1a; 首先获取靶场ip&#xff0c;和之前一样。 arp-scan -l nmap -sP 192.168.28.0/24然后访问。 发现需要登录。 漏洞分析: 直接用bp爆破&#xff0c;爆破出来密码为happy&#xff0c;登录。 发现执行了命令&#xff0c;抓包。 修改命令可以执行&#xff…

客户案例|FPGA研发管理解决方案:UniPro瀑布+敏捷 打造高效能组织

2023开年以来&#xff0c;新享科技项目管理软件UniPro收获一波客户侧的点赞好评。在过去一年中&#xff0c;UniPro不断与客户保持高频沟通&#xff0c;满足客户需求为出发点&#xff0c;以产品功能实现为落脚点&#xff0c;不断打磨产品。 以UniPro客户京微齐力为例&#xff0…

Vulnhub靶场----9、DC-9

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-9下载地址&#xff1a;https://download.vulnhub.com/dc/DC-9.zip kali&#xff1a;192.168.144.148 DC-9&#xff1a;192.168.144.158 二、渗透流程 1、信息收集nmap -T5 -A -p- -sV -sT 192.168.144.158思路&am…

IDEA Android 网格布局(GridLayout)示例(计算器界面布局)

网格布局(GridLayout&#xff09; 示例程序效果&#xff08;实现类似vivo手机自带计算器UI&#xff09; 真机和模拟器运行效果&#xff1a; 简述&#xff1a; GridLayout(网格布局)和TableLayout&#xff08;表格布局&#xff09;有类似的地方&#xff0c;通俗来讲可以理解为…