NEW OpenAI Structured Outputs with Label Studio 🚀

Named Entity Recognition

If you want to perform named entity recognition (NER) on a sample of text, use this template. This template supports overlapping text spans and very large documents.

Interactive Template Preview

Labeling Configuration

<View>
  <Labels name="label" toName="text">
    <Label value="PER" background="red"/>
    <Label value="ORG" background="darkorange"/>
    <Label value="LOC" background="orange"/>
    <Label value="MISC" background="green"/>
  </Labels>
  <Text name="text" value="$text"/>
</View>

About the labeling configuration

All labeling configurations must be wrapped in View tags.

Use the Labels control tag to specify the relevant NER labels to apply to various text spans:

<Labels name="label" toName="text">
    <Label value="PER" background="red"/>
    <Label value="ORG" background="darkorange"/>
    <Label value="LOC" background="orange"/>
    <Label value="MISC" background="green"/>
</Labels>

Use the background parameter with the Label control tag to specify a CSS color for the label.

Use the Text object tag to specify the text data:

<Text name="text" value="$text"/>

Enhance this template

You can enhance this template in many ways.

Display labels on the left

If you want to modify the appearance of the labeling interface, you can use styling on the View tag. In this example, display the NER labels to the left of the text to be labeled.

Start by setting the entire labeling interface display to flex:

<View style="display: flex;">

Then use a different View tag to wrap the labels. Because the labels are listed before the text, they appear on the left side of the interface.

<View style="width: 250px; margin-right: 1em; padding: 1em; background: #343c7f;">

The styling on this tag sets a width for the section of the interface with the labels, adds a right margin between the labels and the text, adds padding around the labels, and a background color for this section of the interface.

Then you can add the Labels control tag like usual to display the NER labels:

<Labels name="label" toName="text" showInline="false">
  <Label value="PER" background="red"/>
  <Label value="ORG" background="darkorange"/>
  <Label value="LOC" background="orange"/>
  <Label value="MISC" background="green"/>
</Labels>

Close the View tag with the Labels, and open a new one for the Text tag:

</View>
<View>

The Text object tag specifies the text to label:

<Text name="text" value="$text"></Text>

Then you can close the two remaining View tags.

Enforce word alignment

If you want to allow annotations of only full words and enforce word alignment in labeling tasks, you can use the granularity parameter on the Text object tag to make sure that all highlighted spans in a NER task are complete words.

For example, adjust your Text tag like follows:

<Text name="text" value="$text" granularity="word" />

Add context to specific NER spans

If you want to add context to specific NER spans, you can set up conditional per-region labeling with your NER template.

For example, prompt annotators to choose the relevance of every text span in the text sample is:

<Choices name="relevance" toName="text" perRegion="true">
    <Choice value="Relevant" />
    <Choice value="Non Relevant" />
</Choices>

The perRegion parameter means that these choice options apply for each text span region.

You can also combine the View tag and the perRegion parameter of the Rating control tag to prompt annotators to rate their confidence in the accuracy of each individual text span region:

<View visibleWhen="region-selected">
    <Header value="Your confidence" />
</View>
<Rating name="confidence" toName="text" perRegion="true" />

The visibleWhen parameter with the View tag means that when a specific region is selected, the Header appears, prompting the annotator to supply a rating that applies to that region.

Filter a long list of labels

If you want to filter a long list of labels, add the Filter tag to your labeling configuration. For example, to filter the named entity recognition labels, add the following:

<Filter name="filter" toName="label" hotkey="shift+f" minlength="1" />
<Labels name="label" toName="text" showInline="false">
    <Label value="PER" background="red"/>
    <Label value="ORG" background="darkorange"/>
    <Label value="LOC" background="orange"/>
    <Label value="MISC" background="green"/>
</Labels>

The toName parameter on the Filter tag references the name parameter for the Labels tag. You can also specify a hotkey to use for the filter text box, and set the minlength parameter to specify the minimum number of characters typed into the filter before the list of labels is filtered.