动手学大模型应用开发--Chapter 03词向量和词嵌入


前言

本学习笔记为datawhale动手学大模型应用开发的第三章,学习链接为:
https://datawhalechina.github.io/llm-universe/

一、学习目标

学习词向量和词嵌入的概念,如何搭建向量库见动手学大模型应用开发第三章

二、学习知识点概要

2.1 什么是词向量

词向量是将词表中的词或短语映射到实数向量上的技术。这种映射通常是基于分布假设的,即具有相似上下文的词应该具有相似的语义。词向量通常用于自然语言处理(NLP)任务中,以捕获词的语义和语法信息。

词向量通常有两种模型:CBOW(Continuous Bag of Words)和Skip-gram。这两种模型都采用了神经网络的结构,通过训练,将词语映射为向量形式,使得语义上相似的词在向量空间中距离相近。

2.2 词向量的意义

词向量的出现极大地推动了NLP领域的发展,使得机器能够更好地理解和处理人类语言。通过词向量,机器可以捕获到词语之间的语义关系,从而进行诸如文本分类、情感分析、机器翻译等复杂的NLP任务。

此外,词向量还可以用于词义的消歧。在自然语言中,一词多义的现象非常普遍,同一个词在不同的上下文中可能有不同的含义。通过词向量,我们可以根据词的上下文信息来确定其具体的含义,从而解决词义消歧的问题。

词向量也存在一些缺点,主要包括以下几个方面:

  1. 语义鸿沟问题:词向量假设词与词相互独立,但实际上,在大多数情况下,词与词是相互影响的。这种独立性假设导致词向量无法完全捕捉到词语之间的复杂语义关系,从而存在语义鸿沟问题。
  2. 离散稀疏性:词向量得到的特征是离散稀疏的,特别是在采用one-hot编码时,除了文本中出现的词语位置不为0外,其余位置均为0。这种高纬度的向量表示方式会严重影响计算速度,并可能导致维度灾难。
  3. 缺乏上下文信息:传统的词向量表示方法,如Word2vec,生成的词向量是静态的,即一个词在所有上下文中都使用相同的表示。这导致词向量无法捕捉到一词多义的现象,也无法充分利用上下文信息来丰富词语的语义表示。
  4. 解释性较差:词向量是通过神经网络训练得到的,其内部机制复杂,因此可解释性较差。这使得人们难以直接理解词向量中蕴含的语义信息,也增加了调试和优化模型的难度。
  5. 训练时间和计算资源需求:由于词向量的训练通常需要大量的语料和计算资源,因此训练时间较长。此外,对于大规模语料库,词向量的训练和存储都可能成为挑战。
  6. 情感信息的缺失:词向量通常无法直接获取文本的情感信息。例如,对于“好”和“坏”这样的词,尽管它们在很多上下文中用法相似,但它们的情感含义却截然相反。要获取这种情感信息,通常需要额外的标注数据和复杂的模型。

2.3 词向量与Embedding究竟是怎么回事?

词向量与Embedding究竟是怎么回事?

2.4 为什么需要词向量

  1. 语义表示:传统的文本表示方法(如one-hot编码)无法有效地捕捉词语之间的语义关系。每个词被表示为一个独立的向量,向量之间缺乏联系,无法反映词与词之间的相似性或相关性。而词向量通过神经网络训练,将词映射到连续的向量空间中,使得语义上相似的词在向量空间中的距离更近,从而能够捕捉词语之间的语义关系。
  2. 减少数据稀疏性:在自然语言处理任务中,文本数据通常非常稀疏。使用one-hot编码时,每个词都对应一个独立的维度,导致向量的维度非常高且大部分元素为0。而词向量将词映射到低维的连续空间,减少了数据的稀疏性,使得模型更容易学习和处理。
  3. 泛化能力:由于词向量是基于分布假设的,即具有相似上下文的词应该具有相似的语义,因此词向量具有一定的泛化能力。即使遇到未在训练集中出现的新词,只要它与已知词具有相似的上下文,其词向量表示也会与已知词的向量接近,从而使模型能够对其进行一定的处理。
  4. 简化计算:在NLP任务中,经常需要计算词与词之间的相似度或进行词之间的运算。使用词向量表示,可以直接在连续的向量空间中进行这些计算,比传统的文本表示方法更加高效和直观。
  5. 支持复杂任务:词向量作为文本数据的一种有效表示形式,为各种复杂的NLP任务提供了基础。例如,在机器翻译中,词向量可以帮助模型捕捉源语言和目标语言中词语之间的语义对应关系;在问答系统中,词向量可以帮助模型理解问题和答案之间的语义关系;在文本分类、情感分析等任务中,词向量也可以作为重要的特征输入给机器学习模型。

2.5 文本转为词向量的方法

在这里插入图片描述
将文本转换为词向量是自然语言处理(NLP)中的一个重要步骤,它有助于计算机理解和处理人类语言。以下是几种常用的文本转词向量的方法:

2.5.1 独热编码(One-Hot Encoding):

  • 每个词在词汇表中都有一个唯一的索引。
  • 词的向量长度等于词汇表的大小,对应词索引的位置为1,其余位置为0。
  • 缺点:词汇表可能非常大,导致向量维度很高且稀疏;无法捕捉词之间的语义关系。

基于Python和Scikit-learn写一个简单的例子:

from sklearn import preprocessing

enc = preprocessing.OneHotEncoder()

enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])

enc.transform([[0, 1, 3]]).toarray()

输出结果:

array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])

2.5.2 词袋模型(Bag of Words):

  • 忽略词序,只关注词频。
  • 可以将文档或句子表示为词频的向量。
  • 缺点:同样忽略了词的语义信息。

2.5.3 TF-IDF(Term Frequency-Inverse Document Frequency):

  • 在词袋模型的基础上,考虑了词的重要性。
  • TF表示词在文档中的频率,IDF表示词在所有文档中的稀有度。
  • 通过TF和IDF的乘积得到每个词的权重,从而构建文档的向量表示。

2.5.3 词嵌入(Word Embeddings):

  • 最常用的词嵌入模型是Word2Vec和GloVe。
  • 通过训练模型,将每个词映射到一个低维的连续向量空间。
  • 这些向量可以捕捉词之间的语义和语法关系。 优点:向量维度低且稠密,可以捕捉语义信息。

Word2Vec模型基于神经网络,通过训练预测上下文单词或中心单词来生成词向量。它包含两种不同的架构:跳字模型(Skip-gram)和连续词袋模型(CBOW)。在跳字模型中,模型的目标是根据中心单词预测周围的上下文单词;而在连续词袋模型中,模型的目标是根据上下文单词预测中心单词。这两种架构在训练方式和结果表现上略有不同,但都能有效地学习词语的向量表示。Word2Vec的词向量表示能够捕捉词语之间的语义相似度,从而支持各种NLP任务,如文本分类、情感分析、推荐系统等。

CBOW与Skip-Gram模型基础

与Word2Vec不同,GloVe(Global Vectors for Word Representation)是一种基于全局词共现信息的词嵌入方法。它的核心思想是利用词语之间的共现关系来构建词向量。在GloVe中,首先构建了一个词共现矩阵,其中每个元素表示两个词语在同一上下文中共同出现的次数。然后,GloVe定义了一个损失函数,该函数试图使词向量的点积与它们在词共现矩阵中的共现次数相匹配。通过优化这个损失函数,GloVe能够学习到反映词语语义和语法关系的词向量。

总的来说,Word2Vec和GloVe都是有效的词嵌入模型,它们在不同的NLP任务中都有广泛的应用。Word2Vec通过预测上下文或中心词来学习词向量,而GloVe则利用全局的词共现信息。在实际应用中,可以根据具体需求选择合适的模型。

2.5.4 fastText:

  • fastText是Facebook开发的一个文本分类工具,它也提供了词嵌入的功能。
  • 与Word2Vec不同,fastText考虑了词内部的n-gram信息,因此对于处理未知词或拼写错误的情况更为鲁棒。

2.5.5 BERT(Bidirectional Encoder Representations from Transformers):

  • BERT是一种基于Transformer的预训练模型。 通过在大量文本数据上进行训练,BERT可以生成高质量的上下文相关的词嵌入。
  • BERT的词嵌入不仅考虑了词的语义信息,还考虑了词在句子中的位置和上下文信息。

2.5.6 其他预训练模型:

  • 除了BERT外,还有许多其他预训练模型如GPT、T5、ELECTRA等也提供了词嵌入的功能。
  • 这些模型通常在大规模语料库上进行训练,并可以通过微调(fine-tuning)来适应特定的NLP任务。

三、总结

选择哪种方法取决于具体的应用场景和需求。对于简单的任务或资源受限的情况,独热编码或TF-IDF可能是一个不错的选择。然而,对于需要捕捉语义信息和上下文关系的复杂任务,词嵌入或预训练模型通常表现更好。

四、推荐阅读

深度学习与自然语言处理(四):Skip-Gram 和 CBOW

词向量与Embedding究竟是怎么回事?

CBOW与Skip-Gram模型基础

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值