idéias sobre algoritmos de aprendizado de máquina para classificar produtos

7

Eu tenho uma lista de produtos, incluindo variáveis ​​como o nome do produto (como aparece no recibo) e o comerciante onde o produto foi comprado.

Eu tenho muitas delas classificadas manualmente em um grupo fixo de categorias (por exemplo, bebidas alcoólicas, legumes, carne, etc.).

Os dados são, como sempre, barulhentos. Nesse caso, particularmente barulhento porque se trata de recibos digitalizados e OCR em verificações não tão boas, geralmente é muito barulhento.

Eu quero brincar com algoritmos para classificar novos dados, usando as duas variáveis ​​acima.

Existem várias fontes principais de variação aqui:

  • O OCR, que significa que um produto (por exemplo, frango) pode ser encontrado com muitas grafias diferentes, mas relativamente similares (por exemplo, chiken, hicken, chicen, ...).
  • O mesmo produto pode ter nomes diferentes, de acordo com o comerciante que vendeu o produto. Nesse caso, os nomes podem ser semelhantes ou completamente diferentes entre os comerciantes, mas bastante semelhantes em todos os comerciantes.
  • O mesmo produto pode ter nomes muito diferentes no mesmo comerciante (por exemplo, produtos de marca cujo nome no recibo é o nome da marca, vs. nomes genéricos; refrigerante vs. coca cola).

Eu tentei algum classificador (meio ingênuo), usando, por exemplo, a distância entre as strings (que aborda principalmente a primeira fonte principal de variação mencionada acima), mas não estou muito feliz com os resultados.

Então, eu queria entrar em contato aqui para pedir idéias sobre como lidar com esse problema. Eu acho que muitas pessoas "resolveram" ou pelo menos trabalharam muito mais nesse tipo de problema do que eu (algumas horas), então eu realmente aprecio qualquer orientação aqui.

A propósito, eu uso principalmente R, então as soluções baseadas em R seriam muito apreciadas.

elikesprogramming
fonte
Isso pode ser amplamente impreciso, mas a frase que me veio à cabeça enquanto lia isso é "modelos de tópicos estruturados". Se esse método é de alguma forma relevante, existe um pacote R para ele chamado stm.
lmo

Respostas:

2

Resolvendo seus problemas um por um:

1) OCR: Esse é provavelmente o mais fácil dos seus problemas, pois há muitos algoritmos que apresentam bom desempenho nesta tarefa. Como referência, no conjunto de dados de dígitos manuscritos mais conhecido, MNIST , vários algoritmos alcançaram uma precisão acima de 99,5% (o estado da arte é Redes Neurais Convolucionais). Você também pode encontrar muitas soluções prontas para o seu problema; ajuda muito se seus dados estiverem em inglês, pois as ferramentas são mais avançadas. Se suas digitalizações forem barulhentas, tente primeiro excluí- las.

2) Você precisa fazer um pré-processamento para esse problema. Primeiro, sugiro, se possível, criar um conjunto de palavras , ou seja, uma lista de todas as palavras únicas em seu "corpus". Verifique se todas essas palavras estão corretas e faça uma comparação da distância das cordas (por exemplo, distância de hamming) para corrigir erros de digitação de 1-2 letras. Outra coisa que eu faria seria calcular as ocorrências de cada termo na sua bolsa e remover as menos frequentes (por exemplo, termos que ocorrem menos de N vezes no seu corpus são provavelmente erros de digitação ou remover M% menos frequente dos seus termos). Isso deve reduzir significativamente o ruído no seu conjunto de dados.

3) Para resolver esse problema, é necessário executar algum tipo de rotulagem semântica. Se você conhece as ontologias, sua estrutura hierárquica pode ajudar bastante aqui. Você pode criar regras como "coca-cola" é um "refrigerante", que é um tipo de bebida, etc.

Não tenho experiência em R, mas tenho certeza que você pode encontrar ferramentas para executar todas as opções acima com bastante facilidade.

Djib2011
fonte
0

Parece que você deve definir a similaridade entre as entidades.

Você tem muitas fontes de similaridade. Você mencionou a distância nos nomes (editar distância) e a associação em grupos. Observe que você pode estender a semelhança por grupos para muitos grupos e muitos tipos de semelhança. Os grupos podem pertencer à mesma receita, vendidos pelo mesmo comerciante, pertencer à mesma categoria etc. Os tipos de similaridade podem ser planos pertencentes ao mesmo grupo, peso com relação inversa ao tamanho do grupo, etc. Em todos os usos pode usar transitividade. Por exemplo, você pode encontrar produtos similares com nomes diferentes usando o fato de que eles serão usados ​​com os mesmos produtos (por exemplo, o tempero X` e o tempero X`` serão usados ​​com frango).

Muito em breve você terá muitas relações de semelhança e se perguntará como combiná-las. Aí vem ajudar a rotular você já fez. Tome-os como pares positivos de produtos associados. Gere conjuntos de produtos distintos (não nos pares positivos) como pares negativos. Crie um conjunto de dados no qual a positividade seja o conceito e as semelhanças sejam os pares. Agora você pode usar o algoritmo de aprendizado supervisionado para obter um modelo que combine as semelhanças em uma única previsão. Você pode usar este modelo para prever a associação entre o novo par. Como bônus, você poderá avaliar o desempenho do modelo no conjunto de dados (por exemplo, precisão, precisão, ...) e ter mais certeza nele.

DaL
fonte