无监督方法实现C++、Java、Python 代码转换,程序员:出了bug怎么办,两种语言都要看吗?...

系统讲解Python 代码转换为 C++ 代码 Boost.Python 是一个功能强大的 C++ 库,可以简化 C++ 和 Python 之间的互操作。Pybind11 是一种轻量级的 C++ 库,可以将 C++ 和 Python 进行无缝集成。循环:Python 中的 for 循环使用 range() 函数或直接遍历列表,而 C++ 中的 for 循环则通常是基于索引的。包含 Python 头文件:确保包含 ,并且项目链接了 Python 库。Boost.Python:适合大型项目,自动处理类型转换,但需要依赖 Boost 库。 阅读详情

参与:魔王

Facebook 提出的无监督代码转换方法 TransCoder 能够以高准确率实现 C++、Java 和 Python 三种编程语言之间的函数转换。只需单语源代码,无需任何源语言或目标语言的专业知识。看起来很不错,不过也有人吐槽:出了 bug 怎么办?两种语言都要看吗?(瑟瑟发抖……

想使用之前写的代码库但忧虑编程语言过时,想重写又嫌麻烦,怎么办?源到源编译器似乎是不错的选择。

transcompiler 系统,又称源到源编译器,可以将高级编程语言(如 C++ 或 Python)写成的源代码转换成另一种语言。此类工具主要为了提升互操作性,将用过时或废弃语言(如 COBOL、Python 2)写成的代码库移植到现代语言。它们通常依赖于手动编写的重写规则,并应用于源代码抽象语法树。

但是,transcompiler 存在一些缺陷,如转换结果通常缺乏可读性,无法遵循目标编程语言的规范,需要人类程序员进行手动修改才能准确运行。整个转换过程不仅耗时,还需要专家掌握源语言和目标语言的专业知识,因此这类代码转换项目的成本很高。

在自然语言翻译领域中,神经模型的性能大大超过基于规则的模型,但由于缺乏平行数据,神经模型在编程语言转换领域中的应用比较有限。那么,能否将自然语言翻译中的神经模型借鉴到编程语言转换中呢?最近,Facebook AI 研究院做了一些尝试。

Facebook 研究人员利用无监督机器翻译方法,训练出一种无监督神经 transcompiler——TransCoder。TransCoder 基于 GitHub 开源项目中的源代码训练而成,能够以高准确率实现 C++、Java 和 Python 三种编程语言之间的函数转换。

如下图所示,TransCoder 将 Python 代码转换成了 C++ 代码:

TransCoder 成功地将 Python 输入函数 SumOfKsubArray 转换成了 C++。TransCoder 推断出参数、变量的类型和函数的返回类型,将 Python deque() 转换成了 C++ 中的 deque<>。此外,它还准确地转换了 Python 的 for loop 和 range 函数。

下图展示了 C++ 和 Java 之间的转换:

还有 Python 与其他语言之间的转换:

该方法具备以下特点:

  • 仅需单语源代码即可实现编程语言转换,无需任何源语言或目标语言的专业知识;

  • TransCoder 能够成功掌握每种语言的特定复杂模式,并将其迁移至其他语言;

  • 这一完全无监督方法在性能上大幅超过利用规则方法和高级编程知识的商业化系统。

此外,研究人员还构建和发布了一个包含 852 个平行函数的测试集,以及用于检查转换结果准确性的单元测试。研究人员表示,相关代码和预训练模型将开源。

测试集中的平行函数示例。

无监督编程语言转换神器——TransCoder

TransCoder 使用的是带注意力的 seq2seq 模型,由编码器、解码器和 transformer 架构组成。研究人员表示,对于所有编程语言,一个模型足矣。

在训练方面,研究人员遵循 Lample 等人 [32] 提出的无监督机器翻译三原则,即初始化、语言建模和回译,如下图 1 所示:

图 1:TransCoder 使用的无监督机器翻译三原则图示。

原则一:初始化

第一个原则,即利用跨语言遮蔽语言模型预训练进行模型初始化。由此,将表达相同指令的代码段映射至相同的表示,而不用在意是何种编程语言。

原则二:语言建模

第二个原则利用去噪自编码(Denoising Auto-Encoding,DAE),训练解码器使之总能生成有效的序列,即使输入数据带有噪声也是如此。也就是说增强编码器对输入噪声的稳健性。

回译

第三个原则回译,即令模型生成可用于训练的平行数据。

举例来说,当 Python → C++ 模型质量不错时,用它为 C++ → Python 模型生成更精确的数据,反之亦然。

下图展示了训练后获得的跨语言嵌入表示:

图 5:跨语言 token 嵌入空间。

TransCoder 效果如何?

研究者进行了一系列实验,来评估 TransCoder 的效果。

具体而言,他们使用具备 6 个层、8 个注意力头的 transformer 架构,并将模型维度设置为 1024。此外,对所有编程语言均使用同一个编码器和解码器。

在跨语言语言模型预训练过程中,研究人员在 C++、Java 和 Python 这三种语言的批次中交替进行,它们由 32 个源代码序列构成,每个序列包含 512 个 token。

在训练阶段,研究人员和在去噪自编码和回译目标中交替进行,使用批大小约为 6000 个 token。

至于模型优化,研究人员使用的是 Adam 优化器,学习率为 10^−4,学习率调度器与 Vaswani 等人 [45] 相同。

在实验中,研究人员使用 PyTorch 实现模型,并在 32 块 V100 GPU 上进行训练;使用 16 位浮点运算,以加速模型训练,降低模型内存占用。

实验结果

该研究使用三个评估度量指标:BLEU 值、参考匹配(reference match)和计算准确率。BLEU 值用于评估生成函数的质量;参考匹配用于评估转换结果完美匹配真值参考的比例;计算准确率用于评估当输入相同时,假设函数是否生成与参考相同的输出。

下表 1 展示了 TransCoder 在测试集上的结果,模型使用了贪婪解码(集束大小为 1)。

表 1:使用贪婪解码后,TransCoder 在测试集上的结果。

下表 2 展示了使用束搜索解码后的结果,并对比了 TransCoder 和现有基线方法的性能。

看起来,效果很不错。

不过,也有程序员吐槽:

简直是 debug 的地狱,出了问题程序猿两种语言的代码都得看……

参考内容:

https://arxiv.org/abs/2006.03511

- end -





Python为何成为AI与数据科学的工业级首选语言 Python已超越单纯编程语言范畴,演变为AI与数据科学领域事实上的基础设施层。其核心价值源于NumPy的硬件感知内存布局、pandas的零摩擦数据集成能力、PyTorch的动态计算图调试友好性,以及scikit-learn统一接口所降低的认知负荷。这些技术特性共同支撑起从Jupyter交互探索、特征工程、模型训练到FastAPI服务化部署的端到端生产闭环。尤其在时序预测、信贷风控、智能推荐等典型场景中,Python生态通过C扩展实现性能临界点突破,又以高阶抽象屏蔽底层复杂性,使工程师能聚焦于业务逻辑而非环 阅读详情

相关推荐

Python 自动生成 C++ 代码 - 自动化生成 C++ 代码的实现

使用以上的代码,我们可以轻松地根据用户输入自动生成对应的 C++ 代码。这种自动化生成代码的方法可以大大提高开发效率,减少编码工作量,并避免手动编写代码可能导致的错误。接下来,我们可以通过 Python 代码读取用户输入,获取所需的代码信息,比如需要生成的类名、成员函数等。然后,使用 Jinja2 模板引擎将这些信息插入到代码模板中,生成最终的 C++ 代码。接下来,我们可以创建一个 C++ 代码模板,作为自动生成的基础。这个模板可以包含一些预定义的代码结构,我们可以通过替换特定的标记来自定义生成的代码。

DevNinja的博客 1859

Python代码转换成C++

Python和C++是两种不同的编程语言,但它们都有各自的优势和适用场景。在某些情况下,我们可能需要将Python代码转换成C++代码,以获得更高的执行效率或更好的性能。本文将从多个方面介绍如何将Python代码转换为C++代码。

很酷的站长的博客 7351

将Python转换为C或C ++

#include使用命名空间std; 向量asallar(size_t limit){vector nov(limit + 1,false); 向量结果对于(size_t i = 2; i

chatgpt赋能python:Python转C++编译器:将高级语言转换为本地代码的新趋势

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

weixin_45566993的博客 1124

Enterprise Architect 中文经典教程

本文使用到的EA工程文件下载 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,...

2万+

YOLOv8验证的命令以及计算coco指标

好久不看代码,都不知道怎么验证的了,来记录一下。1、计算coco指标。

毕竟是Shy哥 1481

图像处理深度学习python代码改写成c++推理

深度学习的代码一般采用python编写,因为python有很多开源的库可以直接引用,但是如果对推理速度有更高的要求,可以采用c++编写推理代码。相比python,c++运行速度更加快,但是需要编译环境,而且第三方的库没有python完善。所以,究竟要使用哪一种语言,可以根据自己的应用场景和使用目的来选择。如果我们需要用c++来推理,而源代码又只有python版本,那么就需要我们来改写。首先我们需要在python代码中将模型训练好,或者使用预训练模型。接下来我将从两个方面讲述移植的过程。

cdyyyyyyy的博客 3448

Atlas 300I Pro推理卡性能深度测试:对比业界同类产品的能效比与算力表现

本文对昇腾Atlas 300I Pro推理卡进行了深度性能评测,重点对比了其与业界同类产品的能效比与算力表现。实测数据显示,该卡在运行BERT等模型时展现出高达39.6句子/秒/瓦的卓越能效比,电力成本可降低40%以上,同时其达芬奇架构和硬件加速特征检索能力,为高密度在线推理和向量检索场景提供了强大支撑。

weixin_29031161的博客 579

python代码转换为c++语言_无监督方法实现C++、Java、Python 代码转换,程序员:出了bug怎么办,两种语言都要看吗?...

Facebook 提出的无监督代码转换方法 TransCoder 能够以高准确率实现 C++、Java 和 Python 三种编程语言之间的函数转换。只需单语源代码,无需任何源语言或目标语言的专业知识。看起来很不错,不过也有人吐槽:出了 bug 怎么办?两种语言都要看吗?(瑟瑟发抖……机器之心报道,参与:魔王。想使用之前写的代码库但忧虑编程语言过时,想重写又嫌麻烦,怎么办?源到源编译器似乎是不错的...

weixin_39764379的博客 530

MONAI教程<1>-安装

MONAI的安装非常简单,常用的有两种方法: 直接 pip install monai 从GitHub 上安装 monai是通常配合其他库一起使用的,比如pytorch, nibabel, skimage, pillow等等。缺什么直接pip install 就行

Tina姐的博客 1万+

ASReview:基于主动学习的AI文献筛选工具,提升科研效率

主动学习是机器学习的一个重要分支,其核心原理是让算法能够主动选择最有价值的数据进行标注,从而以更低的成本获得更好的模型性能。这一技术通过人机协作的闭环流程,显著提升了数据标注和模型训练的效率和精度。在工程实践中,主动学习尤其适用于数据标注成本高昂或数据类别不平衡的场景,例如医学影像分析、自然语言处理中的文本分类以及推荐系统的冷启动问题。通过优先标注模型最不确定的样本,它能够有效解决传统机器学习面临的冷启动和数据稀疏性挑战。本文聚焦的ASReview项目,正是将主动学习原理应用于系统文献综述这一具体场景,通过

weixin_28725959的博客 432

python代码转换为c++语言_无监督方法实现C++、Java、Python 代码转换,出了bug,两种语言都要看吗?...

原标题:无监督方法实现C++、Java、Python 代码转换,出了bug,两种语言都要看吗?Facebook 提出的无监督代码转换方法 TransCoder 能够以高准确率实现 C++、Java 和 Python 三种编程语言之间的函数转换。只需单语源代码,无需任何源语言或目标语言的专业知识。看起来很不错,不过也有人吐槽:出了 bug 怎么办?两种语言都要看吗?(瑟瑟发抖…… 想使用之前写的代码...

weixin_39608559的博客 274

Upwork入门指南:如何创建吸引人的个人资料

本文详细介绍了如何在Upwork上创建并优化个人资料,帮助自由职业者吸引更多客户。内容包括: 注册与验证:从注册账号到邮箱验证的完整步骤。 个人资料填写:如何撰写吸引人的标题、简介,选择技能标签,以及设置专业头像和费率。 作品集与优化:上传高质量作品集,提升搜索排名和客户信任度。 常见问题解答:解决新手常见问题,如无工作经验或审核不通过。 通过本文的指导,你将学会打造一个专业且高效的个人资料,为在Upwork上获得更多机会奠定基础。

qq_61813593的博客 3523

Facebook实现C++、Java、Python 代码转换,程序员:出了bug怎么办,两种语言都要看吗?...

Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲机器之心报道参与:魔王Facebook 提出的无监督...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 343

ST7789T3与CST816D驱动全解析,面试技巧第11篇:嵌入式面试场景问答 10 连发。

SPI模式下,SCLK、MOSI、CS、DC、RST为必需引脚;8080模式下需连接D0-D7、WR、RD等信号线。CST816D触摸芯片通常通过I2C接口通信,需连接SCL、SDA及INT(中断)引脚。确保电源引脚(VCC、GND)稳定供电,ST7789T3典型工作电压为3.3V。显示异常时检查时序参数,如SPI时钟频率(建议≤40MHz)、数据建立时间。初始化流程需发送一系列命令序列,包括设置像素格式、扫描方向、帧率控制等。扫描方向(MADCTL)可调整显示旋转角度,需根据实际硬件布局配置。

a967gsvj的博客 375

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 308

exe程序怎么查看代码_无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?...

机器之心报道参与:魔王Facebook 提出的无监督代码转换方法 TransCoder 能够以高准确率实现 C++、Java 和 Python 三种编程语言之间的函数转换。只需单语源代码,无需任何源语言或目标语言的专业知识。看起来很不错,不过也有人吐槽:出了 bug 怎么办?两种语言都要看吗?(瑟瑟发抖……想使用之前写的代码库但忧虑编程语言过时,想重写又嫌麻烦,怎么办?源到源编译器似乎是不错的选择...

weixin_39942108的博客 158

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OpenFang 内置技能解析:nextjs-expert 如何指导 Agent 构建高性能 Next.js 应用

本篇技术指南围绕 OpenFang 内置专家技能 `nextjs-expert`([SKILL.md](https://link.gitcode.com/i/95bb79d998399cc736f0f65d63d22bcb))展开,系统讲解该技能为 Agent 注入的 App Router 架构方法论、SSR/SSG/ISR 数据获取策略、中间件与 API 路由配置、以及生产级部署模式。读完本文,

gitblog_00074的博客 423

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

被“嫌弃”的分号的一生:不要在Python中使用无用分号了

点击上方 "程序员小乐"关注,星标或置顶一起成长每天凌晨00点00分,第一时间与你相约每日英文To live a beautiful life, one must b...

程序员小乐 547

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

智能体驱动的Bug定位:基于图神经网络的代码表示与检索实践

代码表示是软件工程和人工智能交叉领域的核心概念,它旨在将源代码的结构和语义转化为机器可理解的向量形式。其原理在于通过抽象语法树、控制流图等程序分析技术捕获代码的深层逻辑,再借助表示学习模型(如Transformer、图神经网络)生成高维向量。这一技术的核心价值在于实现代码的语义级理解和相似性计算,从而支撑代码搜索、克隆检测、缺陷预测等高级应用。在智能体驱动的自动化场景中,精准的代码表示成为智能体感知和理解代码环境的关键,使其能够像经验丰富的开发者一样进行推理和决策。本文聚焦于智能体驱动的Bug定位这一具体应

weixin_34356555的博客 395

python代替matlab的工程_替代Matlab的国产软件出现,开发商知乎答疑,称1年内实现100%...

点击上方 "Python人工智能技术" 关注,星标或者置顶22点24分准时推送,第一时间送达来自:量子位 报道 | 公众号 QbitAI | 编辑:真经君码农真经(ID:coder_experience)第 194 次推文 图源:百度上一篇:Python带我飞:50个有趣而又鲜为人知的Python特性正文谁,能替代Matlab?近日,哈工大、哈工程等被美国加入“实体清单”的高校被禁用Matlab。...

weixin_29331689的博客 348

2023深信服算法岗笔试复盘:高频考点与避坑指南

算法笔试是技术岗位求职中绕不开的一关,它考察的不仅是知识储备,更是在有限时间内对问题本质的理解与代码实现能力。数据结构作为算法工程师的基石,其排序、字符串和树等核心知识点常常成为笔试中的必考项,而KMP算法的next数组求法、动态规划的状态定义与转移方程,则进一步检验候选人的逻辑严密性与边界敏感度。这些基础原理的价值,在于能支撑机器学习模型落地到真实业务场景,比如安全厂商在恶意流量检测、异常样本识别中,就需要灵活运用聚类、评估指标等算法知识。当技术价值延伸到具体的应用场景时,笔试本身也成了模拟工程实践的微型

chuannaoxuan4674的博客 503

Java后端转型实时语音AI:FDE技术底座构建与6大差距破局

在人工智能技术快速发展的今天,机器学习与深度学习已成为推动产业变革的核心驱动力。其基本原理是通过算法模型从数据中自动学习规律,实现智能决策。在工程实践中,AI系统工程化能力至关重要,它涉及模型部署、性能优化和可观测性等环节,确保算法稳定高效地服务于实际应用。特别是在实时语音处理领域,流式数据处理思维和低延迟推理成为关键技术挑战,这要求开发者不仅要理解声学模型、语言模型等算法原理,还需掌握从音频信号处理到服务化部署的全链路技能。本文聚焦于Java后端开发者向实时语音AI工程师转型的实践路径,系统梳理了构建数学

weixin_30235225的博客 480
上一篇: 使用 Matplotlib 这么久,竟不知道数据可以动起来
下一篇: 模型部署神器:高中生也能读懂的Docker入门教程
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值