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:
-
Do we mean TP53 the gene, or a signaling pathway?
-
Is this human TP53 or mouse TP53, or zebrafish TP53?
-
Does p53 refer to the protein expressed by TP53 or to the postnatal day 53 in animal-development studies?
-
If we see ACS3, do we refer to the canonical name of the TWIST1 gene or to the alias of ACSL3?
-
Does APP refer to software or a gene? And what about the Indian Hedgehog or the desert Hedgehog? And do those genes exist in hedgehogs?
-
Is *SEPT1 a gene or September 1? And do not trust Microsoft Excel on this one.
-
…
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.