首页 > 其他分享 >深度学习-nlp-NLP之trainsformer位置编码与余弦距离--77

深度学习-nlp-NLP之trainsformer位置编码与余弦距离--77

时间:2024-05-22 23:29:25浏览次数:16  
标签:nlp 嵌入 embeddings NLP torch 77 embedding word model

目录

1. 位置编码与词嵌入

import torch
import torch.nn as nn
import math

# 定义词向量嵌入的大小
d_model = 512

# 定义位置编码的维度
max_seq_len = 5000

# 定义词向量嵌入层
embedding = nn.Embedding(vocab_size, d_model)

# 定义位置编码函数
def positional_encoding(max_seq_len, d_model):
    pe = torch.zeros(max_seq_len, d_model)
    for pos in range(max_seq_len):
        for i in range(0, d_model, 2):
            pe[pos, i] = \
                math.sin(pos / (10000 ** ((2 * i)/d_model)))
            pe[pos, i + 1] = \
                math.cos(pos / (10000 ** ((2 * (i + 1))/d_model)))
    return pe

# 生成位置编码
pe = positional_encoding(max_seq_len, d_model)

# 合并词向量嵌入和位置编码
def forward(x):
    # 获取词向量嵌入并乘以缩放因子
    word_embeddings = embedding(x) * (d_model ** 0.5)
    # 添加位置编码
    embeddings = word_embeddings + pe[:x.size(0), :]
    return embeddings

# 示例输入
input_tensor = torch.LongTensor([[100, 2, 3, 4, 5], [1, 2, 3, 4, 5]])

# 执行前向传播
output = forward(input_tensor)
print(output)

2.余弦距离

import torch
import torch.nn as nn

# 假设我们有一个预训练的词向量嵌入层
vocab_size = 10000  # 词汇表大小
embedding_dim = 100  # 词向量嵌入的维度
embedding = nn.Embedding(vocab_size, embedding_dim)

# 假设我们已经加载了预训练的词向量权重
# 这里我们只是随机初始化权重,实际应用中应该加载预训练的权重
embedding.weight.data.copy_(torch.randn(vocab_size, embedding_dim))

# 将单词转换为索引
# 假设"cat"和"dog"的索引分别是100和200
word_indices = torch.tensor([100, 200], dtype=torch.long)

# 获取词向量嵌入
word_embeddings = embedding(word_indices)

# 计算余弦相似度
def cosine_similarity(emb1, emb2):
    return torch.nn.functional.cosine_similarity(emb1, emb2, dim=0)

# 计算"cat"和"dog"的余弦相似度
similarity = cosine_similarity(word_embeddings[0], word_embeddings[1])

print(f"Cosine similarity between 'cat' and 'dog': {similarity.item()}")

标签:nlp,嵌入,embeddings,NLP,torch,77,embedding,word,model
From: https://www.cnblogs.com/cavalier-chen/p/18207375

相关文章

  • P8774 [蓝桥杯 2022 省 A] 爬树的甲壳虫
    设\(E_i\)为树根到高度为\(i\)的点的期望用时\(Q_i\)为\(i-1\)到\(i\)的概率,\(Q_i=1-P_i\)\(T_i\)为\(i-1\)到\(i\)的期望用时,\(T_i=E_i-E_{i-1}\)则有\(T_i=Q_i\cdot1+(1-Q_i)\cdot(E_{i-1}+T_i)\)\(\toE_i-E_{i-1}=Q_i+(1-Q_i)\cdot(......
  • Solution -「洛谷 P8477」 「GLR-R3」春分 下界证明?!
      前情提要:在「洛谷P8477」「GLR-R3」春分中,我们给出了\(\frac{7}{6}n\pm\mathcalO(1)\)的解法,但没能给出相关的下界证明。现在我们尝试给出一个未完全完成的下界证明。  为方便描述,我们综合链接中题意和某个“通俗”的题意,称隔板为“板”,称溶液为“人”。  这个......
  • 077、将进酒
    077、将进酒唐●李白君不见,黄河之水天上来,奔流到海不复回。君不见,高堂明镜悲白发,朝如青丝暮成雪。人生得意须尽欢,莫使金樽空对月。天生我材必有用,千金散尽还复来。烹羊宰牛且为乐,会须一饮三百杯。岑夫子,丹丘生,将进酒,君莫停。与君歌一曲,请君为我侧耳听。钟鼓馔玉不足贵,但......
  • P1077 [NOIP2012 普及组] 摆花
    P1077[NOIP2012普及组]摆花题目描述小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过a[i]盆,摆花时同一种花放在一起,且不同种类的花需按标号的......
  • AtCoder Regular Contest 177
    AtCoderRegularContest177A-Exchange问题陈述判断\(n\)个价格分别为\(x_i\)的商品,问能否通过有限数量的\(1\)元,\(5\)元,\(10\)元,\(50\)元,\(100\)元,\(500\)元,购买。思路贪心。每个商品从\(500\)元开始,能用就尽量用。如果中间某个商品无法被满足,则无解,反......
  • P6577 【模板】二分图最大权完美匹配 (KM)
    $\quad$初看就发现不对劲了,模板紫题,一看就不简单,就交了个裸\(KM\),哎,果然\(T\)了。$\quad$然后就是大力卡常(当然\(O(n^4)\))的复杂度不是卡常能解决的。遂看题解,发现一个据说\(O(n^3)\)的复杂度的\(KM\),也是非常抽象。具体解释详见https://www.luogu.com.cn/article/ip2m1gu......
  • 洛谷题单指南-动态规划3-P1775 石子合并(弱化版)
    原题链接:https://www.luogu.com.cn/problem/P1775题意解读:计算合并石子的最小代价,区间DP。解题思路:状态表示:dp[i][j]表示将第i~j堆石子合并的最小代价,m[i]表示第i堆石子质量,s[i]表示前i堆石子质量前缀和状态转移:考虑最后一次合并,设最后一次合并是将i~k合成的一堆与k+1~j合成......
  • 代码随想录训练营第二天 | 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II
    977.有序数组的平方题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/文章讲解:https://programmercarl.com/0977.有序数组的平方.html视频讲解:https://www.bilibili.com/video/BV1QB4y1D7ep暴力解时间复杂度O(nlogn)空间复杂度O(1)双指针法时间复......
  • CF1773E Easy Assembly
    链接:https://codeforces.com/problemset/problem/1773/E思路首先先得出最终序列,因为它具有唯一性,然后再根据其中的前后关系来判断原来的数列需要切几刀。然后再根据切几刀形成的最终数列判断需要合并几次。例如:目标数列是ABCDEF,而给出的某两段序列是ADBC,EF,那么必要的解法一定......
  • 代码随想录算法训练营第第二天 | 977.有序数组的平方 、27. 移除元素
    977.有序数组的平方题目建议:本题关键在于理解双指针思想题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/文章讲解:https://programmercarl.com/0977.有序数组的平方.html视频讲解:https://www.bilibili.com/video/BV1QB4y1D7ep/***@param{number[]}nu......