Como implementar um algoritmo de medida de grau “relacionado”?
-
09-06-2019 - |
Pergunta
Eu ia fazer uma pergunta hoje cedo quando fui apresentado a uma funcionalidade surpreendente no Stackoverflow.Quando escrevi o título da minha pergunta, o stackoverflow me sugeriu várias questões relacionadas e descobri que já havia duas questões semelhantes.Isso foi impressionante!
Então comecei a pensar como implementaria tal função.Como eu ordenaria as perguntas por parentesco:
- Pergunta que têm um número maior de palavras correspondem à nova pergunta
- Se o número de correspondências forem iguais, a ordem das palavras é considerada
- Palavras que aparecem no título têm maior relevância
Isso seria um fluxo de trabalho simples ou um algoritmo de pontuação complexo?Algumas derivações para aumentar o recall, talvez?Existe alguma biblioteca que implementa esta função?Que outros aspectos você consideraria?Talvez Jeff pudesse responder sozinho!Como você implementou isso no Stackoverflow?:)
Solução
Uma forma de implementar tal algoritmo envolveria classificar as questões de acordo com uma função heurística que atribui um fator de peso de 'relevância' usando as seguintes etapas:
- Aplique um filtro de ruído à pergunta 'Novo' para remover palavras comuns em um grande número de objetos, como:'o', 'e', 'ou', etc.
- Obtenha a quantidade de palavras contidas na pergunta 'Nova' que correspondem às palavras do conjunto de perguntas já postadas no site.[A]
- Obtenha o número de correspondências de tags entre as palavras da pergunta 'Novo' e as disponíveis.[B]
- Calcule o 'peso de relevância' com base em [A] e [B] como 'x[A] + y[B]', onde x e y são multiplicadores de peso (atribua um multiplicador de peso mais alto a [B], pois a marcação é mais relevante do que uma simples busca por palavras)
- Obtenha as 5 principais perguntas com o maior 'peso de relevância'.
A heurística pode exigir ajustes para obter resultados ideais, mas deve funcionar.
Outras dicas
Sua pergunta parece semelhante a Este, que tem algumas respostas adicionais.
Desculpe, não tenho conhecimento de nenhuma referência direta à API que possa sugerir aqui e nunca trabalhei com Lucene.
No entanto, estou ciente de que o Google Desktop usa uma API de consulta para classificar e sugerir resultados de pesquisa relevantes.Mais informações sobre a API podem ser encontradas aqui.
Talvez outros possam intervir e orientá-lo.
O StackOverflow não será de código aberto em algum momento?Nesse caso, você sempre poderá descobrir como eles fizeram isso lá.
Atualizar:Parece que eles dizem que poder código aberto.Espero que sim.