Design clássico · Sênior
Entity linking
Projeto de entrevista clássico. Pontos centrais: NER, desambiguação e base de conhecimento.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: NER, desambiguação e base de conhecimento. Entity linking recebe um texto e a lista de menções de entidades que ele contém, e devolve uma lista de pares menção-entidade, em que cada entidade é uma entrada de uma base de conhecimento, como a Wikipedia.
01 · CONTEXTO
O problema: ligar menções a entidades
Entity linking recebe um texto e a lista de menções de entidades que ele contém, e devolve uma lista de pares menção-entidade, em que cada entidade é uma entrada de uma base de conhecimento, como a Wikipedia.
Na lista de exercícios de projeto de sistemas de ML de Chip Huyen aparecem perguntas desse tipo: treinar um modelo para prever se uma palavra numa frase se refere ao animal ou ao carro, e mapear apelidos como Pete, Andy, Nick e Rob para nomes reais.
O que decide a entidade é o contexto da frase, não a grafia da menção: a mesma palavra aponta para entradas diferentes da base conforme o texto ao redor.
A própria página avisa que muitas perguntas são ambíguas de propósito e que cabe a quem é entrevistado pedir esclarecimento e delimitar o escopo do problema. O curso Grokking the Machine Learning Interview, do Educative, lista um projeto Entity Linking System construído sobre linking de entidades nomeadas (NEL), com reconhecimento, desambiguação, métricas, arquitetura e modelagem; só essa descrição pública foi usada aqui.
02 · FORMULAÇÃO
O que o paper de referência assume
Como desenho de referência, o caso usa o paper Scalable Zero-shot Entity Linking with Dense Entity Retrieval, do Facebook AI Research. Ele estuda o linking com menções já fornecidas (gold mentions) e assume que título e descrição das entidades estão disponíveis.
O desafio central é a escala: para cada menção há milhões de entidades possíveis a considerar. Métodos anteriores recorriam a tabelas de menções e à popularidade de links da Wikipedia; no cenário zero-shot do paper, não há conhecimento externo e cada entidade é definida apenas por uma descrição textual curta.
| Aspecto | Definição no paper |
|---|---|
| Menções | Já fornecidas (gold mentions) |
| Entidades | Entrada de uma base de conhecimento (KB), por exemplo a Wikipedia |
| Texto por entidade | Título e descrição disponíveis |
| Avaliação in-KB | Cada menção tem uma entidade correta válida na KB |
| Predição fora da KB (nil) | Fica para trabalho futuro |
| Zero-shot | A KB é separada entre treino e teste |
03 · ARQUITETURA
Recuperação densa seguida de reranking
O paper divide a tarefa em duas etapas: geração de candidatos e ranqueamento. Trabalhos anteriores geravam candidatos com informação de frequência, tabelas de alias e métodos baseados em TF-IDF.
A proposta é um algoritmo zero-shot em dois estágios. No primeiro, a recuperação ocorre num espaço denso definido por um bi-encoder que embute de forma independente o contexto da menção e as descrições das entidades. No segundo, cada candidato é reranqueado por um cross-encoder que concatena o texto da menção e o da entidade.
Fora do caminho da requisição, um job em lote lê título e descrição de cada entidade na base de conhecimento, calcula seus embeddings e os publica no índice vetorial. As representações das entidades podem ser pré-computadas e guardadas em cache.
O cliente envia ao serviço de linking o texto e a menção a resolver.
O serviço pede ao codificador de menção o vetor da menção com seu contexto; o bi-encoder embute menção e entidades de forma independente.
O índice devolve as entidades de maior produto escalar com o vetor da menção.
O reranker lê as descrições dos candidatos na base de conhecimento e pontua cada par menção-entidade; o cross-encoder tem atenção cruzada profunda entre o contexto e as descrições.
O serviço devolve ao cliente a entidade escolhida para a menção.
04 · MODELOS E TREINO
Bi-encoder, cross-encoder e como treinar
No bi-encoder, dois transformers BERT independentes codificam o contexto com a menção e a entidade em vetores densos, e cada candidato é pontuado pelo produto escalar desses vetores. A entidade entra com título e descrição; para entidades da Wikipedia, a descrição usa as primeiras frases da página.
No cross-encoder, contexto/menção e entidade são codificados juntos num só transformer, com uma camada linear adicional. Por causa da maior pegada de memória e computação, ele é usado no reranking de um conjunto pequeno de candidatos do bi-encoder, até 100, e o paper o considera inadequado para recuperação ou tarefas que exigem inferência rápida.
| Aspecto | Bi-encoder | Cross-encoder |
|---|---|---|
| Como codifica | Menção e entidade em transformers independentes | Contexto/menção e entidade num só transformer |
| Como pontua | Produto escalar dos vetores | Camada linear adicional sobre a codificação do par |
| Papel no sistema | Recuperação, com representações das entidades pré-computadas e em cache | Reranking de um conjunto pequeno de candidatos |
| Adequação | Permite inferência rápida em tempo real | Não é adequado para recuperação nem para inferência rápida |
O bi-encoder é treinado para maximizar o score da entidade correta frente às entidades amostradas aleatoriamente do mesmo lote. Além dos negativos do lote, o paper usa negativos difíceis, obtidos com as 10 entidades mais bem previstas para cada exemplo de treino e somados aos negativos aleatórios.
No experimento zero-shot, o cross-encoder foi treinado sobre os 64 primeiros candidatos do bi-encoder para cada amostra, com perda softmax para maximizar o score da entidade correta.
Os pares menção-entidade anotados alimentam o treino do bi-encoder, que maximiza o score da entidade correta frente às entidades do mesmo lote.
A mineração escolhe, por exemplo de treino, as entidades mais bem previstas como negativos difíceis e as devolve ao treino, junto dos negativos aleatórios do lote.
O bi-encoder treinado fornece os candidatos para o treino do cross-encoder: no experimento zero-shot, os 64 primeiros de cada amostra.
O cross-encoder é treinado com perda softmax para maximizar o score da entidade correta entre os candidatos.
Na destilação, o cross-encoder faz o papel de professor de um bi-encoder: parte do ganho de acurácia do cross-encoder, mais caro, é transferida ao bi-encoder.
Os modelos resultantes são gravados no repositório de modelos.
05 · AVALIAÇÃO E CUSTO
Recall, latência e o preço de cada estágio
Na avaliação zero-shot, o bi-encoder atinge recall bem maior que o do BM25, e o paper passa os 64 primeiros candidatos recuperados ao ranqueador.
Em velocidade, o paper afirma que o linking com bi-encoder é muito rápido com busca aproximada de vizinhos, por exemplo sobre 5.9 milhões de candidatos em 2 milissegundos. Calcular os embeddings do conjunto de 5.9M entidades é um passo intensivo em recursos, mas paralelizável, e levou cerca de 2.8 horas.
| Aspecto | Busca exata (FAISS IndexFlatIP) | Busca aproximada (FAISS HNSW) |
|---|---|---|
| Tempo médio por consulta | 9.2 ms para devolver os 100 primeiros candidatos | 2.6 ms |
| Custo e perda | Obtém os candidatos por busca exata | Queda de acurácia menor que 1.2% e tempo adicional para construir o índice |
O paper também mostra que boa parte do ganho de acurácia do cross-encoder, mais caro, pode ser transferida ao bi-encoder por destilação de conhecimento.
06 · LIMITES E ENTREVISTA
O que o desenho não cobre
O paper foca em resolução local, em que cada menção é modelada de forma independente. A predição fora da base (nil) e o linking de ponta a ponta ficam para trabalho futuro: o paper diz que suas técnicas deveriam se aplicar a esse cenário, mas deixa a exploração para depois.
Para a entrevista, depois de fechar o escopo (menções dadas ou detectadas, tamanho da base, o que fazer sem entidade correta), apresente recuperação barata seguida de reranking caro, justifique o pré-cálculo dos embeddings das entidades, discuta negativos difíceis no treino e termine pelos limites: coerência entre menções do mesmo documento, entidades novas e menções sem entidade na base.
Perguntas frequentes
O que é Entity linking?
Projeto de entrevista clássico. Pontos centrais: NER, desambiguação e base de conhecimento.
O que o design de Entity linking cobre?
Ele está organizado nestas seções: O problema: ligar menções a entidades, O que o paper de referência assume, Recuperação densa seguida de reranking, Bi-encoder, cross-encoder e como treinar, Recall, latência e o preço de cada estágio e O que o desenho não cobre.
Quanto tempo leva Entity linking e qual é o nível?
Leva cerca de 16 minutos para ler e tem nível Sênior.
Agora projete você mesmo
Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.