当前位置: 首页 > news >正文

wordvect嵌入和bert嵌入的区别

Word2Vec 嵌入和 BERT 嵌入之间有几个关键区别:

  1. 训练方式

    • Word2Vec:Word2Vec 是一个基于神经网络的词嵌入模型,它通过训练一个浅层的神经网络来学习单词的分布式表示。它有两种训练方式:连续词袋模型(CBOW)和Skip-gram 模型,分别通过预测上下文词汇或者预测目标词汇来学习单词嵌入。
    • BERT:BERT 是一种基于 Transformer 架构的预训练语言模型。它通过使用大规模的无标注文本数据来进行预训练,通过掩盖和预测输入句子中的一部分来学习上下文感知的单词嵌入。
  2. 上下文感知性

    • Word2Vec:Word2Vec 嵌入是基于局部窗口上下文的,每个单词的嵌入只考虑了它周围的几个单词,因此它们可能无法捕捉到单词的整体语义和上下文信息。
    • BERT:BERT 嵌入是基于整个句子的上下文来计算的,它能够更好地理解单词在句子中的语义和语境。BERT 使用双向 Transformer 模型来同时考虑一个单词左侧和右侧的上下文信息,因此能够更全面地捕捉单词的含义。
  3. 任务特定性

    • Word2Vec:Word2Vec 嵌入通常用于各种自然语言处理任务的特征表示,例如文本分类、命名实体识别等,但它们通常需要在特定任务上进行微调以获得最佳性能。
    • BERT:BERT 嵌入经过大规模预训练,通常可以直接用于各种下游任务,例如文本分类、命名实体识别、问答等,而且通常不需要太多的微调即可获得很好的性能。

下面是使用 Python 中的 Gensim 库来展示 word2vec 和 Hugging Face Transformers 库来展示 BERT 的示例代码:

Word2Vec 嵌入示例:

# 导入所需的库
from gensim.models import Word2Vec
from gensim.models.keyedvectors import KeyedVectors# 假设有一个句子列表作为训练数据
sentences = [["I", "love", "natural", "language", "processing"],["Word", "embeddings", "are", "useful", "for", "NLP"],["Word2Vec", "is", "a", "popular", "word", "embedding", "technique"]]# 训练 Word2Vec 模型
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)# 获取单词 "word" 的词向量表示
word_vector = model.wv["word"]
print("Word2Vec Embedding for 'word':", word_vector)

BERT 嵌入示例:

# 导入所需的库
from transformers import BertTokenizer, BertModel
import torch# 加载 BERT tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')# 假设有一个句子
sentence = "Word embeddings are useful for NLP"# 使用 BERT tokenizer 对句子进行标记化和编码
inputs = tokenizer(sentence, return_tensors="pt", padding=True, truncation=True)# 加载 BERT 模型
model = BertModel.from_pretrained('bert-base-uncased')# 获取 BERT 嵌入
with torch.no_grad():outputs = model(**inputs)# 提取句子中每个 token 的嵌入表示
embeddings = outputs.last_hidden_state
# 提取第一个 token 的嵌入表示([CLS] 标记)
bert_embedding = embeddings[:, 0, :]
print("BERT Embedding for the sentence:", bert_embedding)

这里,Word2Vec 通过简单的神经网络训练得到词向量,而 BERT 是一个预训练的深度双向 Transformer 模型,在给定任务的基础上进行微调以获得更好的嵌入表示。Word2Vec 产生的向量通常具有相似含义的单词在空间中彼此靠近,而 BERT 的嵌入则更具有上下文感知性,可以更好地捕捉句子中的语义和语境。

http://www.lryc.cn/news/333316.html

相关文章:

  • 渗透测试练习题解析 5(CTF web)
  • PCA(Principal Component Analysis,主成分分析)
  • 干货 | 探索CUTTag:从样本到文库,实验步步为营!
  • 提质不增本,降本不降质
  • 数据结构---顺序表实现
  • python docx 添加动态表格
  • git配置多SSH
  • IDEA连接SqlServer数据库
  • LeetCode 378 有序矩阵中第K小的元素
  • Vue3(domdiff)最长递归子序列求解简易版(超简单)
  • LLaMA-Factory+qwen多轮对话微调
  • 邦芒面试:如何在面试中巧妙回答自己的缺点
  • Android:身份证识别功能实现
  • MacOS安装Homebrew教程
  • laravel如何通过DB获取一条数据并转成数组
  • ENSP USG防火墙接入虚拟机;开启Web访问;
  • 数据结构算法题(力扣)——链表
  • LeetCode---391周赛
  • 微信小程序的页面交互2
  • 【VSCode】修改插件地址
  • 自然语言处理NLP概述
  • 计算机网络——37认证
  • Java中利用BitMap位图实现海量级数据去重
  • Linux知识点记录
  • js的check函数
  • 赛尼格磁电科技邀您到场参观2024第13届生物发酵展
  • gpt国内怎么用?最新版本来了
  • Vim脚本语言入门:打造你的编辑器
  • myweb项目资料集
  • Kubernetes(k8s):部署、使用 metrics-server