C# 8 & ML.NET:
Classificação de comentários
GABRIEL SCHADE CARDOSO
MVP,SOFTWAREENGINEEREESCRITOR
GABRIEL.SCHADE@OUTLOOK.COM
Gabriel Schade Cardoso
 Mestre em Computação Aplicada (IA)
 Microsoft MVP – Dev. Technologies
 Equipe de Inovação - ResourceIT
 Revisor
 Escritor
Novidades do C# 8
Novidades do C# 8
 Código seguro evitando null;
 Updates no pattern matching;
 Array slicing;
 IAsyncEnumerable;
 Default interface members;
Evitando o null
Evitando o null
 Não há como extinguir o null e a famosa
ArgumentNullException;
 Agora poderemos gerar Warnings, não erros.
Evitando o null
Evitando o null
Evitando o null
 É possível utilizar esta feature em uma única classe
através de diretivas de compilação;
 Ou no projeto inteiro através de uma configuração.
Evitando o null
Evitando o null
Evitando o null
 Se você ainda quiser inserir o valor null em algum
objeto (não faça isso) e não quiser receber o warning.
 Você pode utilizar nullables, mesmo em tipos de
referência:
Switch Expressions
(pattern matching)
Switch Expressions
 A sintaxe ainda é um pouco verbosa, mas permite
múltiplos retornos com um JUMP.
Switch Expressions
Array Slicing
Array Slicing
 O array slicing é uma forma de obter pedaços do
array, semelhante ao que o Python faz.
Array Slicing
Array Slicing
 A sintaxe de inicio..fim cria o que chamamos de range;
 O range é uma struct que determina a distância entre
elementos de um array.
Array Slicing
 Agora também é possível utilizar índices negativos:
 Você também pode utilizá-los em ranges:
Array Slicing
IAsyncEnumerable
IAsyncEnumerable
 O IEnumerable permite coleções lazy load, agora com
o IAsyncEnumerable é possível ter esse comportamento
de forma assíncrona.
IAsyncEnumerable
 Para consumir utilizamos o await foreach.
IAsyncEnumerable
Resultado do async
foreach:
Default Interface
Members
Default Interface Members
 Agora as interfaces permitem uma implementação
padrão:
Default Interface Members
 Neste exemplo, não conseguiremos acessar o
método Enviar mensagem na classe Teste
 Para fazer isso, é necessário um cast para a interface.
Default Interface Members
 Também é possível criar métodos virtuais em uma
interface, ou seja, que possuam corpo na interface, mas
possam ser sobrescritos.
Default Interface Members
 Isso gera um problema com múltiplas implementações
do mesmo método:
Default Interface Members
Default Interface Members
ML .NET
Quem já ouviu falar de
Machine Learning?
E o que é Machine
Learning?
Antes disso, o que é
IA?
O que é IA?
Marvin Minsky : I.A. é conceder aos computadores a
habilidade de resolver problemas complexos.
Elaine Rich: I.A. é o estudo de como fazer os
computadores realizarem tarefas que no momento as
pessoas fazem melhor.
Patrick Winston: I.A. é o estudo de conceitos que
permitem aos computadores serem inteligentes.
O que é Machine Learning?
Machine learning é uma área da ciência da computação que
concede à computadores a habilidade de aprender sem
precisar serem explicitamente programados.
Quem usa isso?
O que todos eles tem em comum?
Todos os exemplos
1. Analisam dados;
2. Buscam padrões;
3. Tentam extrapolar os padrões encontrados para novos
casos.
Mas o que isso tem a
ver com aprender?
Aprendendo a ler
1. Analisamos as letras;
2. Buscamos padrões;
3. Construímos sentenças.
4. ... Mas cadê predição?
Aprendendo a ler
Depois que aprender a ler criamos a associação entre a
palavra escrita e a palavra falada, com isso, mesmo sem
nunca termos escutado a palavra, conseguimos predizer
com uma boa acuracidade a sua pronúncia.
As três perguntas
 Qual problema estamos tentando resolver?
 Tenho dados suficientes para responder isso?
 Consigo medir e avaliar o resultado?
Vamos encontrar um padrão
 Nome com “J”?
 Mais de 30 mil reais na conta
Temperatura Global X Piratas no mundo
Filmes com Nicolas Cage vs Afogamentos
Entendendo o
processo
As três etapas
Em geral podemos definir o processo de machine
learning:
Pré-processamento;
Treinamento;
Avaliação.
Processos em Machine Learning
Processos em Machine Learning
Processos em Machine Learning
Processos em Machine Learning
Processos em Machine Learning
Processos em Machine Learning
Processos em Machine Learning
Processos em Machine Learning
Classificando comentários
Respondendo as três perguntas
 Qual problema estamos tentando resolver?
 Identificar se um comentário é positivo ou negativo
 Tenho dados suficientes para responder isso?
 Vamos utilizar três bases de dados diferentes para treinar nosso
modelo
 Consigo medir e avaliar o resultado?
 Utilizaremos parte da base de dados para tirar métricas a
respeito do modelo gerado
Etapa 1: Pré-processamento
 No pré-processamento precisamos coletar nossos dados
 Serão utilizados dados de três diferentes bases de dados
públicas:
Etapa 1: Pré-processamento
 Os comentários já estavam formatados da mesma
maneira, então tudo que precisamos fazer é torna-los
acessíveis para a aplicação e unir as 3 bases em uma
única.
 Todos os comentários estão em arquivos CSV, onde cada
linha possui 2 cabeçalhos: Text e Value
Etapa 1: Pré-processamento
Etapa 1: Pré-processamento
 No caso do F#, basta inserirmos os arquivos de dataset
em uma pasta acessível ao programa e carrega-los:
Etapa 1: Pré-processamento
 Agora precisamos unir os três datasets em um único
local:
Etapa 1: Pré-processamento
 Por fim, precisamos separar os dados de treinamento e
avaliação. Para isso, vamos criar um contexto de Machine
Learning:
Etapa 1: Pré-processamento
Etapa 2: Treinamento
 Depois dos dados prontos, precisamos identificar um
algoritmo para atender nossa necessidade.
 Neste ponto é de fundamental importância o
conhecimento dos diferentes algoritmos para machine
learning.
Etapa 2: Treinamento
 A Microsoft lançou um guia para iniciantes que pode nos
ajudar nisso.
Etapa 2: Treinamento
 É importante notar que este mapa só mostra os
algoritmos já implementados pelo Azure Machine
Learning.
 Existem outros algoritmos que não estão presentes.
Etapa 2: Treinamento
 Um recurso importante aqui e específico ao tipo de
problema é como analisar um texto.
 Geralmente quando estamos tratando deste tipo de
dado, precisamos realizar um processo chamado
Vectorização ou Featurização.
Etapa 2: Treinamento
 Este processo consiste em criar um dicionário com todas
as palavras que aparecem em nossa base de dados;
 Depois disso, para cada comentário é gerado um array
de verdadeiros e falsos, representando se o texto contém
ou não, cada palavra do dicionário.
Etapa 2: Treinamento
 Para fins de exemplo, vamos supor que nosso dicionário
inteiro é composto por:
 hello, this, is, a, list, for, test
 Ao relizarmos a vectorização no comentário: This is a
test, teríamos o seguinte resultado:
Etapa 2: Treinamento
Etapa 2: Treinamento
 Este processo será utilizado para o algoritmo que
treinará nosso modelo.
 Através dele, é possível identificar quantas vezes uma
palavra aparece em cada comentário.
 Esse valor é utilizado para gerar o coeficiente positivo e
negativo de cada palavra.
Etapa 2: Treinamento
 Por exemplo, a palavra love, para definir sua pontuação
positiva utilizamos a seguinte equação:
Etapa 2: Treinamento
 Para a pontuação negativa, basta fazermos o cálculo:
1- pontuação positiva
 Calculando a pontuação de cada palavra, chegamos na
pontuação do comentário.
Etapa 2: Treinamento
 Felizmente esse processo já é implementado nas
bibliotecas:
Etapa 2: Treinamento
 Com isso já é possível criarmos nosso model:
Etapa 3: Avaliação
 Com isso já conseguimos testar nosso modelo:
Etapa 3: Avaliação
 Mas apenas um teste isolado, não nos dá muita
informação. Precisamos de mais do que isso.
 Vamos gerar as métricas de avaliação!
Etapa 3: Avaliação
Etapa 3: Avaliação
 Vamos entender as principais métricas:
Etapa 3: Avaliação
 Os campos à esquerda são a matriz de confusão:
Etapa 3: Avaliação
 Acurácia é a relação entre todos os acertos e o total:
 Precisão é a relação entre todas as previsões positivas
corretas e incorretas:
 De todos os comentários classificados como positivos, qual
percentual realmente é positivo?
Etapa 3: Avaliação
 Recall é a relação entre todas as previsões positivas do
modelo e todas as ocorrências positivas reais:
 De todos os comentários que realmente são positivos, qual
percentual é identificado corretamente pelo modelo?
Etapa 3: Avaliação
 F1 Score é a média harmônica entre precisão e recall:
 Geralmente em bases assimétricas o F1 Score é um valor
mais importante que a acurácia
Etapa 3: Avaliação
Etapa 3: Avaliação
 Nós podemos gerar gráficos dessas métricas!
Etapa 3: Avaliação
Etapa 3: Avaliação
 Podemos testar mais algoritmos e tentar chegar em uma
solução que atenda seu negócio.
Como usar?
 Ok, tudo pronto, como usamos isso no mundo real?
 No caso do ML.NET, qualquer código .NET pode acessá-
lo normalmente, ou você pode exportar o modelo para o
formato ONNX e utilizar em qualquer plataforma.
Como usar?
 Ok, tudo pronto, como usamos isso no mundo real?
 No caso do ML.NET, qualquer código .NET pode acessá-
lo normalmente, ou você pode exportar o modelo para o
formato ONNX e utilizar em qualquer plataforma.
Como usar?
 Para salvar, basta utilizar o método Save:
Consumindo em ASP.NET
 Assim como o método Save, também é possível utilizar o
método Load, para carregar um modelo previamente
gravado;
Consumindo em ASP.NET
Consumindo em ASP.NET
Consumindo em ASP.NET
https://notebooks.azure.com/
https://studio.azureml.net
Outras ferramentas em:
https://gabrielschade.github.io
/@gabrielschade
/gabrielschade
/gabrielschade
Me encontre em

C# 8 e ML.NET