AI辅助编程2 AI编码技术的工作原理

自由的羽毛  金牌会员 | 2024-6-17 10:55:46 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 918|帖子 918|积分 2754

2 AI编码技术的工作原理

在本章中,我们将揭开人工智能辅助编程工具的神秘面纱,了解它们的工作原理。我们将简要回首一下历史,体验一下变更器模子和LLM,并演示OpenAI Playground。然后,我们将获得一些关于怎样评估LLM的发起。
掌握这项强大的技术能做什么、不能做什么,将为在实际软件项目中更明智地使用人工智能辅助编程工具铺平道路。
2.1关键功能

GitHub Copilot、Tabnine、CodiumAI 和 Amazon CodeWhisperer 等人工智能辅助编程工具在市场上引起了热议。每种产品的制造商都试图标榜自己的特色。不过,这些工具也有不少共同的功能。

  • 代码发起:根据注释和文件上下文提供代码发起;推荐单行或整个函数。
  • 上下文感知补全:提供基于全部或部分代码库的上下文感知代码补全,以及帮助编码的发起。
  • 测试生成: 分析代码以生成有意义的测试、映射代码行为并显示边沿情况,从而确保软件在发货前的可靠性。
  • 用户与集成开辟情况互动:当用户在集成开辟情况中输入代码时,自动激活并提供指导;用户可通过聊天与代码互动。
  • 代码分析:分析代码片断、文档说明和注释,提供可靠的代码猜测并标记可疑代码。
  • 错误检测和修复:识别代码中的潜伏错误,并提出修复方法。
  • 自动文档:自动添加文档说明并增强代码文档。
  • 常规使命自动化:帮助为常规或耗时使命、不熟悉的 API 或 SDK 以及文件操作和图像处理等其他常见编码场景创建代码。
  • API和 SDK使用优化:帮助精确有效地使用 API 和 SDK。
  • 开放源代码的发现和归属:帮忙发现和归属开放源代码和库。
这些系统可以为开辟人员提供很大的帮助,主要是通过提供代码发起和上下文感知的补全。我们将在下一节详细先容这些功能。
2.2代码发起和上下文感知补全与智能代码补全

智能代码自动补全(也称为自动完成或微软的 IntelliSense)是许多集成开辟情况的神奇之处。当开辟人员敲击键盘时,它们会向开辟人员提供帮助,提示、填充和突出显示代码段。实际上,这种技术早在上世纪50年代末拼写检查程序出现时就已经存在了。
突破性进展出现在20世纪90年代中期。微软的Microsoft Visual Basic 5.0提供了实时发起和补全,重点放在基本语法和函数签名上。这大大进步了工作服从,减少了错误。
因此,你可能想知道 与人工智能辅助编程工具相比,IntelliSense的优势在那里?毕竟,IntelliSense在人工智能和呆板学习方面有一定的优势。
然而,这两者之间有一个紧张的区别。人工智能辅助工具由生成式人工智能驱动。它们提供的不仅仅是代码,还有自助式文档、规划文档和帮助指南等。得益于生成式人工智能,这些工具可以或许根据给定的上下文,娴熟地生成、调整和理解类似于人类的文本,使它们成为翻译、摘要、文天职析、主题建模和回答查询等方面的佼佼者。使用这些工具有时就像与代码闲聊一样。以LLM为焦点,它们可以从你的输入中捕捉到上下文和意图的变化。
2.3编译器与人工智能辅助编程工具

要更好地理解人工智能辅助编程工具,首先要了解编译器的工作。以下是编译器执行的主要步骤:

  • 词法分析(标记化)
    编译器就像一位语言西席,将你的代码分解成标记。
  • 语法分析
在这里,编译器会检查标记是怎样分组的。它确保您的代码具有精确的结构,而不仅仅是精确的下令。

  • 语义分析(错误检查)
编译器确保您的代码在编程语言的上下文中是有意义的。这不仅关系到语法的精确性。它还涉及精确的寄义。

  • 生成中间代码
这是您的代码开始转换之旅的地方。编译器会将高级代码转换为中间形式。虽然还不是完全的呆板语言,但它已经到达了呆板语言的水平。

  • 代码优化
在这一步骤中,编译器就像是代码的私人锻练,使代码更精简、更高效。它会调整中间代码,使其运行更快,占用空间更少。

  • 代码生成
这是末了的转换。编译器将优化后的中间代码转换成CPU可以理解的呆板代码或汇编语言。

  • 链接和加载:
链接有时被认为是编译过程的一部分,它涉及将各种代码和库组合成一个单一的可执行程序。加载是将程序放入内存执行的过程。
至于像Copilot这样的人工智能辅助编程工具,则是另一回事。它们不像编译器那样能真正“理解”编程语言。相反,它们使用人工智能,根据大量已有的代码进行推测并提出代码发起。由于这些工具在玩概率游戏,因此发起可能会有很大差异。然后,编译器会将这些代码编译成呆板可以运行的程序。
有时,人工智能工具可能会遗漏一些简单的地方,比如一个括号,而人类编码员或编译器会立刻发现。这是由于LLM基于猜测模式,而不是编译引擎。如果有些东西在练习中并不常见,它们可能就不会发现。此外,这些工具可能会变得花哨,并根据情况发起复杂的代码。是的,人工智能辅助编程工具可能会走火入魔。
说到发现错误,人工智能辅助编程工具一样平常都很有效,但仍无法与编译器忍者般的查错技能相提并论。不过,这些工具仍然很强大。例如,它们可以帮助捕捉恼人的语法错误--缺少分号、函数名中的错别字、括号不匹配--并迅速提出精确的修正发起。它们还能帮助你避免常见的编码陷阱。无论是提醒你在打开文件后精确关闭文件,还是发起你以更有效的方式循环使用数组,这款工具都能为你提供支持。说到逻辑错误,人工智能辅助编程工具的洞察力令人惊讶。它们可能无法解决所有复杂问题,但往往能提出你可能未曾考虑过的替代方法或解决方案,将你的问题解决之旅引向精确的方向。
这一切都意味着,虽然人工智能工具有助于让编码更顺畅,但它们并不能取代编译器的全面检查或人类编码员的敏锐眼光。
这些缺点真正强调了将人工智能辅助工具的智能与编译器的全面检查和人性化相团结是多么紧张。毕竟,你要确保代码不仅是好的,而且是准确无误的。
2.4能力水平

2023年10月,Sourcegraph的首席执行官兼团结首创人Quinn Slack分享了一篇颇有见地的博文。他深入研究了Copilot等人工智能辅助编程工具的世界,并提出了一种风趣的思考方式,他称之为 “代码人工智能水平”。他的分步框架让每个人都能更容易地了解这些人工智能工具的功能,并检查贩卖这些工具的公司夸夸其谈的说法是否真的站得住脚。

前三个级别侧重于由人类主导的编码,其中开辟人员是主要参与者。从0级开始,没有人工智能的辅助,这是老式的编码。开辟人员在没有人工智能的情况下手工完成所有工作。这是基线,为人工智能以后的参与奠定了基础。
然后是第一级,即代码完成。这时,人工智能开始参与,并根据四周的情况帮助完成单行或整段代码。在这个阶段,开辟人员仍然处于主导职位,指挥整个程序,并使用人工智能作为典型编码使命的捷径。
第二级,代码创建,提升了人工智能。在这里,人工智能的动手能力更强,并能编写更长的代码部分。例如,人工智能可以计划应用程序接口,乃至修复现有代码。固然,这一切都需要人工智能的监控。这一级需要人工智能了解代码库及其四周的情况,这样才能编写出不仅精确,而且非常适合的代码。
从第三级(受监督的自动化)开始,我们看到人工智能在编码方面的主导职位发生了变化。在这一阶段,人工智能会处理多项使命,以实现人类设定的更广泛的目标,而且不需要每次都进行检查。在这个阶段工作,就像把工作委托给初级开辟人员。这个级别的人工智能已经充足精明,它可以整理错误、添加新功能、将系统整合在一起,并在过程中向人类同行请教任何问题。
到了第4级,也就是完全自动化,人工智能才真正进步了自己的水平。在这里,它可以独自处理复杂的使命,而不需要人类对代码竖起末了的大拇指。想象一下,如果你是首席执行官或产品司理,你会多么信任一位一流的工程师。这就是这个级别所追求的关系。人工智能不只是做出反应。它在自动关注代码,发现并解决出现的问题。
末了是第五级,即人工智能主导的完全自主。这一级别是完全不同的游戏,人工智能不仅要听从人类的指令,还要设定自己的目标。这是关于人工智能在焦点奖励功能基础上的工作。把它想象成在一个与其他署理对决的世界中玩自己的游戏。固然,这个层面听起来有点像科幻小说,但考虑到事物发展的速度,我们不难想象,在我们的有生之年,这个层面可能会成为现实。
目前,像Copilot这样的工具还在第3级左右倘佯。确定确切的级别可能比较困难,但奎因-斯拉克的框架在理解技术及其关键互动方面做得相当出色。有一点是肯定的:这项技术的发展并没有放缓,而是在飞速前进。
参考资料

2.5 生成式人工智能和大型语言模子 (LLM)

使用人工智能辅助编程工具并不需要你是一个精通生成式人工智能技术的奇才。不过,对这项技术有一个鸟瞰式的了解会非常方便。你将可以或许更敏锐地评估这些工具的反应、能力和局限性。
在这里,透明度不仅仅是一个流行词。要让一项新技术真正流行起来,清楚地了解其原理至关紧张。采用的关键在于信任。在编码范畴,可靠性和责任感不仅仅是花哨的附加功能,它们更是面包和黄油。
在接下来的章节中,我们将对生成式人工智能和 LLM 蜻蜓点水,让你对它们有一个更清楚的认识。
2.5.1 演进

生成式人工智能的历史可以追溯到几十年前,最早的例子之一是ELIZA,它是麻省理工学院传授约瑟夫-韦曾鲍姆(Joseph Weizenbaum在60年代中期创造的聊天呆板人。ELIZA的计划目的是模仿与生理治疗师的聊天(你现在还能在网上找到它)。固然,ELIZA是最基本的,它依靠基于规则的算法运行,主要是模仿用户的输入。
然而,许多人发现,与ELIZ 聊天比与真正的生理大夫聊天更愉快,有些人乃至受骗了,以为自己是在与人交换。这种奇特的现象被称为“ELIZA效应”,它展示了人们是多么容易想象出计算机程序对人类的理解能力。
然而,生成式人工智能的发展历程并非一帆风顺。其焦点的技术装备相当基础,进展更像是缓慢的爬行。但到了 2010年代,这一范畴迎来了迁移变化点。现在的技术世界拥有强大的计算能力、GPU(图形处理器)等华丽的硬件系统、数据宝库以及深度学习等复杂模子的微调。就这样,生成式人工智能又回到了快车道上。随着它的发展,出现了不同的方法:

  • 变异自动编码器(VAEs Variational autoencoders)
这项技术于2013年首次亮相,这要归功于 Diederik P. Kingma 和 Max Welling 及其论文《变异贝叶斯自动编码》。他们的 VAE 模子由来自更复杂、更高维度数据的低维度潜空间构成,所有这些都无需监督。它还包罗一个编码器-解码器结构。当我们说高维数据时,我们指的是具有许多特征的数据,每个特征是一个维度--想想在784维空间中的28×28像素图像。低维潜伏空间就像是这些数据的精简版,在保留关键信息的同时,又舍弃了额外的维度。这一点非常紧张,由于它减轻了计算负荷,抵御了维度咒骂,使数据更易于可视化和表明。这种从高维空间到低维空间的飞跃被称为降维,它将数据简化到了最基本的水平。传统的自动编码器会为每个潜伏属性输出一个单一的值,而VAE 编码器则不同,它会为你提供一个概率分布。然后,解码器从该分布中选取样本重修数据。这种在潜空间中提供一系列数据而非单一值的奥妙技巧,为创建新数据或图像打开了大门。

  • 生成对抗网络(GANs)
生成对抗网络由伊恩-古德费洛(Ian Goodfellow)及其同事于2014年提出,是一类用于无监督呆板学习的人工智能算法。生成式对抗网络的焦点是两个神经网络,分别被称为生成器和判别器,它们在类似游戏的对决中正面交锋。生成器产生新的数据块,而鉴别器则扮演裁判的角色,分辨真假数据。每一轮,生成器都会进步自己的水平,制作出与真实实例极为相似的数据。这种奥妙的设置打开了通往新可能性的大门,使人工智能可以创造出传神的图像、语音录音以及其他更多的东西。
这些范例的生成式人工智能将成为变压器模子的紧张基石,而变压器模子则是使LLM的强大功能成为现实的真正突破。
2.5.2 Transformer模子—(转换器)

在变更器大放异彩之前,自然语言处理(NLP)的常用方法是递归神经网络(RNN)。RNN专为处理序列或时间序列数据而计划。它们会对隐藏状态进行监控,以记住序列中先前步骤的比特--这对于语言建模、语音识别和情绪分析等工作来说,是一项非常方便的功能。RNN一次处理序列中的一个片断,根据当前输入和之前处理的内容更新隐藏状态--这就是所谓的递归。但在处理长序列时,它们碰到了一个停滞,即梯度消失或爆炸问题。这使得他们很难跟踪数据中的长期关系。
转换器的出现,完全颠覆了这一脚本。变更器并不采用RN 的循规蹈矩方式,而是以并行方式轻松处理数据,并利用留意力机制来跟踪输入序列中不同比特之间的关系,无论它们被放置在何处。架构蓝图中的这一变化让变更器可以轻松处理长短序列。它还避免了梯度问题。此外,它们的并行处理能力还能很好地与图形处理器(GPU graphics processing units)或张量处理单元(TPU tensor processing units)等复杂的芯片架构相匹配。
Ashish Vaswani和他在谷歌的研究人员创建了Transformer,并在2017年发表的开创性论文《Attention Is All You Need》中公布了焦点架构。

转换器模子就像一位出色的语言学家,善于揭开语言错综复杂的面纱。它的神奇之处主要表现在两个阶段:编码和解码。每个阶段都由各自的层级构成。在编码阶段,模子阅读并理解输入文本,就像语言学家理解外语句子一样。然后在解码阶段,模子根据编码阶段获得的理解生成新的文本或译文,就像语言学家将句子翻译成你的母语一样。
转换器的焦点是一种名为 “留意力”的机制,它可以评估句子中每个单词与其他单词的相关性。它会给每个词分配一个留意力分数。例如,以句子 “猫坐在垫子上 ”为例。当模子关注sat这个词时,cat和mat这两个词可能会由于与 sitting 这个动作的直接关系而获得更高的关注分。
该模子的一个显著特点是自我留意机制。这使它可以或许检察整个句子,理解单词之间的关系,并在长时间的文本阅读中保留这些关系。这就赋予了转换器一种长期记忆形式,使其可以或许专注于迄今为止出现过的所有单词或标记(整个单词或单词的一部分),从而理解更广泛的上下文。
然而,只管有这些能力,转换器最初还是缺乏识别句子中单词顺序的能力,而这对于理解句子的意思至关紧张。在这里,位置编码参与了。它就像GPS一样,为模子提供每个单词在句子中的位置信息,帮助理解 “猫追老鼠 ”和 “老鼠追猫 ”这样的分句。
转换器采用了多头留意机制,使其更加复杂。假想该模子有多对眼睛,每对眼睛从一个独特的角度审阅句子,并关注不同的方面或词语之间的关系。例如,一双眼睛可能专注于理解动作,另一双眼睛可能专注于识别字符,还有一双眼睛可能专注于识别位置。这种多视角方法使转换器可以或许掌握对文本更丰富的理解。
此外,转换器的每个阶段都包含多层前馈神经网络,这种直接的网络可帮助处理单词之间的关系。这进一步增强了对文本的理解和生成。
转换器采用预练习模子的形式。它已经在大量数据上经过练习,可以随时使用或进一步微调。预练习完成后,该模子可作为API访问,从而可立即用于各种语言处理使命。公司或个人可以快速将该模子集成到自己的系统中,如人工智能辅助编程应用。此外,通过在特定范畴的数据上进行微调,预练习的LLM还可以进一步磨练,使其在医学或法律文天职析等专业范畴表现出色。这样就无需从头开始开辟复杂的语言模子,从而节流了大量的时间、精力和资源。预练习模子具有基础语言理解能力,是开辟生成式人工智能应用的跳板。
构建和运行LLM本钱高昂。据《华尔街日报》报道,2023年初,GitHub Copilot平均每个用户每月亏损超过20美元。在某些情况下,一些用户每月给公司带来80美元的亏损。不过,随着将来几年生成式人工智能基础设施的扩展,每个用户的本钱应该会降低。
转换器系统的两种主要范例是生成式预练习转换器(GPT generative pretrained transformer)和来自变压器的双向编码器表示(BERT encoder representations from transformers)。GPT是OpenAI推出的一款工具,非常适合创建文本、总结信息和翻译语言。它基于自回归LLM架构。这意味着,它在制作文本时,会根据已经输出的内容仔细考虑每个单词,就像讲故事的人一次一个单词地叙述故事一样。它的技能来自于对大量文本数据的练习。GPT使用解码器生成内容。
而BERT则使用自动编码方法。这种计划使其可以或许深入理解句子中单词的上下文,从而善于破译语言的细微差别和寄义。谷歌于2018年开辟了BERT,并将其作为一个开源项目。从当时起,焦点模子出现了许多变化和增强。
至于人工智能辅助编程应用,主要的变更器模子范例是GPT。事实证实,它可以根据程序员提供的上下文,高效地猜测和自动完成代码。
2.5.3 OpenAI Playground

OpenAI Playground是一个生成式人工智能沙盒,可访问 OpenAI 开辟的各种模子。它允许通过直观的图形界面定制模子。
OpenAI Playground使人们更容易了解各种LLM的优缺点。此外,它还能根据不同的输入(如温度)对模子进行实时测试和调整。
不过,OpenAI对平台的使用收取费用。费用根据使用的代币数量而定。请记住,代价会定期变化。好消息是,截至本文撰写时,所有变化都是贬价。

首次注册OpenAI帐户时,您将获得5美元的积分,可用于OpenAI Playground。这可用于调用 API。

  • Tokens
OpenAI 有一个名为Tokenizer 的工具:

在标记化过程中,ChatGPT 这个词由三个标记构成,并用颜色突出显示。细分为 Chat、G 和 PT。单词 unbelievable 及其后面的感叹号有两个标记,一个表示单词,一个表示标点符号。至于表情符号,它由三个标记符构成。每个标点符号都是一个标记符。空格包含在相邻的单词中。
标记化器实用于 GPT-3、GPT-3.5 和 GPT-4。请记住,不同 LLM 的标记化通常是不同的。
根据经验,1,000个Token大抵相当于750个单词。

  • 使用平台
进入OpenAI Playground后,您可以访问一个仪表板:

屏幕中间是与 LLM 交互的主要工作流程:
系统:您可以在这里为 LLM 提供一些配景信息,例如 “您是 Python 编程专家”。系统提示是会话中的第一条信息,为交互奠定了基础。自定义系统提示可以更好地控制模子在对话中的行为,这对于确保模子保持在所需的参数或上下文范围内特别有用。
用户:这是提示的主要指令。例如,您可以要求 LLM 执行编码使命。
添加信息:这允许您与 LLM 进行持续聊天。
让我们举个例子。假设你正在开辟一个Python项目,但对怎样使用Tkinter库来获取用户输入有困难。您可以输入以下内容:
系统消息: 您是专门研究Tkinter的Python 专家。
用户信息: 我想使用Tkinter创建一个简单的图形用户界面来获取用户的姓名和年事。我该怎么做?
LLM将生成代码列表。但假设您想为输入添加验证。您可以按下添加按钮并输入 "怎样确保输入的年事是数字而不是文本?
LLM 会给出相应的代码,使用 try-except 块将年事输入转换为整数。
固然,这就像使用ChatGPT,但结构更加严谨。此外,真正强大的是自定义功能。你可以在屏幕右侧找到这些功能:
模式:您可以从多种模子中进行选择,乃至可以使用自己的微调 LLM,以确保模子专注于您编码的独特需求。有关微调模子的更多信息,请参阅 OpenAI API 文档。
温度:这可以调整生成内容的随机性或创造性。
代码生成 0.2-0.3 确保代码更加确定、准确,并遵守通用惯例,以获得可靠、可理解的结果。
代码检察 0.2 或更少 专注于既定的最佳实践和尺度,以获得准确的反馈。
错误修复 0.2 或更少 对发现的问题提出更准确、更直接的解决方案。
创造性地解决问题 0.7-1.0 探索更广泛的可能解决方案,有助于头脑风暴或创新性地解决问题。
学习与实行 0.7-1.0 提供更广泛的实例和解决方案,以了解解决问题的不同方法。
数据分析和可视化 0.2 或更少 生成准确而有意义的可视化或分析。
优化使命 多种多样 允许在探索(较高温度)和利用(较低温度)之间取得平衡,以获得高效解决方案。
不过,如果使用的温度值过高,结果可能会不合理。下面是使用2值时的提示示例:
提示:在Python中,将数据从CSV文件迁移到MySQL数据库的步骤是什么?

当使用温度为2时,LLM 的结果大多毫无意义
现在,让我们看看可以调整的其他功能:
最大长度:这是用于生成内容的最大令牌数。该数量包罗提示和回复的使用量。标记与内容的比例取决于您使用的模子。
制止序列:这表示 LLM 制止进一步创建文本的时间点。您可以指定一个特定的字符串或字符序列,当在生成的文本中检测到该字符串或字符序列时,就会向模子发出制止进程的信号。
Top p:这种技术也称为核采样,根据累积概率阈值(用 p 表示,范围在 0 到 1 之间)来选择单词。简单地说,模子并不总是从最有可能的前几个下一个单词中进行选择,而是根据指定的 p 值来考虑范围更广或更窄的可能的下一个单词。p 值越低,可供选择的词语范围越小,重点越突出,从而使文本的可猜测性和连贯性更强。另一方面,p 值越高,可能的下一个词的范围就越大,从而生成的文本就越多样化、越有创意。
频率惩罚:这有助于解决 LLM 的一个常见问题,即重复的短语或句子。该值范围在 0 到 2 之间,值越大,重复越少。但是,当值大于 1 时,文本生成可能会变得不可猜测,乃至毫无意义。
存在惩罚:该值也有 0 到 2 之分。较高的值将允许 LLM 包含更多种类的标记,这意味着要使用更多样化的词汇或更广泛的概念。
有了频率惩罚、存在惩罚和顶部 p,OpenAI 发起您选择一种方法来调整您的使命。但不要回避实行。由于所涉及的复杂问题错综复杂,优化 LLMs 的道路并不是由严格的规则铺就的。
2.6 评估LLM

评估LLM是一项艰巨的使命。这些庞然大物通常非常不透明,似乎无法理解。人工智能公司之间的竞争只会加剧这种情况。关于这些模子所练习的数据集、用于微调其行为的参数数量以及为其提供动力的硬件等方面的详细信息少之又少,这已经成了屡见不鲜。
不过,斯坦福大学的一些研究人员还是带来了一些好消息。他们创建了一个名为 “基础模子透明度指数”(Foundation Model Transparency Index)的评分系统,用于权衡 LLM 的开放水平。这个由一百条尺度构成的尺度,旨在让法律硕士透明度的浑水变得更加清亮。
排名以百分比为基础。遗憾的是,结果远非令人鼓舞。研究人员认为,没有一个接近于到达 “充足的透明度”,平均得分仅为37%。

基础模子透明度指数总分 2023,https://crfm.stanford.edu/fmti
LLM 在处理各种范畴和使命(如软件开辟)方面的灵活性是一个显著优势。然而,这也使评估过程变得复杂,由于它需要特定范畴的评估指标和基准,以确保模子在每个特定应用中的有效性和安全性。
只管如此,在评估 LLM 时仍有一些指标值得考虑:

  • BERTScore
该指标旨在通过比较使用 BERT 嵌入生成的文本和参考文本来评估文本生成模子。虽然它主要用于自然语言文本,但也可扩展或调整用于代码生成使命,尤其是今世码以自然语言进行注释或评论时。

  • 复杂度
这是评估 LLM 等概率模子的常用指标。它量化了模子猜测的概率分布与数据实际分布的符合水平。在代码生成中,较低的复杂度值表明模子在猜测代码序列中的下一个标记时更有优势。

  • BLEU(双语评估底稿)
BLEU 最初用于呆板翻译,现在也用于代码生成,将生成的代码与参考代码进行比较。它通过计算 n-gram 准确度分数来量化生成文本和参考文本之间的相似性,这有助于评估生成代码的语法精确性。n-gram 准确度分数越高,表明生成的代码与参考文本在特定的 n 个词序列上的一致性越好。

  • ROUGE(面向召回的 Gisting 评估研究)
这是从 NLP 中借用的另一个指标,可用于评估代码生成模子。它计算生成文本和参考文本之间 n-grams 的重叠度,从而深入了解生成代码与预期输出的符合水平。

  • MBXP(最基本的 X 编程问题)
该基准专门用于评估多种编程语言的代码生成模子。它使用一个可扩展的转换框架,将提示和测试用例从原始数据集转换为目标语言,从而促进对代码生成模子进行全面的多语言评估。

  • 人类评估
这是一个评估 LLM 代码生成能力的基准,通过丈量 LLM 从文档脚本合成程序的功能精确性来评估 LLM 的代码生成能力。该基准对于持续开辟和增强代码生成方面的人工智能模子至关紧张。虽然不同的模子在 HumanEval 上表现出不同的纯熟水平,但名为 HUMANEVAL+ 的扩展版本在识别流行 LLM 生成的以前未被发现的错误代码方面发挥了关键作用。

  • 多语言 HumanEval(HumanEval-X)
这是对原始 HumanEval 基准的扩展。Multilingual HumanEval 评估 LLMs 的代码生成和翻译能力,涵盖 10 多种编程语言。它采用了一个转换框架,将 Python 中的提示和测试用例转换成目标语言中的相应数据,为多语言代码生成和翻译创建了一个更全面的基准。
评估 LLM 的另一种方法是看参数的数量--可能高达数千亿。以是参数越多越好,对吗?不一定。评估应采取更细致的方法。首先,在计算能力和能源使用方面,扩展参数的本钱可能非常高。这可能会使 LLM 在货币化应用方面不划算。其次,随着参数数量的增加,模子的复杂性也在增加,这有可能导致过分拟合。当模子在练习数据中学得非常好,但在接触未见数据时却出现问题时,就会出现过拟合。这会减弱模子的泛化能力。
另一个问题是需要大量不同的练习数据集来满足这些模子对数据的贪得无厌的需求。然而,获取和整理如此广泛的数据集不仅需要大量资源,而且会带来数据隐私和偏差方面的挑衅。此外,随着参数的激增,对这些庞然大物的评估也变得越来越复杂。评估指标需要更加全面和多样化,以准确权衡模子在各种使命中的表现。
末了,微调是一种更好的方法,无需大幅增加底层 LLM 的参数巨细,就能从模子中获得更多信息。
2.7 LLM的范例

LLM 有多种范例,其中一个突出的种别是开源 LLM。任何人都可以使用、调整或共享它们。它们的透明度意味着你可以看到这些模子是怎样运行的。此外,开源 LLM 允许开辟人员合作创新,开辟附加组件,固然也可以修复讨厌的错误。
最棒的是什么?它们没有代价标签。
但开源LLM并不都是彩虹和独角兽。通常没有专门的团队来解决这些问题或推出定期更新。因此,如果碰到困难,你可能不得不卷起袖子钻进论坛寻求帮助。
开源模子的质量和性能有时就像过山车。还有令人头疼的安全问题。由于一切都是可用的,黑客更有可能找到插入邪恶代码的方法。发起谨慎行事。
末了,说到用户指南和文档,开源LLM可能会让你希望得到更多。这些指南有时让人感觉像是用象形文字写成的。


  • GPT-NeoX-20B EleutherAI 20B 在 “The Pile ”数据集上进行过练习;可以或许完成各种 NLP 使命,如故事生成、聊天呆板人和摘要等。
  • LLaMA 2 Meta 7B 至 70B 在 2 万亿个词块上进行过练习;上下文长度是 LLaMA 1 的两倍 OPT-175B Meta 175B 模子套件的一部分;练习时的碳足迹低于 GPT-3
  • BLOOM BigScience 176B 在 ROOTSa 语料库上练习;计划透明,公开练习数据细节和评估方法
  • Falcon-40B 技术创新研究所 (TII) 40B 在 1,000B tokens上进行练习
  • Dolly 2.0 Databricks 12B 基于 EleutherAI 的 Pythia 模子系列;提供类似于 ChatGPT 的指令跟随互动性
  • Mistral 7B Mistral AI 7.3B 使用分组查询和滑动窗口关注;在大量数据集上进行了练习,在较长序列处理方面表现出色
  • Mixtral 8X7B Mistral AI 46.7B 稀疏专家混淆模子;像 12.9B 模子一样执行推理,支持多种语言,在代码生成和推理等各种使命中表现出色
另一方面,封闭源代码或专有的 LLM 则更加神秘。它们大多对代码、练习数据和模子结构保密。不过,开辟这些复杂系统的公司通常拥有巨额资金。

有了这些资源,这些公司就可以聘请世界上最优秀的数据科学家,并建立复杂的基础设施。因此,LLM 在性能方面往往是最先进的。它们还针对规模和企业的严格需求(如安全和隐私)而构建。
至于缺点,那就是信任问题。这些模子是怎样做出反应的?幻觉和私见又是怎么回事?这些问题的答案可能缺乏细节。
此外,这些大型人工智能运营商还有可能成为把持者。这可能意味着客户会被锁定在一个生态系统中。末了,闭源LLM可能比开源项目更容易停滞不前,由于它们可能无法像开源项目那样受益于多样化的投入和检察。
2.8 评估人工智能辅助编程工具

选择哪种人工智能辅助编程工具可能会让人头疼。你必须权衡许多因素,如准确度、聊天功能、安全性、速度和用户友好性。有时,归根结底还是要看使用起来感觉怎样。不过话又说返来,如果你的雇主坚持使用特定的系统,你可能会束手无策。
要想了解目前的热门话题,Stack Overflow 的 2023 年开辟者调查是一个很方便的资源。Stack Overflow 收集了近 9 万名程序员对最流行工具的看法,如表 2-7 所示。

通过这张图表,您可以一窥现有的众多工具。当你想选择一款工具时,明智的做法是从其他开辟者那里获得推荐。此外,最好还能亲自试驾几款工具。幸运的是,大多数工具都提供免费试用版,因此你可以试一试,而不必立刻下定决心。
另一个需要考虑的关键因素是公司的财务支持。它有风险投资资金吗?如果没有,公司可能不仅难以发展,也难以保持平台的创新性。目前,已经有几家人工智能辅助编程公司不得不制止服务,这对开辟者来说确实是个不小的打击。以 Kite 为例。它是这一范畴的早期参与者之一,成立于2014年。然而,到 2022 年,该公司决定停止该项目。一线希望是什么?它开源了该工具的大部分代码库。
2.9 结论

在本章中,我们揭开了生成式人工智能和LLM的神秘面纱。我们了解了一些引人入胜的历史,例如 ELIZA,然后重点先容了人工智能范畴最大的突破之一:变更器模子。我们还试用了 OpenAI Playground,并展示了怎样定制 LLM。
本章的一些紧张内容包罗:token、利用预练习模子的优势、LLM 巨细的留意事项、perplexity 和 BLEU 分数等指标,以及开源模子与专有模子。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表