Conteúdo


Criar um classificador de língua natural que identifica spam

Introdução ao Watson Natural Language Classifier on IBM Cloud

Comments

Com o advento da computação cognitiva e máquinas inteligentes, o aprendizado de máquina e seus algoritmos e técnicas relacionados são incrivelmente importantes. Podemos usar o aprendizado de máquina para ajudar-nos a entender e extrair insights úteis de uma abundância de dados em constante evolução. O aprendizado de máquina pode ser usado para reconhecer e identificar padrões complexos, gerar predições, aprender ao longo do tempo e, ultimamente, ajudar-nos a tomar melhores decisões, mais informados.

A IBM agora fornece um número de serviços cognitivos no IBM Cloud. Neste artigo, introduzo o serviço Watson Natural Language Classifier. O Watson Natural Language Classifier é um classificador de aprendizado de máquina que combina redes neurais convolucionais complexas com um modelo de idioma sofisticado para aprender e entender o idioma. Apesar de sua complexidade interna, Watson Natural Language Classifier é muito fácil de usar.

Neste artigo, criaremos um app classificador de spam criando uma nova instância do Watson Natural Language Classifier, treinando-a para distinguir entre spam e não spam, e testando sua precisão.

O que você precisará?

Para criar seu próprio classificador de spam que usa o Watson Natural Language Classifier and IBM Cloud, será necessário as contas ou os recursos a seguir:

Execute o aplicativoObtenha o código

Treinando o serviço Watson Natural Language Classifier

Para usar o serviço Watson Natural Language Classifier para classificar spam, precisamos treiná-lo. Para treiná-lo, o Watson Natural Language Classifier usa um conjunto conhecido de observações rotuladas para treinar um modelo que é capaz de gerar predições razoáveis. Este tipo de algoritmo é conhecido como um algoritmo de aprendizado supervisionado.

Uma observação rotulada é nada mais que um vetor de recurso e um rótulo para o mesmo. No caso do Watson Natural Language Classifier, cada observação consiste em algum texto (em vez de um vetor de recurso) e um rótulo de classe, conforme mostrado em Lista 1:

Lista 1. Observação rotulada no Watson Natural Language Classifier
Label       Text
spam        Join xyz.com NOW!!!! And WIN $1,000,000!!!!!!
ham          Hi Mom. I hope dinner went well with Auntie Jane. Love you.

Agora, vamos começar.

Etapa 1. Criar um serviço Watson Natural Language Classifier

Nossa primeira etapa é criar uma instância do Watson Natural Language Classifier, que se tornará nosso serviço Watson Natural Language Classifier.

  1. Efetue login em sua conta IBM Cloud (ou registre-se para obter uma avaliação gratuita).
  2. Vá para o Catálogo do IBM Cloud, refina a procura por Watson, e selecione Watson Natural Language Classifier:
  3. À direita, em Incluir serviço, certifique-se de que Deixar desvinculado esteja especificado para o App, especifique um nome para o serviço (por exemplo, spam_classifier) e clique em CRIAR.
  4. Navegue de volta para o painel do IBM Cloud, role para baixo e, em serviços e clique na nova instância de serviço:
  5. Selecione Credenciais de serviço para ver a URL de serviço e as credenciais do Watson Natural Language Classifier:

    Tome nota destas credenciais; você as usará posteriormente neste tutorial.

Etapa 2. Configurar o ambiente de desenvolvimento

A seguir, você precisará reunir alguns arquivos do repositório do projeto WatsonNLCSpam :

  1. Clone o repositório Git do WatsonNLCSpam.
    1. No terminal, insira o seguinte comando:

      git clone https://hub.jazz.net/git/dimascio/WatsonNLCSpam

    2. Quando solicitado, insira o ID IBM e a senha.
  2. Revise os conteúdos do repositório:
    • README.md descreve o projeto
    • dados contém o conjunto de dados de treinamento (SpamHam-Train.csv) e testam o conjunto de dados (SpamHam-Test.json) para o classificador de spam.
    • spam.py é o script usado para executar um teste de precisão básico.
    • web contém o código-fonte para o aplicativo da web de amostra.

Sobre os dados de treinamento

Os dados de treinamento para o classificador de spam estão contidos no arquivo SpamHam-Train.csv. Eles contêm 90 por cento do conjunto de dados originais. Os outros 10 por cento são separados para o conjunto de testes. Os conteúdos do SpamHam-Train.csv são formatados como CSVs e armazenados em uma estrutura compatível com o Watson Natural Language Classifier. Cada linha contém text,label.

Revise os seguintes dados de amostra que são executados de SpamHam-Train.csv:

"=Bring home some Wendy =D",ham
"100 dating service cal;l 09064012103 box334sk38ch",spam
"Whatsup there. Dont u want to sleep",ham
"""Are you comingdown later?""",ham
"Alright i have a new goal now",ham

Este classificador é bastante simples. Duas características o tornam simples:

  1. Ele é um classificador binário, em que possui duas classes: spam e em ham.
  2. Cada observação é associada a uma única classe: "Alright i have a new goal now",ham

Watson Natural Language Classifier realmente suporta classificação e observações multiclasses, mas não estou me aproveitando deste recurso neste tutorial.

Sobre os metadados de treinamento

Os metadados de treinamento são dados que descrevem os dados de treinamento. Os metadados de treinamento indicam o idioma de destino (neste caso, inglês en) e o nome do classificador (neste caso, Spam Ham). Os metadados de treinamento devem ser formatados como JSON. Aqui está um exemplo:

{
  "language":"en",
  "name":"Spam Ham"

Sobre os dados de teste

Depois que um classificador for treinado, será importante testar sua precisão. SpamHam-Test.json é o arquivo que contém os dados de teste. Como os dados de treinamento, os dados de teste são um conjunto de observações rotuladas, para a instância, "I love you, mom!",ham. As observações de teste não estão incluídas no conjunto de dados de treinamento e, portanto, podem ser usadas para avaliar a precisão do nosso classificador.

É considerado má prática reutilizar observações de treinamento para testar a precisão de um classificador. Como as observações de treinamento são "vistas" durante o treinamento, reutilizá-las durante o teste, provavelmente, levará a um resultado de precisão excessivamente otimista.

Watson Natural Language Classifier é um exemplo perfeito. Se todas as observações de teste são vistas durante o treinamento, em seguida, a precisão do Watson Natural Language Classifier será igual a 100 por cento. No entanto, ultimamente estamos interessados na precisão do classificador que forneceu observações invisíveis. Este teste nos fornecerá uma ideia melhor de como o classificador generalizará a novas observações.

Os dados de teste fornecidos, SpamHam-Test.json, são estruturados diferentemente dos dados de treinamento fornecidos, SpamHam-Train.csv. Cada linha nos dados de teste é um objeto JSON que representa uma única observação rotulada. Os dados de teste podem ser facilmente formatados como CSV. Mais tarde neste tutorial, demonstrarei como usar estes dados de teste no formato JSON com spam.py para calcular a precisão do classificador de spam.

Etapa 3. Criar e treinar o classificador de spam

Nesta primeira etapa, clonamos uma instância do Watson Natural Language Classifier para criar nosso serviço Watson Natural Language Classifier. Agora, usaremos esse serviço para criar um classificador de spam.

Criar o classificador é fácil. Tudo que precisamos fazer é POST para o endpoint /v1/classifiers usando o seguinte comando curl :

curl -X POST -u username:password -F training_data=@SpamHam-Train.csv -F training_metadata="{\"language\":\"en\",\"name\":\"My Classifier\"}" "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers"

Esse comando curl requer um <username>, <password>e <url>. Estas variáveis precisam ser substituídas pelos valores apropriados de credenciais de serviço que são descritos na Etapa 1.

Após chamar este comando, tome nota de seu classifier_id. Usaremos em breve. Treinar o classificador pode levar até 30 minutos, portanto, agora é um bom momento para um intervalo.

Etapa 4. Verifique o progresso do treinamento

Para descobrir se o classificador está pronto para uso, podemos chamar o endpoint do Watson Natural Language Classifier usando o seguinte pedido GET :

curl -u <username>:<password> <url>/v1/classifiers/<classifier-id>

Quando o classificador indicar que está pronto para uso, vá para a próxima etapa.

Etapa 5. Experimente o classificador de spam

Agora que treinamos o serviço de classificador de spam, podemos testá-lo. Como um exercício rápido, faça o seguinte pedido POST para o endpoint /classify :

curl -X POST -u <username>:<password> -H "Content-Type:application/json" -d "{\"text\":\"I love you mom\"}" <uri>/v1/classifiers/<classifier_id>/classify

Como alternativa, é possível fazer um pedido GET :

curl -G -u <user>:<password> <uri>/v1/classifiers/6C76AF-nlc-43/classify" --data-urlencode "text=what is your phone number?"

A diretiva classifier_id O ID é retornado pela chamada /v1/classifiers que fizemos anteriormente. Se você tiver esquecido esse ID, será possível recuperá-lo chamando o seguinte endpoint com sua opção de comando curl. Este endpoint retornará uma lista que contém todos os classificadores:

curl -u <username>:<password> <uri>/v1/classifiers"

Etapa 6. Testar a precisão do classificador

Finalmente, para testar nosso classificador e calcular sua precisão, usaremos o script Python fornecido, spam.py. O script chama o mesmo pedido POST descrito na etapa anterior, em seguida, conta o número de predições classificadas que correspondem corretamente ao rótulo. A precisão é calculada com base no número de predições corretas e dividindo pelo número total de observações de teste.

Vamos executar o script.

  • Abra spam.py e atualize YOUR_CLASSIFIER_ID, YOUR_CLASSIFIER_USERNAMEe YOUR_CLASSIFIER_PASSWORD para consultar suas credenciais de serviço Watson Natural Language Classifier, localizadas na Etapa 1.
  • No diretório de projeto, execute o seguinte comando:

    python spam.py

Quando o script for concluído, será apresentada a seguinte saída:

accuracy: 0.993079584775

Conclusão

O Watson Natural Language Classifier traz um classificador sofisticado de aprendizado de máquina para o IBM Cloud. Sua interface REST acessível e intuitiva torna tudo muito mais fácil para os desenvolvedores de todos os contextos, no treino, no teste e na rápida aplicação de novos classificadores aos problemas do mundo real.

Neste artigo você aprendeu como usar o Watson Natural Language Classifier para desenvolver, treinar e testar um classificador de spam. Mal podemos esperar para ver o resultado!


Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cognitive computing
ArticleID=1021078
ArticleTitle=Criar um classificador de língua natural que identifica spam
publish-date=02012016