Chain#
LinearChainCRF#
- class supar.structs.chain.LinearChainCRF(scores: Tensor, trans: Tensor | None = None, lens: LongTensor | None = None)[source]#
Linear-chain CRFs Lafferty et al. (2001).
- Parameters:
Examples
>>> 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>)
- property argmax#
Computes \(\arg\max_y p(y)\) of the distribution \(p(y)\).
SemiMarkovCRF#
- class supar.structs.chain.SemiMarkovCRF(scores: Tensor, trans: Tensor | None = None, lens: LongTensor | None = None)[source]#
Semi-markov CRFs Sarawagi & Cohen (2004).
- Parameters:
Examples
>>> from supar import SemiMarkovCRF >>> batch_size, seq_len, n_tags = 2, 5, 4 >>> lens = torch.tensor([3, 4]) >>> value = torch.tensor([[[ 0, -1, -1, -1, -1], [-1, -1, 2, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1]], [[-1, 1, -1, -1, -1], [-1, -1, 3, -1, -1], [-1, -1, -1, 0, -1], [-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1]]]) >>> s1 = SemiMarkovCRF(torch.randn(batch_size, seq_len, seq_len, n_tags), torch.randn(n_tags, n_tags), lens) >>> s2 = SemiMarkovCRF(torch.randn(batch_size, seq_len, seq_len, n_tags), torch.randn(n_tags, n_tags), lens) >>> s1.max tensor([4.1971, 5.5746], grad_fn=<MaxBackward0>) >>> s1.argmax [[[0, 0, 1], [1, 1, 0], [2, 2, 1]], [[0, 0, 1], [1, 1, 3], [2, 2, 0], [3, 3, 1]]] >>> s1.log_partition tensor([6.3641, 8.4384], grad_fn=<LogsumexpBackward0>) >>> s1.log_prob(value) tensor([-5.7982, -7.4534], grad_fn=<SubBackward0>) >>> s1.entropy tensor([3.7520, 5.1609], grad_fn=<SelectBackward0>) >>> s1.kl(s2) tensor([3.5348, 2.2826], grad_fn=<SelectBackward0>)