Como o aprendizado de máquina é incorporado ao design do mecanismo de pesquisa?


15

Atualmente, estou construindo um pequeno mecanismo de pesquisa interno baseado no Apache Lucene. Seu objetivo é simples - com base em algumas palavras-chave, ele sugerirá alguns artigos escritos internamente em nossa empresa. Estou usando uma pontuação TF-IDF bastante padrão como métrica básica e construí meu próprio mecanismo de pontuação sobre ela. Tudo isso parece estar funcionando bem, exceto em alguns casos em que o ranking parece confuso.

Então, o que pretendo fazer é adicionar um pequeno link Relevante / Não Relevante à página de resultados da pesquisa, para que os usuários possam clicar em um deles, dependendo da percepção de se esse resultado deveria ter sido incluído.

Minha ideia

  1. Trate esses Relevantes / Não Relevantes como rótulos e crie dados de treinamento.
  2. Use esses dados para treinar um classificador (como SVM)
  3. Incorpore esse modelo ao mecanismo de pesquisa, ou seja, todos os novos resultados passarão pelo classificador e receberão um rótulo para saber se é relevante ou não.

Essa abordagem parece intuitiva para mim, mas não tenho certeza se funcionará na prática. Eu tenho duas perguntas específicas:

  1. Quais recursos devo extrair?
  2. Existe uma maneira melhor de integrar o componente de aprendizado de máquina ao mecanismo de pesquisa? Meu objetivo final é "aprender" a função de classificação com base na lógica de negócios e no feedback do usuário.

4
Eu fiz algo assim uma vez e os usuários odiaram, então eu desliguei. O problema foi o comportamento do usuário. Os usuários se adaptaram aos pontos fracos nos resultados da pesquisa alterando seus termos e continuariam reutilizando esses termos. O sistema respondeu ajustando a classificação dos itens e esses termos favoritos começaram a produzir resultados diferentes. Isso afastou os usuários. Aprender não significa que é mais inteligente;)
Reactgular

Aqui é uma implementação usando ElasticSearch e AngularJS - também contém as explicações que você precisa - machinelearningblogs.com/2016/12/12/...
Vivek Kalyanarangan

Respostas:


15

(1) Quais recursos devo extrair?

Primeiro, perceba que você não está classificando documentos. Você está classificando pares (documento, consulta) e, portanto, deve extrair recursos que expressem quão bem eles correspondem.

A abordagem padrão para aprender a classificar é executar a consulta em várias configurações de mecanismos de pesquisa (por exemplo, tf-idf, BM-25 etc.) e, em seguida, treinar um modelo nas pontuações de similaridade, mas para um pequeno SE específico de domínio, você poderia ter recursos como

  • Para cada termo, um booleano que indica se o termo ocorre na consulta e no documento. Ou talvez não seja um booleano, mas o peso tf-idf desses termos de consulta que realmente ocorrem no documento.
  • Várias métricas de sobreposição, como Jaccard ou Tanimoto.

(2) Existe uma maneira melhor de integrar o componente de aprendizado de máquina no mecanismo de pesquisa? Meu objetivo final é "aprender" a função de classificação com base na lógica de negócios e no feedback do usuário.

Essa é uma pergunta muito ampla e a resposta depende de quanto esforço você deseja colocar. A primeira melhoria que vem à mente é que você deve usar não os julgamentos de relevância binária do classificador, mas sua função de decisão com valor real, para que você possa realmente classificar em vez de apenas filtrar. Para um SVM, a função de decisão é a distância assinada para o hiperplano. Bons pacotes de aprendizado de máquina têm uma interface para obter o valor disso.

Além disso, procure aprender em pares e em lista para classificar; o que você está sugerindo é a chamada abordagem pontual. IIRC, em pares funciona muito melhor na prática. O motivo é que, na classificação aos pares, você precisa de muito menos cliques: em vez de fazer com que os usuários rotulem os documentos como relevantes / irrelevantes, você fornece apenas o botão "relevante". Em seguida, você aprende um classificador binário em triplos (documento1, documento2, consulta) que informa se o documento1 é mais relevante para a consulta do que o documento2 ou vice-versa. Quando um usuário rotula, digamos, o documento 4 na classificação como relevante, você fornece seis exemplos para aprender:

  • document4> document3
  • document4> document2
  • document4> document1
  • document1 <document4
  • document2 <document4
  • document3 <document4

para que você obtenha os negativos de graça.

(Essas são apenas sugestões, eu não tentei nada disso. Acabei de trabalhar em um grupo de pesquisa em que as pessoas investigaram aprender a classificar. Eu fiz uma apresentação do artigo de outra pessoa para um grupo de leitura uma vez, talvez o slides podem ser úteis.)


+1 Obrigado. Esta é a segunda vez que você me ajudou! Deixe-me levar algumas horas para digerir isso. :)
Legend

4
Essa é uma excelente resposta, gostaria apenas de sugerir um pequeno ajuste. Da perspectiva da experiência do usuário, é muito mais provável que os usuários obtenham resultados usando um botão "irrelevante" do que um botão "relevante". Quem fica por perto para marcar um resultado quando encontra o que está procurando? É muito mais provável que eles apertem um botão que parece uma "oportunidade de reclamar" quando não encontraram o que queriam, porque a melhoria do sistema naquele momento está alinhada com o objetivo atual.
Racheet 28/11

4
tl; dr Se você usar apenas uma entrada, torne-a "irrelevante", é mais provável que as pessoas cliquem nela quando estiverem frustradas.
Racheet #

Qual seria a abordagem "listwise"? Além disso, você quis dizer 3 ou 6 exemplos de graça? (O último 3 parece ser apenas uma repetição do primeiro-3)
max
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.