Spaces:
Running on Zero
Running on Zero
Download tests/test_abstractive.py from fady21/bilingual-summarizer-api: direct link, hf CLI and curl.
- Browser
- Download file 2.41 kB
-
https://huggingface.co/spaces/fady21/bilingual-summarizer-api/resolve/main/tests/test_abstractive.py
- Command line
-
hf download hf://spaces/fady21/bilingual-summarizer-api/tests/test_abstractive.py
-
curl -L -o test_abstractive.py https://huggingface.co/spaces/fady21/bilingual-summarizer-api/resolve/main/tests/test_abstractive.py
2.41 kB
| import unittest | |
| import torch | |
| from nlp_core.vocabulary import Vocabulary | |
| from models.abstractive.attention import BahdanauAttention, LuongAttention | |
| from models.abstractive.encoder import Seq2SeqEncoder | |
| from models.abstractive.decoder import Seq2SeqDecoder | |
| from models.abstractive.seq2seq_model import Seq2SeqSummarizer | |
| class TestAbstractiveModel(unittest.TestCase): | |
| def setUp(self): | |
| self.src_vocab = Vocabulary("src_vocab") | |
| self.src_vocab.add_sentence(["natural", "language", "processing", "is", "great"]) | |
| self.src_vocab.build_vocab(min_freq=1) | |
| self.trg_vocab = Vocabulary("trg_vocab") | |
| self.trg_vocab.add_sentence(["nlp", "is", "great"]) | |
| self.trg_vocab.build_vocab(min_freq=1) | |
| self.emb_dim = 32 | |
| self.enc_hid_dim = 64 | |
| self.dec_hid_dim = 64 | |
| def test_attention_shapes(self): | |
| batch_size = 2 | |
| src_len = 5 | |
| hidden = torch.randn(batch_size, self.dec_hid_dim) | |
| encoder_outputs = torch.randn(batch_size, src_len, self.enc_hid_dim * 2) | |
| bahdanau = BahdanauAttention(self.enc_hid_dim * 2, self.dec_hid_dim) | |
| attn_weights = bahdanau(hidden, encoder_outputs) | |
| self.assertEqual(attn_weights.shape, (batch_size, src_len)) | |
| self.assertAlmostEqual(attn_weights.sum(dim=1)[0].item(), 1.0, places=4) | |
| def test_seq2seq_forward_and_decoding(self): | |
| model = Seq2SeqSummarizer( | |
| src_vocab=self.src_vocab, | |
| trg_vocab=self.trg_vocab, | |
| emb_dim=self.emb_dim, | |
| enc_hid_dim=self.enc_hid_dim, | |
| dec_hid_dim=self.dec_hid_dim | |
| ) | |
| batch_size = 2 | |
| src_len = 6 | |
| trg_len = 4 | |
| src = torch.randint(0, len(self.src_vocab), (batch_size, src_len)) | |
| trg = torch.randint(0, len(self.trg_vocab), (batch_size, trg_len)) | |
| outputs = model(src, trg, teacher_forcing_ratio=0.5) | |
| self.assertEqual(outputs.shape, (batch_size, trg_len, len(self.trg_vocab))) | |
| # Test Greedy generation | |
| summary_tokens, attn = model.summarize_greedy(["natural", "language", "processing"], max_len=5) | |
| self.assertIsInstance(summary_tokens, list) | |
| # Test Beam Search generation | |
| beam_summary = model.summarize_beam(["natural", "language", "processing"], beam_width=2, max_len=5) | |
| self.assertIsInstance(beam_summary, list) | |
| if __name__ == "__main__": | |
| unittest.main() | |