一、前言
在上篇文章中,笔者详细讲解介绍了人工智能自然语言处理特征提取中的TD-IDF型文本处理方法,那么接下来,笔者将为大家揭晓,目前阶段,在特征提取,也就是文本数据转成数字数据领域内最常用也是最好用的方法–词嵌入(Word Embedding)。
二、定义,组成和基本介绍
在自然语言处理(NLP)领域,词嵌入(Word Embedding)是一种将词汇映射到向量空间的技术。通过词嵌入,词汇可以被表示为实数值向量,这些向量捕捉了词汇之间的语义关系。顺带提一嘴的是,词嵌入是NLP的一个核心技术,广泛应用于各种任务,如文本分类、情感分析、机器翻译等。
1. 词嵌入的基本概念
词嵌入的目标是将离散的词汇映射到一个连续的、低维的向量空间中,使得语义相似的词在向量空间中彼此接近。换句话说,词嵌入将词汇表示为实数值向量,这些向量捕捉了词汇之间的语义关系。
2. 词嵌入的动机
传统的词汇表示方法(如独热编码)存在一些问题:
- 高维稀疏性:词汇表中的每个词都被表示为一个高维向量,其中只有一个维度为1,其余维度为0。
- 缺乏语义信息:独热编码无法捕捉词汇之间的语义关系,如“cat”和“dog”在独热编码中是完全不同的向量。
词嵌入通过将词汇映射到一个低维的、密集的向量空间中,解决了上述问题,并能够捕捉词汇之间的语义关系。简单来说,词嵌入不仅可以减少数据向量的维度从而方便计算,还可以帮助提取增加词与词之间的语义关系等等。
3. 词嵌入的应用
词嵌入在NLP中有广泛的应用,包括但不限于:
- 文本分类:将文本表示为词嵌入向量的组合,然后输入到分类模型中。
- 情感分析:通过词嵌入捕捉文本中的情感信息。
- 机器翻译:将源语言和目标语言的词汇映射到相同的向量空间中。
- 信息检索:通过词嵌入计算查询和文档之间的相似度。
4. 词嵌入的局限性
尽管词嵌入在NLP中取得了显著的成功,但它们也有一些局限性:
- 静态表示:传统的词嵌入(如Word2Vec、GloVe)为每个词生成一个固定的向量,无法捕捉词义的多义性。
- 上下文独立:传统的词嵌入方法无法根据上下文动态调整词的表示。
5. 上下文嵌入
为了克服传统词嵌入的局限性,近年来提出了一些上下文嵌入方法,如BERT、GPT等。这些方法通过预训练语言模型,能够根据上下文动态生成词的表示,捕捉词义的多义性和上下文依赖性。
5.1 BERT
BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer的预训练语言模型。BERT通过双向训练,能够捕捉词汇的上下文信息,并生成上下文相关的词嵌入。
5.2 GPT
GPT(Generative Pre-trained Transformer)也是一种基于Transformer的预训练语言模型,但与BERT不同,GPT是单向训练的,即从左到右生成词嵌入。
6. 词嵌入的方法
6.1 Word2Vec
Word2Vec是一种基于神经网络的词嵌入方法,它通过训练一个两层的神经网络,将每个词汇映射到一个固定长度的向量空间中。Word2Vec包括两种模型:CBOW(Continuous Bag-of-Words)和Skip-gram。CBOW模型是根据上下文预测中心词汇,Skip-gram模型是根据中心词汇预测上下文词汇。
两种主要的训练架构:
- CBOW(Continuous Bag of Words) :预测上下文中的中心词。
- Skip-gram:预测中心词的上下文词。
听不懂 ? 没关系,上例子 !
例如,对于句子“the cat sat on the mat”,CBOW模型会尝试根据上下文词“the”, “sat”, “on”, “the”来预测中心词“cat”,而Skip-gram模型会尝试根据中心词“cat”来预测上下文词“the”, “sat”, “on”, “the”。
6.2 GloVe(了解即可)
GloVe(Global Vectors for Word Representation)是一种基于全局词汇统计信息的词嵌入方法,它通过最小化词汇之间的共现矩阵的加权平方误差,学习每个词汇的向量表示。GloVe的优点是能够捕捉到词汇之间的语义关系和语法关系。GloVe的目标是使词汇对之间的向量差异能够反映它们的共现概率。
6.3 FastText(了解即可)
FastText 是由Facebook的研究人员提出的一种词嵌入方法,它扩展了Word2Vec模型,是一种基于子词(subword)的词嵌入方法,它将每个词汇表示为其子词的向量和一个特殊的词汇向量的加权和。FastText的优点是能够处理未登录词汇和词汇拼写错误的情况。这使得FastText能够处理未登录词(OOV)和拼写错误的词汇。
相比较后两种词嵌入方法而言,目前市场上主流的,用的最多的还是Word2Vec方法,因此,笔者下面将着重讲解这一词嵌入的方法。
三、Word2Vec
定义
Word2Vec是一种流行的词嵌入模型,由Tomas Mikolov等人在2013年提出。它是一个浅层神经网络,能够将词语转换为向量形式,这些向量能够捕捉词语之间的语义和语法关系。Word2Vec有两种主要的模型架构:连续词袋(CBOW)和跳跃式(Skip-Gram)模型。
1. 连续词袋(Continuous Bag of Words, CBOW)
CBOW模型的目标是根据上下文的词来预测目标词。给定一个目标词w和它的上下文词c1, c2, …, cn,模型会尝试预测w的概率分布。CBOW模型的输入是上下文词的向量表示,输出是目标词的向量表示。
工作原理:
- 将上下文词的向量求和,得到一个向量表示。
- 使用这个向量表示作为输入,通过一个softmax层来预测目标词的概率。
2. 跳跃式(Skip-Gram)模型
与CBOW相反,Skip-Gram模型的目标是根据目标词来预测它的上下文词。对于每个目标词w,模型会尝试预测它周围每个上下文词c的概率分布。
工作原理:
- 使用目标词的向量表示作为输入。
- 对于每个上下文词,使用一个softmax层来预测它的概率。
3. 训练过程
无论是CBOW还是Skip-Gram模型,训练过程都包括以下步骤(其实也就是一个基础完整的神经网络的过程):
- 初始化:随机初始化词向量和(如果是CBOW模型的话)上下文向量。
- 前向传播:根据模型架构,计算目标词或上下文词的概率分布。
- 计算损失:使用负采样或层次softmax技术来计算损失函数。
- 反向传播:根据损失函数,更新词向量。
- 迭代:重复上述步骤,直到模型收敛。
4. 负采样
由于softmax层的计算复杂度很高,Word2Vec使用负采样来加速训练。负采样是一种随机梯度下降变体,它只更新一小部分错误的类别,而不是所有类别。
5. 层次softmax
层次softmax是另一种加速技术,它通过构建一个二叉树来减少计算量。每个词都被放置在树中的某个位置,树的每个内部节点都对应于一个中间向量表示。
6. 应用
- 语义相似度:使用词向量计算词语之间的相似度。
- 文本分类:作为特征输入到分类模型中。
- 机器翻译:帮助理解源语言和目标语言的语义。
- 命名实体识别(NER):帮助模型识别和分类文本中的实体。
7. 限制和挑战
尽管Word2Vec非常流行且有效,但它也有一些限制:
- 上下文窗口大小:固定的上下文窗口大小可能无法捕捉长距离依赖关系。
- 一词多义:模型可能难以区分多义词的不同含义。
- 训练数据:需要大量的高质量文本数据进行训练。
Word2Vec是NLP领域的一个重要里程碑,它为词语的向量化表示提供了一种有效的方法。尽管存在一些挑战,但它仍然是许多NLP任务中常用的基础技术之一。
OK , 前面抽象和生硬的内容也看得够呛了吧,老规矩,上例子!!
四、Word2Vec文本具体案例演示
让俺们通过一个具体的例子来说明Word2Vec是如何工作的,以及它如何生成词向量的。
假设文本数据
假设我们有以下简单的文本数据作为我们的语料库:
The quick brown fox jumps over the lazy dog.
预处理
首先,我们将文本进行预处理,包括分词(Tokenization)、去除停用词等步骤。在这个例子中,我们将忽略停用词,并简单地将句子分割成单词列表:
['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
训练Word2Vec模型
接下来,我们使用Word2Vec模型来训练词向量。我们可以选择CBOW或Skip-Gram模型。为了简单起见,我们这里使用CBOW模型。
定义上下文窗口
我们定义一个大小为2的上下文窗口。这意味着对于每个目标词,我们将使用它左右两侧各一个词作为上下文。
训练过程
- 对于每个词,我们创建一个由其上下文词组成的窗口。
- 我们将这些词作为输入,目标是预测中心词。
例如,如果我们考虑中心词“fox”,它的上下文窗口将是:
- 上下文词:[‘quick’, ‘brown’, ‘jumps’, ‘over’]
- 我们将这些上下文词的词向量与训练数据中的词向量进行比较,并通过反向传播调整我们的词向量,以最小化预测误差。
词向量的生成
经过训练后,每个词将被表示为一个向量。例如,我们可能得到以下词向量:
The
→ [0.1, 0.3, 0.2, …]quick
→ [0.8, -0.4, 0.5, …]brown
→ [0.3, 0.6, -0.1, …]fox
→ [0.4, 0.2, 0.9, …]jumps
→ [-0.5, 0.8, 0.3, …]over
→ [-0.2, 0.1, 0.7, …]lazy
→ [0.2, -0.3, 0.1, …]dog
→ [0.7, -0.6, 0.2, …]
例子:语义相似性
如果我们想要找到与“fox”语义上相似的词,我们可以计算“fox”的词向量与其他词向量之间的距离(例如,使用余弦相似度),然后选择距离最近的词。假设我们得到以下结果:
dog
的余弦相似度最高,这意味着在训练数据的上下文中,“fox”和“dog”经常一起出现,因此它们在语义上是相似的。
例子:向量运算
Word2Vec的一个有趣特性是它可以执行向量运算来捕捉语义关系。例如,如果我们想要找到“king”和“man”之间的性别转换,我们可以执行以下向量运算:
king - man + woman
的结果可能会接近于“queen”的词向量,因为这种运算捕捉了性别的语义差异。
这个例子展示了Word2Vec如何通过上下文学习词的向量表示,并捕捉词与词之间的语义和句法关系。在实际应用中,Word2Vec模型会在更大的语料库上训练,生成更复杂的词向量,以用于各种复杂的NLP任务。
五、Word2Vec示例代码演示
下面是笔者使用Gensim库训练Word2Vec模型的代码:
from gensim.models import Word2Vec# 示例句子
sentences = [["the", "cat", "sat", "on", "the", "mat"],["the", "dog", "barked", "at", "the", "cat"]
]# 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)# 获取词汇的向量表示
vector = model.wv['cat']
print(vector)# 查找与“cat”最相似的词汇
similar_words = model.wv.most_similar('cat')
print(similar_words)
六、总结
词嵌入是NLP中一种重要的技术,通过将词汇映射到向量空间中,能够捕捉词汇之间的语义关系。传统的词嵌入方法(如Word2Vec、GloVe、FastText)已经在各种NLP任务中取得了显著的成功,而上下文嵌入方法(如BERT、GPT)进一步提升了词嵌入的表现,能够更好地捕捉词义的多义性和上下文依赖性。理解和掌握词嵌入技术是从事NLP研究和应用的重要基础。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。