精英们总喜欢拽词,最好是让人不明觉厉那种。之前是“拉通、对齐、抓手、露出、湖仓一体”这些中文,这两年是些AI相关的英文(prompt、embedding、RAG、Function Call、LangChain、Agent、Workflow、NLP2SQL...),过几年又不知道是什么。这习惯本质上和穿戴奢侈品类似,一方面凸显自己的专业高级感,一方面制造社交距离。可以预见的是,十年后只要不是专业开发人员,大都不会再提起这些,甚一如十年前看似重要的“J2ME 、MVC、SHH...”。 热词都会被时间内化到日常里,只留下最基础的含义,甚至什么都留不下。写这篇,是想从非技术的视角记录对AI术语的理解,不求准确,只求简单粗暴,方便忘记时回来看看。这词直译是“嵌入”的意思,为了好计算,将复杂的高维向量转换为简单的低维向量。忽略掉“高维/低维/向量”,在我看来embedding更有“替换”的意思,粗暴地说就是用数字打标签。类似将每个词编码为一串数字,类似于这个词的身份证号,而这串数字是唯一的。比如龙傲天,这个词被embedding之后,就会变成“1,2,3,4,5,6,7,8”。现在计算机拿着一份花名册,要从名册上找到“龙傲天”,只用拿“1,2,3,4,5,6,7,8”去找就行了,比拿“龙傲天”三个汉字去找要容易。到这儿,已经大致知道embedding是个啥货了,和别人吹一个牛基本够用。要吹更多得牛,得再深入一些。上面的玩法是word2vec,属于词向量的技术(word embedding),顾名思义就是只玩词的,图片视频啥的玩不了。word2vec还能对那串数字进行加减法,比如“国王 - 男人 + 女人 = 女王”。词向量模型再进一步,就有了glove技术。虽然不知道它为什么要叫手套,但这玩意能通过全局的词频统计,来生成向量,对语义的理解,比word2vec就要深一些。通过检索全局就能知道龙傲天、库日天、叶良辰等人经常在一起玩,用glove为花名册生成向量时,他们几个的编码就会比较接近。
龙傲天:1,2,3,4,5,6,7,8
库日天:1,2,3,4,5,6,8,7
叶良辰:1,2,3,4,5,8,7,6
接着,如果有些不知道的生僻词,模型很难理解其中的意思。于是FastText登场,它主要靠拆词来理解,有点通过偏旁部首认字的意思。比如它能通过“钅”和“同”,推断“铜”是个金属元素。经过FastText这一顿embedding后,模型就有了理解新词的能力。 但不管是word2vec还是FastText,它们都只能embedding出静态向量,即每个词只有一个唯一的编码,意味着不能区分多义词。假设花名册里有两个叫龙傲天的人,给到的编码也只会是一样的。同理,用英文说一句:河岸(bank)边的银行(bank),俩bank不是一回事儿,模型就只会把bank理解成一个意思。它不再给每个词赋予一个唯一的编码,而是能够结合上下文动态地为不同句子里的同一个词给出编码。比如“我在吃苹果”这句话中的“苹果”,指的是粮食类,编码是9,5,2,7。比如“我用的是苹果”这句话中的“苹果”,指的是手机类,编码是8,3,8,4。到这里,模型就从对词义的理解,进化到了对语境的理解。更加深度的理解,就得到Transformer架构的出现。BERT模型采用双向Transformer,GPT模型采用的是单向Transformer。一个重在理解类任务,一个长于生成式任务。例如你告诉GPT:“我叫龙傲天,我的少爷叫刘波...”Transformer架构,可以看作是现在大语言模型的基础,有了这个架构,大模型才能被训练出来。这是个更复杂的话题,用人话讲明白不太容易。总的来说,上面一步步地进化,就是让模型更加准确地理解语义,使embedding更加精准,从而更好地进入到下一步的任务中。什么任务?举个例子,电商里常见的推荐任务,怎么推荐才能让你看到最适合你的商品?你在平台的行为数据,乃至平台能获取的你在平台外部的行为数据,都可以embedding为向量。万物皆可embedding,你和商品的关系,商品和商品的关系,你和其他用户的关系,其他用户和商品的关系等等。其中你和商品的关系就能分为:商品类别,价格,你的浏览时长,是否下单,浏览频次....据说阿里的商品向量至少是768维的,即用768个数字描述一个商品,这还是省成本的妥协。字节的Seed1.5-Embedding模型,向量维度最高能到2048。写到这里,有点唏嘘。AI时代把一切都向量化,大家都是行走的数字。
|