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

做百度推广的网站吗西安百度网站快速优化

做百度推广的网站吗,西安百度网站快速优化,昌平区网站建设公司,无忧网站建设服务最近刚学习NNLM。NNLM网络在训练过程中为每个单词生成了一个词向量,但从表示每个单词语义信息的的角度来说,生成质量不佳,于是有了后来的word2vec,转么学习高质量的词向量表示。 先给出CBOW的简单实现代码: import t…

最近刚学习NNLM。NNLM网络在训练过程中为每个单词生成了一个词向量,但从表示每个单词语义信息的的角度来说,生成质量不佳,于是有了后来的word2vec,转么学习高质量的词向量表示。

先给出CBOW的简单实现代码:

import torch
import torch.nn as nn
import torch.optim as optim
from collections import Counter
import random# 1. 准备语料和词汇表
corpus = "we are learning natural language processing using word2vec cbow model".split()
vocab = list(set(corpus))
word2idx = {w: i for i, w in enumerate(vocab)}
idx2word = {i: w for w, i in word2idx.items()}# 2. 构造训练样本 (上下文词 → 中心词)
window_size = 2
def generate_context_target(corpus, window_size):dataset = []for i in range(window_size, len(corpus) - window_size):context = [corpus[j] for j in range(i - window_size, i + window_size + 1) if j != i]target = corpus[i]dataset.append((context, target))return datasettraining_data = generate_context_target(corpus, window_size)# 3. 定义 CBOW 模型
class CBOW(nn.Module):def __init__(self, vocab_size, embedding_dim):super(CBOW, self).__init__()self.embeddings = nn.Embedding(vocab_size, embedding_dim)self.linear = nn.Linear(embedding_dim, vocab_size)def forward(self, context_idxs):# context_idxs shape: (batch_size, context_size)embeds = self.embeddings(context_idxs)  # (batch_size, context_size, embed_dim)avg_embeds = embeds.mean(dim=1)         # (batch_size, embed_dim)out = self.linear(avg_embeds)           # (batch_size, vocab_size)return out# 4. 超参数和模型初始化
embedding_dim = 50
model = CBOW(vocab_size=len(vocab), embedding_dim=embedding_dim)
loss_fn = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 5. 训练模型
for epoch in range(100):total_loss = 0for context, target in training_data:context_idxs = torch.tensor([word2idx[w] for w in context], dtype=torch.long).unsqueeze(0)  # shape (1, context_size)target_idx = torch.tensor([word2idx[target]], dtype=torch.long)output = model(context_idxs)loss = loss_fn(output, target_idx)optimizer.zero_grad()loss.backward()optimizer.step()total_loss += loss.item()if epoch % 10 == 0:print(f"Epoch {epoch}, Loss: {total_loss:.4f}")# 6. 查看词向量
word_vec = model.embeddings.weight.data
print("Embedding for 'cbow':", word_vec[word2idx["cbow"]])

再给出skip gram的简单实现代码:

import torch
import torch.nn as nn
import torch.optim as optim
from collections import defaultdict# 1. 语料与词表准备
corpus = "we are learning natural language processing using word2vec skipgram model".split()
vocab = list(set(corpus))
word2idx = {w: i for i, w in enumerate(vocab)}
idx2word = {i: w for w, i in word2idx.items()}# 2. 构造训练数据(中心词 → 上下文词)
window_size = 2
def generate_skipgram_data(corpus, window_size):pairs = []for i in range(window_size, len(corpus) - window_size):center = corpus[i]context = [corpus[j] for j in range(i - window_size, i + window_size + 1) if j != i]for ctx_word in context:pairs.append((center, ctx_word))return pairstraining_pairs = generate_skipgram_data(corpus, window_size)# 3. 定义 Skip-gram 模型
class SkipGram(nn.Module):def __init__(self, vocab_size, embedding_dim):super(SkipGram, self).__init__()self.input_embeddings = nn.Embedding(vocab_size, embedding_dim)self.output_embeddings = nn.Linear(embedding_dim, vocab_size)def forward(self, center_word_idx):embed = self.input_embeddings(center_word_idx)  # (batch_size, embedding_dim)out = self.output_embeddings(embed)             # (batch_size, vocab_size)return out# 4. 初始化
embedding_dim = 50
model = SkipGram(len(vocab), embedding_dim)
loss_fn = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 5. 训练模型
for epoch in range(100):total_loss = 0for center, context in training_pairs:center_idx = torch.tensor([word2idx[center]], dtype=torch.long)context_idx = torch.tensor([word2idx[context]], dtype=torch.long)output = model(center_idx)loss = loss_fn(output, context_idx)optimizer.zero_grad()loss.backward()optimizer.step()total_loss += loss.item()if epoch % 10 == 0:print(f"Epoch {epoch}, Loss: {total_loss:.4f}")# 6. 查看词向量
word_vec = model.input_embeddings.weight.data
print("Embedding for 'skipgram':", word_vec[word2idx["skipgram"]])

可以发现,word2vec网络更简洁了。

再之后

ELMo将word level embedding变成了token level embedding,更多地利用了上下文信息来生成token的embedding。那么,为什么transformer不使用ELMo的embedding,而只是简单地使用了nn.Embedding模块呢?

答案:Transformer的上下文相关信息,是通过后面的多层Self-Attention和Feed-forward层逐步编码出来的,而不是直接在Embedding层就完成的。

http://www.dtcms.com/wzjs/140973.html

相关文章:

  • 上海网站建设系统大连百度关键词优化
  • 网站制作的差异化定位新手做seo怎么做
  • 西安网站建设制作专业公司跨境电商平台排行榜前十名
  • 合肥哪家公司做网站靠谱已矣seo排名点击软件
  • 网站开发建设哪家好网站404页面怎么做
  • 北京海淀区网站开发百度网页游戏大厅
  • 两学一做网站视频线上推广的方式有哪些
  • 西宁专业网站建设合肥百度推广排名优化
  • 罗湖商城网站设计多少钱免费制作网站的软件
  • 长沙优化科技诈骗seo是什么意思呢
  • 网站域名哪些后缀更好如何查看百度搜索指数
  • 专业制作网站费用长沙专业seo优化推荐
  • 怎样建网站 阿里云国际新闻头条最新消息
  • 阿里云虚拟主机网站建设竞价开户
  • 杭州搭建网站中国培训网的证书含金量
  • 政府网站建设建议武汉seo霸屏
  • 交流稿 网站建设网站建设方案优化
  • 二手书交易网站开发现状优化关键词排名
  • 怎样创建一个国际网站广告营销是做什么的
  • 设计本推荐谷歌优化排名哪家强
  • 网站开发设计心得及体会白云区最新疫情
  • 门户网站建设采购百度推广效果怎样
  • 香港ip做外贸网站产品营销策略怎么写
  • 做影视网站 片源从哪里来seo是做什么的
  • 有没有专门做二手车网站网络营销企业网站
  • 网站开发亿玛酷给力5seo优化师培训
  • 个人网站建设法律规定网上推广app怎么做
  • 怎么当网站站长阿里指数app下载
  • 平面设计做网站的步骤seo站长之家
  • soho设计网站百度推广渠道代理