Release notes for NLP API 2.36

Contents

Brief Summary

Release versions

  • NLP API version 2 Release 36.
  • Python SDK and client v6.10.0.
  • Java SDK and client v5.15.0 (deprecated).
  • NLP API specification v2.20.0: added single API key authentication for some deployments.
  • JSON result output schema v2.34.0 for emtellipro-json-2: added concept links for relations.
  • visualclient version v2025.07.02-8e1c4f: minor visualization improvements and bug fixes.

Highlights

  • New discontinuous entity spans by assigning concept links to some relations.
  • UMLS ontologies updated to 2025AA version (2025-05-05).
  • LOINC and NCI entitylink update 2025-06-23.
  • SNOMED-CT ontology updated to US Edition 2025-03-01 release.
  • Relation and attribute updates and SNOMED-CT entity linking updates.

New Features

For a specific set of relations in the NLP API we combine the two arguments in the relation and use that as a synonym and we find a match to a SNOMED ontology concept for that synonym and link the SNOMED concept ID to the relation. In this release we only support concept links for the following relations:

  • qualifier relation
  • anatomicsite relation

We report concept links for these relation for SNOMED ontology only (if a concept link is found). We do not address mappings into UMLS, ICD-10 and ICD-10-CM

Qualifier relation example

To explain this consider the following sentence:

The patient has mild mitral regurgitation.

In this case the NLP API finds a SNOMED concept ID 838451005 for the span mild mitral regurgitation.

However in the sentence:

Her mitral regurgitation now appears to be mild.

The NLP API finds a SNOMED concept ID 48724000 instead for the span mitral regurgitation. However there is a qualifier relation linking mild to mitral regurgitation. By merging the two argument spans of the qualifier relation we can identify the same SNOMED concept ID of 838451005 as we did for the contiguous span mild mitral regurgitation.

The NLP API JSON output would capture this as a new field on the relation called concept_links which is similar to the concept_links field that is currently produced in the found entities output.

Both the concept_links have labels that can be looked up in the concepts part of the NLP API JSON output.

1"qualifiers": [
2 {
3 "label": "RQ0",
4 "attributes": {
5 "confidence": 1,
6 "qualifier_type": "size/severity"
7 },
8 "concept_links": [
9 "Csnomed4"
10 ],
11 "args": {
12 "qualifier": {
13 "ref": "E2",
14 "text": [
15 "mild"
16 ]
17 },
18 "qualifies": {
19 "ref": "E7",
20 "text": [
21 "mitral regurgitation"
22 ]
23 }
24 }
25 }
26],
27...
28"concepts": {
29 "snomed": [
30 {
31 "label": "Csnomed4",
32 "concept_id": "838451005",
33 "description": "Mild mitral valve regurgitation (disorder)"
34 }
35 ]
36}

Anatomic Site relation example

Consider the sentence:

pt has ureters injury.

In this case the span ureters injury is mapped to SNOMED concept ID 24850009.

While in the sentence:

pt was found to have an injury localized to the ureters.

we get separate SNOMED matches for injury and for ureters since those two spans are not contiguous.

However, there is an anatomic site relation that links injury to ureters:

In this case we would concatenate the spans for ureters (site) and injury (situated entity) to link the concatenated span to the SNOMED concept ID 24850009.

The NLP API output JSON would look like this:

1"anatomicsites": [
2 {
3 "label": "RA0",
4 "attributes": {
5 "confidence": 1
6 },
7 "concept_links": [
8 "Csnomed4"
9 ]
10 "args": {
11 "site": {
12 "ref": "E5",
13 "text": [
14 "ureters"
15 ]
16 },
17 "situated_entity": {
18 "ref": "E4",
19 "text": [
20 "injury"
21 ]
22 }
23 }
24 }
25]
26...
27"concepts": {
28 "snomed": [
29 {
30 "label": "Csnomed4",
31 "concept_id": "24850009",
32 "description": "Injury of ureter (disorder)"
33 }
34 ]
35}

Single API Key

Added support for NLP API single API key authentication.

However this is currently only supported for some deployments of the NLP API.

Changes

Ontology updates

  • UMLS ontologies updated to 2025AA version (2025-05-05).
  • Expand UMLS semantic types for Snomed’s medication relations.
  • LOINC and NCI entitylink update 2025-06-23.
  • SNOMED-CT ontology updated to US Edition 2025-03-01 release.
  • Added 8948 new synonym annotations for SNOMED-CT entities.
  • Medcin ontology updated to Nov 2024 release.
  • Added 161308 new synonyms to Medcin ontology.
  • Remove Medcin ontology from medication relations. Instead, check for drugs with Pharmacologic Substance in Snomed ontology (using UMLS STY) instead of medicinal product (from fsn).
  • Make Emtelligent ontology produce no ontology info. The emtelligent ontology is deprecated in this release.

Negation

  • No date negation should have limited scope.
  • Fix negation scope changes affected by use of suggest.
  • Fix over-negation issue with no ... has.
  • Added not present as negation trigger.
  • Improve recall for Neg Hx as negation trigger.

Section parsing

  • Improved section heading finder.
  • Use section category “musculoskeletal” for all radiology bones and joints type headings.

Bug fixes

  • Fix bug where entities like lesion or cyst (and other morphologic abnormalities) were missed in certain cases.
  • Fix bug in measurement unit finding for unicode and broken unicode.
  • Fix false positive address matches for cross, junction, etc.
  • Fix cases of m being extracted as milligram.
  • Fix bug where SNOMED concepts were being assigned to some MEDCIN mentions.

Model Updates

  • Sentence boundary model enforces a maximum sentence length.
  • Improved address recognition precision to avoid false positives.
  • Section Heading model.
  • Temporality relation.
  • Anatomic Site relation allows for situated entities that are procedures.
  • Reported Event relation.
  • Entity Disambiguation model.
  • Uncertainty attribute updated to handle suggesting.

Measurement relation

  • Improved measurement relation model.
  • Handle cases of missing whitespace in measurements like LVEF25% and ef60%.
  • Improved handling of TNM scores/staging.
  • Some longer descriptions of Gleason scores like grade group 4 (gleason score 5 + 3) are captured as an entity match on the entire span rather than as a measurement relation.

Experiencer relation

  • Improved experiencer relation model.
  • Cases like Mr. X and other proper names are no longer identified by the SNOMED concept Person (person) 125676002 — they are instead identified as Person name (property) (qualifier value) 734006007. Note that this affects the experiencer relation as these newly re-mapped proper names are no longer picked up as experiencers which reduces several false positives on unseen data.
  • Do not use lowercase prefixes like mr to identify person names.

Python Requirements

  • Minimum Python version required is v3.11.

Python SDK updates

The latest NLP API Python SDK at the time of release is version 6.10.0. Refer to the changelog for the Python SDK for a full explanation of the updates made since the last release. You will need to use at least version 5.7.0 of the Python SDK or later to send requests to the NLP API v2.36 but if you want to use the new features explained above you will need to use at least version 6.10.0.

New features in the Python SDK

To use existing NLP API databases with the new Python SDK you must do a data migration using the Python database client migrate subcommand:

$emtellipro-db-client migrate --database postgresql://username:password@hostname:port/example_db

Benchmarking

  • Processed 1744 CCDs.
  • Total size: 34 MB; Average size: 67.35 KB.
  • NLP API deployed with 4 GPU workers
  • 32x CPU: Intel(R) Xeon(R) Silver 4310 CPU @ 2.10 - 3.30 GHz w/18 MB Cache; 189G RAM
  • 1x GPU: Nvidia L4 w/24GB of RAM
  • Processed 1744 reports in 35:38.17s for an average per report processing time of 1.226012s per report
  • Output JSON file size: 479MB.
  • Saved 1744 documents to database in 1:21.38s (.04666s / document)
  • NLP API database size using Python database client output to sqlite: 658MB