gpt2 / src /model /embeddings.py
triton329's picture
Upload folder using huggingface_hub
c21e887 verified
Raw
History Blame Contribute Delete
1.27 kB
import torch
import torch.nn as nn
class Embedding:
def __init__(self, vocab_size: int, embed_dim: int) -> None:
"""Create an embedding matrix."""
self.embed_dim = embed_dim
self.embedding = nn.Embedding(
num_embeddings=vocab_size, embedding_dim=embed_dim
)
def generate_token_embedding(self, tokens: list[int]) -> torch.Tensor:
"""Map token IDs to dense vectors."""
token_tensor = torch.tensor(tokens)
return self.embedding(token_tensor) # (seq_len, embed_dim)
def generate_positional_embedding(self, max_len: int) -> torch.Tensor:
"""Return positional embeddings for positions 0..max_len-1."""
pos_embedding = nn.Embedding(max_len, self.embed_dim)
positions = torch.arange(max_len)
return pos_embedding(positions) # (max_len, embed_dim)
def generate_input_embedding(self, tokens: list[int]) -> torch.Tensor:
"""Token embeddings + positional embeddings — the transformer input."""
input_sequence_length = len(tokens)
token_emb = self.generate_token_embedding(tokens)
pos_emb = self.generate_positional_embedding(input_sequence_length)
return token_emb + pos_emb # (input_sequence_length, embed_dim)