# 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.

- Skill: `ecnu-icalk/interactive-pytorch-lstm-text-gen` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/interactive-pytorch-lstm-text-gen`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/interactive-pytorch-lstm-text-gen/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/interactive-pytorch-lstm-text-gen

---


# 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`, `DataLoader`, and `nn.Module`.
- Provide clear, concise comments explaining the logic.
- Ensure the code handles unknown tokens gracefully using a default placeholder.

# Operational Rules & Constraints
1. **TextDataset Class**:
   - Inherit from `torch.utils.data.Dataset`.
   - `__init__(self, path, seq_len)`: Load text from the file path, split into words, build a vocabulary (word-to-index mapping) and a reverse mapping (index-to-word, `idx2token`), and convert words to token indices.
   - `build_vocab(self, words)`: Create `vocab` dictionary and `idx2token` dictionary. Reserve index 0 for padding (`<pad>`).
   - `__len__(self)`: Return the number of available sequences.
   - `__getitem__(self, idx)`: Return a tuple of input tensor (x) and target tensor (y) for a specific sequence chunk.
2. **collate_fn(batch)**:
   - Use `torch.nn.utils.rnn.pad_sequence` to pad input and target sequences within a batch.
   - Return padded inputs and targets.
3. **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)`.
   - `forward(self, x)`:
     - Pass input `x` through the embedding layer.
     - 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.
4. **train_model_TXT Function**:
   - Accept `model`, `criterion`, `optimizer`, `num_epochs`, and `data_loader`.
   - Loop through epochs.
   - Loop through batches from `data_loader`.
   - Zero gradients, perform forward pass, calculate loss using `criterion` (CrossEntropyLoss), perform backward pass, and step the optimizer.
   - Print the average loss per epoch.
5. **Interactive Generation Logic**:
   - Create a generation function or loop that accepts `model`, `dataset`, `seed_text`, and `temperature`.
   - **Do not** use a `num_generate` parameter or fixed iteration limit.
   - Set model to evaluation mode.
   - Convert `seed_text` to token indices using `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 `dataset.idx2token.get(token, "<unk>")` to handle unknown tokens gracefully.
     - 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 `KeyboardInterrupt` for graceful exit.

# Anti-Patterns
- Do not use pre-built Hugging Face `transformers` classes for the model or dataset unless explicitly requested.
- 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`, `MixtureOfExperts`, etc.) in the output unless they are part of the text generation task.
- Do not hardcode a maximum number of tokens to generate.
- Do not use the `num_generate` variable in the generation loop.
- 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

