CodeGemma: Open Code Models Based on Gemma

news2024/11/20 8:31:37

最近几天,对大模型生成代码的能力比较感兴趣,特此学习了一下大模型怎么在IDE上进行,自动补全你想要的代码。
大模型源码理解-以Gemma为例子
最近也在使用阿里的通义灵码,感觉还挺好用的。通义灵码

摘要:

CodeGemma基于谷歌开源的文本大模型Gemma,结构上跟LLama差不太多。CodeGemma(或者使用在IDE中的大模型)常规的使用GPT或者其它大模型,写prompt去生成代码还是略有区别的,下面就是常规的使用大模型写代码:
在这里插入图片描述
但是在IDE中,不能写prompt让大模型,写代码,这么太方便了,应该类似于自动补全,猜你想写什么代码,增加效率,下面是通义灵码的效果:
在这里插入图片描述

发布版本

公开了三个版本:

  • CodeGemma 7B 预训练版本
  • CodeGemma 7B 指令微调版本
  • CodeGemma 2B 预训练版本
    在这里插入图片描述
    7B和2B训练数据略有差距,7B进行4:1代码数据和自然语言数据进行混合。

如何实现IDE自动生成代码

IDE自动生成代码,和常规的大预言模型训练方式基本上使一致的,或者说和GPT、LLama的训练任务是一致的,但是为了实现你写几个字或者代码,大模型可以自动生成你需要代码。但是在数据构造的时候和常规的方式不一致,则是将一个代码文本信息拆分成三部分,Prefix,Middle,Suffix即三段式,开头,中间,结尾,这三个部分。数据在使用的时候有两种改造方式:

  • PSM Prefix-Suffix-Middle
  • SPM Suffix-Prefix-Middle
    在训练的时候会增加一下特殊的token进行分隔开,如下图所示:
    在这里插入图片描述
    PSM具体样例:
    在这里插入图片描述

实践Prompt:

在具体使用时候,采用以下形式prompt。
在这里插入图片描述
简单代码实现:

BEFORE_CURSOR = "<|fim_prefix|>"
AFTER_CURSOR = "<|fim_suffix|>"
AT_CURSOR = "<|fim_middle|>"
FILE_SEPARATOR = "<|file_separator|>"

stop_token
END_TOKEN = gemma_lm.preprocessor.tokenizer.end_token

stop_tokens = (BEFORE_CURSOR, AFTER_CURSOR, AT_CURSOR, FILE_SEPARATOR, END_TOKEN)

stop_token_ids = tuple(gemma_lm.preprocessor.tokenizer.token_to_id(x) for x in stop_tokens)
def format_completion_prompt(before, after):
    return f"{BEFORE_CURSOR}{before}{AFTER_CURSOR}{after}{AT_CURSOR}"

before = "import "
after = """if __name__ == "__main__":\n    sys.exit(0)"""
prompt = format_completion_prompt(before, after)
print(prompt)

实验结果

在这里插入图片描述

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

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

相关文章

Linux ARM平台开发系列讲解(QEMU篇) 1.2 新添加一个Linux kernel设备树

1. 概述 上一章节我们利用QEMU成功启动了Linux kernel,但是细心的小伙伴就会发现,我们用默认的defconfig是没有找到设备树源文件的,但是又发现kernel启动时候它使用了设备树riscv-virtio,qemu,这是因为qemu用了一个默认的设备树文件,该章节呢我们就把这个默认的设备树文件…

【设计模式学习】单例模式和工厂模式

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

明月三千里许红:25年磨一剑 拒绝网红式短期主义

这是一个关于明月三千里烤肉品牌如何在25年企业经营风口浪尖中&#xff0c;寻求长久生存和发展的故事&#xff1b;也是一个关于明月三千里烤肉品牌如何在25年中追逐流量的同时&#xff0c;不失去初心和品质的深度思考&#xff01; 在当今快速变化的餐饮市场中&#xff0c;淄博烤…

【CSS】利用Vue实现数字翻滚动画效果

利用Vue实现数字翻滚动画效果 在很多数据可视化的需求中&#xff0c;动态呈现数据变化是一个常见且具有较强视觉冲击力的手段&#xff0c;尤其是数字的实时变化。今天我们将探讨如何使用 Vue.js 和 CSS3 来实现数字的翻滚动画效果&#xff0c;即模拟真实物体在Z轴上翻动的效果…

使用cmake进行打包,包含可执行程序和动态依赖库

平常代码开发中&#xff0c;有时候需要将写的程序打包成压缩包放到目标设备上进行运行测试。用CMake管理工程&#xff0c;实现使用make -jnproc package指令可以将工程进行打包&#xff0c;可执行文件存储在bin文件夹中&#xff0c;依赖库存储在lib文件夹中。 示例 1.工程目录结…

选择自动化工具是一个关键的决策过程

好的自动化软件测试工具&#xff0c;不仅可以有效的缩短全生命周期的交付周期&#xff0c;还可以提高测试的有效性&#xff0c;还可以保证更好的高质量的交付。工具的选型是一项重要的决策过程&#xff0c;工具的采用涉及到企业的效率、成本和长期发展。 1、需求分析 确组织希…

云服务器web环境之mariadb

1.安装mariadb服务 yum install mariadb-server 启动mariadb服务 systemctl start mariadb.service 输入mysql就能使用数据库了。 2.服务相关操作 systemctl stop mariadb.service systemctl restart mariadb.service 2.配置开机自启动 systemctl enable mariadb.serv…

python--5--len()

学习目标&#xff1a; len()#range&#xff0c;list,列表、元组,字符串,包括空格,返回字典的“键值对”个数 学习内容&#xff1a; len()#range&#xff0c;list,列表、元组,字符串,包括空格,返回字典的“键值对”个数 len()--返回对象长度 len()#range&#xff0c;list,列…

matlab学习(三)(4.9-4.15)

一、空域里LSB算法的原理 1.原理&#xff1a; LSB算法通过替换图像像素的最低位来嵌入信息。这些被替换的LSB序列可以是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。 2.实现步骤&#xff1a; &#xff08;1&#xff09;将图像文件中的所有像素点以RGB形…

华为海思数字芯片设计笔试第四套

声明 下面的题目作答都是自己认为正确的答案&#xff0c;并非官方答案&#xff0c;如果有不同的意见&#xff0c;可以评论区交流。 这些题目也是笔者从各个地方收集的&#xff0c;感觉有些题目答案并不正确&#xff0c;所以在个别题目会给出自己的见解&#xff0c;欢迎大家讨论…

1688采集API 接口:轻松实现电商数据采集与官方订单API接口对接

各大平台电商软件大全&#xff0c;优质服务 1688采集API接口&#xff0c;一款助力电商从业者轻松实现阿里巴巴与1688平台商品数据采集接口&#xff0c;在数据为王的电商时代&#xff0c;掌握高效的采集与管理技能&#xff0c;无疑是成功的一把钥匙。 功能概述&#xff1a; 1.…

神经射频脉冲术,破解疼痛之锁

一位十余年糖尿病病史的患者&#xff0c;右足开始出现疼痛和麻木的症状三个多月&#xff0c;给他的生活带来了极大的困扰。他曾在多家医院就诊&#xff0c;但治疗效果并不理想。直到他走进了北京精诚博爱医院&#xff0c;这里为他带来了希望和转机。 经过详细的检查&#xff0c…

分享一款免费阅读的软件:Legado,已免费开源(文末有福利)

对于喜欢阅读的人来说&#xff0c;一定经历过从一本厚厚的修仙书籍到MP3、MP4的阅读时代&#xff0c;再到现今的手机软件。 但是现在的阅读软件经常会遇见以下问题&#xff1a;比如广告弹窗太多&#xff0c;排版乱&#xff0c;甚至很多的APP都进入会员时代&#xff0c;再加上一…

使用odbc链接dm8数据库

一、环境说明 windows11 VMware Workstation 17 Pro ubuntu22.04 docker $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy因docker版本的dm8中&#xff0c;没有…

操作系统(Operating System)专题篇——同步与互斥1

目录 0.前言 1.同步与互斥问题总览 2.生产者-消费者问题 2.1 单生产者-单消费者-多资源 2.2 多生产者-多消费者-单资源 2.3 吸烟者问题(单生产者-多消费者-单资源) 2.4 和尚打水问题(多生产者-多消费者-多资源) 3.读写者问题 3.1 读者优先 3.2 写者优先 3.3 过桥问题…

【SpringBoot:详解Bean装配】

&#x1f3e1;Java码农探花&#xff1a; &#x1f525; 推荐专栏&#xff1a;<springboot学习> &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、IoC容器的简介BeanFactory接口源码二、Bean装配扫描装配探索启动类条件装配自定义Bean总…

springboot 人大金仓 kingbase-备份还原,命令中带密码

命令带密码参考 Java代码实现国产人大金仓数据库备份还原需求-CSDN博客文章浏览阅读818次&#xff0c;点赞16次&#xff0c;收藏12次。本人在一次项目中&#xff0c;遇到了需要在系统管理中提供给用户备份还原系统数据的功能&#xff0c;由于项目特殊性&#xff0c;项目底层数…

如何使用电商接口获取商品信息,价格,主图?

1、什么是电商接口&#xff1f; 电商接口是指用于实现电商平台与其他系统之间进行数据交互和功能调的一组规范和方法。通过电商接口&#xff0c;可以实现商品信息的获取、订单管理、支付处理、物流跟踪等功能。 常见的电商接口包括&#xff1a; 商品接口&#xff1a;用于获取…

BLDC的机械角度、电角度与换相时间

6步换相梯形控制&#xff0c;6步一个周期定义为电角度360 总电角度 极对数 * 机械角度 机械角度是指360&#xff0c;一个圆周角&#xff1b; 电角度度指转子转动的角度&#xff0c;从一个N极到下一个N极是360。从N极只到 S极&#xff0c;则转子只运行了180。由于一个电机中通…

Python数据分析案例40——电商直播间成交金额预测

承接上一篇案例电商直播间提取的特征&#xff0c;进而做一篇机器学习的案例&#xff0c;来预测直播间的成交金额。 Python数据分析案例39——电商直播间评论可视化分析&#xff08;LDA&#xff09; 1. 引言 1.1 直播电商与传统电商的比较 直播电商作为一种新兴的电子商务模式…