allennlp.modules.conditional_random_field#

Conditional random field

allowed_transitions#

allowed_transitions(
    constraint_type: str,
    labels: Dict[int, str],
) -> List[Tuple[int, int]]

Given labels and a constraint type, returns the allowed transitions. It will additionally include transitions for the start and end states, which are used by the conditional random field.

Parameters

  • constraint_type : str, required Indicates which constraint to apply. Current choices are "BIO", "IOB1", "BIOUL", and "BMES".
  • labels : Dict[int, str], required A mapping {label_id -> label}. Most commonly this would be the value from Vocabulary.get_index_to_token_vocabulary()

Returns

List[Tuple[int, int]] The allowed transitions (from_label_id, to_label_id).

ConditionalRandomField#

ConditionalRandomField(
    self,
    num_tags: int,
    constraints: List[Tuple[int, int]] = None,
    include_start_end_transitions: bool = True,
) -> None

This module uses the "forward-backward" algorithm to compute the log-likelihood of its inputs assuming a conditional random field model.

See, e.g. http://www.cs.columbia.edu/~mcollins/fb.pdf

Parameters

  • num_tags : int, required The number of tags.
  • constraints : List[Tuple[int, int]], optional (default: None) An optional list of allowed transitions (from_tag_id, to_tag_id). These are applied to viterbi_tags() but do not affect forward(). These should be derived from allowed_transitions so that the start and end transitions are handled correctly for your tag type.
  • include_start_end_transitions : bool, optional (default: True) Whether to include the start and end transition parameters.

forward#

ConditionalRandomField.forward(
    self,
    inputs: torch.Tensor,
    tags: torch.Tensor,
    mask: torch.BoolTensor = None,
) -> torch.Tensor

Computes the log likelihood.

viterbi_tags#

ConditionalRandomField.viterbi_tags(
    self,
    logits: torch.Tensor,
    mask: torch.BoolTensor = None,
    top_k: int = None,
) -> Union[List[Tuple[List[int], float]], List[List[Tuple[List[int], float]]]]

Uses viterbi algorithm to find most likely tags for the given inputs. If constraints are applied, disallows all other transitions.

Returns a list of results, of the same size as the batch (one result per batch member) Each result is a List of length top_k, containing the top K viterbi decodings Each decoding is a tuple (tag_sequence, viterbi_score)

For backwards compatibility, if top_k is None, then instead returns a flat list of tag sequences (the top tag sequence for each batch item).

is_transition_allowed#

is_transition_allowed(
    constraint_type: str,
    from_tag: str,
    from_entity: str,
    to_tag: str,
    to_entity: str,
)

Given a constraint type and strings from_tag and to_tag that represent the origin and destination of the transition, return whether the transition is allowed under the given constraint type.

Parameters

  • constraint_type : str, required Indicates which constraint to apply. Current choices are "BIO", "IOB1", "BIOUL", and "BMES".
  • from_tag : str, required The tag that the transition originates from. For example, if the label is I-PER, the from_tag is I.
  • from_entity : str, required The entity corresponding to the from_tag. For example, if the label is I-PER, the from_entity is PER.
  • to_tag : str, required The tag that the transition leads to. For example, if the label is I-PER, the to_tag is I.
  • to_entity : str, required The entity corresponding to the to_tag. For example, if the label is I-PER, the to_entity is PER.

Returns

bool Whether the transition is allowed under the given constraint_type.