on
LLM浪潮下的杂谈
去年年末(2022/12)的时候几条新闻报道了一些关于 chatGPT的内容,说来惭愧,当时都没有真的点进去好好了解一下。
之后的两个月里我的信息茧房暂时趋于平静,没有很多chatGPT的消息,但是今年的2月,这个话题的引爆让我意识到,事情并不简单。
这不是一片技术博客,纯属个人想法。
值得注意的是,这篇除部分个人感受以外的所有内容全部由chatGPT生成
。
关于chatGPT以及AI的一些名词解释
GPT
GPT stands for “Generative Pre-trained Transformer,” which is a type of deep learning model architecture used primarily for natural language processing (NLP) tasks. GPT is based on the Transformer architecture and leverages unsupervised learning to generate contextually relevant text given an input prompt. GPT models have advanced through several iterations, with each version generally showing improvements in performance, size, and capability.
GPT代表“生成预训练变压器”,是一种主要用于自然语言处理(NLP)任务的深度学习模型架构。GPT基于Transformer架构,利用无监督学习生成与输入提示相关的上下文相关文本。 GPT模型经历了多个迭代,每个版本通常显示性能,大小和功能的改进。
Large Language Model (LLM)
LLM是指”Large Language Model”,即大型语言模型。这是人工智能(AI)和自然语言处理(NLP)领域的术语,它描述了一种用于理解和生成人类语言的机器学习模型。在此上下文中,”大”通常指的是模型的复杂性,包括它训练时使用的参数数量和数据量。
OpenAI的GPT系列(如GPT-3和GPT-4)就是著名的大型语言模型示例。这些模型使用了数十亿或数万亿参数,并在大规模文本数据集上进行了训练。结果是,它们能够理解复杂的语境,并生成自然、连贯、有创造性的文本。
Generalization - 泛化能力
LLM(大型语言模型)的泛化能力指的是其处理、理解和生成尚未在训练集中看到的文本的能力。泛化是机器学习模型的一个重要性能指标,衡量的是模型对新数据的适应性。
在语言模型的情况下,泛化能力可能包括以下方面:
处理新的词汇和表达方式:例如,如果模型在训练数据中从未见过某个词,但是它能理解和适当使用这个词,那么可以说这个模型在词汇层面上具有很好的泛化能力。
处理新的上下文和话题:这可能包括理解模型在训练数据中从未见过的概念,或者生成关于这些话题的有意义的语言。
推理和创造性:这可能包括在给定的上下文中生成新的、创造性的内容,或者进行一些形式的逻辑推理。
适应新的任务和应用:例如,如果一个语言模型可以在不同的自然语言处理任务中(例如机器翻译、情感分析等)表现良好,那么可以说这个模型具有很好的泛化能力。
LLM,如OpenAI的GPT-3和GPT-4,通过在大规模的文本数据上进行训练,已经展示出了相当强的泛化能力。然而,值得注意的是,尽管这些模型在很多任务中都表现出了强大的能力,但它们也有局限性。例如,它们可能在理解新的或复杂的概念,或者在处理需要深入的领域知识的任务上遇到困难。
Token
GPT和嵌入模型以称为标记的块来处理文本。标记代表常见的字符序列。例如,字符串” tokenization”被分解为” token”和”ization”,而像” the”这样的短且常见的单词被表示为单个标记。请注意,在句子中,每个单词的第一个标记通常以空格字符开头。请查看我们的分词器工具,以测试特定字符串并查看它们如何转换为标记。粗略的经验法则是,对于英文文本,1个标记约等于4个字符或0.75个单词。
需要注意的一个限制是,在GPT模型中,提示和生成的输出合并后的长度不能超过模型的最大上下文长度。对于嵌入模型(不输出标记),输入长度必须短于模型的最大上下文长度。每个GPT和嵌入模型的最大上下文长度可以在模型索引中找到。
搜索引擎 -> LLM
最开始面对chatGPT,我把它当成了一个搜索引擎,有不会的问题就去问它,得到答案。
它的使用太方便了,以至于我不需要在众多搜索结果中一条条筛选符合自己要求的内容。
这是在微博上看到的一个有趣的博文:
关于接受新鲜事物的态度
说实话我觉得接受新鲜事物
这点反而是我在整个AI洪流中认为最值得讨论的事情。
仅对于我个人而言,我突然意识到,自己接受新鲜事物的能力很弱。
为什么这么说呢?可以看到一开头我就说,看到chatGPT相关的新闻报道,只是看个热闹,没多想了就。
当然,不实在批判我自己,而是希望能从中吸取一些经验。
自己缺了一些idea,看到这些新鲜的事物脑袋里空空如也,没有办法把自己想做的事情与之相结合。
拥抱,但有局限
尝试拥抱这次革新,因为工作的原因,尝试做了很多的探索性实验。
但是越是尝试去了解他,反倒是发现了很多的局限。
token的局限性
- 如果input的token数过多,会导致模型直接报错
- 如果是chat模式,随着聊天记录增加,会丢掉之前的聊天记录,导致模型遗忘之前的聊天内容
因为我所尝试的场景主要集中在 completion 场景,所以更多是感受在input token过多这里。
token数是 输入 + 输出的总数,如果问题太长,回答就会变短甚至出错。
在很多时候,使用大模型的开发反而是努力的所见token数
无法控制黑盒结果,对prompt的要求很高
GPT的返回结果对 prompt 的要求非常高,也许仅仅是几个单词之间的差异(temprature = 0)都会影响到返回结果的不同。
prompt的一点点差异就会影响到结果的不同,想要得到满意的回答,需要在prompt上做文章,这也是为什么prompt engineering盛行的原因之一了吧。
自己的一些想法
挽起裤腿也在河边淌了一下这波浪潮,确实因为没有专业理论知识的支撑,什么东西都是现学,了解可能都很皮毛,但是感觉 AI 对自己的提效有局限。
chatGPT的提效
chatGPT的提效对我来说很有限。
- chatGPT我用额最多的就是当做一个搜索引擎,虽然上文中刚说到不能把它当作搜索引擎,但是平时的使用场景就是一直在问问题。
- 下载浏览器插件用它练练口语,但是也集中在最开始的几天,后面就不会再用了。
- 使用 GPT 的 api去做一些事情。
copilot的提效
copilot对我的提效反而是出乎意料。
很多场景都是直接补全直接能用。应该跟我没有写业务代码有关系。
我跟其他小伙伴了解到的情况是:
- 对业务代码的书写提示性很差,甚至很多时候会起到副作用
- 公司有自己的前端组件库,所以对于前端组件的提示效果反而会很差,因为它不了解内部的组件库,提示出来的都是antd的用法