Visão Geral para Curiosos: Processamento Natural de Linguagem
Sumário
- O mínimo sobre PNL
- Python
- NLP com Python
- spacy
- tokenização
- lemmatização
- tagging
- parsing
- NER
- Doc Object
- Quais métodos de Feature Engineering Usar?
- Limpeza
- BOW
- TF-IDF
- Treinamento
Resumo: Este artigo trata brevemente sobre a evolução histórica e motivações para o processamento naturalmente de Linguagem, há também a intenção de mostrar brevemente a suas aplicações usando Python e a ferramente spacy.
O mínimo que você precisa saber sobre NLP com Python
Linguagem Natural refere-se somente a linguagens criadas e desenvolvidas pelo ser humano, não sendo válido linguagens sintéticas, como a programação. Na internet dados textuais estão, em geral, na sua forma desestruturada. Surge assim um dilema, como analisar este conteúdo? Como afirma (Sarkar, 2019) embora haja um grande desenvolvimento nos algoritmos de Machine Learning, são usados majoritariamente para dados estruturados e numéricos, como analisar este tipo de conteúdo possui benefícios, como: avaliação de satisfação do cliente, analisar se uma determinada sentença é ofensiva ou não, tradução. É preciso um campo de estudo que unifique a computação, Inteligência Artificial e a Linguagem natural.
O PNL tem suas raízes em 1940, durante a segunda guerra mundial, momento em que a humanidade reconhece a necessidade de tarefas como a tradução e o quanto treinar máquinas para isto seria útil. Desde seu início, foi identificado por parte dos especialistas que a tarefa de ensinar máquinas a linguagem natural seria complexo, em especial, a sintaxe associada a ela, por exemplo, as duas sentenças abaixo possuem sentidos diferentes, embora as palavras estejam apenas em uma ordem diferente. Como as máquinas poderiam distinguir isto?
i) O gato come o rato.
ii) O rato come o gato.
Para solucionar esse dilema, desenvolve-se então um subcampo que engloba conceitos da computação, linguagem natural e inteligência artificial, nomeado PLN (Processamento Natural de Linguagem).
Python
Anteriormente vimos a diferença entre Linguagem Natural e Processamento de Linguagem Natural, agora vamos definir quais ferramentas utilizaremos, a começar pela Linguagem de Programação. Python é uma linguagem de interpretação e scripting criada por Guido Van Rossum, no final da década de 80, porém usando os princípios da orientação a objetos e os blocos básicos da linguagem (construtores) ela pode ser usada como qualquer outra linguagem orientada a objetos. eg. Java, C/C ++. Como afirma (Ramalho, 2015) uma das suas maiores qualidades do Python é ser uma linguagem consistente, quer dizer, depois de usar algumas vezes, você começa a supor, corretamente, o padrão de uso. Foi desenvolvida para ser uma linguagem de alto nível e para múltiplos propósitos. Essa característica nos permitirá concentrar nossos esforços nos nossos dados e nas etapas referentes a adequação dos mesmos aos modelos de machine learning, uma vez que o Python possui bibliotecas consolidadas para a análise de textos.
NLP com Python
Agora que definimos a linguagem como qualidades que possam contribuir com a análise de textos, precisamos entender como Python pode ser usado para Processamento Natural de linguagem e de quais ferramentas dispomos. Por ser uma linguagem com múltiplos propósitos Python possui bibliotecas para centenas de tarefas entre as quais a análise de texto o que a torna uma excelente ferramentas para prototipagem. Algumas dessas bibliotecas aparecem abaixo:
- NLTK
- Gensim
- spaCy
Por simplicidade, vamos selecionar uma delas e discutir seus elementos. Esteja ciente de que os métodos podem mudar mas em sua essência elas desempenham o mesmo corpo de tarefas.
spaCy
O objetivo da biblioteca spaCy assim como as outras é ajustar o conteúdo de modo que computadores possam compreender. Por essa razão, por exemplo, elas oferecem ferramentas que performam as etapas da Fig.1
Tokenização
Tokenização é a operação mais básica no processamento natural de linguagem, é geralmente uma das primeiras etapas e todas as outras mantém dependência de que o texto seja transformado em token. Consiste em fragmentar o texto em partes que podem ser tratadas de forma discreta, de modo o texto é formatado de modo que se torne compreensível as máquinas.
Lemmatization
Processo que simplifica a estrutura da palavra, levando-o a sua forma “pura”, ou a forma como se encontra no dicionário.
Tagging
Outro recurso importante na compreensão de textos e que é disponibilizado pelo spaCy é o Tagging. Tagging permite conhecer a classificação gramatical de cada elemento da frase.
Parsing
Parsing possibilita a extração de verbos relevantes à sua aplicação. Digamos por exemplo que o seu objetivo seja a construção de uma ferramenta que permita a classificação de bilhetes quanto ao local desejado e quanto ao fato de ser ida ou volta. O cliente começa fazendo um cadastro no site, essas informações são então repassadas ao nosso modelo e o texto passa por todas as etapas mencionadas até Parsing. Em Parsing, na sentença: “Eu tinha um voo para Flórida, só de ida”. O verbo que está em sua forma no passado seria identificado como o verbo “ter”. Esse tipo de informação pode fornecer pistas do que é crucial para que a necessidade do cliente seja atendida.
NER
NER é a sigla para Named Entity Recognition. A sua aplicação depende do contexto no qual está inserido os seus dados, mas no caso mencionado anteriormente você poderia usar essa estratégia também incluída em ferramentas como Spacy para identificar Países, Pessoas e inclusive organizações. Novamente, esse corpo de ferramentas possibilita chegar às partes primordiais do nosso texto e extrair o que realmente importa.
Objeto
Ao final de todas essas etapas e suas transformações, você terá um Doc Objet com o qual poderá interagir e desse modo construir suas aplicações considerando as sutilezas do que pretendo fazer com o texto que acabou de ser processado. Este formato lhe trará flexibilidade e a opção de realizar outras tarefas avançadas além é claro de ser um formato que pode ser reconhecido por outros modelos de Machine Learning.
Quais métodos de Feature Engineering aplicar em texto?
Assim como com dados tabulares, precisamos aplicar transformações nas features, este processo pode aprimorar a performance dos modelos ou mesmo assegurar que o conteúdo será compreendido pelo modelo, para texto geralmente aplicamos os seguintes transformações:
- limpeza do texto
- bag of words
- tf-idf
- stop words
Vamos nos aprofundar em cada uma destas etapas e em como aplicá-las usando Python.
3.1 Limpeza
Esta função irá remover caracteres inconvenientes ou emoticons presentes no texto, comum em mensagens extraídas de redes sociais. Haverá também uma padronização em relação ao tamanho do texto.
3.2 Bag Of Words
Quando lidamos com dados numéricos precisamos transformar a informação em um vetor numérico, com palavras que não são diferentes. Nesse caso, aplicamos uma estratégia chamada BOW, consiste em:
- criamos um token para a palavra
- um vetor para cada ‘documento’ e conta a ocorrência das palavras
doci: O sol é belo.
docii: O sol é doce.
dociii: O sol é sol.
O: 3
Sol: 4
é: 3
belo: 1
doce: 1
[1, 1, 1, 0, 0]
[1, 1, 1, 0, 1]
[2, 1, 1, 0, 0]
3.3 tf-idf
É possível que algumas palavras possuam alta frequência e ainda assim seja irrelevante para a análise, para quantificar essa importância usamos uma estratégia chamada tf-idf, term frequency inverse document frequency.
O tf-idf controla o peso das frequências e pode ser computado como o produto da frequência do termo pelo inverso da frequência do documento.
Treinamento
Após todas as etapas acima, podemos construir um pipeline usando o sklearn para unificar todos os processos que vão do tratamento a transformação do conteúdo textual para selecionarmos um modelos capaz de fazer as previsões.
Leitura Complementar
https://cs.stanford.edu/people/eroberts/courses/soco/projects/2004-05/nlp/overview_history.html
http://arxiv.org/pdf/2010.04543v1
https://hg.python.org/peps/file/tip/pep-0020.txt
Python Success Stories | Python.org
https://www.python.org/about/apps/
https://wiki.python.org/moin/Applications
https://paperswithcode.com/paper/toxic-language-detection-in-social-media-for
https://www.mendeley.com/guides/apa-citation-guide/
https://davidbpython.com/advanced_python/slides/handout-71-3.html
https://docs.python.org/3/reference/datamodel.html
https://hackernoon.com/what-you-need-to-know-about-pythons-data-model
https://www.youtube.com/watch?v=z11P9sojHuM
https://medium.com/turing-talks/uma-an%C3%A1lise-de-dom-casmurro-com-nltk-343d72dd47a7
https://github.com/dipanjanS/text-analytics-with-python/tree/master/New-Second-Edition
https://docs.python.org/3/library/index.html
https://www.nltk.org/book/ch05.html
https://colab.research.google.com/drive/1JsJ81nPtjH1W56xjJN7FVqGporMcWvkA?usp=sharing
https://spacy.io/universe/category/books
https://mlarchive.com/natural-language-processing/tokenization-the-cornerstone-for-nlp-tasks/
https://en.wikipedia.org/wiki/Lemmatization
Nota do autor
- Seja paciente sobre possíveis erros gramaticais, a julgar pela recorrência deles você sabe o quanto eu usei o ChatGPT ou qualquer outra ferramenta para escrever o mesmo.
- Este trabalho levou tempo para ser pesquisado e filtrado, escrever é uma tarefa nobre e árdua. Pretendo separar momento para no futuro entregar artigos com referências e em pt-br.
- Se tiver interesse no uso da ferramenta spacy há o artigo meu no MEDIUM com uma breve introdução a ferramenta.
- Em caso de dúvidas, deixe nos comentários abaixo (farei o possível para responder a tempo).
Você também pode me encontrar aqui, ou me seguir na DIO para conteúdo dessa natureza: