Classificação Multirrótulo

Implementação

Ronie Uliana

O problema:

Cada VAGA de emprego recebe diversos candidatos. Cada um deles possui um CARGO.

 

É possível prever quais são os CARGOS que a VAGA receberá usando apenas seu texto?

Estratégia

Ensembles of Pruned Sets

(Read et al. 2008)

Como é a estratégia?

Usar apenas os conjuntos mais comuns de rótulos.

Transformar conjunto em um único rótulo.

Exemplo:

["estagio", "vendedor"] = "estagio|vendedor"

 

Treinar um classificador para cada novo rótulo:

rótulo, ¬rótulo

Por que essa estratégia?

Tentei primeiro o RAkEL (subconjuntos aleatórios de rótulos), mas haviam muitos rótulos =/

Quando procurei os conjuntos comuns, o número de conjuntos distintos de rótulos foi pequeno. O que condiz com o domínio do negócio.

(~5.000 => ~300)

Outra alternativa...

Usar a estratégia mais simples de COPY (clonar os exemplos uma vez para cada rótulo) e treinar um Ensemble.

Racional: cada pessoa avalia se a vaga é boa para ela sem conhecimento da decisão das outras pessoas.

?

Passo (0)

Limpeza do Conjunto

  1. Remover registros sem texto ou rótulo
  2. Remover registros com "pouca gente" (50)
  3. Remover rótulos com "pouca gente" (0.05)

Passos (1)

Preparação dos Rótulos

  1. Separar conjuntos comuns de rótulos
  2. Separar registros com esses conjuntos
  3. Encontrar subconjuntos comuns de rótulos
  4. Separar registros com esses subconjuntos
  5. Duplicar o registro para cada subconjunto
  6. Treinar um classificador para cada novo "rótulo"

Passos (2)

Limpeza dos Registros

  1. Limpar HTML e "coisas estranhas"
  2. Tokenização
  3. Stemming
  4. TF-IDF (freq min: 5)
  5. Usar uma frequência máxima?

Passos (2½)

Separar amostras!

É muito lento experimentar com todos os dados =/

  1. Separar 1% da amostra
  2. Separar 10% da amostra

Truque (no linux):

shuf arquivo.csv -n 999 > amostra.csv

Passos (3)

Treino dos classificadores individuais

  1. Naïve Bayes (não bom)
  2. SVM com SGD (resultado melhor)
  3. BOOM! Classes desbalanceadas >_<
    1. Auto-balanceamento >_<
    2. UnderSampling + Ensemble T_T
    3. ?Redução de características?
      • Apenas ​Título da Vaga?
    4. ?Mudança de estratégia (copy)?
    5. ?Detecção de anomalia?
    6. ?Entrar em pânico? ~~\o/~~

UnderSampling 1

UnderSampling 2

UnderSampling 3

Balanced SGD

Passos (4)

Montagem dos multirrótulos

  1. Ensemble dos rótulos
  2. Votação do Ensemble (faltam detalhes)
  3. Cross-Validation
  4. Tunning

Ferramentas

  • Python (aprendi essa semana \o/)
  • NLTK
  • Scikit Learn
  • Muitos arquivos texto
  • 2.2 Gb de dados brutos
  • 261Mb de dados limpos :)

FIM

Críticas? Dúvidas?

Ronie Uliana

Classificação Multirrótulo - Implementação

By Ronie Uliana

Classificação Multirrótulo - Implementação

  • 2,116