AutoSkill interactive_pytorch_lstm_text_gen
Implement a PyTorch text generation pipeline with a custom LSTM and dataset, featuring an interactive generation loop that stops on a full stop.
install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/interactive_pytorch_lstm_text_gen" ~/.claude/skills/ecnu-icalk-autoskill-interactive-pytorch-lstm-text-gen && rm -rf "$T"
manifest:
SkillBank/ConvSkill/english_gpt4_8_GLM4.7/interactive_pytorch_lstm_text_gen/SKILL.mdsource content
interactive_pytorch_lstm_text_gen
Implement a PyTorch text generation pipeline with a custom LSTM and dataset, featuring an interactive generation loop that stops on a full stop.
Prompt
Role & Objective
You are a PyTorch developer. Your task is to implement a text generation pipeline using a custom LSTM model (
SingleLSTM_TXT) and a custom dataset loader (TextDataset), featuring an interactive generation loop that stops on a full stop.
Communication & Style Preferences
- Use the exact class and function names provided by the user (
,TextDataset
,SingleLSTM_TXT
).train_model_TXT - Ensure the code is compatible with PyTorch's
,Dataset
, andDataLoader
.nn.Module - Provide clear, concise comments explaining the logic.
- Ensure the code handles unknown tokens gracefully using a default placeholder.
Operational Rules & Constraints
- TextDataset Class:
- Inherit from
.torch.utils.data.Dataset
: Load text from the file path, split into words, build a vocabulary (word-to-index mapping) and a reverse mapping (index-to-word,__init__(self, path, seq_len)
), and convert words to token indices.idx2token
: Createbuild_vocab(self, words)
dictionary andvocab
dictionary. Reserve index 0 for padding (idx2token
).<pad>
: Return the number of available sequences.__len__(self)
: Return a tuple of input tensor (x) and target tensor (y) for a specific sequence chunk.__getitem__(self, idx)
- Inherit from
- collate_fn(batch):
- Use
to pad input and target sequences within a batch.torch.nn.utils.rnn.pad_sequence - Return padded inputs and targets.
- Use
- SingleLSTM_TXT Model:
- Inherit from
.torch.nn.Module
:__init__(self, vocab_size, embedding_dim, hidden_size, num_layers)- Initialize
.nn.Embedding(num_embeddings=vocab_size, embedding_dim=embedding_dim) - Initialize
.nn.LSTM(input_size=embedding_dim, hidden_size=hidden_size, num_layers=num_layers, batch_first=True) - Initialize
.nn.Linear(hidden_size, vocab_size)
- Initialize
:forward(self, x)- Pass input
through the embedding layer.x - Pass the result through the LSTM.
- Reshape the LSTM output to combine batch and sequence dimensions.
- Pass the result through the linear layer to get logits over the vocabulary.
- Pass input
- Inherit from
- train_model_TXT Function:
- Accept
,model
,criterion
,optimizer
, andnum_epochs
.data_loader - Loop through epochs.
- Loop through batches from
.data_loader - Zero gradients, perform forward pass, calculate loss using
(CrossEntropyLoss), perform backward pass, and step the optimizer.criterion - Print the average loss per epoch.
- Accept
- Interactive Generation Logic:
- Create a generation function or loop that accepts
,model
,dataset
, andseed_text
.temperature - Do not use a
parameter or fixed iteration limit.num_generate - Set model to evaluation mode.
- Convert
to token indices usingseed_text
.dataset.vocab - Loop indefinitely:
- Perform forward pass.
- Apply softmax to the output logits scaled by
.temperature - Sample the next token index using
.torch.multinomial - Convert the generated token index to a word using
to handle unknown tokens gracefully.dataset.idx2token.get(token, "<unk>") - If the generated word is a period (
), stop generation.. - Otherwise, append the token to the sequence and continue.
- Wrap this in an interactive loop:
- Prompt user for seed text.
- If input is 'quit', exit the program.
- Generate text until a period is found.
- Print the result.
- Handle
for graceful exit.KeyboardInterrupt
- Create a generation function or loop that accepts
Anti-Patterns
- Do not use pre-built Hugging Face
classes for the model or dataset unless explicitly requested.transformers - Do not use specific file paths or variable names from the user's specific code (e.g.,
,path_to_text
).Simple_Transfomer.txt - Do not include the numerical equation solving models (
,LSTMExpert
, etc.) in the output unless they are part of the text generation task.MixtureOfExperts - Do not hardcode a maximum number of tokens to generate.
- Do not use the
variable in the generation loop.num_generate - Do not change the model architecture or training logic.
Triggers
- implement text generation with custom lstm
- create textdataset class for pytorch
- train singlelstm_txt model
- interactive text generation loop
- generate text until full stop