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
machine-learning
text-mining
Salvador Dalí
fonte
fonte
Respostas:
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) é
1
se essa palavra estiver presente e0
se 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.
fonte