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.md
source 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
    ,
    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