Processamento de Linguagem

O Processamento de Linguagem Natural (PLN) é um campo da inteligência artificial que se concentra em tornar as máquinas capazes de entender e interpretar a linguagem humana da forma como é falada e escrita. A ideia é que as máquinas possam ler, decifrar, entender e até mesmo fazer sentido do idioma humano.

A linguagem humana é complexa, repleta de nuances, ambiguidades, expressões idiomáticas, e variações culturais. O processamento de linguagem busca abordar essas complexidades através de diversas subáreas, incluindo a análises baseadas em regras, análises estatisticas e aplicação de inteligência artificial.

Aplicações de Processamento de Linguagem

Classificação de Textos

Na classificação de textos o objetivo é classificar um texto em uma ou mais categorias. Por exemplo, classificar um e-mail como spam ou não spam, classificar um texto como positivo ou negativo, classificar um texto como notícia ou artigo de opinião, entre outros. Por meio da classificação de textos podemos seguir com diversas outras atividades como a análise de dados, por exemplo, saber quantas opiniões sobre um produto são positivas ou negativas, filtrar conteúdos trazendo apenas textos de um determinado tema, entre inúmeras outras possibilidades.

graph LR
    A[/Texto/] --> |Classificador| Classe

Exemplos:

graph LR
    A[/Email: Você ganhou um prêmio em dinheiro!!/] --> |Classificador| C[Spam]
    B[/Email: Você conseguiu finalizar o relatório solicitado?/] --> |Classificador| D[Não Spam]

graph LR
    D[/Eu gostei do filme./] --> |Classificador| Positivo
    E[/Eu achei o filme ruim./] --> |Classificador| Negativo

Clusterização

A clusterização é uma técnica de agrupamento de dados que visa dividir um conjunto de dados em grupos, ou clusters, de forma que os dados dentro de um cluster sejam mais semelhantes entre si do que com os dados de outros clusters. No contexto do processamento de linguagem, a clusterização pode ser usada para agrupar textos semelhantes, como notícias sobre o mesmo tópico, ou para agrupar palavras ou frases semelhantes.

graph LR
    t1[/Texto1/] -->|Clusterizador| C1((Cluster1))
    t2[/Texto2/] -->|Clusterizador| C1
    t3[/Texto3/] -->|Clusterizador| C1
    t4[/Texto4/] -->|Clusterizador| C2((Cluster2))
    t5[/Texto5/] -->|Clusterizador| C2

Identificação de Entidades

A identificação de entidades é o processo de identificar e classificar entidades nomeadas em um texto, como nomes de pessoas, organizações, locais, datas, e outras informações relevantes. Isso é útil para extrair informações de documentos, identificar tópicos em textos. Com essas informações estruturadas é possível realizar análises mais profundas, como por exemplo, identificar quais são as pessoas mais mencionadas em um conjunto de notícias, ou quais são os locais mais citados em um conjunto de documentos, entre outros

graph LR
    A[/Texto/] --> B([Identificador de Entidades]) --> Entidade1
    B --> Entidade2

Exemplo:

graph LR
    A[/Luiz viajou para a Austrália./] --> B([Identificador de Entidades]) --> C[Entidade: Luiz - Pessoa]
    B --> D[Entidade: Austrália - Local]

Tradução

A tradução é uma das aplicações mais conhecidas do processamento de linguagem, e envolve a conversão de texto de um idioma para outro. A tradução automática é uma ferramenta valiosa para a comunicação global, permitindo que as pessoas compreendam e se comuniquem em diferentes idiomas.

graph LR
    A[/Texto em Português/] --> B([Tradutor]) --> C[Texto em Inglês]

Exemplo:

graph LR
    A[/Eu gosto de estudar./] --> B([Tradutor]) --> C[I like to study.]

Sumarização

A sumarização é o processo de resumir um texto longo em um texto mais curto, mantendo as informações mais importantes. Isso é útil para extrair os principais pontos de um texto, permitindo que as pessoas obtenham uma visão geral do conteúdo sem precisar ler o texto completo.

graph LR
    A[/Texto Longo/] --> B([Sumarizador]) --> C[Texto Resumido]

Exemplo:

graph TD
    A["O artigo discute os efeitos das mudanças climáticas na biodiversidade.
    Ele aborda a perda de habitat, a extinção de espécies 
    e os impactos nas comunidades locais."] --> B([Sumarizador]) --> C[O artigo discute os efeitos das mudanças climáticas na biodiversidade.]

Busca de Respostas

A busca de respostas é uma aplicação que envolve encontrar respostas para perguntas em um texto. Isso é útil para encontrar informações específicas em documentos, artigos, ou páginas da web, sem a necessidade de ler o texto completo.

graph LR
    A[Pergunta] --> B([Buscador de Respostas]) --> C[Resposta]

Exemplo:

graph LR
    A[Quem foi o primeiro presidente do Brasil?] --> B([Buscador de Respostas]) --> C[Deodoro da Fonseca]

Geração de Textos

A geração de textos é o processo de geração automática de texto. Essa geração pode ser condicionada a uma entrada inicial, por exemplo especificação de um tema ou não, neste caso gerando um texto aleatório. Isso é útil para criar conteúdo automatizado, como notícias, respostas de chatbots, ou até mesmo obras de ficção.

graph LR
    B([Gerador de Textos]) --> C[Texto Gerado]

Exemplo:

graph LR
    B([Gerador de Textos]) --> C[O Brasil é um país localizado na América do Sul.]

Desafios do Processamento de Linguagem

Apesar das aplicações de processamento de linguagem serem simples de compreender, algumas delas envolvem desafios significativos.

Podemos criar um sistema de classificação de sentimento de textos (positivo, negativo ou neutro) por abordagens simples como a contagem de palavras positivas e negativas. Vejamos os exemplos abaixo:

  • Eu gostei muito do filme.
  • Eu achei o filme ruim.

A primeira frase contém a palavra "gostei" que é uma palavra positiva, enquanto a segunda contém a palavra "ruim" que é uma palavra negativa. Por meio de uma abordagem trivial podemos dizer que a primeira frase é positiva e a segunda é negativa. No entanto vejamos as duas frases abaixo:

  • Eu não gostei do filme.
  • Eu achei o filme ruim, mas o ator principal foi ótimo.

A primeira frase contém a palavra "gostei" que é uma palavra positiva, porém precedida pela palavra "não" que inverte o seu sentido. A segunda frase contém a palavra "ruim" que é uma palavra negativa, porém seguida pela palavra "ótimo" que é uma palavra positiva. Nos dois exemplos verificamos que contar as palavras positivas e negativas pode não é suficiente para determinar o sentimento da frase.

A área de processamento de linguagem é repleta de problemas deste e de muitos outros tipos, sendo que estes desafios crescem a medida que o problema tratado se torna mais complexo. Por isso é necessário fazer o uso de técnicas mais robustas que possam lidar com toda essa complexidade. Entre estas técnicas estão o uso de aprendizado de máquina (machine learning) e sua subárea aprendizado profundo (deep learning).