Embeddig技术与应用 (1) :Embedding技术发展概述及Word2Vec

1 Embedding技术发展史

将内容表示为更低维的向量,使数据成为更紧凑的数字表达形式,并进行计算,这并非一种新的想法。自从人类进入信息爆炸时代以来,就一直在试图综合这些信息,以便我们可以基于这些信息做出决策。早期的方法有独热编码(one-hot encoding)、TF-IDF、词袋模型(bag-of-words)、LSA和LDA。

早期的这些方法都是基于计数的方法。它们主要计算一个词相对于其他词出现的次数,并以此为基础生成编码。LDA和LSA本质上是一种统计方法,但仍通过启发式方法来推断数据集的属性,而非构建模型。(译者注:意思是使用一些经验法则或规则来猜测数据集的某些属性,而非使用数学模型来描述数据集的属性。这种方法可能不是最准确或最优的,但可以在缺乏完整信息或数据集非常大的情况下提供一些有用的信息。与通过建立数学模型的方法相比,使用启发式方法可能更加快速和简单,但也可能会导致一些误差或不准确。)

基于预测的方法出现较晚,而是通过支持向量机(support vector machines)、Word2Vec、BERT和GPT系列模型来学习给定文本的属性,前文说的这些模型都使用了学习到的嵌入。

图片

嵌入方法家族谱系图

02 早期方法的局限性

早期基于计数的方法,在处理大规模语料库时面临以下两大问题:

2.1 出现维度灾难

随着特征数的增加,数据集会变得非常稀疏。举例来说,如果一段文本语料由100万个独特的词汇组成,那么使用独热编码就会产生100万个特征向量,每个向量都会极为稀疏,因为大多数句子并不会包含其他句子的词汇。这会带来两方面的问题:

(1) 当特征数量线性增加时,进行计算会变得非常困难。

(2) 当特征数量巨大时,需要更多的数据才能准确可靠地描述这些特征,否则模型就无法良好表达数据,这就是所谓的“维度灾难”。

2.2 计算复杂度较高

以TF-IDF为例,它需要处理语料库中的所有词汇,所以时间复杂度随着词汇总数N和文档数量d的增长而线性增长,为O(Nd)。另外,TF-IDF会生成一个矩阵,如果有10万文档和5千个词汇,矩阵大小就为100,000 x 5,000,随着语料规模的增长,这个矩阵会变得十分难以处理。

(译者注:此处为内容总结,全文请看《What are embeddings》3.4节 Limitations of traditional approaches)

03 Word2Vec

为了克服早期文本处理方法的局限性,并跟上文本语料库规模不断增长的步伐,2013年,Google的研究人员提出了一种优雅的解决方案,名为 Word2Vec[1]。

到目前为止,我们已经从简单的启发式方法,如独热编码(one-hot encoding),发展为机器学习方法(如 LSA 和 LDA),这些方法旨在学习数据集的模型特征。以前,就像最初的独热编码一样,所有的嵌入方法都将重点放置于稀疏向量。稀疏向量(sparse vector)能够说明两个单词之间存在关联,但并不能表明它们之间存在语义关系。例如,“狗追猫”和“猫追狗”在向量空间中的距离是相同的,尽管它们是完全不同的句子。

Word2Vec 是一个模型系列,有多种实现方法,每种方法都着眼于将整个输入数据集转换为向量表示,更重要的是,它们不仅关注单个单词的已有标签,还关注这些表示之间的关系。Word2Vec 有两种构建模型的方法——连续词袋模型(CBOW)和skipgrams模型,这两种方法都能生成密集的嵌入向量,但对问题的建模过程略有不同。无论是哪种方法,Word2Vec 模型的最终目标都是学习参数,最大限度地提高给定单词或单词组的准确预测概率[2]。

在训练skipgrams模型时,首先从初始训练语料(input corpus)中抽取一个单词,然后预测给定的一组单词围绕已抽取的单词的概率。对于"Hold fast to dreams for if dreams die, life is a broken-winged bird that cannot fly"这句话,模型处理这句话的中间步骤是学习、生成一组嵌入,这些嵌入是数据集中所有单词之间的距离,并以“fast”一词作为输入,预测整个短语中其他单词周围的概率,并给出了这些单词在此处的概率值。

图片

Word2Vec 架构图

在训练CBOW时,我们的做法恰恰相反:从一个短语(被称为上下文窗口)中移除一个单词,然后训练一个模型来预测给定单词能够填充空白处的概率。 这个过程可以用下面的公式表示,我们的目标是最大化这个概率。

图片

通过优化这两个参数(theta和Pi),我们可以最大化单词在句子中出现的概率,从而学习到适合训练语料的好的嵌入向量。

现在让我们来了解一下 CBOW 的详细实现过程,以便更好地理解其工作原理。这次,在代码部分,我们将从适用于较小数据集的 scikit-learn 转向更适用于神经网络操作的 PyTorch。在最高层是一列输入词,然后通过第二层(嵌入层)进行处理,最后是输出层(只是一个返回概率的线性模型)。

图片

Word2Vec CBOW 神经网络架构

我们将在主流神经网络模型构建库PyTorch中实现这个架构的。实现 Word2Vec 的最佳方法是使用Gensim,尤其是在处理较小数据集的情况下,而且Gensim将各层抽象成内部类,这使得用户体验极佳。但由于我们才刚刚了解它们,我们希望更清楚地看到它们是如何工作的,而 PyTorch 虽然没有 Word2Vec 的原生实现,却能让我们更清楚地看到其内部工作原理。

要在 PyTorch 中建模实现CBOW,需要使用与处理机器学习中的任何问题相同的方法:

1.检查并清理输入数据。

2.构建模型的各层。(对于传统的机器学习模型,只有一层)

3.将输入数据馈送到模型中并跟踪损失曲线。

4.检索训练好的模型工件,并利用它对我们分析的新项目进行预测。

图片

创建 Word2Vec 模型的步骤

先从输入数据开始。在本文中,语料库是我们收集到的所有flits。我们首先需要处理这些数据,作为模型的输入。

图片

Word2Vec输入数据集

要为 PyTorch 准备输入数据,我们可以使用 DataLoader 或 Vocab 类,将文本拆分为token和进行分词,或者说为每个句子创建更小的单词级表示。对于文件中的每一行,我们都会通过将每一行拆分成单个单词,然后删除空格和标点符号,并将每个单词小写化,从而生成token。

这种处理流程在NLP中非常常见,花时间做好这一步至关重要,这样我们才能得到干净、正确的输入数据。该流程通常包括以下步骤[3]:

• 分词 - 通过拆分句子或单词转换为其组成字符

• 去除噪声 - 包括URL、标点符号和文本中与当前任务无关的其他内容

• 单词分割 - 将句子拆分成多个单词

• 纠正拼写错误

图片

处理输入词汇表并在PyTorch中从数据集构建一个Vocabulary对象[4]

现在已经成功创建了一个可以使用的输入词汇表对象,下一步是将每个单词创建为一个数字位置的独热编码,并将每个位置再映射回单词,这样就可以轻松地同时引用单词和向量。我们的目标是在查找和检索时能够来回映射。

这一步发生在嵌入层中。在 PyTorch 的嵌入层中,我们根据指定的矩阵大小和词汇表的大小初始化一个嵌入矩阵,该层将词汇表中的单词索引到词向量字典中,以便进行检索。嵌入层是一个查找表,可按索引将单词与相应的单词向量进行匹配。首先,我们创建一个独热编码的word to term字典。然后,我们创建每个单词到词向量的映射和每个词向量到每个单词的映射。这被称为双射(bijection)。这样,嵌入层就像一个独热编码矩阵,允许我们进行查找,实现词语和词向量之间的转换。这一层的查找值初始化为一组随机权重,然后我们将其传递给线性层。

嵌入类似于哈希映射(hash maps),也具有自己的性能特征(O(1)的检索和插入时间),这就是为什么嵌入层可以轻松扩展,而其他方法却做不到。在嵌入层中,Word2Vec中每个向量中的每个值都表示特定维度上的单词。更重要的是,与其他方法不同,该方法中每个向量的值都与输入数据集中的其他词语有直接关系。

图片

图片

在 Pytorch 中实现 Word2Vec CBOW[4]

得到查找值(lookup values,译者认为此处应为词向量)之后,就可以处理所有单词了。对于CBOW这种方法,需要先选择一个滑动窗口,例如在本文这种情况下,即选择目标词前后两个词作为上下文窗口,然后尝试推断出实际的单词是什么。这就是所谓的上下文向量(context vector),在一些情况下,它也被称为注意力。例如,对于“No bird [blank] too high”这个短语,我们就会尝试预测答案是“soars(翱翔)”,也就是使用softmax概率来计算每个单词在给定上下文中出现的概率,并根据这些概率进行训练和推理。一旦有了上下文向量之后,我们就可以查看loss值(即真实单词与按概率排序的预测单词之间的差值),然后继续。

本文训练该模型的方法是通过上下文窗口。对于模型中的每个给定的单词,都要创建一个滑动窗口,其包括该单词和它的前后2个单词。

接着是使用ReLu激活函数激活线性层(linear layer),该函数会决定给定的权重是否重要。在这种情况下,ReLu激活函数会将我们初始化嵌入层的所有负值压缩为零,因为不可能有反向的单词关系,并通过学习单词关系模型的权重进行线性回归(linear regression)。然后,我们检查每个 batch 的 loss ,即真实单词与我们根据上下文窗口预测应该存在的单词之间的差异,并将损失函数最小化。

在每个 epoch 结束时或将数据输入到模型中进行处理的过程中,将权重传递或反向传播回线性层,然后再次根据概率更新每个单词的权重。这里的概率是通过softmax函数计算的,该函数将实数向量(vector of real numbers)转换为概率分布(probability distribution),即向量中的每个数字都代表一个单词的概率值,该值在0和1之间的区间内,所有单词的概率数值加起来等于1。反向传播到嵌入表(embeddings table)的距离应该会逐渐收敛,具体变化程度取决于模型对特定单词之间接近程度的理解。

图片

PyTorch 中 Word2Vec CBOW 的实现[4]

当完成对训练集的迭代后,我们就训练完成了一个模型,该模型能够检索出给定单词是否是正确单词的概率,并且也能检索出词汇表的整个嵌入空间。换句话说,我们可以利用这个模型来预测单词,并且可以使用嵌入空间来比较单词之间的相似性。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

在这里插入图片描述

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

在这里插入图片描述

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值