Embeding层与Word2Vec的区别?

在做nlp过程中,需要对单词或者句子用词向量进行表征。因此产生了像embedding、word2vec等词向量方法。

embedding层:embedding的本质是一个矩阵,单词的独热编码与该矩阵相乘,得到词向量模型,作为后续网络层对输入。它更像是一个基于神经网络层的encoding-decoding过程。它是一个网络层,跟随整个模型一起训练。从embedding的作用上理解,它是将原始词向量映射到一个低维空间中,这样在做相关处理过程中,可以去除文本的“一些噪声”,即减少了文本的数据量,从而计算的复杂度,用提高计算效率。下图为embedding层将原词向量映射到一个新的多维空间的表示过程。

详细请参考:https://www.cnblogs.com/pyclq/p/12405631.html

Word2Vec:它是google推出的一种算法,其本质是优化过的embedding,进行词向量的训练,而不像embedding那样是一层网络。Word2Vec有CBOW 和 Skip-gram两种方式。CBOW是通过周围单词预测中心单词,而Skip-gram是通过中心词预测周围词。

 详细请参考:https://blog.csdn.net/vincent_duan/article/details/117967110

Word2Ve参数讲解:

  1. vector_size (之前称为size): 这个参数决定了词向量的维度,即每个词将被表示为多少维的向量。较大的向量尺寸可以捕捉更多的信息,但也会增加模型的复杂性和训练时间。常见的值范围从50到300。

  2. window: 窗口大小决定了模型在学习词向量时考虑的上下文范围。对于CBOW架构,窗口大小是指当前词左右两侧的词的数量。对于Skip-gram架构,它是指当前词预测上下文中词的最大距离。较大的窗口尺寸意味着考虑更远的上下文,可能有助于捕捉更广泛的语义关系。

  3. min_count: 这个参数决定了词需要出现的最小频率才能被考虑。这有助于去除稀有词,从而减小模型的噪声并减少计算资源的需求。

  4. sg: 选择训练算法:sg=0表示使用CBOW模型,sg=1表示使用Skip-gram模型。Skip-gram倾向于处理较大的数据集,并且对罕见词汇的处理效果更好,但训练速度较慢。

  5. hs (hierarchical softmax): 是否使用层次softmax优化。如果设置为1,则使用层次softmax技术。如果训练数据较小或词汇较少,这可以加速训练并提高效率。

  6. negative: 负采样的数量。如果大于0,则会使用负采样。这个参数决定了在优化过程中将多少“负”词(即,非上下文词)纳入计算。使用负采样通常可以加速训练并提高较少频繁词的质量。

  7. iter: 训练迭代次数。较多的迭代次数可以提高模型的性能,但也会增加训练时间。

  8. alpha: 学习率的初始值。在训练过程中,学习率控制了权重调整的步长大小。较高的学习率可能会导致训练不稳定,而较低的学习率会增加收敛到最佳解的时间。

### 嵌入(Embedding)技术的实现方法 #### 1. 序列样本中的嵌入 在序列样本中,嵌入技术通常通过神经网络模型来学习向量表示。例如,在自然语言处理领域,Word2Vec 和 GloVe 是两种经典的词嵌入方法[^1]。这些方法的核心思想是将词语映射到低维连续空间中,使得具有相似语义或上下文关系的词语在该空间中距离较近。 对于更复杂的场景,可以采用基于子词单元的方法,比如 FastText 提供了一种高效的解决方案。它不仅能够捕捉单词级别的信息,还能利用字符 n-gram 特征来增强对未知词和形态变化的支持[^3]。 以下是使用 Python 的 `gensim` 库加载预训练 Word2Vec 模型的一个示例: ```python from gensim.models import KeyedVectors # 加载 Google News 预训练的 Word2Vec 模型 model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) # 查找某个词的最近邻 similar_words = model.most_similar('king') print(similar_words) ``` --- #### 2. 图结构数据中的嵌入 当面对图结构的数据时,Graph Embedding 成为了一个重要分支。这类方法旨在将节点、边或者整个图转化为固定长度的向量表示,以便后续用于分类、聚类或其他任务。DeepWalk 和 Node2Vec 是两个典型的例子,它们借鉴了随机游走的思想并结合 Skip-Gram 或 CBOW 模型完成学习过程。 下面是一个简单的 DeepWalk 实现框架伪代码片段: ```python import networkx as nx from gensim.models import Word2Vec def deepwalk(graph, walk_length=80, num_walks=10): walks = [] nodes = list(graph.nodes()) for _ in range(num_walks): for node in nodes: walk = [node] current_node = node while len(walk) < walk_length: neighbors = list(graph.neighbors(current_node)) if not neighbors: break next_node = random.choice(neighbors) walk.append(next_node) current_node = next_node walks.append([str(x) for x in walk]) # 使用 Gensim 训练 Word2Vec 模型 model = Word2Vec(sentences=walks, vector_size=128, window=5, min_count=0, sg=1, workers=4) return model.wv graph = nx.karate_club_graph() embeddings = deepwalk(graph) ``` --- #### 3. 多模态异构特征下的嵌入 随着应用场景复杂度增加,单一类型的嵌入已无法满足需求。因此出现了针对多模态或多源数据设计的新一代嵌入技术。例如,DSSM (Deep Structured Semantic Model) 将文本其他形式的信息联合建模;而 Transformer 架构则进一步推动了跨域表征能力的发展。 以 BERT 为代表的预训练语言模型展示了强大的泛化性能,其内部机制依赖于自注意力提取全局关联特性。BERT 可被微调至各种下游任务上,从而获得定制化的 embedding 表达方式。 下面是用 Hugging Face Transformers 库获取句子 embedding 的一段代码: ```python from transformers import BertTokenizer, BertModel import torch tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased') text = "This is an example sentence." encoded_input = tokenizer(text, return_tensors='pt', padding=True, truncation=True) with torch.no_grad(): outputs = model(**encoded_input) sentence_embedding = outputs.last_hidden_state.mean(dim=1).squeeze().numpy() print(sentence_embedding.shape) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值