The Beautiful Mess of Biomedical Entity Linking

The surface form p53 branching to a human gene, a mouse gene, postnatal day 53, and other possible meanings
A common theme of computer science is that naming is hard. It turns out that this is true not only in computer science but also in biology, creating an interesting application area for modern computer science: biomedical named entity linking.

The goal of entity linking is simple to describe:

Given an in-text surface form (e.g. the gene “TP53”), identify the actual concept it refers to, such as a Wikipedia or UniProt entry.

Yet, this is far from trivial to solve, and if you read enough research articles, there are a lot of ways this becomes complicated:

And this list could probably go on for a while. Biology is full of in-ontology and out-of-ontology homonyms, synonym-rich concepts, nasty abbreviations, and other happy little naming accidents (probably every major scientific discipline is).

Given this variety of surface forms, biomedical entity linking is hard not because the signal is weak, but because you need to combine all available lexical, semantic, and contextual signals to handle the long tail of concepts. That is, entity linking requires a combination of modern tooling, as neither semantic search spaces nor lexical search spaces nor context clues provide a clear advantage here. For extreme cases, like the ACS3 vs. TWIST1 case, we do not have any lexical overlap. Every general-purpose concept embedding likely fails for stuff like APP or the Hedgehog gene. While species context clues are paramount, they fail for cases where ACS3 can mean human ACSL3 or human TWIST1. Moreover, these context clues could be arbitrarily far away in the text, or even just exist in a figure or the mind of an author. Legend has it that sometimes even the authors themselves did not know exactly which species they were working with.

Overall, a beautiful task to work on. It has a simple problem formulation, can become arbitrarily complex in the worst case, and is important for real-world applications. I thought about this problem for quite a bit and made some interesting observations about building scalable entity linkers for it. Even then, it turns out that benchmarking their quality is surprisingly hard.