万物皆可嵌入

编程入门 行业动态 更新时间:2024-10-25 03:17:59

<a href=https://www.elefans.com/category/jswz/34/1767963.html style=万物皆可嵌入"/>

万物皆可嵌入

1.Embedding预训练模型可以分为静态和动态

2.静态称为上下文无关的词嵌入,动态称为上下文有关的词嵌入

3.Embedding不仅可以处理语言序列,类似有序列性质的情景都可以处理

4.一些无序列问题可以通过一定方法转化为序列问题

上一篇详解word2vec我们介绍了一种词嵌入的预训练模型,也是最早的embedding方法。它比one-hot要好很多,不仅降低维度,还可以反映语义空间的线性关系,比如“国王-王后=男-女”这种相似关系。但这类方法是根据语料库生成的字典,一个单词对应一个固定长度的向量,如果遇到一词多义的情况,就无能为力了。比如“苹果股票正在上涨,我不要这个苹果“这条句子中,word2vec无法区分前后两个”苹果“代表的含义。

预训练模型概述

词嵌入是预训练模型(Pre-Trained Model,PTM)的学习载体,根据嵌入的学习方式,可分为上下文无关上下文有关两类,两者的区别在于一个词语的嵌入是否随着上下文动态变化。

只关注词嵌入的单一表示的预训练模型,训练完成后,词嵌入就固定了,或称为处于静态,这种预训练模型称为上下文无关的词嵌入(Non-contextual Word Embedding),这方面的代表是word2vec;相反的,以学习上下文相关的词嵌入的预训练模型,除了带有学习到的结果外,还带有学习这些词嵌入的模型架构和学到的权重参数,把这些预训练模型迁移到下游任务时,便可根据上下文动态调整,这种模型称为上下文有关的词嵌入Contextual Word Embedding),这方面的代表有很多,比如ELMo、GPT采用的自回归语言模型,BERT使用掩码语言模型、XLNet采用排列语言模型。这里列出各种主要预训练模型的特征、抽取特征方法、使用语言模型类别等内容的表:

我们挑几个先简单介绍一下

ELMo是最早进行语境化词嵌入方法之一,是典型的自回归预训练模型,包括两个独立的单向LSTM实现的单向语言模型。GPT是一个生成式的预训练模型,它也是一个自回归语言模型,采用多层单向的Transformer Decoder作为特征抽取器。BERT属于MLM模型,通过超大数据、巨大模型和极大的计算开销训练完成。

从上表可以知道,很多预训练模型均采用一种称为Transformer的特征提取器,在此之前,一般采用RNN、LSTM等方法处理序列问题,但这种按部就班的方法在大量的语料库面前显得力不从心,而Transformer就是为解决类似问题提出的,它有两大亮点:平行处理序列问题,利用Self-Attention机制有效解决长期依赖问题

这些模型和方法我们以后再逐一详细介绍。这里总结了它们的优缺点以及关系:

不仅仅是词语嵌入


word2vec模型实现原理主要依赖一条条语句,而每条语句就是一个序列,由此可以做推广,只要有序列特征的场景应该适合使用这种Embedding思想。

比如在电商中,不同用户在一定时间内查询物品(Item)集合,可以表示为序列图形:

字母代表商品,在一次页面浏览的页面用虚线分隔,比如用户U2两次访问页面,第一次查看了物品B和物品E,第二次查看了物品DEF。

还记得ItemCF协同过滤算法吗,如果把item视为word,把用户行为序列视为一个集合,利用word2vec的Skip-Gram和Negative Sampling(SGNS)的算法思路迁移到基于物品的协同过滤上,以物品的共现性作为自然语言中的上下文关系,学习物品在隐空间的向量表示。

进一步的,有些看起来与序列无关的领域,经过适当变化后,也可以变成序列。

通过什么方法可以做到呢,最常用的是随机游走(Random Walk),由此得到的方法有Deep WalkLINEnode2vec

Deep Walk方法首先以随机游走的方式在网络中进行节点采样,生成序列,然后使用Skip-Gram模型将序列转化为Embedding。RandomWalk是一种可重复访问已访问节点的深度优先遍历算法,然后给定当前访问起始节点,从其邻居中随机选择一个节点作为下一个访问节点,重复此过程,直到访问序列长度满足预设条件。

DeepWalk只适用无向、无权重的图。针对有向图以及边有权重的网络,提出了大型信息网络嵌入方法——LINE(Large-scale Information Network Embedding)。而node2vec是结合了DeepWalk和LINE的基础上提出的算法,该方法不仅关注同质性和结构性,还可以在两者之间进行权衡。

下面我们结合上面两个过程,来说明如何将Item映射为Embedding,其流程图如下:

1.用户行为序列:

2. 物品图结构:

这里,用户U1先后浏览物品A和物品B,所以物品A和物品B之间会产生一条由A到B的有向边。如果这样的关系越多,则权重被加强。遍历所有用户的浏览记录,可以得到物品图结构。

3. 随机游走生成序列:

4.由Skip_Gram生成Embedding:

在具体实施过程中,可能会遇到如下几个问题:

  • 可扩展性问题

  • 数据稀疏性问题

  • 冷启动问题

这些问题及解决方案等以后具体介绍的时候再仔细说明。

参考资料:

《深入浅出Embedding》

更多推荐

万物皆可嵌入

本文发布于:2024-03-07 18:28:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718580.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:万物

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!