:rocket: State-of-the-art parsers for natural language.
This release is meant to fix the following issues:
ConstituencyCRF
MatrixTree
We also add implementations of sparsemax
and SparsemaxSemiring
(see details in Martins et al. 2016 and Rush et al. 2020).
We add implementations of many structured prediction algorithms presented in the form of torch.disrtibutions and semiring notations[^1], including
Take LinearChainCRF
as an example:
>>> from supar import LinearChainCRF
>>> batch_size, seq_len, n_tags = 2, 5, 4
>>> lens = torch.tensor([3, 4])
>>> value = torch.randint(n_tags, (batch_size, seq_len))
>>> s1 = LinearChainCRF(torch.randn(batch_size, seq_len, n_tags),
torch.randn(n_tags+1, n_tags+1),
lens)
>>> s2 = LinearChainCRF(torch.randn(batch_size, seq_len, n_tags),
torch.randn(n_tags+1, n_tags+1),
lens)
>>> s1.max
tensor([4.4120, 8.9672], grad_fn=<MaxBackward0>)
>>> s1.argmax
tensor([[2, 0, 3, 0, 0],
[3, 3, 3, 2, 0]])
>>> s1.log_partition
tensor([ 6.3486, 10.9106], grad_fn=<LogsumexpBackward>)
>>> s1.log_prob(value)
tensor([ -8.1515, -10.5572], grad_fn=<SubBackward0>)
>>> s1.entropy
tensor([3.4150, 3.6549], grad_fn=<SelectBackward>)
>>> s1.kl(s2)
tensor([4.0333, 4.3807], grad_fn=<SelectBackward>)
stride
setting for small BERT (#86)[^1]: The implementations of structured distributions and semirings are heavily borrowed from torchstruct with some tailoring. For more details, see their tutorial paper and Goodman's paper.
Dataloader
now yields Batch
objectscon
name conflict in Windows system (#74)nltk.Tree
from string with parentheses (#59, #65)The following parsers are released in SuPar
package and the corresponding English/Chinese pretrained models can be found in the attachments.