Skip to main content

one more transformers lib

Project description

Simple way to use transformer models

PyPI version Build Status

Features

  • Multimodal Transformer (text, text -> text; for example for Automatic Post-Editing task);
  • Label smoothing loss;
  • Unlikelihood loss (sentence-level and for full context), arxiv;
  • LayerDrop technique for transformer encoder/decoder layers, arxiv;
  • Pre/Post LayerNorm encoders (Decoders in process), arxiv;
  • ADMIN Initialization (in future), arxiv;
  • Top-k/Top-p sampling with temperature, arxiv;

Installation

pip install plain-transformers

Usage

Multimodal transformer example with two tokenizers:

Step one: import model and some usefull staff;

import torch

from plain_transformers.models import MultimodalTransformer
from plain_transformers.layers import MultimodalTransformerDecoder
from plain_transformers.layers import TransformerEncoder

from plain_transformers import BPEWrapper
from plain_transformers.initializations import normal_initialization, initialize_weights
from plain_transformers.samplers.nucleus_sampler import NucleusSampler

import youtokentome as yttm

Step two: train and load tokenizers;

# train your encoder tokenizer
yttm.BPE.train(..., model='encoder_tokenizer.model')
# train your decoder tokenizer
yttm.BPE.train(..., model='decoder_tokenizer.model')

# load tokenizers
encoder_tokenizer = BPEWrapper(model='encoder_tokenizer.model')
decoder_tokenizer = BPEWrapper(model='decoder_tokenizer.model')

Step three: init out model configuration;

cfg = {
    'd_model': 768,
    'first_encoder': {
        'first_encoder_vocab_size': encoder_tokenizer.vocab_size(),
        'first_encoder_max_length': 512,
        'first_encoder_pad_token_id': encoder_tokenizer.pad_id,
        'first_encoder_token_type_vocab_size': 2,
        'first_encoder_n_heads': 8,
        'first_encoder_dim_feedforward': 2048,
        'first_encoder_num_layers': 3,
        'first_encoder_type': 'post_ln'
    },
    'second_encoder': {
        'second_encoder_vocab_size': encoder_tokenizer.vocab_size(),
        'second_encoder_max_length': 512,
        'second_encoder_pad_token_id': encoder_tokenizer.pad_id,
        'second_encoder_token_type_vocab_size': 2,
        'second_encoder_n_heads': 8,
        'second_encoder_dim_feedforward': 2048,
        'second_encoder_num_layers': 3,
        'second_encoder_type': 'post_ln'
    },
    'decoder': {
        'decoder_max_length': 512,
        'decoder_vocab_size': decoder_tokenizer.vocab_size(),
        'decoder_pad_token_id': decoder_tokenizer.pad_id,
        'decoder_token_type_vocab_size': 2,
        'decoder_n_heads': 8,
        'decoder_dim_feedforward': 2048,
        'decoder_num_layers': 3,
        'decoder_type': 'post_ln'
    },
}

Step four: initialize model and apply weight initialisation (with default parameter std=0.02);

model = MultimodalTransformer(
    TransformerEncoder,
    TransformerEncoder,
    MultimodalTransformerDecoder,
    cfg['d_model'],
    **cfg['first_encoder'],
    **cfg['second_encoder'],
    **cfg['decoder'],
    share_decoder_head_weights=True,
    share_encoder_decoder_embeddings=False,
    share_encoder_embeddings=True,
)

initialize_weights(model, normal_initialization, init_range=0.02)

Step five: train our model like ordinary seq2seq;

train(model, ...)

Step six: initialize Sampler and generate model answer;

sampler = NucleusSampler(model, encoder_tokenizer=(encoder_tokenizer, encoder_tokenizer), decoder_tokenizer=decoder_tokenizer)
sampler.generate('Hello Bob, what are you doing?', second_input_text='Fine, thanks!', top_k=5)

Example

You can find working example of NMT here.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plain-transformers-0.0.1.5rc3.tar.gz (19.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

plain_transformers-0.0.1.5rc3-py3-none-any.whl (36.6 kB view details)

Uploaded Python 3

File details

Details for the file plain-transformers-0.0.1.5rc3.tar.gz.

File metadata

  • Download URL: plain-transformers-0.0.1.5rc3.tar.gz
  • Upload date:
  • Size: 19.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.7.10

File hashes

Hashes for plain-transformers-0.0.1.5rc3.tar.gz
Algorithm Hash digest
SHA256 8d812c6ee4b392ab55680a7e1783abed73a8d64cfb93fb7c4382c9869a50288e
MD5 4b6131c470077ebfb266b1043352e383
BLAKE2b-256 275989784429ce14c4e4775115137b40bf79e19eea8383f9b4de3b1877180ec0

See more details on using hashes here.

File details

Details for the file plain_transformers-0.0.1.5rc3-py3-none-any.whl.

File metadata

  • Download URL: plain_transformers-0.0.1.5rc3-py3-none-any.whl
  • Upload date:
  • Size: 36.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.7.10

File hashes

Hashes for plain_transformers-0.0.1.5rc3-py3-none-any.whl
Algorithm Hash digest
SHA256 628794975ee5011288593b50bdaf3fd015d7d2502d9356e93258b7287b3f2245
MD5 e88f8db793a1941c8f285f616aed18ed
BLAKE2b-256 27fafee8fbf82b243546922277cb45a64fda242cb0bebb9bbdbe7f79a7038aa4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page