You are on page 1of 50

Processamento de Linguagem Natural

Rafael H. Vareto

2021
Processamento de Linguagem Natural
Bootcamp Arquiteto(a) de Machine Learning
Rafael H. Vareto
© Copyright do Instituto de Gestão e Tecnologia da Informação.
Todos os direitos reservados.

Processamento de Linguagem Natural – Página 2 de 50


Sumário

Capítulo 1. Natural e Formal.................................................................................. 5

1.1. Linguagem Natural ........................................................................................... 5

1.1.1. Léxico................ ........................................................................................ 6

1.1.2. Gramática .................................................................................................. 7

1.2. Linguagem Formal ........................................................................................... 8

1.2.1. Gramática .................................................................................................. 9

1.3. Linguagem Computacional ............................................................................ 11

1.3.1. Sintaxe .................................................................................................... 12

1.3.2. Semântica ............................................................................................... 15

1.4. Linguagens .................................................................................................... 16

1.4.1. Python ..................................................................................................... 16

Capítulo 2. Aplicações .............................................................................................. 19

2.1. Processamento de Linguagem Natural .......................................................... 19

2.2. PLN e suas intercessões ............................................................................... 19

2.2.1. Linguística ............................................................................................... 19

2.2.2. Processamento de Sinais e Probabilidade .............................................. 20

2.2.3. Ciência da Computação .......................................................................... 20

2.3. PLN é um problema difícil .............................................................................. 21

2.3.1. Ambiguidade em nível de palavra, sentença e semântica ...................... 22

2.4. PLN e suas aplicações................................................................................... 23

2.4.1. Etiquetamento gramatical........................................................................ 24

2.4.2. Reconhecimento de entidades ................................................................ 24

2.4.3. Sumarização de textos ............................................................................ 25

Processamento de Linguagem Natural – Página 3 de 50


2.4.4. Análise de sentimentos ........................................................................... 25

2.4.5. Tradução automática .............................................................................. 26

2.4.6. Bots conversacionais .............................................................................. 26

2.4.7. Reconhecimento de fala ......................................................................... 27

2.4.8. Outras aplicações ................................................................................... 27

Capítulo 3. Pré-processamento ................................................................................ 29

3.1. Preparação Textual ........................................................................................ 29

3.2 Remoção de Ruídos ....................................................................................... 30

3.3. Tokenização................................................................................................... 32

3.3.1. Tokenização de Sentenças ..................................................................... 33

3.3.2. Tokenização de Palavras ........................................................................ 33

3.4. Normalização ................................................................................................. 34

3.4.1. Remoção de Palavras Irrelevantes ......................................................... 35

3.4.2. Stemização ............................................................................................. 37

3.4.3. Lematização ............................................................................................ 38

3.5. Representações ............................................................................................. 40

Referências............... ............................................................................................... 43

Processamento de Linguagem Natural – Página 4 de 50


Capítulo 1. Natural e Formal

1.1. Linguagem Natural

A Linguagem Natural, também chamada de língua natural, é o principal meio


de comunicação e o mais comum entre os seres humanos. O termo é adotado para
distinguir as línguas faladas por seres humanos e usadas como instrumento de
comunicação daquelas que são linguagens formalmente construídas. Os próprios
idiomas, como inglês, português, francês e espanhol, são exemplos claros de línguas
naturais. Linguagens baseadas em sinais ou gestos também são consideradas
naturais, pois possuem propriedades semelhantes, como gramática e sintaxe.

A linguagem é a maneira dos indivíduos se adequarem à sociedade, pois se


trata do instrumento para transmissão de ideias e para convívio social. Desde a
teorização da língua, feita por Noam Chomsky (1956, p. 113-124), vários estudos e
pesquisas científicas foram conduzidos sobre as mais diversas linguagens. Chomsky
afirmou que a língua é um conjunto de sentenças, cada uma finita em extensão e
construída a partir de um conjunto finito de elementos.

Vocabulário 1.1 — Língua1. (i) Conjunto dos elementos que constituem a linguagem
falada ou escrita peculiar a uma coletividade; idioma: a língua portuguesa. (ii) Sistema
de vocabulário e sintaxe usado em determinada época, por certos escritores, em uma
ou outra profissão etc.; linguagem: a língua do séc. XVI.

É perceptível que a linguagem natural, seja escrita ou falada, é repleta de


regras e ambiguidades, que variam de maneira intrínseca a cada idioma. Isso se
deve, também, pelo fato de a língua ser semelhante a seres vivos: a linguagem vai
mudando, se adaptando. A língua evoluiu naturalmente, como a fala nativa ou a
primeira língua de um indivíduo. Por isso, a análise das línguas nos permite aprender
muito sobre seu funcionamento (sintaxe, semântica, fonética, fonologia etc.), além de

1 https://www.dicio.com.br/lingua/

Processamento de Linguagem Natural – Página 5 de 50


fornecer pistas sobre como a mente e o cérebro de seres humanos processam a
linguagem.

Uma das formas de se estruturar uma linguagem, seja ela natural ou formal,
é através de sintagmas. Sintagmas nada mais são do que componentes da língua
que se encaixam na categoria sintática do termo principal de uma dada frase ou
sentença. Dentre eles, destacamos sintagmas nominais (SN) e sintagmas verbais
(SV), que possuem como principal constituinte substantivos (nomes) e verbos,
respectivamente. Léxicos e Gramáticas fazem grande uso dessas unidades
linguísticas.

1.1.1. Léxico

Línguas utilizam léxicos, que nada mais são do que dicionários contendo
os termos utilizados e suas respectivas características:

‒ Morfológicas: conjugação verbal, inflexão de substantivos etc.

‒ Sintáticas: categoria gramatical, transitividade, regência verbal etc.

‒ Semânticas: domínio do sentido das palavras e interpretação das


sentenças.

▪ Exemplo 1.1 Demonstrativo de duas entradas em um léxico, semelhante ao


representado no trabalho de Shieber et al. (1984).

‒ CANETA

• <categoria> = substantivo

• <gênero> = feminino

• <número> = singular

‒ PUBLICOU

• <cat> = verbo

Processamento de Linguagem Natural – Página 6 de 50


• <tempo> = pretérito-perfeito

• <número> = singular

• <pessoa> = 3

• <arg1> = SN

• <arg2> = SN

Na segunda entrada, temos o verbo PUBLICOU na terceira pessoa do


singular do pretérito. Os traços sintáticos <arg1> = SN e <arg2> = SN indicam que
esse verbo possui um sintagma nominal indicando que se trata de um verbo transitivo
direto (SHIEBER et al., 1984).

1.1.2. Gramática

Gramática é o conjunto de regras que indicam o uso mais correto de uma


língua. Essas regras verificam quais são as cadeias de palavras válidas. A verificação
é feita em termos de categorias sintáticas ao invés de uma lista exaustiva de frases
que, de acordo com Chomsky, seria inviável.

▪ Exemplo 1.2 Demonstrativo de uma regra que traz consigo restrições que
delimitam quais valores um sintagma nominal pode assumir para que a frase
permaneça válida [41].

‒ SN → Subst Adj

• <Subst gênero> = <Adj gênero>

• <Subst número> = <Adj número>

Esse formalismo demonstra que um sintagma nominal de uma frase ou


sentença pode ser composto de um substantivo seguido de um adjetivo (exemplo:
caneta vermelha). Os delimitadores <Subst gênero> = <Adj gênero> e <Subst
número> = <Adj número> indicam que tanto o gênero quanto o número do adjetivo
devem estar em concordância com o substantivo.

Processamento de Linguagem Natural – Página 7 de 50


1.2. Linguagem Formal

De acordo com Vieira et al. (2004), uma linguagem formal se difere da


linguagem natural nos seguintes aspectos:

▪ Possui uma sintaxe bem definida de tal maneira que, dada uma sentença,
sempre é possível determinar se ela pertence ou não à linguagem.

▪ Possui uma semântica clara e específica, não permitindo a existência de


sentenças com significados ambíguos.

Mais precisamente, uma linguagem formal consiste em um conjunto de


cadeias (sentenças) de comprimento finito. Embora a quantidade de cadeias em uma
linguagem formal possa ser infinita, elas são formadas pela concatenação de
elementos de um alfabeto finito e não-vazio. Linguagens formais se beneficiam de
algumas operações utilizadas em conjuntos, como união, intersecção, diferença,
complemento etc. Outras operações, como concatenação e fechamentos são
fundamentais na especificação e estudo dessa linguagem.

Vocabulário 1.2 — Linguagem2. (i) Capacidade natural da espécie humana para se


comunicar por uma língua. (ii) Sistema organizado através do qual é possível se
comunicar por meio de sons, gestos, signos convencionais. (iii) Sistema de símbolos
que permite a representação de uma informação; código: linguagem do teatro. (iv)
Linguagem formal. Linguagem simbólica que serve de axiomas e leis, bem como de
normas especiais, em oposição à linguagem natural. (v) Linguagem de programação.
Conjunto de regras que, criadas artificialmente, servem para dar instruções
padronizadas a um computador, permitindo que os programadores codifiquem suas
intenções mais facilmente.

Ramos et al. (2008) reitera que a linguagem formal abrange o estudo


matemático que possibilita o reconhecimento e a caracterização de linguagens. São

2 https://www.dicio.com.br/linguagem/

Processamento de Linguagem Natural – Página 8 de 50


úteis em todas as áreas que utilizam a matemática como ferramenta: engenharias,
física, química e, principalmente, na ciência da computação. Nesta última, a
linguagem formal possui importância máxima, pois permite a especificação de
linguagens de programação, tais como C, PASCAL, C++, PYTHON etc., além de estar
fortemente associada à disciplina de compiladores.

1.2.1. Gramática

Através de gramáticas, é possível conceber sistemas formais apoiados em


regras de substituição, por onde é possível produzir, recursiva e exaustivamente, o
conjunto de cadeias que formam uma determinada linguagem. Uma gramática
consiste em uma coleção de regras e da especificação de uma variável de partida.
Dessa maneira, qualquer derivação deve começar com a palavra construída apenas
pela variável de partida.

Como mostrado na Definição 1.1, a regra é elemento essencial de uma


gramática. Vieira et al. (2004) afirma que uma regra r é um par (u, v), tradicionalmente

escrito na forma u → v, onde u e v são palavras que podem conter símbolos de dois
alfabetos disjuntos. O primeiro componente é composto por símbolos não-terminais,
denominados variáveis, enquanto o segundo consiste em símbolos chamados
terminais.

Definição 1.1 — Gramática. Categoricamente, uma gramática G de uma


linguagem formal pode ser definida da seguinte forma:

G = (V, Σ, R, P)

▪ V é o vocabulário da gramática e corresponde a um conjunto finito e não-vazio


de símbolos.

▪ Σ é o conjunto dos símbolos terminais (alfabeto) da gramática, sendo finito e


não-vazio, tal que V ∩ Σ = Ø.

▪ R é um conjunto finito e não-vazio de produções ou regras de substituição da


gramática.

▪ P é denominada a variável de partida, tal que P ∈ V.

Processamento de Linguagem Natural – Página 9 de 50


Saiba que dependendo da preferência dos autores, as gramáticas podem ser
especificadas com notações distintas, diferentemente da adotada neste
volume, alterando a ordem dos componentes ou os caracteres que os
representam. Nesta obra, por exemplo, o símbolo ε é utilizado para representar
o vazio.

Toda derivação de G deve começar com a variável de partida P.


Adicionalmente, adota-se N = V −Σ como sendo o conjunto dos símbolos não-
terminais da gramática. O Exemplo 1.3 mostra como palavras terminais são
alcançadas por meio da aplicação das regras sobre a variável de partida, de tal forma
que se pode alcançar uma nova forma sentencial. Para uma gramática G, uma
linguagem por ela gerada é denotada por L(G).

▪ Exemplo 1.3 Seja G = (V,Σ,R,S) uma gramática ilustrativa, tal que:

V ={0,1,2,3,S,A}

Σ ={0,1,2,3}

R ={S → 0S33, S → A, A → 12, A → ε}

P ={S}

Assim, a partir da variável de partida P = S e o conjunto de regras R, podemos


obter a seguinte sequência de derivações:

S ⇒ 0S33 (regra 1)

⇒ 00S3333 (regra 1)

⇒ 00A3333 (regra 2)

⇒ 003333 (regra 4)

Ou então, seguindo uma sequência diferente de regras, podemos obter outras


derivações:

Processamento de Linguagem Natural – Página 10 de 50


S ⇒ 0S33 (regra 1)

⇒ 00S3333 (regra 1)

⇒ 00A3333 (regra 2)

⇒ 00123333 (regra 3)

Dessa maneira, podemos concluir que a gramática G é capaz de produzir


linguagem L(G), tal que:

L(G) = {0m 1n 2n 32m | m ≥ 0 e (n = 0 ou n = 1)}

Exemplos de sentenças pertencentes à linguagem L:


ε,12,033,01233,003333,00123333 etc. Nota-se que é possível gerar múltiplas
sequências a partir de um único ponto de partida P (raiz da gramática).

1.3. Linguagem Computacional

Linguagens computacionais são linguagens formais que compreendem um


conjunto de instruções que produzem variadas formas de saída. São usadas na
programação de computadores para implementar sequências de instruções e
algoritmos. Permitem que os computadores processem de forma rápida e eficiente
faixas grandes e complexas de informações.

Vocabulário 1.3 — Algoritmo3. (i) Conjunto de regras que fornecem uma


sequência de operações capazes de resolver um problema específico. (ii) Conjunto
de regras para a resolução de um cálculo numérico: o algoritmo de Euclides encontra
o máximo divisor comum de dois números inteiros. (iii) Sequência de raciocínios ou
operações que oferece a solução de certos problemas.

3 https://www.dicio.com.br/algoritmo/

Processamento de Linguagem Natural – Página 11 de 50


Linguagens de programação se diferem das demais formas de expressão
humana porque requerem maior grau de precisão e integridade. Ao contrário dos
humanos, que constantemente se expressam de forma ambígua, sistemas
computacionais executam literalmente aquilo que lhes é “ordenado”. Linguagens de
programação são estruturadas em unidades de processamento, comumente
chamadas de primitivas, empregadas na descrição e transformação dos dados. Essas
unidades são compostas por operações simples, como a adição de dois números ou
a seleção de um elemento em um conjunto. Semelhantemente as demais línguas,
linguagens de programação são definidas por regras sintáticas e semânticas que
descrevem sua estrutura e significado.

1.3.1. Sintaxe

Sintaxe é um segmento da gramática que estuda a estruturação das palavras


nos períodos, bem como a relação lógica entre elas e, dessa maneira, define a
estrutura de um idioma. Sem sintaxe, não é possível compreender o significado ou a
semântica de uma linguagem. De forma análoga, a sintaxe de uma linguagem
computacional consiste no conjunto de regras que definem as combinações de
símbolos válidas e corretamente estruturadas. Gramáticas livres de contexto são, em
particular, o meio mais utilizado para expressar a sintaxe de uma linguagem de
programação de alto nível. Essas gramáticas são complexas o bastante para fornecer
uma estrutura capaz de expressar a semântica com a clareza ao mesmo tempo que
permanecem suficientemente simples para serem intelectualmente tratáveis.

Definição 1.2 — Gramática Livre de Contexto. Uma gramática livre de


contexto é uma gramática (V,Σ,R,P) em que cada regra r ∈ R tem a forma X →
w, onde X ∈ V e w ∈ (V ∪Σ)∗ .

Ao estabelecer a Definição 1.2, Noam Chomsky (1956, p. 113-124) declara


que uma gramática formal é livre de contexto quando suas regras de produção podem
ser aplicadas sem levar em conta o contexto do símbolo não terminal. Isto é,
independentemente de quais símbolos existam na gramática livre de contexto, o
símbolo unitário não terminal X do lado esquerdo de uma regra pode sempre ser
substituído pelo lado direito. Linguagens obtidas por meio de gramáticas livres de

Processamento de Linguagem Natural – Página 12 de 50


contexto são intituladas linguagens livres de contexto. Sipser et al. (2012) menciona
que diferentes gramáticas livres de contexto podem produzir a mesma linguagem livre
de contexto. Sistemas e máquinas capazes de reconhecer essas linguagens se
comportam como autômatos com pilha.

Exemplos 1.4 e 1.5 apresentam aplicações práticas de regras contidas em


gramáticas livres de contexto aplicadas a linguagens naturais e formais,
respectivamente:

▪ Exemplo 1.4 Neste exemplo, a gramática é constituída por regras que incidem
sobre determinados elementos da língua portuguesa:

<frase> → <sujeito><verbo><objeto>

<sujeito> → O escritor

<sujeito> → A jornalista

<verbo> → rasgou

<verbo> → redigiu

<objeto> → um <adjetivo> livro

<adjetivo> → maçante

<adjetivo> → excelente

<adjetivo> → ε

A jornalista rasgou um maçante livro e O escritor redigiu um excelente livro


fazem parte da linguagem gerada pela gramática ilustrada acima. Sentenças
formadas por outras combinações podem ser obtidas através dos símbolos
apresentados. Perceba que gramáticas livres de contexto são capazes de
representar, de forma limitada, classes sintáticas bem definidas da linguagem natural
(sujeito, verbo, objeto etc.).

Processamento de Linguagem Natural – Página 13 de 50


Gramáticas livres de contexto são muito difundidas na caracterização de
sintaxes em linguagens computacionais. Qualquer estudioso de linguagens formais
pode criar uma nova linguagem de programação e especificar sua respectiva sintaxe.
Para tal, a comunidade científica passou a adotar o formalismo de Backus-Naur
(BACKUS et al., 1963, p. 349-367), uma meta-sintaxe empregada na especificação
de gramáticas livres de contexto. A título de exemplo, os responsáveis pela linguagem
de programação PYTHON seguem o formalismo estendido de Backus-Naur e
disponibilizam a descrição da gramática em sua plataforma na web4.

▪ Exemplo 1.5 As regras abaixo seguem o formalismo de Backus-Naur e


compõem a sintaxe da linguagem VarLab, criada para simples ilustração:

<lista-cmmds> ::= <cmd>;<lista-cmds> | λ

<cmd> ::= <cmd-se> | <cmd-enq> | <cmd-atr> | ···

<cmd-enq> ::= enquanto <exp-log> faça <lista-cmds> fim

<cmd-se> ::= se <exp-log> então <lista-cmds> <cmd-sen> fim

<cmd-sen> ::= senao <lista-cmds> | λ

<cmd-atr> ::= <var> ← <exp>

Embora nem todos os símbolos estejam definidos no trecho acima (exp-log,


var etc.), é possível perceber que em uma gramática livre de contexto há apenas uma
única variável no lado esquerdo da sequência “::=”. No direito, pode ser inserido
elementos que constituem símbolos terminais ou não terminais, como mostrado na
Definição 1.2.

4 https://docs.python.org/3/reference/grammar.html

Processamento de Linguagem Natural – Página 14 de 50


1.3.2. Semântica

A semântica descreve o significado de uma linguagem computacional


especificando como ela é executada em uma máquina abstrata. Ela fornece os
fundamentos matemáticos necessários para que um computador possa desempenhar
operações em uma determinada linguagem, criando, assim, um modelo
computacional. A simples ação de definir os componentes do código-fonte em um
sistema, com extrema precisão, é capaz de revelar as mais variadas sutilezas e
ambiguidades que todo desenvolvedor precisa estar atento.

A semântica em linguagens computacionais é geralmente dividida em três


categorias principais:

▪ Semântica Operacional descreve o sentido de uma linguagem através da


definição de como ela é executada em uma máquina abstrata. Dessa maneira,
uma semântica operacional clara é muito útil em implementações.

▪ Semântica Denotacional é uma técnica que define o significado de uma


linguagem de programação através de definições e conceitos matemáticos
abstratos de completude (complete partial orders), funções contínuas e
mínimos pontos fixos.

▪ Semântica Axiomática estabelece o sentido de uma estrutura de


programação fornecendo regras de prova e enfatizando correções. Isso faz
com que certas linguagens possuam sistemas de prova elegantes, facilitando
tanto o desenvolvimento quanto a correção de programas.

Em geral, os métodos utilizados na compreensão semântica dependem muito


da lógica matemática. Esses métodos nem sempre estão acessíveis a um estudante
de estatística ou ciência da computação, sem um histórico de conhecimento em
matemática discreta, computabilidade, teoria da computação e raciocínio lógico.
Entretanto, é importante ter em mente que cada um dos três estilos semânticos
descritos acima é complementar. Mais especificamente, para provar que o conjunto
de instruções computacionais em uma dada linguagem está correto, é necessário que
tanto a semântica operacional quanto a denotacional estejam em harmonia.

Processamento de Linguagem Natural – Página 15 de 50


1.4. Linguagens

O objetivo deste capítulo foi introduzir diferentes linguagens e como elas se


relacionam. Além destas que foram descritas, existem línguas não-formais
desenvolvidas artificialmente. Linguagens planejadas são geralmente construídas e
definidas para facilitar a comunicação humana entre pessoas que não compartilham
o mesmo idioma. O Esperanto, por exemplo, foi criado com este propósito e,
atualmente, é falado em mais de 100 países (JANSEN et al. 2011, p. 57-74).

Linguagens naturais estão cheias de ambiguidades, com as quais as pessoas


lidam usando pistas contextuais e outras informações. Para compensar a
ambiguidade e reduzir mal-entendidos, linguagens humanas empregam muita
redundância. Por outro lado, linguagens formais são projetadas para serem
praticamente inequívocas, o que significa que qualquer declaração tem exatamente
um único significado, independentemente do contexto. Linguagens formais são
apropriadas para transmitir instruções às máquinas, pois são menos redundantes e
mais concisas. A título de exemplo, um computador não pode estar “incerto” sobre
qual operação executar ao receber uma instrução ambígua ou redundante. Por essa
razão, quando se trata de PLN, a linguagem formal é indispensável na
construção de métodos voltados para o processamento da língua natural
humana.

Ainda há muito para se discutir sobre linguagens naturais, linguagens formais,


autômatos e gramáticas livres de contexto. A literatura possui inúmeros materiais de
qualidade (VIEIRA et al., 2004; RAMOS, 2008; SIPSER, 2012; EISENSTEIN, 2018).
Entretanto, tais temas estão indiretamente relacionados com o escopo da disciplina
de Processamento de Linguagem Natural. Dessa maneira, fica a critério do leitor
buscar informações inerentes à linguística e teoria da computação.

1.4.1. Python

Durante a disciplina de Processamento de Linguagem Natural, utilizaremos a


linguagem computacional PYTHON, uma poderosa linguagem de programação de
alto nível, orientada a objetos e interpretada. É uma linguagem amplamente difundida
no desenvolvimento web, em ciência de dados, na criação de protótipos de software

Processamento de Linguagem Natural – Página 16 de 50


e assim por diante. Possui sintaxe simples e fácil de usar, sendo uma excelente
linguagem para iniciantes. PYTHON é uma linguagem de programação
multiplataforma, o que significa que pode ser executado em vários sistemas
operacionais, como Windows, MacOS, Linux, além de ter sido portado para as
máquinas virtuais Java e .NET.

A mais popular biblioteca para processamento de linguagem natural, Natural


Language Toolkit (NLTK), foi escrita em PYTHON e possui uma grande comunidade
de mantenedores. NLTK5 fornece interfaces para mais de cinquenta corpos textuais
(do latim, corpora) e recursos lexicais, como WordNet, junto com um pacote de
bibliotecas de processamento de texto para classificação, tokenização, lematização,
marcação, análise e raciocínio semântico. TextBlob6 é outra biblioteca bastante
conhecida para processamento de dados textuais. Ela fornece uma API simples para
resolver tarefas comuns de PLN, como marcação de classes gramaticais, análise de
sentimento, classificação, dentre outros.

Desde 2016, a biblioteca SpaCy7 vem fornecendo análise sintática de forma


rápida, escalável e precisa, além de possibilitar o reconhecimento de entidades
nomeadas e acesso fácil aos vetores de palavras. SpaCy possui ampla variedade de
modelos treinados em vocabulários de diversos idiomas, inclusive português, e
oferece suporte para integração com PyTorch e TensorFlow. Outras bibliotecas, como
Gensim8 e Stanford CoreNLP9, foram disponibilizadas na linguagem de programação
PYTHON e JAVA, respectivamente. Gensim é bastante utilizado em modelagem de
palavras e similaridade de documentos, enquanto Stanford CoreNLP fornece formas

5 https://www.nltk.org/

6 https://textblob.readthedocs.io/

7 https://spacy.io/

8 https://radimrehurek.com/gensim/

9 https://stanfordnlp.github.io/CoreNLP/

Processamento de Linguagem Natural – Página 17 de 50


estruturais básicas de palavras, classes gramaticais, valores numéricos normalizados
(ex.: data e hora), análise de sentimentos etc.

É importante dedicar tempo no aprendizado da linguagem computacional


PYTHON para garantir êxito na disciplina de Processamento de Linguagem Natural.
A compreensão das principais bibliotecas matemáticas e computacionais, como
NumPy e SciPy, é indispensável já a partir do Capítulo 3. As bibliotecas NLTK,
TextBlob, SpaCy e Gensim serão introduzidas nas próximas aulas através de
tutoriais. Embora estejam em inglês, você pode explorar os recursos interativos do
website https://www.learnpython.org/ e aprender a linguagem de forma dinâmica. Se
preferir, pode acessar minha página pessoal10 e conferir um tutorial baseado no
material da Escola de Engenharia de Stanford.

10 https://vareto.com.br/python-tutorial.html

Processamento de Linguagem Natural – Página 18 de 50


Capítulo 2. Aplicações

2.1. Processamento de Linguagem Natural

O Processamento de Linguagem Natural (PLN), termo traduzido do inglês,


Natural Language Processing, em sua forma mais simples, é a habilidade de um
sistema computacional compreender a linguagem humana e processá-la da mesma
forma que um ser humano. Mais especificamente, trata-se de um conjunto de
métodos e algoritmos que tornam a linguagem humana acessível aos computadores.

Nos últimos anos, com o avanço de sistemas computacionais e internet das


coisas, o processamento de linguagem natural está cada vez mais presente no nosso
dia a dia. Recursos de tradução automática estão cada vez mais eficazes, sendo
gratuitamente disponibilizados na web e em redes sociais. Semelhantemente, a
classificação de textos impede que a caixa de entrada de e-mails seja bombardeada
com mensagens indesejadas. Motores de busca como Google Search e Microsoft
Bing são capazes de retornar arquivos indexados com alto grau de sofisticação
linguística e semântica. Smartphones e laptops são capazes de transformar ondas
sonoras de falas e diálogos humanos em conjuntos sequenciais de caracteres e
palavras. Espero, nas próximas seções, ser capaz de motivar você no que tange à
complexa e intrigante área do processamento de linguagem natural.

2.2. PLN e suas intercessões

O PLN se baseia em muitas outras disciplinas, como antropologia, linguística


e teoria da computação. As próximas seções descrevem com maior detalhe o
relacionamento existente entre diferentes domínios do conhecimento humano.

2.2.1. Linguística

Linguística é a área de estudo da linguagem verbal humana partindo de


observações que permitem o entendimento do avanço da língua e desdobramentos
dos diferentes idiomas.

Processamento de Linguagem Natural – Página 19 de 50


Vocabulário 2.1 — Linguística11. (i) Ciência da linguagem humana. (ii) Estudo
científico das línguas, particularmente dos fenômenos que dizem com sua evolução
e desenvolvimento, sua distribuição no mundo, as relações que têm entre si etc.

Eisenstein et al. (2018) menciona que o PLN se concentra no projeto de


algoritmos computacionais que são capazes de “compreender” e processar a
linguagem natural humana em tempo hábil. Em contrapartida, percepções linguísticas
e conhecimento científico prévio da língua e do idioma são cruciais para a correta
execução e avaliação de algoritmos desenvolvidos para processamento de
linguagens.

2.2.2. Processamento de Sinais e Probabilidade

Quando a linguagem se restringe à fala, a execução do PLN se reduz, a


princípio, em um problema de processamento de sinais. Pesquisadores geralmente
realizam o pré-processamento das ondas sonoras ao convertê-las em sequências
textuais. Miller et al. (1951, p. 329) declara que o contexto é de vital importância no
processamento da fala, pois a noção das palavras vizinhas auxilia na remoção de
ruídos. Em outras palavras, o conhecimento da palavra corrente ajuda a reduzir o
leque das possíveis palavras seguintes. Em resumo, temos a aplicação da
probabilidade condicional em problemas atrelados ao PLN.

2.2.3. Ciência da Computação

Linguistas como Noam Chomsky e Richard Montague demonstraram como a


computabilidade, teoria da computação e da linguagem formal colaboram para a
modelagem da sintaxe e da semântica da linguagem natural. A condição discreta e
recursiva da linguagem natural humana permite que modelos teóricos como
autômatos de estados finitos sejam empregados em muitos sistemas computacionais
para processamento da linguagem natural (VIEIRA et al., 2004). Posto isso, o estudo

11 https://www.dicio.com.br/linguistica/

Processamento de Linguagem Natural – Página 20 de 50


da teoria e sistemas computacionais se mostra indispensável para o desenvolvimento
de abordagens mais eficazes no que diz respeito ao PLN.

Inteligência e Aprendizado

De acordo com Eisenstein et al. (2018), a capacidade de se engajar com a


linguagem é uma das características centrais da inteligência humana e, portanto, um
pré-requisito para a inteligência artificial. A inteligência artificial visa a tomada de
decisões com base em conhecimento ou informação prévia e, portanto, pode
trabalhar em conjunto com o PLN, por exemplo, em cenários onde exista a obtenção
de informação textual ou sonora. Dessa maneira, pode ser possível fazer com que
sistemas computacionais ou robôs se aproximem de algumas, senão diversas,
habilidades humanas (RUSSEL et al. 2013).

Pesquisas mais recentes em PLN apresentam grande dependência das


técnicas de aprendizagem de máquina tradicionais, geralmente, denotadas como
Machine Learning, ou dos últimos avanços em aprendizado profundo, também
conhecido como Deep Neural Networks ou Deep Learning. Abordagens baseadas em
aprendizado de máquina abrangem recuperação e extração de informação, tradução,
análise de sentimentos, filtragem de spams, sumarização de textos, entre outros. Um
dos principais desafios atrelados ao PLN consiste no fato de que a linguagem humana
possui diversas variabilidades, como humor, ironia e sarcasmo, que precisam ser
modeladas computacionalmente. Trata-se de um grande desafio, até mesmo para as
mais complexas e robustas redes neurais artificiais.

2.3. PLN é um problema difícil

O PLN alcançou grandes avanços nos últimos 20 anos. Algumas tarefas,


como etiquetamento gramatical, são consideradas por estudiosos como totalmente
resolvidas. Ao mesmo tempo, problemas como sumarização textual ou diálogos entre
humanos e máquinas (chatbots) permanecem sem solução concreta.

Processamento de Linguagem Natural – Página 21 de 50


Ambiguidade aparenta ser o principal problema existente em linguagens
naturais. Não é à toa que essa é uma das principais diferenças entre línguas naturais
e formais. Geralmente, em uma conversa entre dois indivíduos, muitas coisas ficam
implícitas sem serem ditas. Humanos possuem a capacidade de compreender a
intenção subjacente da conversa. O mesmo não ocorre com sistemas
computacionais, que falham continuadamente devido às ambiguidades existentes em
nível de palavra, sentença e semântica.

Vocabulário 2.2 — Ambiguidade12. (i) Qualidade daquilo que possui ou pode possuir
diferentes sentidos, do que é incerto ou indefinido; natureza do que é ambíguo. (ii)
Duplicidade de sentidos; característica de alguns termos e sentenças que expressam
mais de uma acepção ou entendimento possível: a ambiguidade faz parte da poesia.

2.3.1. Ambiguidade em nível de palavra, sentença e semântica

A língua portuguesa é repleta de combinações: àquele (a + aquele), pro (para


+ o), dentre (de + entre) e aqueloutro (aquele + outro). Em inglês, por outro lado, há
contrações como won’t (will + not), can’t (can + not), you’ll (you + will) etc. Até mesmo
na Alemanha não é diferente, pois existem palavras como durchs (durch + das), fürs
(für + das) e vom (von + dem). Qual deve ser a configuração de um sistema para PLN
ao lidar com estas palavras? Na língua portuguesa, é bastante provável que cientistas
optem por tratar a contração como uma única palavra ao invés de duas. Não
necessariamente esse princípio é mantido em outros idiomas, sejam eles derivados
do latim ou de línguas anglo-saxãs.

Como se não bastasse a ambiguidade em nível de palavras, a falta de


pontuação impõe dificuldades ainda maiores. Sentenças semelhantes a “Marcelo
pediu ao professor para sair” possuem duas leituras possíveis:

▪ Marcelo pediu ao professor para que o professor se retirasse.

12 https://www.dicio.com.br/ambiguidade/

Processamento de Linguagem Natural – Página 22 de 50


▪ Marcelo pediu permissão ao professor para se retirar.

Grande parte desta ambivalência resulta da pobre colocação de elementos


como pronomes e adjuntos adverbiais (tempo, modo, intensidade, causa etc.), bem
como a ausência de vocábulos e expressões que comprometem a clareza de
sentenças. Outro fator diz respeito à polissemia, isto é, palavras que apresentam mais
um único significado. A palavra letra, por exemplo, pode corresponder a um dos
caracteres do alfabeto, a maneira como um indivíduo os registra na forma escrita, ou
palavras e versos que acompanham as melodias instrumentais e canções.

Em resumo, percebe-se que muitas palavras, isoladamente, geram dúvidas


quanto ao significado. A falta de pontuação e da pobreza dissertativa permitem
múltiplas interpretações em textos consideravelmente simples. Se pessoas enfrentam
dificuldades com a variabilidade semântica, qual seja o idioma, também é de se
esperar que sistemas computacionais que processam linguagens naturais esbarrem
nos mesmos impasses. Essas são algumas das adversidades encontradas por
aqueles que trabalham com PLN. À medida que avançamos, vamos explorar
maneiras de lidar com cada um deles.

2.4. PLN e suas aplicações

O processamento da linguagem natural humana está entre os tópicos mais


relevantes no campo da ciência da computação e dados. Os grandes avanços dos
últimos anos podem ser justificados, em grande parte, pelas novas arquiteturas e
técnicas de pré-processamento. Para compreender a magnitude do impacto causado
pelos avanços no PLN, é necessário analisar algumas de suas aplicações em
problemas do mundo real. A crescente disponibilidade de documentos na web resulta
em muitos estudos exaustivos na área de PLN, envolvendo tarefas como sumarização
textual, análise de sentimentos, tradução, reconhecimento de fala, entre outros.

Processamento de Linguagem Natural – Página 23 de 50


2.4.1. Etiquetamento gramatical

No etiquetamento gramatical (do inglês, part-of-speech tagging), as palavras


são rotuladas de acordo com a classe gramatical à qual pertencem, em conformidade
com seu contexto. O etiquetamento é geralmente empregado como uma etapa de
pré-processamento dos dados para posterior análise e extração de informações mais
complexas, tais como reconhecimento de entidades, análise de sentimento etc.
Exemplo 2.1 ilustra a classe gramatical de cada palavra. Métodos dos anos 80 e 90
exploraram hidden Markov models (EDDY, 2017, p. 189-195) a fim de remover
ambiguidades gramaticais. Hoje em dia, grande parte dos métodos propostos se
beneficiaram da robustez dos algoritmos para aprendizado de máquina, técnicas de
clusterização e da crescente popularidade das redes neurais artificiais (KIM et al,
2017; LI; LIU, 2015; OWOPUTI et al., 2013).

Exemplo 2.1 Exemplo de um etiquetamento gramatical.

2.4.2. Reconhecimento de entidades

O reconhecimento de entidades (named entity recognition) é, de certa forma,


semelhante ao etiquetamento gramatical, pois trata do processo de adição automática
de marcações ou anotações a uma coleção de dados textuais. Por essa razão, as
últimas contribuições da literatura também consistem em técnicas de linguagem
natural e aprendizado de máquina (CHEN et al., 2015, p. 11-18; LI et al., 2017, p. 1-
11). Como ilustrado no Exemplo 2.2, uma das principais aplicabilidades do
reconhecimento de entidades consiste na “varredura” de uma base de dados em
busca de elementos textuais que caracterizam nomes pessoais, endereços, e-mails,
organizações, números de telefone etc. Dessa maneira, é possível determinar quais
empresas foram mencionadas nos portais de notícias, descobrir se certos produtos
foram alvos de reclamações nas redes sociais e, até mesmo, descobrir se um tweet
fornece a localização de uma pessoa ou estabelecimento.

Processamento de Linguagem Natural – Página 24 de 50


Exemplo 2.2 Exemplo do reconhecimento de entidades nomeadas.

2.4.3. Sumarização de textos

Sumarização (do inglês, text summarization) é a tarefa de condensar um


trecho de texto em uma versão mais curta, reduzindo seu tamanho inicial e, ao mesmo
tempo, preservando os principais elementos informativos e o significado do conteúdo.
Na literatura recente, vários modelos baseados em aprendizado de máquina foram
propostos para essa tarefa (ALGULIYEV et al., 2019; FANG et al., 2017, p. 189-195;
HINGU; SHAH; UDMALE, 2015). A grande maioria desses métodos tratam a
sumarização de textos como problema de classificação que decide incluir, ou não,
frases e sentenças no resumo em criação. Outros pesquisadores utilizam estratégias
diferentes, como latent semantic analysis (LANDAUER; FOLTZ; LAHAM, 1998, p.
259-284), sequence-to-sequence models (GARCÍA-HERNÁNDEZ; LEDENEVA,
2009, p. 44-48) reinforcement learning (ZHANG; HUANG; ZHAO, 2018) e adversarial
networks (XU et al., 2018). Dentre as principais aplicações reais envolvendo a
sumarização textual, podemos destacar o resumo de textos jurídicos, notícias e
geração de manchetes.

2.4.4. Análise de sentimentos

A análise de sentimentos (sentiment analysis) é uma técnica de


processamento de linguagem natural geralmente utilizada para determinar se os
dados são positivos, negativos ou neutros. Outras abordagens se concentram nas
emoções (irritado, contente, triste etc.), necessidade (urgente, não urgente) e até
mesmo anseios (interessado, não interessado). Com a mineração de sentimentos, é
possível realizar uma análise automática da opinião pública em dados sociais,
levando em conta milhares de comentários sobre determinado produto, marca ou
serviço e descobrir se os usuários estão satisfeitos com ele. Nos últimos 20 anos,
foram desenvolvidos diversos métodos probabilísticos baseados em Naive Bayes
(BILAL et al., 2016; PANG; LEE; VAITHYANATHAN, 2002), Bayesian Networks

Processamento de Linguagem Natural – Página 25 de 50


(SIERRA et al., 2009), Maximum Entropy (HABERNAL; PTÁCEK; STEINBERGER,
2014; PANG; LEE; VAITHYANATHAN, 2002), Support Vector Machines (MORAES;
VALIATI; NETO, 2013; SEVERYN et al., 2016) e Artificial Neural Networks (MORAES;
VALIATI; NETO, 2013; VINODHINI; CHANDRASEKARAN, 2016).

2.4.5. Tradução automática

A tradução automática de textos (do inglês, machine translation), é uma


subárea da linguística computacional que estuda o uso de sistemas computacionais
para traduzir textos ou falas de um idioma para outro. Embora os conceitos atrelados
à tradução automática e suas interfaces sejam relativamente simples, como no
Exemplo 2.3, os algoritmos por detrás são complexos e consistem em tecnologia de
ponta, em particular, inteligência artificial, redes neurais profundas e computação em
nuvem. No passado, a indústria utilizava análises estatísticas avançadas (LOPEZ,
2008, p. 1-49) para estimar as melhores traduções possíveis para uma determinada
palavra, dado o seu contexto. Com o advento da neural machine translation
(BAHDANAU; CHO; BENGIO, 2015) em meados de 2015, houve uma mudança
radical nas principais ferramentas de tradução, resultando em traduções automáticas
com qualidade muito superior (JOHNSON et al., 2017; MANNING et al., 2015).

Exemplo 2.3 Exemplo de uma tradução textual utilizando o Bing Translator.

2.4.6. Bots conversacionais

Os bots conversacionais, mais comumente conhecidos como chatbots, são


softwares utilizados na condução de conversas por texto ou fala, substituindo e se
passando por seres humanos. São projetados para simular a maneira como as
pessoas se comportam em plataformas e aplicativos de mensagens. Em geral, a

Processamento de Linguagem Natural – Página 26 de 50


conversação com um bot pode ser dividida em duas etapas: (i) extração do significado
da entrada e (ii) concepção de saída compreensível (NURUZZAMAN; HUSSAIN,
2018). Na literatura, muitos dos trabalhos publicados atualmente exploram neural
networks juntamente a técnicas de reinforcement learning (Cuayáhuitl et al., 2019;
LAN; XU, 2018; QIU; HUANG, 2015). Entretanto, a maioria das abordagens propostas
estão restritas a certos domínios (expressões, jargões etc.), não obtendo bons
resultados em todas os “dialetos” de um dado idioma. Por essa razão, grande parte
das aplicações continuam apresentando falhas na análise e compreensão da
mensagem fornecida pelo usuário.

2.4.7. Reconhecimento de fala

O reconhecimento automático de fala (automatic speech recognition) permite


que sistemas computacionais inteligentes identifiquem e interpretem componentes da
língua sonora. Grandes empresas do ramo tecnológico desenvolveram assistentes
virtuais, como Alexa, Cortana e Siri, que revolucionaram a maneira como seres
humanos interagem com dispositivos inteligentes (LÓPEZ; QUESADA; GUERRERO,
2017). Além de reconhecerem a fala, esses assistentes também se comportam como
chatbots, interagindo e respondendo usuários. Outrora estado da arte na literatura,
hidden Markov models (GALES; YOUNG, 2017; JUANG; RABINER, 1991) foram
amplamente desenvolvidos para o reconhecimento automático de fala e ainda são
considerados uma solução clássica para o problema. Atualmente, o aumento do
poder computacional permitiu que redes neurais artificiais se tornassem mais
profundas. Dentre elas, recurrent neural networks (CHEN et al., 2015; GRAVES;
MOHAMED; HINTON, 2013) e sua arquitetura variante long short-term memory
(GRAVES; JAITLY, 2014; HAN et al., 2017) são amplamente utilizadas na resolução
de problemas probabilísticos com características temporais.

2.4.8. Outras aplicações

A detecção de spams representa uma das atividades primitivas no PLN em


nuvem. Spams são mensagens publicitárias ou conteúdo fraudulento em que o
destinatário não fornece seu endereço eletrônico previamente ao remetente. Um
estudo conduzido por Crawford et al. (2015, p. 1-24) mostra abordagens para
filtragem de spams baseadas em etiquetamento gramatical e representações

Processamento de Linguagem Natural – Página 27 de 50


textuais. Essas features são combinadas com algoritmos de aprendizado, como
logistic regression e support vector machines. Corretores ortográficos (spellcheckers)
são comumente incorporados a softwares ou serviços, como processadores de texto,
serviços de e-mail e ferramentas de busca. Outro recurso geralmente associado a
spellcheckers consiste na predição textual automática, em que é possível prenunciar
as próximas palavras baseado no que está sendo digitado.

Nem todos os problemas em PLN foram mencionados neste capítulo.


Entretanto, são grandes as chances de terem interseção com algumas das aplicações
descritas acima. O capítulo seguinte descreve as principais estratégias para eliminar
ruídos, quebrar sentenças ou documentos em unidades menores, remover palavras
irrelevantes, dentre outros; além de fornecer exemplos na linguagem PYTHON para
alcançar tais objetivos. As aulas fornecerão importantes detalhes sobre
representação de palavras e documentos, além de apresentar a intuição detrás de
importantes métodos de aprendizado de máquina.

Processamento de Linguagem Natural – Página 28 de 50


Capítulo 3. Pré-processamento

3.1. Preparação Textual

O pré-processamento de texto é tradicionalmente uma etapa comum em


tarefas de Processamento de Linguagem Natural (PNL), pois transforma o texto em
uma forma mais digerível para que os algoritmos de aprendizado de máquina possam
obter melhor desempenho. Mais precisamente, o pré-processamento textual é uma
abordagem para limpar e preparar dados de texto para uso em um contexto
específico. A qualidade do pré-processamento tem impacto direto na excelência de
um algoritmo de PLN, onde o ganho no desempenho e acurácia são, na maioria das
vezes, perceptíveis.

Exemplo 3.1 Ilustração de um pipeline para pré-processamento de texto.

O Exemplo 3.1 mostra diferentes etapas que compõem o pré-processamento


textual, tais como a remoção de ruído, tokenização e lematização para subdividir a
string “Quem estava lendo o livro de PLN?” em uma lista com as palavras [“quem”,
“estar”, “ler”, “livro”, “pln”]. O objetivo final de limpar e preparar busca reduzir o texto
apenas às palavras fundamentais para atingir determinados objetivos em PLN.
Engenheiros e desenvolvedores empregam o pré-processamento em praticamente

Processamento de Linguagem Natural – Página 29 de 50


qualquer pipeline envolvendo linguagens naturais. Atualmente, isso inclui softwares
de reconhecimento de voz, motores de busca, métodos de indexação de arquivos e
também, no treinamento de modelos de aprendizado de máquina. É um estágio
essencial devido ao fato de dados textuais variarem tanto em seu formato de origem,
como e-mails, mensagens de texto, websites, reconhecimento de voz, tweets; quanto
à sua estrutura linguística predominante: idioma, dialeto e língua.

Vocabulário 3.1 — Redução de dimensionalidade. A redução de dimensionalidade,


ou redução de dimensão, é a transformação de dados de um espaço de alta dimensão
em um espaço de baixa dimensão, para que a representação de baixa dimensão
retenha algumas propriedades significativas dos dados originais, idealmente
próximas à sua dimensão intrínseca.

Este capítulo apresenta uma introdução abrangente ao pré-processamento


de texto, cobrindo diferentes técnicas, incluindo stemização (do inglês, stemming),
lematização (lemmatization), remoção de ruídos, normalização, com exemplos e
explicações de quando você deve usar cada uma delas. Essas etapas são utilizadas,
inclusive, na redução de dimensionalidade, permitindo que algoritmos de aprendizado
de máquina se “concentrem” nas palavras mais salientes, isto é, aquelas que são
mais discriminativas e mais relevantes em um determinado problema. Embora a lista
de tópicos abordados nas seções seguintes não seja exaustiva, ela introduz as
principais estratégias existentes na preparação de coleções textuais.

3.2 Remoção de Ruídos

A remoção de ruídos em textos é uma técnica bastante difundida entre


cientistas, engenheiros e desenvolvedores. Frequentemente, dados textuais oriundos
de fontes HTML ou de APIs estruturadas em JSON ou XML possuem muitos tokens
ou caracteres desnecessários, que devem ser removidos antes de qualquer
operação, como tokenização ou outras técnicas de normalização. As principais
sequências de caracteres indesejados encontrados em corpos textuais são:

▪ Formatação HTML;

Processamento de Linguagem Natural – Página 30 de 50


▪ Espaço em branco inicial, final e vertical;

▪ Pontuação e acentos;

▪ Caracteres especiais;

▪ Dígitos numéricos.

O tipo de ruído encontrado em corpos textuais depende de sua origem. É


possível acessar dados do Twitter e outras redes sociais por meio de APIs.
Entretanto, esses dados raramente possuem alguma espécie de pré-processamento
e precisam passar por vários estágios de filtragem. Afortunadamente, a linguagem
computacional PYTHON é composta por diversos métodos e recursos que permitem
a manipulação de strings e cadeias de caracteres. O Código 3.2 mostra como tags da
linguagem HTML podem ser removidas através de expressões regulares indicadas
como parâmetro do método re.sub().

O método .sub() é composto por três argumentos obrigatórios:

▪ pattern: a expressão regular que é pesquisada na string fornecida em input;

▪ replacement_text: sequência de caracteres que substituirá todas as


ocorrências do padrão encontrado em input;

▪ input: a string de entrada que será modificada pelo método .sub().

Código 3.1 — Expressão Regular. O método .sub(), da biblioteca re é


amplamente utilizado na remoção de ruídos textuais por meio de expressões
regulares.

Processamento de Linguagem Natural – Página 31 de 50


O método re.sub() retorna uma string onde todas as ocorrências de pattern em
input são substituídas pelo conteúdo de replacement_text.

Outra tarefa importante na remoção de ruídos consiste na eliminação de


caracteres especiais. Geralmente, consistem em símbolos ou pontuações presentes
em sentenças. Essa etapa é geralmente executada anteriormente ao estágio de
tokenização. A principal justificativa para remover caracteres especiais se deve ao
fato que esses caracteres não fornecem informações textuais relevantes durante a
extração de características ou na obtenção de informações baseadas no
processamento de linguagem natural ou aprendizado de máquina.

3.3. Tokenização

Em muitas tarefas de processamento de linguagem natural, é necessário


acessar cada palavra existente em uma string. Para acessar cada palavra, o processo
comum consiste em dividir o corpo textual (corpus) em componentes menores. A
estratégia implementada para subdividir o texto em unidades menores é denominada
“tokenização” (do inglês, tokenization), e cada um dos componentes individuais são
chamados de tokens. Dentre as principais tarefas que exigem tokenização, podemos
destacar:

▪ Descobrir quantas palavras ou frases aparecem no texto;

▪ Determinar quantas vezes uma palavra ou frase específica existe;

▪ Contabilização de quais termos são prováveis de coocorrer.

Apesar da falsa impressão de trivialidade, a tokenização é uma operação


importante. Em determinados idiomas como a língua japonesa, por exemplo, palavras
não são delimitadas por espaços ou sinais de pontuação. Tokens podem ser
especificados com maior flexibilidade, pois embora sejam constituídos por palavras
ou termos individuais, também podem representar sentenças ou trechos de texto com
tamanhos variáveis.

Processamento de Linguagem Natural – Página 32 de 50


3.3.1. Tokenização de Sentenças

Mais especificamente, a tokenização de sentenças consiste em dividir um


corpus em frases ou sentenças, representando o primeiro nível de tokens. Também
é conhecida como segmentação de sentenças, pois busca fragmentar uma coleção
de textos em sentenças que carreguem informações significativas.

Código 3.2 — Segmentação de Sentenças. A função sent_tokenize(), da


biblioteca nltk, é utilizada em tokenização de sentenças.

Nesse exemplo, a função sent_tokenize() retorna uma lista com as sentenças


existentes na string texto.

A biblioteca NLTK possui um módulo destinado exclusivamente à


segmentação: nltk.tokenize. Esse módulo contém a função sent_tokenize(), que pode
ser empregada, por exemplo, na contagem do número médio de frases em cada
documento. O Código 3.2 ilustra como sent_tokenize() pode ser empregado na
segmentação de sentenças. Essa função possui dois parâmetros de entrada: text e
language. O primeiro corresponde à string ou sequência de caracteres que será
fragmentada em sentenças, enquanto o segundo parâmetro é opcional e determina o
idioma do modelo Punkt utilizado. Punkt é um modelo computacional desenvolvido
para tokenização de sentenças. Ele é baseado em algoritmos não-supervisionados e
obtém bons resultados em muitas linguagens faladas no continente europeu.

3.3.2. Tokenização de Palavras

De maneira semelhante, a tokenização de palavras pode ser realizada


através da função word_tokenize(), também fornecida pela biblioteca nltk. Ela recebe
como entrada uma string e retorna sua respectiva lista de palavras. Embora o idioma
padrão de nltk seja o inglês, o Código 3.3 demonstra que esta configuração também

Processamento de Linguagem Natural – Página 33 de 50


pode ser aplicada em corpos textuais elaborados em outras línguas, mas sem
nenhuma garantia de êxito.

Código 3.3 — Segmentação de Palavras. A função word_tokenize(), da


biblioteca nltk, é utilizada em tokenização de palavras.

A função word_tokenize() retorna uma lista com as palavras existentes na


string texto.

3.4. Normalização

A tokenização e a remoção de ruído são essenciais em quase todos os


pipelines de pré-processamento de texto. No entanto, alguns dados podem exigir
processamento adicional por meio da normalização textual. A normalização de texto
é um termo abrangente para várias tarefas de pré-processamento de texto. Nas
próximas seções, vamos cobrir algumas delas, tais como:

▪ Padronização da tipografia (maiúsculas ou minúsculas);

▪ Remoção de palavras vazias (stopwords);

▪ Stemização: remoção de prefixos e sufixos de uma palavra;

▪ Lemmatização: substituição de um token por sua respectiva palavra raiz.

Dentre as tarefas citadas acima, a mais simples delas é justamente a


padronização de caracteres. Essa padronização permite que a correspondência entre
palavras ou tokens seja realizada mais facilmente. Como mostrado no Código 3.4, a
linguagem PYTHON fornece métodos nativos para converter uma string em escrita
maiúscula ou minúscula.

Processamento de Linguagem Natural – Página 34 de 50


Código 3.4 — Tipografia. Os métodos .upper() e .lower(), nativos da
linguagem PYTHON, podem ser usados em qualquer variável do tipo string.

Esses métodos retornam uma nova string onde a mesma possui todos os
caracteres na forma minúscula ou maiúscula.

3.4.1. Remoção de Palavras Irrelevantes

No processamento de linguagem natural, a remoção de palavras irrelevantes


ou vazias (do inglês, stopwords) é o processo de remover palavras de uma string que
não fornecem nenhuma informação discriminativa que possa diferenciar um
documento de interesse dos demais. Essas palavras são eliminadas durante o pré-
processamento, sem levar em consideração a estrutura do texto e de suas sentenças,
pois tendem a adicionar ruído nas etapas posteriores de aprendizado.

Embora não exista uma lista completa e universal de palavras vazias, o


conjunto de stopwords em um idioma é constituído por aquelas palavras mais comuns
e reincidentes. Na língua portuguesa, por exemplo, temos palavras como um, porque,
de, ambos, desde, mas, acerca, dentre centenas de outras13. Entretanto, para muitos
problemas ou domínios em PLN, pode ser necessário complementar essas listas com
outras palavras, como gírias e palavras não oficiais da língua. Isso se deve,
principalmente, pelo fato de pessoas habitualmente empregarem escritas coloquiais
em redes sociais, não se atentando às exigências gramaticais e focando na maior
fluidez da comunicação.

13 https://www.ranks.nl/stopwords/portuguese

Processamento de Linguagem Natural – Página 35 de 50


Código 3.5 — Remoção de Stopwords com NLTK. A biblioteca NLTK
fornece uma coleção, denominada stopwords, que auxilia na remoção de
palavras vazias.

Note que, nesse exemplo, é realizada a remoção “manual” de palavras


irrelevantes, primeiro obtendo os tokens e, depois, gerando uma nova lista
contendo somente palavras significativas.

Algumas das bibliotecas mencionadas ao final do Capítulo 1 fornecem


coleções pré-definidas de palavras vazias. Os Códigos 3.5 e 3.6 utilizam duas dessas
bibliotecas com o intuito de eliminar termos irrelevantes na língua portuguesa e
inglesa, respectivamente. Palavras vazias são consideradas irrelevantes, pois se
comportam como ruído e qualquer documento que as possui, independentemente do
idioma, perde a capacidade discriminatória. Estatisticamente falando, a probabilidade
de ocorrência existe tanto em documentos de interesse quanto em documentos
desnecessários. Como ilustração, pense na busca web pela temática “Reforma
Tributária” em que resultados relacionados com o tema assim como qualquer outro
documento na língua portuguesa possuem grande interseção de stopwords.

Processamento de Linguagem Natural – Página 36 de 50


Código 3.6 — Remoção de Stopwords com Gensim. A biblioteca Gensim
possui a função remove_stopwords para supressão de palavras vazias.

A biblioteca Gensim fornece uma maneira mais simples e direta para remoção
de palavras vazias, realizando a tokenização e filtragem de forma automática.

Um dos principais problemas em tarefas de PLN é o aumento indesejado nas


dimensões dos dados. Esse problema de alta dimensionalidade começou a ganhar
maior relevância nos últimos 20 anos devido à crescente disponibilidade de
informação. Na maneira como os dados são capturados, existe a ocorrência de muita
redundância, já que os dados geralmente possuem muitas características repetitivas
e indesejadas que tornam o processo de análise trabalhoso e computacionalmente
custoso. Esse é o problema das grandes dimensões, que podem ser parcialmente
tratadas através de algumas técnicas para redução de dimensionalidade. Desse
modo, a remoção de stopwords é uma estratégia de normalização que resulta na
redução da dimensionalidade através da diminuição significativa de palavras.

3.4.2. Stemização

Stemização ou radicalização (do inglês, stemming) é o processo de reduzir


palavras flexionadas/derivadas à sua raiz ou radical. Algoritmos para radicalização
vêm sendo estudados em ciência da computação desde a década de 1960. Em PLN,
radicalização é a tarefa de pré-processamento de texto responsável pela remoção
direta dos afixos das palavras (prefixos e sufixos). Muitos mecanismos de pesquisa,
como Google Search e Microsoft Bing, tratam palavras contendo mesmo radical como
sinônimos, uma espécie de expansão de consulta denominada conflução ou fusão. O
Exemplo 3.7 evidencia a utilização da biblioteca NLTK na tarefa de stemização de
palavras na língua portuguesa e inglesa. Embora disponibilizado em PYTHON, o

Processamento de Linguagem Natural – Página 37 de 50


Removedor de Sufixos da Língua Portuguesa (RSLP) foi originalmente implementado
na linguagem C e é composto por múltiplas etapas em seu processo de simplificação
de palavras (detecção de plural, aumentativos, advérbios etc.).

Código 3.7 — Radicalização. O módulo NTLK possui objetos como


RSLPStemmer e PorterStemmer, criados para remoção de afixos de palavras.

Os objetos PorterStemmer e RSLPStemmer possuem o método .stem() que


recebe uma palavra ou token e retorna a forma base (radical) da mesma.

3.4.3. Lematização

Na grande maioria dos idiomas, as palavras aparecem em várias formas


flexionadas. Em português, por exemplo, o verbo ‘andar’ pode aparecer como
‘andando’, ‘andou’, ‘andarei’, ‘andara’, ‘andaremos’ etc. A forma básica, ‘andar’, é o
verbete correspondente encontrado em um dicionário e geralmente identificado como
lema ou lexema. A lematização é o processo linguístico de unificar as formas
flexionadas de uma palavra para que possam ser analisadas em seu formato raiz.

Processamento de Linguagem Natural – Página 38 de 50


Código 3.8 — Lematização. O módulo NTLK possui a classe
WordNetLemmatizer, capaz de encontrar lemas de diversas palavras em
inglês.

O resultado, salvo na variável lista_02, contém ‘wa’, enquanto o restante dos


tokens permaneceram os mesmos. Isso só aconteceu porque wnl.lemmatize()
trata cada palavra como substantivo. Para tirar proveito do método da
lematização, é necessário informar a classe gramatical de cada uma delas,
como no trecho abaixo.

No trecho acima, a lematização é empregada em palavras com classes


gramaticais diferentes: substantivos, verbos e adjetivos. Caso a classe
gramatical seja informada incorretamente, a lematização se torna ineficiente.

Como pode ser observado, a lematização está intimamente relacionada à


radicalização. A principal diferença é que métodos de stemização operam em uma
única palavra sem conhecimento do contexto e, portanto, não podem discriminar
palavras que possuam significados diferentes. A lematização, por outro lado,
corresponde a um processo computacionalmente mais complexo, pois requer a
identificação prévia da classe gramatical de cada palavra ou a inscrição dos

Processamento de Linguagem Natural – Página 39 de 50


respectivos lemas em um dicionário pré-estabelecido. O Código 3.8 demonstra como
utilizar a lematização para palavras ou sentenças pertencentes à língua inglesa, além
de demonstrar a importância de fornecer a classe gramatical correta para cada
palavra. A biblioteca NLTK possui um módulo de lematização que utiliza a base de
dados WordNet juntamente a informações sintáticas e semânticas, assim como
classes gramaticais e contexto, para obter o lema de forma eficiente (ver Seção 2.4.1).

3.5. Representações

Este capítulo introduziu, de maneira sucinta, técnicas de pré-processamento


e normalização textual. Em minha página pessoal14, o leitor encontrará mais um
tutorial voltado para a utilização das ferramentas previamente descritas: NLTK,
SpaCy, TextBlob, WordNet etc. Nas videoaulas interativas, serão abordadas
maneiras de representar palavras computacionalmente na forma de vetores
numéricos, desempenhando um papel fundamental no processamento da linguagem
natural. Dentre eles, podemos destacar a representação denominada one-hot
encoding e outras abordagens com representação distribuída.

One-hot encoding mapeia cada palavra para um único índice do vocabulário,


podendo ser bastante eficiente para armazenamento e computação. No entanto, essa
representação não é capaz de armazenar informações semânticas e sintáticas entre
diferentes palavras. Por outro lado, representações distribuídas foram propostas para
sanar essas limitações. Estratégias como matrizes de co-ocorrência carregam
informações semânticas das palavras existentes em um corpus, comportando-se
como uma matriz de afinidade. Dessa forma, é realizada a contagem de vezes que
cada palavra aparece dentro de uma janela deslizante com tamanho específico em
torno da palavra de interesse. O Exemplo 3.2 ilustra o processo de obtenção da matriz
de coocorrência com janelas de tamanho unitário.

14 https://vareto.com.br/python-nlp-preprocessing.html

Processamento de Linguagem Natural – Página 40 de 50


▪ Exemplo 3.2 Pense em um corpus contendo as seguintes sentenças:

1. Tudo que é eterno está eternamente acima do tempo.

2. A eternidade é um relógio sem ponteiros.

3. O tempo é um vestígio de eternidade.

Após executar diferentes estratégias de pré-processamento textual


(normalização, tokenização de palavras, remoção de stopwords, lematização etc.), o
conjunto textual diminui em tal grau que as novas sentenças são compostas por
tokens na seguinte maneira:

1. [‘tudo’, ‘eterno’, ‘acima’, ‘tempo’]

2. [‘eterno’, ‘relógio’, ‘ponteiro’]

3. [‘tempo’, ‘vestígio’, ‘eterno’]

Por consequência, a versão final do conjunto textual é definida como


vocabulário = [‘acima’, ‘eterno’, ‘ponteiro’, ‘relógio’, ‘tempo’, ‘tudo’, ‘vestígio’]. A matriz
de coocorrência contendo a contagem das palavras relevantes que “sobreviveram”
aos métodos de pré-processamento é exibida abaixo, onde a janela deslizante usada
na contagem de coocorrências possui tamanho = 1 e as palavras eternamente e
eternidade foram agrupadas sob o lema eterno. A partir dessa matriz, diversas
estratégias baseadas em modelagem do espaço vetorial, como a Latent Semantic
Analysis (LSA) [28], podem ser empregadas a fim de obter representações mais
compactas.

Processamento de Linguagem Natural – Página 41 de 50


Durante o restante curso, o aluno terá contato com outras formas de
representação de palavras, como Word2Vec, GloVe etc. Ademais, aprenderá
técnicas e ferramentas para o desenvolvimento e implantação de métodos em PLN
utilizando abordagens de Machine e Deep Learning. Todo esse conhecimento é
essencial para todos aqueles que desejam desenvolver soluções que envolvem a
análise automatizada de texto ou fala nas mais diversas áreas. Por essa razão,
reforço a necessidade da compreensão de todo o conteúdo visto até então juntamente
à análise minuciosa dos dois tutoriais disponibilizados nos Capítulos 1 e 3. A
dedicação de cada aluno, no que tange às principais bibliotecas desenvolvidas para
o PLN, exerce grande influência no decorrer da disciplina de Processamento de
Linguagem Natural.

Encontro você nas aulas interativas...

Rafael H. Vareto.

Processamento de Linguagem Natural – Página 42 de 50


Referências

ALGULIYEV, Rasim M. et al. COSUM: Text summarization based on clustering and


optimization. Expert Systems, [Milton Keynes, UK], v. 36, n. 1, 2019. (ver página 17).
Disponível em: https://onlinelibrary.wiley.com/doi/abs/10.1111/exsy.12340. Acesso
em: 23 jun. 2021.

BACKUS, John W. et al. Revised report on the algorithmic language ALGOL 60. The
Computer Journal, Oxford, v. 5, n. 4, p. 349-367, jan.1963. Disponível em:
https://academic.oup.com/comjnl/article/5/4/349/316410. Acesso em: 23 jun. 2021.
(ver página 10).

BAHDANAU, Dzmitry; CHO, Kyunghyun; BENGIO, Yoshua. Neural machine


translation by jointly learning to align and translate. In: INTERNATIONAL
CONFERENCE ON LEARNING REPRESENTATIONS (ICLR), 3., 2015, San Diego,
CA. Proceedings [...]. ICLR: [S.l.], 2015. Disponível em:
https://arxiv.org/pdf/1409.0473.pdf. Acesso em: 22 jun. 2021. (ver página 17).

BILAL, Muhammad et al. Sentiment classification of Roman-Urdu opinions using


Naïve Bayesian, Decision Tree and KNN classification techniques. Journal of King
Saud University- Computer and Information Sciences, Riyadh, v. 28, n. 3, p. 330-
344, jul. 2016. Disponível em:
https://www.sciencedirect.com/science/article/pii/S1319157815001330. Acesso em:
23 jun. 2021. (ver página 17).

CHEN, Yukun et al. A study of active learning methods for named entity recognition in
clinical text. Journal of Biomedical Informatics, [Amsterdam], v. 58, p. 11-18, dec.
2015. Disponível em:
https://www.sciencedirect.com/science/article/pii/S1532046415002038. Acesso em:
23 jun. 2021. (ver página 16).

CHOMSKY, Noam. Three models for the description of language. IRE Transactions
on Information Theory, Piscataway, v. 2, n. 3, p. 113-124, sep. 1956. Disponível em:
https://ieeexplore.ieee.org/document/1056813. Acesso em: 23 jun. 2021. (ver páginas
5, 9).

Processamento de Linguagem Natural – Página 43 de 50


CRAWFORD, Michael et al. Survey of review spam detection using machine learning
techniques. Journal of Big Data, [Basingstoke, UK], v. 2, p.1-24, oct. 2015.
Disponível em: https://journalofbigdata.springeropen.com/articles/10.1186/s40537-
015-0029-9. Acesso em: 23 jun. 2021. (ver página 18).

CUAYÁHUITL, Heriberto et al. Ensemble-based deep reinforcement learning for


chatbots. Neurocomputing, Amsterdam, v. 366, n. 13, p. 118-130, nov. 2019.
Disponível
em:https://www.sciencedirect.com/science/article/abs/pii/S0925231219311269.
Acesso em: 23 jun. 2021. (ver página 18).

EDDY, Sean R. What is a hidden Markov model? Nature Biotechnology, London, v.


22, n. 10, p. 1315-1316, oct. 2004. Disponível em:
https://www.nature.com/articles/nbt1004-1315.pdf. Acesso em: 21 jun. 2021. (ver
página 16).

EISENSTEIN, Jacob. Natural language processing. Cambridge: MIT Press, 2018.


(ver páginas 12, 14).

FANG, Changjian et al. Word-sentence co-ranking for automatic extractive text


summarization. Expert Systems with Applications, Amsterdam, v. 72, p. 189-195,
apr. 2017. Disponível em:
https://www.sciencedirect.com/science/article/abs/pii/S0957417416306959. Acesso
em: 23 jun. 2021. (ver página 17).

GALES, Mark; YOUNG, Steve. Application of Hidden Markov Models in Speech


Recognition. Foundations and Trands in Signal Processing,[Stanford], v. 1, n. 3,
p. 195-304, 2007. Disponível em: https://mi.eng.cam.ac.uk/~mjfg/mjfg_NOW.pdf.
Acesso em: 23 jun. 2021. (ver página 18).

GARCÍA-HERNÁNDEZ, René Arnulfo; LEDENEVA, Yulia. Word sequence models for


single text summarization. In: INTERNATIONAL CONFERENCES ON ADVANCES IN
COMPUTER-HUMAN, 2., 2009, Cancun. Proceedings [...]. IEEE: Piscataway, 2009,
p. 44-48. Disponível em: https://ieeexplore.ieee.org/document/4782490. Acesso em:
23 jun. 2021. (ver página 17).

Processamento de Linguagem Natural – Página 44 de 50


GRAVES, Alex; JAITLY, Navdeep. Towards end-to-end speech recognition with
recurrent neural networks. In: INTERNATIONAL CONFERENCE ON MACHINE
LEARNING, 2014, Beijing. Proceedings [...]. PMLR: [S.l.], 2014. Disponível em:
http://proceedings.mlr.press/v32/graves14.pdf. Acesso em: 23 jun. 2021. (ver página
18).

GRAVES, Alex; MOHAMED, Abdel-rahman; HINTON, Geoffrey. Speech recognition


with deep recurrent neural networks. In: IEEE INTERNATIONAL CONFERENCE ON
ACOUSTICS, SPEECH AND SIGNAL PROCESSING, 2013, Vancouver.
Proceedings [...]. IEEE: Piscataway, 2013. Disponível em:
https://ieeexplore.ieee.org/document/6638947. Acesso em: 23 jun. 2021. (ver página
18).

HABERNAL, Ivan; PTÁCEK, Tomáš; STEINBERGER, Josef. Supervised sentiment


analysis in Czech social media. Information Processing & Management,
Amsterdam, v. 50, n. 5, p. 693-707, sept. 2014. Disponível em:
https://www.sciencedirect.com/science/article/abs/pii/S0306457314000399. Acesso
em: 23 jun. 2021. (ver página 17).

HAN, Song Han et al. Ese: Efficient speech recognition engine with sparse LSTM on
FPFA. In: ACM/SIGDA INTERNATIONAL SYMPOSIUM ON FIELD-
PROGRAMMABLE GATE ARRAYS, 2017, Monterey. Proceedings [...]. Association
for Computing Machinery: New York, 2017. Disponível em:
https://arxiv.org/pdf/1612.00694.pdf. Acesso em: 23 jun. 2021. (ver página 18).

HINGU, Dharmendra; SHAH, Deep; UDMALE, Sandeep S. Automatic text


summarization of Wikipedia articles. In: INTERNACIONAL CONFERENCE ON
COMMUNICATION, INFORMATION & COMPUTING TECHNOLOGY, 2015, Mumbai.
Proceedings [...]. IEEE: Piscataway, 2015. Disponível em:
https://ieeexplore.ieee.org/document/7045732. Acesso em: 24 jun. 2021. (ver página
17).

JANSEN, Wim. Esperanto: a language made transparente? Linguistics in


Amsterdam, Amsterdam, v. 4, n. 2, p. 57-74, 2011. Disponível em:

Processamento de Linguagem Natural – Página 45 de 50


https://pure.uva.nl/ws/files/1177598/102035_Esperanto_transparent.pdf. Acesso em:
23 jun. 2021. (ver página 11).

JOHNSON, Melvin et al. Google’s multilingual neural machine translation system:


Enabling zero-shot translation. Transactions of the Association for Computational
Linguistics, [S.l.], v. 5, p. 339-351, 2017. Disponível em:
https://transacl.org/index.php/tacl/article/view/1081. Acesso em: 23 jun. 2021. (ver
página 17).

JUANG, Biing Hwang; RABINER, Laurence R. Hidden Markov models for speech
recognition. Technometrics, Alexandria, v. 33, n.3, p. 251-272, aug. 1991. Disponível
em: https://www.jstor.org/stable/1268779. Acesso em: 23 jun. 2021. (ver página 18).

KIM, Joo-Kyung et al. Cross-lingual transfer learning for POS tagging without cross-
lingual resources. In: CONFERENCE ON EMPIRICAL METHODS IN NATURAL
LANGUAGE PROCESSING, 2017, Copenhagen. Proceedings [...]. Association for
Computational Linguistics (ACL): Stroudsburg, 2017. p. 2832-2838. Disponível em:
https://www.aclweb.org/anthology/D17-1.pdf. Acesso em: 24 jun. 2021. (ver página
16).

LAN, Wuwei; XU, Wei. Neural network models for paraphrase identification, semantic
textual similarity, natural language inference, and question answering. In:
INTERNATIONAL CONFERENCE ON COMPUTATIONAL LINGUISTICS, 27., 2018,
Santa Fé. Proceedings [...]. Association for Computational Linguistics: Stroudsburg,
2017. p.3890-3902. Disponível em: https://www.aclweb.org/anthology/C18-1.pdf.
Acesso em: 24 jun. 2021. (ver página 18).

LANDAUER, Thomas K.; FOLTZ, Peter W.; LAHAM, Darrell. An introduction to latent
semantic analysis. Discourse Processes, [S.l.], v. 25, n. 2-3, p. 259-284, 1998.
Disponível em: https://www.tandfonline.com/doi/abs/10.1080/01638539809545028.
Acesso em: 23 jun. 2021. (ver página 17).

LI, Chen; LIU, Yang. Joint POS tagging and text normalization for informal text. In:
INTERNATIONAL JOINT CONFERENCE ON ARTIFICIAL INTELLIGENCE, 24.,
2015, Buenos Aires. Proceedings [...]. AAAI Press; International Joint Conferences

Processamento de Linguagem Natural – Página 46 de 50


on Artificial Intelligence: Palo Alto, 2015. Disponível em:
https://www.ijcai.org/Proceedings/15/Papers/182.pdf. Acesso em: 24 jun. 2021. (ver
página 16).

LI, Fei et al. A neural joint model for entity and relation extraction from biomedical text.
BMC Bioinformatics, London, v. 18, p. 1-11, 2017. Disponível em:
https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-017-1609-9.
Acesso em: 23 jun. 2021. (ver página 16).

LOPEZ, Adam. Statistical machine translation. ACM Computing Surveys, New York,
v. 40, n. 3, p. 1-49, 2008. Disponível em:
https://dl.acm.org/doi/10.1145/1380584.1380586. Acesso em: 23 jun. 2021. (ver
página 17).

LÓPEZ, Gustavo; QUESADA, Luis; GUERRERO, Luis A. Alexa vs. Siri vs. Cortana
vs. Google Assistant: a comparison of speech-based natural user interfaces. In:
INTERNATIONAL CONFERENCE ON HUMAN FACTORS AND SYSTEMS
INTERACTION, 2017, Los Angeles. Proceedings [...]. Springer: [Berlin], 2018.
Disponível em: https://link.springer.com/chapter/10.1007/978-3-319-60366-7_23.
Acesso em: 23 jun. 2021. (ver página 18).

LUONG, Minh-Thang; MANNING, Christopher D. Stanford neural machine translation


systems for spoken language domains. In: INTERNATIONAL WORKSHOP ON
SPOKEN LANGUAGE TRANSLATION, 12., 2015, Da Nang, Vietnã. Proceedings
[...]. IWSLT: [S.l.], 2015. Disponível em:
https://workshop2015.iwslt.org/downloads/IWSLT_2015_EP_19.pdf. Acesso em: 24
jun. 2021. (ver página 17).

MILLER, George A.; HEISE, George A.; LICHTEN, William. The intelligibility of speech
as a function of the context of the test materials. Journal of Experimental
Psychology, [S.l.], v. 41, n. 5, p. 329-335, mai. 1951. Disponível em:
http://linguistics.berkeley.edu/~kjohnson/readings/Miller_Heise_Lichten_1951%20co
py.pdf. Acesso em: 23 jun. 2021. (ver página 14).

Processamento de Linguagem Natural – Página 47 de 50


MORAES, Rodrigo; VALIATI, João Francisco; GAVIÃO NETO, Wilson P. Document-
level sentiment classification: An empirical comparison between SVM and ANN.
Expert Systems with Applications, Amsterdam, v. 40, n. 2, p. 621-633, feb. 2013.
Disponível em:
https://www.sciencedirect.com/science/article/abs/pii/S0957417412009153. Acesso
em: 23 jun. 2021. (ver página 17).

NURUZZAMAN, Mohammad; HUSSAIN, Omar Khadeer. A survey on chatbot


implementation in customer service industry through deep neural networks. In: IEEE
INTERNATIONAL CONFERENCE ON e-BUSINESS ENGINEERING, 15., 2018,
Xi’an. Proceedings [...]. IEEE: Piscataway, 2018. Disponível em:
https://ieeexplore.ieee.org/document/8592630. Acesso em: 24 jun. 2021. (ver página
18).

OWOPUTI, Olutobi et al. Improved part-of-speech tagging for online conversational


text with word clusters. In: CONFERENCE OF THE NORTH AMERICAN CHAPTER
OF THE ASSOCIATION FOR COMPUTATIONAL LINGUISTICS: HUMAN
LANGUAGE TECHNOLOGIES, 2013, Atlanta. Proceedings [...]. Association for
Computational Linguistics: Stroudsburg, 2013. Disponível em:
https://www.aclweb.org/anthology/N13-1039.pdf. Acesso em: 24 jun. 2021. (ver
página 16).

PANG, Bo; LEE, Lillian; VAITHYANATHAN, Shivakumar. Thumbs up? Sentiment


classification using machine learning techniques. In: CONFERENCE ON EMPIRICAL
METHODS IN NATURAL LANGUAGE PROCESSING, 2002, Philadelphia.
Proceedings [...]. Association for Computational Linguistics: Stroudsburg, 2002.
Disponível em: https://www.aclweb.org/anthology/W02-1011.pdf. Acesso em: 24 jun.
2021. (ver página 17).

QIU,Xipeng; HUANG, Xuanjing. Convolutional neural tensor network architecture for


community-based question answering. In: INTERNATIONAL JOINT CONFERENCE
ON ARTIFICIAL INTELLIGENCE, 24., 2015, Buenos Aires. Proceedings [...]. AAAI
Press; International Joint Conferences on Artificial Intelligence: Palo Alto, 2015.

Processamento de Linguagem Natural – Página 48 de 50


Disponível em: https://www.ijcai.org/Proceedings/15/Papers/188.pdf. Acesso em: 24
jun. 2021. (ver página 18).

RAMOS, Marcus Vinícius Midena. Linguagens Formais e Autômatos. Petrolina:


Universidade Federal do Vale do São Francisco, 2008 (ver páginas 7, 12).

RUSSEL, Stuart et al. Artificial intelligence: a modern approach. London: Pearson


Education Limited, 2013 (ver página 14).

SEVERYN, Aliaksei et al. Multi-lingual opinion mining on YouTube. Information


Processing & Management, Amsterdam, v. 52, n.1, p. 46-60, jan. 2016. Disponível
em: https://www.sciencedirect.com/science/article/abs/pii/S0306457315000400.
Acesso em: 23 jun. 2021. (ver página 17).

SHIEBER, Stuart M. The design of a computer language for linguistic information. In:
INTERNATIONAL CONFERENCE ON COMPUTATIONAL LINGUISTICS, 10., 1984,
Stanford. Proceedings [...]. Association for Computational Linguistics: Stroudsburg,
1984. Disponível em: https://dl.acm.org/doi/pdf/10.3115/980491.980566. Acesso em:
24 jun. 2021. (ver página 6).

SIERRA, Basilio et al. Histogram distance-based Bayesian Network structure learning:


A supervised classification specific approach. Decision Support Systems,
Amsterdam, v. 48, n. 1, p. 180-190, dec. 2009. Disponível em:
https://www.sciencedirect.com/science/article/abs/pii/S0167923609001742. Acesso
em: 23 jun. 2021. (ver página 17).

SIPSER, Michael. Introduction to the Theory of Computation. Boston: Cengage


Learning, 2012 (ver páginas 9, 12).

VIEIRA, Newton José. Introdução aos Fundamentos da Computação - Linguagens


e Máquinas. São Paulo: Cengage Learning Brasil, 2004. (ver páginas 7, 12, 14).

VINODHINI, G.; CHANDRASEKARAN, R. M. A comparative performance evaluation


of neural network based approach for sentiment classification of online reviews.
Journal of King Saud University-Computer and Information Sciences, Riyadh, v.

Processamento de Linguagem Natural – Página 49 de 50


28, n. 1, p. 2-12, jan. 2016. Disponível em:
https://www.sciencedirect.com/science/article/pii/S1319157815001020#!. Acesso
em: 23 jun. 2021. (ver página 17).

Xie Chen et al. Recurrent neural network language model training with noise
contrastive estimation for speech recognition. In: IEEE INTERNACIONAL
CONFERENCE ON ACOUSTICS, SPEECH AND SIGNAL PROCESSING, 2015,
Brisbane. Proceedings [...]. IEEE: Piscataway, 2015. Disponível em:
https://ieeexplore.ieee.org/document/7179005. Acesso em: 23 jun. 2021. (ver página
18).

XU, Jingjing et al. Diversity-promoting GAN: A cross-entropy based generative


adversarial network for diversified text Generation. In: CONFERENCE ON
EMPIRICAL METHODS IN NATURAL LANGUAGE PROCESSING, 2018, Brussels.
Proceedings [...]. Association for Computational Linguistics: Stroudsburg, 2018.
Disponível em: https://www.aclweb.org/anthology/D18-1428.pdf. Acesso em: 24 jun.
2021. (ver página 17).

ZHANG, Tianyang; HUANG, Minlie; ZHAO, Li. Learning structured representation for
text classification via reinforcement learning. In: AAAI CONFERENCE ON
ARTIFICIAL INTELLIGENCE, 32., 2018, New Orleans. Proceedings [...]. AAAI Press:
Palo Alto, 2018. Disponível em: https://www.microsoft.com/en-us/research/wp-
content/uploads/2017/11/zhang.pdf. Acesso em: 24 jun. 2021. (ver página 17).

ZHIYUAN, Liu; YANKAI, Lin; MAOSONG, Sun. Representation Learning for Natural
Language Processing. Basingstoke, UK: Springer Nature, 2020 (ver página 27).

Processamento de Linguagem Natural – Página 50 de 50

You might also like