import torch
import torch.nn as nn


def dm01():
    # 按照Bert模型的维度：768维，在这里，我们使用8维度演示
    # num_embeddings：20，词表大小
    # embedding_dim：8，词的维度
    # 把每个token都使用8维向量表示，一共是20个token
    embedded = nn.Embedding(21, 8)

    # 准备一句话，shape（1, 5），1句话，5个token
    input = torch.tensor([[1, 2, 5, 7, 9]])

    # 把这句话送给模型
    result = embedded(input)
    print("result1-->", result)
    # 问题一：这个结果是几维？3维。
    # 问题二：维度分别是多少？【1,5,8】

    # 问题三：embedding的加强
    # 准备一句话，shape（1, 6），1句话，6个token
    input = torch.tensor([[1, 2, 5, 7, 9, 20]])
    result = embedded(input)
    print("result2-->", result)  # 报错，index out of range in self，越界了
    # 解决方案
    # 方式一：只需要把输入数据index调小，最大值是19
    # input = torch.tensor([[1, 2, 5, 7, 9, 19]])
    # 方式二：不需要修改输入数据，只需要调整词表大小
    # embedded = nn.Embedding(21, 8)



