Spaces:
Runtime error
Runtime error
Download bert_pytorch/model/bert.py from MukeshKapoor25/logbert_processor: direct link, hf CLI and curl.
- Browser
- Download file 1.83 kB
-
https://huggingface.co/spaces/MukeshKapoor25/logbert_processor/resolve/main/bert_pytorch/model/bert.py
- Command line
-
hf download hf://spaces/MukeshKapoor25/logbert_processor/bert_pytorch/model/bert.py
-
curl -L -o bert.py https://huggingface.co/spaces/MukeshKapoor25/logbert_processor/resolve/main/bert_pytorch/model/bert.py
1.83 kB
| import torch.nn as nn | |
| import torch | |
| from .transformer import TransformerBlock | |
| from .embedding import BERTEmbedding | |
| class BERT(nn.Module): | |
| """ | |
| BERT model : Bidirectional Encoder Representations from Transformers. | |
| """ | |
| def __init__(self, vocab_size, max_len=512, hidden=768, n_layers=12, attn_heads=12, dropout=0.1, is_logkey=True, is_time=False): | |
| """ | |
| :param vocab_size: vocab_size of total words | |
| :param hidden: BERT model hidden size | |
| :param n_layers: numbers of Transformer blocks(layers) | |
| :param attn_heads: number of attention heads | |
| :param dropout: dropout rate | |
| """ | |
| super().__init__() | |
| self.hidden = hidden | |
| self.n_layers = n_layers | |
| self.attn_heads = attn_heads | |
| # paper noted they used 4*hidden_size for ff_network_hidden_size | |
| self.feed_forward_hidden = hidden * 2 | |
| # embedding for BERT, sum of positional, segment, token embeddings | |
| self.embedding = BERTEmbedding(vocab_size=vocab_size, embed_size=hidden, max_len=max_len, is_logkey=is_logkey, is_time=is_time) | |
| # multi-layers transformer blocks, deep network | |
| self.transformer_blocks = nn.ModuleList( | |
| [TransformerBlock(hidden, attn_heads, hidden * 2, dropout) for _ in range(n_layers)]) | |
| def forward(self, x, segment_info=None, time_info=None): | |
| # attention masking for padded token | |
| # torch.ByteTensor([batch_size, 1, seq_len, seq_len) | |
| mask = (x > 0).unsqueeze(1).repeat(1, x.size(1), 1).unsqueeze(1) | |
| # embedding the indexed sequence to sequence of vectors | |
| x = self.embedding(x, segment_info, time_info) | |
| # running over multiple transformer blocks | |
| for transformer in self.transformer_blocks: | |
| x = transformer.forward(x, mask) | |
| return x | |