Alura > Cursos de Data Science > Cursos de Engenharia de Dados > Conteúdos de Engenharia de Dados > Primeiras aulas do curso Spark: processamento de linguagem natural

Spark: processamento de linguagem natural

Introdução - Apresentação

Olá! Bem-vindos e bem-vindas a mais um curso de Spark! Meu nome é Ana Duarte e vou te acompanhar nessa jornada.

Ana Duarte é uma mulher branca de olhos e cabelos castanhos e curtos. Veste uma camiseta verde musgo e está sentada em uma cadeira preta. Ao fundo, uma parede lisa na cor verde claro.

Neste curso aprenderemos algumas formas de processar dados textuais, aplicando técnicas de NLP (Natural Language Processing, ou "Processamento de Linguagem Natural" em português) juntamente com a construção de modelo de Machine Learning ("aprendizagem automática" em português), para classificar comentários.

Juntos, construiremos um projeto contendo depoimentos sobre filmes, coletados do IMDb e classificados em positivos e negativos. Aplicaremos as técnicas de NPL a fim de tornar estes comentários mais compreensíveis para o computador.

Iniciaremos limpando e removendo os caracteres que não farão parte da análise. Em seguida, faremos a separação dos depoimentos em várias partes, aplicando o conceito de tokenização, e removeremos palavras que não acrescentam à nossa análise.

A tokenização é o processo de dividir uma frase em partes ou tokens individuais, na maioria das vezes em palavras únicas.

Feito isso, aplicaremos o conceito de bag of words, ou "sacola de palavras", que contabiliza os termos do nosso vocabulário. Por fim, ajustaremos uma árvore de decisão que criará um conjunto de regras que nos ajudarão a classificar os comentários.

Todo o processo será feito com o PySpark, então contaremos com o processamento de memória do Spark utilizando a linguagem Python.

Topa o desafio? Então nos vemos nos próximos vídeos!

Introdução - Contexto do NLP

Para iniciarmos nosso projeto, primeiro precisamos passar por alguns conceitos, um deles é o NLP - Natural Language Processing ou "Processamento de Linguagem Natural" em português.

O processamento de linguagem natural é a metodologia que ajuda o computado a compreender a linguagem natural utilizada por nós, seres humanos. Esta metodologia tem se desenvolvido bastante ao longo dos anos graças ao avanço computacional, aos estudos feitos por pessoas que constroem o algoritmo (geralmente tecnólogos) e às pessoas que entendem as regras da linguagem (os letrados).

Entre as principais aplicações do NLP, podemos citar a Siri e a Alexa - assistentes virtuais desenvolvidas pela Apple e pela Amazon respectivamente - que representam a interação mais comum entre humano e máquina por meio da linguagem falada.

O Google tradutor também sofre influência desta metodologia, uma vez que, cada dia mais, consegue identificar expressões e jargões típicos de cada linguagem. Outro exemplo sãos os bots de call center, que utilizam NPL para analisar as requisições dos usuários.

De forma resumida, o NLP identifica, através dos algoritmos, as regras de linguagem natural presentes nos textos. Com isso, é possível transformar os dados não estrturados a fim de que se tornem compreensíveis ao computador, permitindo, assim, associar cada texto a um significado específico.

Como as aplicações do NLP estão sempre gerando dados, inserem-se num contexto de Big Data, o que requer aplicações com recursos que consigam processá-los. Pensando nisso, nós utilizaremos a ferramenta Spark, que nos permite analisar um grande número de dados, e a linguagem Pyhton como meio de acessá-los.

Big Data é área do conhecimento que estuda como tratar, analisar e obter informações a partir de conjuntos de dados grandes demais para serem analisados por sistemas tradicionais.

Agora que compreendemos o NLP e como o Spark está inserido neste contexto, vamos entender como esses dados chegam até nós no próximo vídeo. Até lá!

Introdução - Explorando os dados

Agora que entendemos melhor o objetivo da nossa análise, veremos como esses dados estão organizados.

Para que possamos dar início a esta etapa, é necessário que tenhamos instalado o PySpark e iniciado uma sessão. Caso você não tenha realizado este procedimento, veja como fazê-lo na seção "Preparando o ambiente".

Com o PySpark instalado e a sessão iniciada, é hora de baixar os dados do Kaggle . Para isso, basta acessar o link disponibilizado no notebook e clicar no botão de download, que deve aparecer no canto superior direito da aba.

Em seguida, realizaremos o carregamento desses dados, que devem ser feitos de duas maneiras: no próprio ambiente do Colab e no Google Drive.

Para carregar no Colab, clique em "Arquivos" - último ícone da barra lateral esquerda - em seguida, em "Fazer download para o armazenamento da sessão" e selecione o arquivo. Perceba que, ao carregá-lo, surgirá o seguinte aviso "Observação: os arquivos enviados serão excluídos quando o ambieente de execução for reiniciado" seguido das opções "Mais informações" e "OK"; clique em "OK".

Este aviso também deve surgir ao abrir a sessão e instalar o PySpark. Isso significa que sempre que o ambiente ficar inativo será necessário reconectá-lo, instalar o PySpark, abrir a sessão e carregar o arquivo novamente, o que nos leva à segunda maneira: o Google Drive. O procedimento desta segunda forma consta neste vídeo, basta assistir e seguir o passo a passo.

Hora de ler os dados! Para isso, basta chamar nossa base dados e pedir que o Spark leia através do comando spark.read.csv(" "). Este comando deve receber como argumento o caminho da pasta onde os dados foram armazenados. Para pegar este caminho, navegue até a barra lateral e vá em "Mais opções" - 3 pontinhos - no canto da pasta onde constam os arquivos, em seguida, clique em "Copiar caminho". Você pode optar, também, pelo caminho da pasta no Google Drive. Aqui, usaremos esta última opção.

dados = spark.read.csv("/content/drive/MyDrive/Alura/imdb-reviews-pt-br.csv")

Outro parâmetro que deve ser passado ao comando spark.read.csv(" ") é o escape. Nossos depoimentos possuem muitas aspas e para não dar nenhum problema usaremos este método informando que estes depoimentos estão entre aspas duplas '\"'. O próximo argumento é o inferSchema, que deve auxiliar a deduzir os tipos de colunas, portanto deve ser igual a =True.

dados = spark.read.csv("/content/drive/MyDrive/Alura/imdb-reviews-pt-br.csv", '\"', inferSchema=True)

Por fim, passamos o argumento responsável por informar que nossos dados possuem um cabeçalho, então header = True. O código deve ficar assim:

dados = spark.read.csv("/content/drive/MyDrive/Alura/imdb-reviews-pt-br.csv", '\"', inferSchema=True, header = True)

Rode esta célula e vamos para a etapa de exploração desses dados.

Nesta etapa, iremos entender os tamanhos, campos e tipos dos dados, além de observar o conteúdo de cada campo e a proporção das categorias. Para o tamanho dos dados, podemos pensar em quantidade de linhas e colunas, portanto chamaremos nossa base dados e o método .count(). Ao rodar este código, note que deve retornar cerca de 49 mil linhas.

dados.count()

Agora rodamos a função len(dados.columns) que nos retornará a contagem de colunas, que são 4. Para que possamos visualizar melhor esses dados, usaremos o comando format, da própria linguagem Python, para printar o número de linhas e de colunas

print(f'Nº de Linhas:{dados.count()}', f'Nº de colunas:{len(dados.columns)}')

Ao rodar este código, teremos uma leitura melhor da estrutura dos nossos dados.

Hora de vermos quais são os tipos de dados que estão nessas colunas. Para isso, usaremos o comando dados.printSchema() que deve nos retornar as informações de que as colunas se chamam, respectivamente, "id", "text_en", "text_pt" e "sentiment". Além disso, a primeira coluna possui dados do tipo integer (número inteiro) e as 3 restantes, do tipo string (texto).

Em seguida, veremos o conteúdo desses dados através do comando dados.limit(99).show() informando que queremos limitar essa visualização às primeiras 99 linhas da base. Ao rodar este código, perceba que nos retorna uma espécie de tabela, onde constam as 4 colunas: "id", com os index de cada item, "text_en", com os comentários em inglês, "text_pt", com a tradução dos comentários para o português, e "sentiment", com a categoria do depoimento - negativo ou positivo.

Nesta etapa, aprenderemos a filtrar um comentário. Para isso, chamamos nossa base dados e a função filter(), que deve receber o argumento dados.id == 190, informando que queremos o comentário pertencente ao index de número 190. Em seguida, utilizamos o método select(), onde passamos o argumento "text_pt" responsável por informar que queremos somente o comentário desta coluna, ou seja, a versão do depoimento traduzido para o português. Por fim, solicitamos a visualização com o método show() passando o argumento truncate = False a fim de evitar que a renderização do comentário venha truncada.

dados.filter(dados.id == 190).select("text_pt").show(truncate = False)

Ao rodar este código, perceba que ele se encaixa na categoria de comentários negativos. Então, antes do código anterior, adicionaremtos o comando print("Negativo") para fins meramente informativos.

print("Negativo")
dados.filter(dados.id == 190).select("text_pt").show(truncate = False)

Filtraremos, agora, um comentário positivo. Sabendo que os depoimentos finais da base se encaixam nesta categoria, escolheremos um index que certamente corresponde a ela, como 12427. Sendo assim, utilizamos o código anterior, alterando somente "Negativo" para "Positivo" e 190 para 12427:

print("Positivo")
dados.filter(dados.id == 12427).select("text_pt").show(truncate = False)

Rode esta célula e observe a renderização.

Nesta etapa faremos a contagem dos comentários negativos e positivos. Para isso, chamos nossa base dados e o método .groupBy() que deve receber a coluna 'sentiment' - onde os comentários são categorizados - como argumento. Em seguida, chamamos o método .count() e finalizamos com o comando de visualização .show().

dados.groupBy('sentiment').count().show()

Rode este código e perceba que ele irá nos retornar uma tabela informando que há cerca de 24 mil comentários em cada categoria.

Pronto! Com essa sequência de comandos, conseguimos entender melhor a estrutura desses dados. Nos próximos passos, veremos como processá-los. Te vejo lá!

Sobre o curso Spark: processamento de linguagem natural

O curso Spark: processamento de linguagem natural possui 118 minutos de vídeos, em um total de 48 atividades. Gostou? Conheça nossos outros cursos de Engenharia de Dados 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 Engenharia de Dados acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas