Este documento descreve como a Liferay incorporou aprendizagem de máquina em busca textual usando o plugin Elasticsearch Learning to Rank. Primeiro, eles coletaram julgamentos de busca e definiraram features para treinar modelos. Em seguida, treinaram e carregaram modelos no Elasticsearch para repriorizar resultados com a query SLTR e a Rescore API.
3. Busca textual em um portal
3
Na Liferay, fornecemos uma plataforma de experiência digitais, baseada
em nosso portal open source. Usamos Elasticsearch para busca textual.
Busca Textual
4. Os desafios de escolher o melhor resultado
4
Elasticsearch é maravilhoso para buscar e ordenar conteúdos a partir de
buscas desestruturadas. As ferramentas de re-ranking e ordenamento são
especialmente boas. Mas há uma certa demanda que não pode ser
atendida pelas ferramentas básicas do Elasticsearch...
Priorização de Resultados
5. 5
The A/B Test
Executives found that crisp, clear prose was
outperforming hyped-up buzzwords (like free
and exclusive) on certain parts of the
homepage. But in previous years, the opposite
had been true. Why? They talked and talked
about it, but no one could figure it out.
Wired (2012)
6. 6
The A/B Test
Soon they realized that it simply didn't
matter. A/B would guide them at ground level,
so there was no need to worry about why
users behaved in one way or another.
Wired (2012)
7. Bons resultados não exigem justificativas
7
É possível criar queries poderosíssimas com Elasticsearch, mas nossos
clientes consistentemente querem aplicar inteligência artificial na busca.
Ao se utilizar aprendizagem de máquina, é possível treinar modelos para
dar a resposta que você quer, a partir dos dados que você tem, sem criar
algoritmos complexos.
Basicamente, queriam Learning to Rank.
Inteligência artificial
8. Nossa abordagem
8
Nós procuramos por ferramentas que já fizessem isso, e encontramos o
plugin Elasticsearch Learning to Rank. Como funciona?
Inteligência artificial
10. Definimos uma lista de julgamentos
10
No Elasticsearch LTR, a abordagem é baseada em uma lista de
julgamentos. Para fazer uma dessas listas, fazemos uma busca e damos
uma prioridade maior aos resultados que mais nos interessam.
Note que é preciso dedicirmos que tipo de resultados nos interessa mais,
em uma amostragem.
Este é um trabalho para o analista de dados.
Elasticsearch Learning to Rank
11.
12. Definindo as features do nosso modelo
12
Ao mesmo tempo, precisamos coletar as variáveis que servirão de entrada
aos nossos modelos. Isto é, precisamos definir as features do nosso
modelo. O plugin nos permite utilizar qualquer query como uma feature
do nosso modelo.
Este é outro trabalho para o analista de dados.
Elasticsearch Learning to Rank
13.
14. Coletando dados
14
Depois disto, coletamos os dados do nosso índice no Elasticsearch. No
nosso plugin, isto resulta em outra lista de julgamentos, agora com
colunas a mais. Cada nova coluna é o score de uma das queries que
usamos como feature.
Elasticsearch Learning to Rank
15.
16. Treinando modelos
16
Com nossa nova lista de julgamentos, podemos treinar modelos.
Elasticsearch Learning to Rank utiliza RankLib para isto, o que nos permite
adotar diversos algoritmos diferentes (random forests, AdaRank, regressão
linear…)
Elasticsearch Learning to Rank
17. Subindo os modelos ao Elasticsearch
17
Uma vez que tenhamos o modelo treinado, subimos ele ao Elasticsearch.
Agora podemos utilizar o modelo em uma query do tip SLTR.
Elasticsearch Learning to Rank
19. A query SLTR
19
Um cluster Elasticsearch que tenha o plugin LTR instalado suporta um
novo tipo de query, a SLTR. Esta query recebe keywords o nome de um
modelo que tenha sido carregado no Elasticsearch.
Repriorizando com Learning to Rank
20.
21. Utilizando a Rescore API
21
O problema é que uma query com Learning to Rank não é tão eficiente de
rodar. Ao invés de usá-la para encontrar resultados, podemos utilizá-la
para reordenar resultados.
Com a Rescore API podemos, por exemplo, buscar os mil melhores
resultados, e utilizar SLTR para mover os mais relevantes para o topo.
Repriorizando com Learning to Rank