embedding 算法

背景和价值

Word2Vec

Word2Vec 是一种用于将文本中的单词转换为向量表示的模型,由谷歌团队在2013年提出。其核心目标是让语义相近的单词在向量空间中距离相近,从而使得计算机能够更好地处理和理解文本的语义信息。下面详细介绍其原理:

基本思想

Word2Vec 基于“分布式假设”,即出现在相似上下文环境中的单词往往具有相似的语义。它通过学习单词在文本中的上下文信息,将每个单词映射到一个低维的向量空间中,使得向量之间的距离能够反映单词之间的语义关系。

模型架构

Word2Vec 主要有两种模型架构:连续词袋模型(Continuous Bag-of-Words,CBOW)和跳字模型(Skip-Gram)。

连续词袋模型(CBOW)

  • 原理:CBOW 模型的目标是根据一个单词的上下文来预测该单词。例如,给定句子 “The cat sat on the mat”,如果我们以 “sat” 为目标词,其上下文可以是 “The”、“cat”、“on”、“the”(假设窗口大小为 2)。模型会尝试根据这些上下文词来预测 “sat”。
  • 模型结构
    • 输入层:输入是上下文单词的 one - hot 编码向量。假设词汇表大小为 $V$,每个单词的 one - hot 编码是一个长度为 $V$ 的向量,其中只有对应单词的位置为 1,其余位置为 0。
    • 隐藏层:输入层的向量会与一个权重矩阵 $W$ 相乘,得到隐藏层的向量表示。这个权重矩阵的大小为 $V\times N$,其中 $N$ 是词向量的维度。
    • 输出层:隐藏层的向量会与另一个权重矩阵 $W'$ 相乘,然后通过 softmax 函数得到每个单词的预测概率。模型的目标是最大化目标单词的预测概率。

跳字模型(Skip - Gram)

  • 原理:与 CBOW 相反,Skip - Gram 模型的目标是根据一个单词来预测它的上下文。同样以 “The cat sat on the mat” 为例,模型会根据 “sat” 来预测其周围的上下文词 “The”、“cat”、“on”、“the”。
  • 模型结构
    • 输入层:输入是目标单词的 one - hot 编码向量。
    • 隐藏层:输入层的向量与权重矩阵 $W$ 相乘,得到目标单词的向量表示。
    • 输出层:目标单词的向量会与另一个权重矩阵 $W'$ 相乘,然后通过 softmax 函数得到每个单词作为上下文词的预测概率。模型会最大化目标单词周围上下文词的预测概率。

训练方法

Word2Vec 在训练过程中会面临一个问题,即词汇表通常非常大,使用 softmax 函数计算每个单词的概率会非常耗时。为了解决这个问题,通常采用两种优化算法:

  • 负采样(Negative Sampling):在训练时,对于每个正样本(目标单词及其上下文词),随机选择一些负样本(非上下文词)。模型的目标是最大化正样本的预测概率,同时最小化负样本的预测概率。这样可以减少计算量,提高训练效率。
  • 层次化 softmax(Hierarchical Softmax):通过构建一棵哈夫曼树来表示词汇表,每个叶子节点代表一个单词。在计算概率时,只需要沿着哈夫曼树的路径进行计算,而不需要对整个词汇表进行计算,从而大大减少了计算量。

词向量的获取

训练完成后,权重矩阵 $W$ 的每一行就对应着一个单词的向量表示。通过这个向量,我们可以进行各种语义计算,如计算单词之间的相似度、进行类比推理等。例如,“king - man + woman ≈ queen”,通过向量运算可以发现这些单词之间的语义关系。

ELMo

ELMo(Embeddings from Language Models)是一种深度语境化的词向量表示模型,由Allen Institute for Artificial Intelligence(艾伦人工智能研究所)的Matthew E. Peters等人在2018年提出。下面从其核心概念、工作原理、优势、局限性以及应用场景几个方面为你详细介绍:

核心概念

传统的词向量表示方法(如Word2Vec、GloVe)为每个词学习一个固定的向量表示,没有考虑词在不同上下文语境中的语义变化。而ELMo的核心思想是通过预训练一个双向语言模型,为每个词生成依赖于上下文的词向量表示,能够捕捉到词汇在不同语境中的语义信息。

工作原理

  • 双向语言模型训练:ELMo使用一个双向长短时记忆网络(BiLSTM)作为基础架构进行训练。双向语言模型会同时考虑一个词的前文和后文信息。具体来说,它会从左到右和从右到左两个方向对文本进行处理,分别预测每个位置的词。
  • 多层特征表示:在训练过程中,BiLSTM会有多个隐藏层,每个隐藏层都会学习到不同层次的语言特征。例如,较低层可能学习到语法信息,而较高层可能学习到语义信息。
  • 词向量生成:对于输入文本中的每个词,ELMo会将双向语言模型各层的输出进行加权组合,得到该词的最终向量表示。这个向量表示不仅包含了词本身的语义信息,还考虑了它在上下文中的具体含义。

优势

  • 上下文感知:能够为同一个词在不同的上下文中生成不同的向量表示,从而更好地捕捉词汇的语义变化。例如,“银行”在“我去银行存钱”和“河边有一排柳树”中的含义不同,ELMo可以为这两个“银行”生成不同的向量。
  • 通用性强:可以作为一种通用的特征提取器,应用于各种自然语言处理任务中,如文本分类、命名实体识别、语义角色标注等。在使用时,只需将ELMo生成的词向量作为输入特征,加入到现有的模型中即可。
  • 预训练模型优势:通过在大规模语料上进行预训练,ELMo能够学习到丰富的语言知识,为下游任务提供高质量的特征表示,减少了对大量标注数据的依赖。

局限性

  • 计算成本高:由于使用了双向语言模型和多层BiLSTM,ELMo的计算复杂度较高,训练和推理的时间较长,对硬件资源的要求也较高。
  • 缺乏实时性:在处理长文本时,ELMo需要对整个文本进行处理才能生成词向量,难以实现实时处理。

应用场景

  • 文本分类:将ELMo生成的词向量作为文本特征输入到分类模型中,提高文本分类的准确率。
  • 命名实体识别:帮助模型更好地理解词汇在上下文中的语义,从而更准确地识别出文本中的命名实体。
  • 语义角色标注:为每个词提供更准确的语义信息,有助于确定句子中各个成分的语义角色。

参考资料

posted @   向着朝阳  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示