Primeiras aulas do curso Linguagem Natural parte 1: Introdução a NLP com análise de sentimento

Linguagem Natural parte 1: Introdução a NLP com análise de sentimento

Dados Textuais: classificação e exploração. - Introdução

Sejam bem vindos ao curso de Introdução ao Processamento de Linguagem Natural — você já deve ter se perguntado como o Google faz, por exemplo, quando você digita na barra de busca deles, para interpretar o que você está querendo dizer, e trazer as respostas mais relevantes, assim como o Google Home ou a Alexa fazem para entender o que você está falando. Tudo isso está intrinsecamente relacionado com Processamento de Linguagem Natural.

Iniciaremos o curso criando um analisador de sentimentos. Imaginemos que queremos assistir um filme, e o busquemos críticas sobre ele na internet. Você lê, interpreta, e classifica a resenha como boa ou ruim. É exatamente isso que ensinaremos o computador a fazer. Para isso, importaremos uma base de dados já classificada, depois criaremos um modelo de Machine Learning capaz de interpretar a linguagem humana e classificar o texto.

Utilizaremos algumas visualizações como as word clouds para obtermos insights sobre como podemos melhorar, que pré-processamentos podemos fazer em nossos textos para torná-los mais interpretáveis o possível, para que o computador entenda melhor o que é um sentimento ruim e um sentimento positivo.

Também iremos criar um pareto que nos auxiliará na análise desses dados. Depois, aprenderemos o que é tokenização, e a utilizar o nltk, que é uma das principais bibliotecas do mundo do Processamento de Linguagem Natural.

Faremos tudo isso neste curso. Espero vocês! Meu nome é Thiago e serei o seu instrutor.

Dados Textuais: classificação e exploração. - Machine Learning para classificar textos

Conforme vimos na introdução, o que iremos criar em nosso curso? Um analisador de sentimentos, ou seja, um modelo de Machine Learning capaz de analisar um determinado texto e classificá-lo de acordo com o sentimento, se a pessoa gostou ou não do texto. Para isso utilizaremos uma base de dados do IMDb (Internet Movie Database), uma plataforma que reúne dados de filmes, programas, comerciais, música e até de jogos.

O único problema é que ele é todo em inglês, e queremos criar algo em português, para facilitar e ficar mais próximo de todo mundo. Para isso utilizaremos uma base de dados disponível no Kaggle, que digitamos no Google e escolhemos a primeira opção. Trata-se de uma plataforma em que buscamos por "imdb pt".

Dentre os resultados, optaremos por IMDB PT-BR, tradução automática de uma das bases do IMDb realizada por um membro da comunidade. Tal base consiste em aproximadamente 50 mil resenhas de filmes já classificadas como positivas ou negativas, mas em inglês. O que ele fez foi traduzir, mesmo que automaticamente, para o português, disponível para uso.

Basta clicarmos no botão de download no topo da página, sendo necessário nos cadastrarmos para isto. Salvaremos a base de dados em alguma pasta local, e então poderemos começar a trabalhar com eles. Neste curso, utilizaremos o Jupyter Notebook, você pode utilizar o Google Colab, ou os próprios Kernels do Kaggle.

Para a leitura da base de dados usaremos o pandas, então digitaremos import pandas as pd. O texto da base de dados é como se fosse uma resenha, a opinião da pessoa em relação a um determinado filme, então chamaremos este dado de resenha = pd.read_csv("dados/imdb-reviews-pt-br.csv"), que é onde se encontram os dados.

Vamos dar uma olhada em como estão estes dados? Rodaremos resenha.head(), e obteremos uma tabela contendo id, o texto em inglês, o mesmo em português, e o sentimento correspondente. Ou seja, se no texto a opinião da pessoa é negativa ou positiva. Legal, vamos digitar resenha para vermos ela integralmente.

A tabela é similar, com as quatro colunas já mencionadas, mas no começo temos os textos cujos sentimentos são negativos, e lá embaixo os de sentimento positivo. Temos aproximadamente 50 mil linhas, isto é, resenhas. Isso é um número suficiente para conseguirmos treinar o modelo para a classificação do sentimento.

Nos cursos de Machine Learning da Alura, você já viu que precisamos de uma parte para treinar o modelo, e outra para testarmos o mesmo. Então, iremos separar os nossos dados em treino e teste; ao buscarmos por "train test" no Google, chegamos ao resultado com SKLearn Model Selection. Utilizaremos esta biblioteca, o método train_test_split, para segregar os nossos dados.

Isso porque queremos realizar uma primeira classificação, para termos um baseline e vermos como os dados se comportam. Rodaremos from sklearn.model_selection import train_test_split, o retorno será uma lista com os dados segregados. Queremos os dados de treino, teste, a classe_treino e classe_teste. Usaremos o train_test_split, para o qual passaremos a coluna que queremos segregar, no caso, text_pt, para classificarmos os textos em português.

Além disso, também passaremos a coluna cuja proporção deve ser seguida, que neste caso é sentiment, a coluna que gerará as classes de treino, ou seja, são as labels. Por fim, passaremos também random_state = 42, que pode ser qualquer número. Rodaremos, e com isso dividimos nossos dados em treino e teste, e para testarmos podemos digitá-los individualmente, para que sejam exibidos.

Feito isso, importaremos o SKLearn Linear Model Logistic Regression para realizarmos o treinamento e depois a classificação. E então precisaremos treinar, e para tal criaremos a variável regressao_logistica, que recebe LogisticRegression. Depois, chamaremos .fit para treinar com os dados de treino e as labels de treino, classe_treino.

Em seguida, como queremos testar e saber um valor de acerto, a acurácia, para o qual existe um parâmetro pronto para uso, o score. Passaremos para ele os dados de teste e as labels de teste, e ele nos retornará a acurácia desses dados, e isto se chamará acuracia. Também pediremos para que ela seja impressa na tela.

Vamos ver qual será o resultado?

Algo deu errado. O que se diz é que não foi possível converter string para float. Nossa, que interessante. Isso porque os nossos textos não estão da maneira como os modelos de Machine Learning conseguem interpretar. E é nesse ponto que o NLP entra, o PLN — Processamento de Linguagem Natural é responsável pela realização desta interpretação, transformando o texto em algo legível para máquinas.

De alguma maneira, é realizar uma tradução entre ser humano e máquina. Em nosso curso, nos focaremos em realizar e aprender algumas destas formas, e também em como melhorá-las, deixando-as mais limpas para o computador. Vamos realizar esta tradução, transformar nossos dados de texto em formas legíveis aos modelos de PLN, de Machine Learning?

Dados Textuais: classificação e exploração. - Explorando dados textuais

Antes de prosseguirmos, vamos dar uma olhada no que fizemos? Buscamos uma base de dados com opiniões sobre filmes, e essa base de dados já vem rotulada para conseguir treinar o nosso modelo de Machine Learning supervisionado, depois repartimos nossos dados entre treino e teste, e tentamos aplicar o modelo de regressão logística, para treinarmos e gerarmos o modelo preditivo.

O problema é que o nosso modelo não interpreta dados textuais, então, de alguma forma, precisaremos traduzir os nossos textos em algo que a máquina consegue ler. Antes de entrarmos neste assunto de tradução dos dados textuais em uma linguagem plausível para os nossos modelos de Machine Learning, quero salientar alguns pontos importantes no Processamento de Linguagem Natural.

O primeiro ponto é que precisamos conhecer um pouco mais sobre os nossos textos, a nossa base de dados, como ela se comporta, se são textos longos, curtos, se temos dicas que podem existir no texto, para os classificarmos como sendo positivos ou negativos, isso tudo pode facilitar na criação do modelo. Vamos ver algum exemplo?

Imaginemos uma situação em que temos uma frase como "filme ok", isso é bom ou ruim? É difícil dizer, não? Mas e se depois do texto tivermos uma carinha triste, ":("? Fica mais simples, e isso nos ajuda a definir esse texto como algo negativo. Mas a vida não é assim, geralmente os dados textuais são longos, que requerem uma análise maior e precisam de um olhar mais cuidadoso. Assim, conseguiremos ter insights futuramente, sobre como melhorarmos.

Ao longo do curso, perceberemos que isso é essencial. Então, algo interessante de se fazer é conhecer um pouco dos textos. Vamos printar um uma resenha classificada como negativa. Você lembra quais são? São as primeiras, no topo da nossa tabela. Pediremos para que seja impressa a de posição 189, por exemplo, e daremos uma olhada neste texto.

É importante lermos, para vermos mais ou menos como é a escrita, entender um pouco se ela é formal ou informal, se possui muitos números, ou não. Tudo isso facilitará sua vida a longo prazo. Neste caso, quando pegamos uma resenha de classificação negativa, vemos de cara "Este é sem dúvida o pior filme que eu já vi". Para nós, fica fácil assim, basta lermos a primeira linha. Mas o computador não consegue ter essa análise semântica tão facilmente.

Conhecer os dados nos ajuda a salientar as palavras mais importantes para o nosso texto, para a nossa semântica, ou seja, as palavras que farão a diferença no momento da classificação dos textos. Vamos verificar um exemplo positivo? Não há nenhuma carinha feliz ou triste para nos auxiliar, mas vemos em caixa alta "BRILHANTE!!!". Mais uma vez, para um computador isso não torna a classificação mais clara, acaba sendo um desafio conseguir entender a semântica por trás do texto, o que ele está querendo dizer.

Conforme dito, conhecer um pouco dos textos é importante, e irá nos ajudar a melhorar a modelagem, ou seja, salientar as palavras mais importantes, aquilo que é fundamental. Ao longo do curso faremos isso. Outra coisa interessante de se fazer é verificar se os dados estão relativamente proporcionais, isso é, se a mesma quantidade de dados negativos que temos é próxima da de positivos. Pois se forem números desproporcionais, precisaremos de outra tratativa, que é a classificação de dados desbalanceados.

Se os dados forem equilibrados, podemos seguir normalmente. Assim, conhecer a distribuição de classificação também é importante; veremos como fazê-lo usando o Pandas, bem como uma função já conhecida para quem vem fazendo os cursos de Machine Learning, que é o value_counts, da coluna sentiment de resenha.

Com isso, conseguimos saber que há 24765 resenhas negativas e 24694 positivas, e este é um indício de que podemos seguir com o nosso modelo de classificação. Desta vez, vamos printar as cinco primeiras linhas da tabela. Como vimos, as resenhas negativas ficam no topo, como "neg", e as positivas no fim, como "pos". Porém, geralmente não é assim que encontramos estes dados. As negativas costumam ser lidas como "0", e as positivas, como "1".

Então, só para termos algo mais padronizado, conforme será encontrado na vida real, vamos fazer esta substituição, isto é, criar mais uma coluna no DataFrame, e quando for "neg" será "0", e quando for "pos", será "1". Para fazermos isso, usaremos o Pandas Replace. Criaremos a variável classificacao, a que atribuiremos os dados do DataFrame resenha da coluna sentiment. Vamos ver como ficou a variável classificacao?

Funcionou, e a ordem segue sendo a mesma de antes. Criaremos a coluna com esta variável, e veremos como fica o nosso DataFrame com head. Se utilizarmos resenha.tail(), continuamos com a coluna classificacao, e os dados que estão como "pos" possuem "1", enquanto que aqueles como "neg" estão com "0", como gostaríamos.

Agora já entendemos como é importante conhecer um pouco mais dos textos, lê-los para termos um pouco mais de noção em relação à sua estrutura, verificamos que as cargas estão balanceadas, isto é, os diferentes dados possuem quantidades próximas, e já criamos uma coluna classificacao para torná-los mais padronizados, conforme será encontrado em artigos científicos, e tudo o mais.

O próximo passo será entrar nesta questão de tradução do texto para a linguagem de máquina. Vamos fazer isso, então? Até daqui a pouco.

Sobre o curso Linguagem Natural parte 1: Introdução a NLP com análise de sentimento

O curso Linguagem Natural parte 1: Introdução a NLP com análise de sentimento possui 144 minutos de vídeos, em um total de 40 atividades. Gostou? Conheça nossos outros cursos de Machine Learning em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Machine Learning acessando integralmente esse e outros cursos, comece hoje!

  • 1184 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1184 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1184 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1184 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana