Vários rótulos no algoritmo de aprendizado supervisionado

10

Eu tenho um corpus de texto com os tópicos correspondentes. Por exemplo, "A rapper Tupac was shot in LA"e foi identificado como ["celebrity", "murder"]. Então, basicamente, cada vetor de recursos pode ter muitos rótulos (não a mesma quantidade. O primeiro vetor de recurso pode ter 3 rótulos, segundo 1, terceiro 5).

Se eu tivesse apenas um rótulo correspondente a cada texto, tentaria um classificador Naive Bayes , mas não sei realmente como proceder se puder ter muitos rótulos.

Existe alguma maneira de transformar o Naive Bayes em um problema de classificação de vários rótulos (se houver uma abordagem melhor - por favor me avise)?

PS algumas coisas sobre os dados que tenho.

  • aproximadamente 10.000 elementos no conjunto de dados
  • o texto tem aproximadamente 2-3 frases
  • máximo de 7 rótulos por texto
Salvador Dalí
fonte
@fordprefect Naive Bayes Multinomial usa uma distribuição multinomial para as probabilidades de algum recurso de uma classe: . O OP deseja que um classificador gerencie várias saídas, conforme descrito pelo TheGrimmScientist. p(fEu|c)
Robert Smith

Respostas:

6

Para começar, Naive Bayes provavelmente não é apropriado aqui. Ele assume independência entre as entradas (daí o "ingênuo") e as palavras em uma frase são muito dependentes.

Mas, supondo que você realmente queira executar o NB como um algoritmo para iniciar sua experimentação, há duas opções que eu consideraria:

Ungraceful: Muitos classificadores NB

Esta seria uma abordagem alternativa. Faça um corupus de todas as palavras observadas como seu vetor de entradas. Faça um corpus com todas as tags que são observadas como seu vetor de saídas. Um classificador NB com várias saídas é o equivalente a ter vários classificadores NB com uma saída cada (faça o que for mais fácil de implementar em qualquer estrutura de software que você esteja usando). Trate cada elemento como uma amostra de treinamento em que uma determinada entrada (uma palavra) é 1se essa palavra estiver presente e 0se essa palavra não estiver. Use o mesmo esquema binário para a saída.

Esse bruto força a aplicação do NB Classifier aos seus dados e permite que você encontre significado, ainda tentando extrair o enorme conjunto de classificadores que lhe restam.

Mais gracioso: processe seus dados

Esta é a abordagem que eu recomendaria se você deseja executar com um classificador NB de várias classes.

Seu objetivo aqui é descobrir como mapear cada conjunto de tags para uma única classe. Tenho certeza de que existe algum tipo de esquema de cluster ou análise de rede (talvez ["celebridade"] vinculada a ["assassinato"] possa se tornar um segmento ["deboche"]) que mapeie sensivelmente suas tags para um único cluster. Se você tratar tags como nós e duas tags fornecidas juntas como links, convém analisar os algoritmos de detecção da comunidade (que é onde eu começaria). Mas, se você quiser apenas algo funcionando, algum tipo de invasão nas tags que converte uma lista de tags em apenas a tag mais comumente vista no seu conjunto de dados seria suficiente.

Este método carrega antecipadamente o trabalho de limpeza de seus dados e facilitaria a compreensão da saída do NB Classifier.

TheGrimmScientist
fonte
obrigado por sua contribuição, se você tiver uma idéia do que seria melhor que o NB, informe-me.
Salvador Dali
11
a seção "soluções existentes" deste deck de slides contém tudo o que eu gostaria de responder, além de mais (supondo que você não precise especificamente de um classificador e queira apenas uma maneira de usar tags). Espero que seja útil para você.
TheGrimmScientist
@TheGrimmScientist Não seria razoável usar a primeira abordagem? Se você possui um vetor de recursos f1, f2, f3 e, digamos, 3 rótulos para esse vetor, podemos particioná-lo em 3 vetores (todos contendo os mesmos recursos f1, f2, f3) com rótulos diferentes como saídas. Então é possível usar o Naive Bayes como de costume. Não tenho certeza se é isso que você tinha em mente.
Robert Smith