Penetra surdamente no hiperespaço das palavras

Penetra surdamente no reino das palavras.
 Lá estão os poemas que esperam ser escritos.
 Estão paralisados, mas não há desespero,
 há calma e frescura na superfície intata.
 Ei-los sós e mudos, em estado de dicionário.
Drummond — Procura da Poesia.

Se as palavras compusessem um reino, como ele seria? Como todo reino que se presta, seria dividido em províncias, condados, por sua vez particionados em municípios, vilas e aldeias. Manda nossa obsessão por ordem que as palavras semelhantes sejam agrupadas e o todo forme um organismo coerente.

Como começar tal organização? Podemos optar pelo critério sintático: as classes gramaticais (substantivos, adjetivos, verbos etc.) devem constituir a principal divisão. No entanto, isso pode levar a algumas confusões: por exemplo, guarda é um substantivo ou um verbo (conjugação de guardar)?

Analisemos então um critério semântico, ou seja, categorizar as palavras pelo significado que elas têm. Poderíamos agrupar as palavras pelo domínio a que pertencem. Haveria o Principado dos Seres Vivos, em que habitam árvore, bem-te-vi, macaco, abelha, fauna, flora; o Arquiducado dos Veículos, onde ficam moto, carro, busão, guincho. Dentre esses dois, onde ficaria a cegonha?

As palavras são polissêmicas: podem ser empregadas em um domínio diferente do original porque em algum sentido, seu valor pode ser emprestado a outro uso. Isso pode ocorrer das maneiras mais bizarras e imprevisíveis: a cegonha ganhou o posto de animal que traz os bebês (sabe-se lá por que), e os veículos que trazem novos carros, por analogia, foram chamados de cegonha.

Diferentemente do que diz a gramática tradicional, na língua as coisas podem ser impossíveis de separar em caixinhas. Além disso, as categorias imagináveis para classificação são infinitas.

Assim como províncias não são suficientes para administrar um reino, talvez as palavras não possam ser especificadas satisfatoriamente recorrendo apenas a uma categoria. Vamos usar várias delas — é a proposta da semântica lexical. As palavras podem ser descritas como combinação de traços semânticos:

VACA = BOVINO + FÊMEA + ADULTO

Troque um dos traços, e não será mais uma vaca. Troque bovino por equino, e terá uma égua. Se no lugar de fêmea tivermos macho, haverá um touro. Não sendo mais adulto, mas filhote, será uma bezerra.

Essa tentativa representa um avanço, mas ainda é problemática porque os traços não são apenas binários, mas podem variar num espectro. Por exemplo, entre cão e anêmona, qual contém mais do traço animal? Embora a biologia os coloque nessa mesma categoria, nossa experiência linguística nos impede de imaginar um cnidário quando falamos de um animal qualquer.

Desistamos de absolutos. As palavras serão organizadas num contínuo, umas delas vão ficar no meio do caminho, correspondendo menos do que se espera do ideal para tal categoria.

Logo se percebe que a tarefa de classificação das palavras seria bastante arbitrária, ou demasiado árdua. Não sabemos nem o número de categorias que seriam necessárias. Podemos classificar as palavras entre gênero masculino e feminino, singular e plural, passado, presente e futuro, causa e efeito (dar vs. receber), aspecto imperfectivo ou perfectivo (ir vs. chegar), opinião do falante (admirado vs. estupefato), formalidade (troço vs. objeto)…

Uma nova abordagem

Acelerada pelos avanços em computação, surge a semântica distribucional. O pressuposto básico é que palavras que podem ocupar as mesmas posições na frase têm alguma correlação de significado. Por exemplo:

(…) ontem o rei ________ que (…)

Algumas palavras poderiam preencher essa lacuna: disse, explicava, quis, falou, pedia. Todas elas são verbos conjugados em tempo pretérito (conforme exige ontem) e na terceira pessoa do singular (conforme exige o rei). Além disso, são verbos que aceitam orações subordinadas objetivas diretas. Ou seja, para uma palavra entrar na lacuna, é necessário que ela concorde com determinados critérios sintáticos.

(…) a ________ vai falar comigo (…)

Aqui, exige-se um substantivo feminino (solicitado pelo artigo), que além disso deve ter o traço humano, pois fala. O traço humano por sua vez, pressupõe o traço animado: capaz de movimento próprio espontâneo. A lacuna aceita, por exemplo, coordenadora, vizinha ou médica.

A nossa esperança é que, fazendo um número suficiente de comparações de lacunas, encontremos palavras que se relacionam de alguma maneira. Se essa expectativa faz algum sentido, por outro, ainda é um pouco vaga. Teremos que fazer um experimento para testar a hipótese.

Quando digo um número suficiente de comparações de lacunas, é um número realmente grande. Por sorte, hoje os computadores podem fazer esse trabalho pesado por nós, de forma a encontrar correlações num texto de mais de 5 milhões de palavras múltiplas vezes por segundo.

Alguns detalhes desse texto: tal como em meu experimento anterior, extraí o corpus de legendas de filmes. Na verdade, usei uma fração das legendas do OpenSubtitles para o ano de 2002, considerando apenas o português brasileiro. Trabalhei também com textos extraídos de artigos da Wikipédia.

Vejamos as palavras mais comuns nos textos:

As palavras mais comuns são as chamadas palavras funcionais ou gramemas: por si, elas não tem um conteúdo, ou apontam para um referente fixo no mundo. Enquanto conjunções (que, e, se, mas, como), articulam frases; pronomes, advérbios e os verbos de ligação ancoram o discurso em suas coordenadas enunciativas — pessoa, espaço e tempo (você, eu, ele, isso / aqui / é, está); ligam objetos indiretos e complementos nominais (de, para, por, com, em); especificam substantivos (artigos). Na verdade, essas poucas palavras já representam um número expressivo do total de palavras.

A distribuição de palavras é tal que as 10 primeiras palavras já representam mais de 20% das ocorrências; as 100 primeiras palavras somam mais de metade das ocorrências. Não deixe que isso subestime a dificuldade em aprender uma língua estrangeira: você não vai ter muita fluência sabendo apenas algumas dúzias de preposições, artigos e pronomes. Além disso, conhecer 90% das palavras de uma língua implica em ignorar o significado de uma a cada dez palavras — pode ser bem irritante. Mas também não é para tanto: a língua tem suas regularidades e muitas palavras são formadas a partir da combinação de partes mais simples.

À deriva num espaço abstrato

Baseado nas nossas indagações da seção anterior, vamos submeter as palavras a um processo de organização, uma heurística — que nada mais é do que uma palavra sofisticada para dizer: um palpite escolado. Não temos como provar que nada disso vá funcionar, temos que levar a cabo experimentos (no meu caso, alguém já tinha quebrado a cabeça antes, mas com uma heurística mais complexa— redes neurais).

Começamos o processo distribuindo aleatoriamente todas as nossas palavras num espaço:

Porém, como vimos, dois eixos (horizontal e vertical) provavelmente não são categorias suficientes para agrupar as palavras. Não podemos antever quantas categorias seriam exigidas, mas chutaremos um número alto para garantir que não faltem categorias: 350. Ou seja, cada palavra está distribuída num hiperespaço de 350 dimensões.

Como assim? Explico. Um ponto num espaço de três dimensões pode ter suas coordenadas atribuídas por uma trinca ordenada (X, Y, Z) — ou, o valor que ela recebe no eixo leste-oeste, no eixo norte-sul, e na altitude. Um ponto num espaço de N dimensões é representado por uma n-upla (lê-se ênupla), um conjunto ordenado de coordenadas, com tantas coordenadas quanto houver dimensões no espaço. Ou seja, para qualquer ponto P,

P = (X1, X2, X3, …, X348, X349, X350), X[i] ∈ ℝ

O que um espaço de 350 dimensões representa? Perguntam a um matemático como ele consegue visualizar um espaço de 9 dimensões. O matemático responde, “É simples. Basta eu imaginar um espaço N-dimensional, e fazer N=9.”

Engraçada ou não, há verdade na anedota. A matemática prepara um tratamento formal tal que podemos discutir entidades em dimensões maiores que o nosso espaço tridimensional ainda mantendo nossas intuições sobre o que deve ser um espaço: uma reta é o caminho mais curto entre dois pontos, o Teorema de Pitágoras, o que é um ponto médio, etc.

Certo, mas como você visualiza um hiperespaço? É possível retrucar: como você visualiza três dimensões? Nossos olhos veem em apenas duas dimensões— nossa retina é uma superfície bidimensional. Escher explora a ilusão da nossa visão tridimensional em seus trabalhos, nos quais a técnicas de perspectiva, luz e sombra nos fazem imaginar figuras que seriam impossíveis num espaço tridimensional real.

Apesar de vermos em duas dimensões, altura e largura, com um número suficiente de vistas de um objeto podemos imaginá-lo na distância e profundidade. É por isso que os animais têm dois (ou mais) olhos, com duas vistas o cérebro já é capaz de inferir a distância de um objeto. Experimente fechar um dos olhos, e tocar indicadores como na figura abaixo, e verá como seu senso de distância fica prejudicado.

Outros fatores contribuem para nossa experiência tridimensional da realidade, a despeito de nossa visão não permiti-la: o jogo de luz e sombra, e nossa vivência cotidiana que permite estimar coisas como a largura da rua, a altura de uma pessoa, de um muro, etc (é isso que permite ilusões como a do Quarto de Ames).

São deduções como essas que vamos empregar para visualizar nosso hiperespaço: podemos vislumbrá-lo a partir de vários ângulos diferentes, como o arquiteto que imagina a casa a partir de uma planta, ou o objeto que é deduzido a partir de sua sombra. Também podemos condensar o número de dimensões através de métodos matemáticos como a Análise de Componentes Principais, a Distribuição Estocástica de Vizinhos (t-SNE) e a Similaridade entre Cossenos.

Com os pontos espalhados aleatoriamente, podemos começar a triá-los: quando descobrimos que palavras diferentes preenchem a mesma lacuna, aproximamos as palavras em questão do ponto médio delas.

Algumas noites depois…

Através de tentativas e erros, aperfeiçoando o código quanto à tempo de execução e memória consumida, pôde-se processar o corpus de 30 milhões de caracteres e 64936 palavras distintas.

É importante considerar que o número de palavras não é tão grande assim: muitas são erros de ortografia ou digitação, abreviações (vc vs. você) e muitas são números (2, dois, duas, 20 e 22 são todas palavras distintas entre si). Outra consideração importante é que o programa não distingue itens lexicais compostos por mais de uma palavra, como a gente, por enquanto, de fato. Isso impede que o programa processe línguas analíticas ou que não separem as palavras com espaços, como é o caso do mandarim.

Afinal, temos abaixo visualizações dos resultados. Clique aqui para baixar as imagens em tamanho original.

Reparamos que várias palavras semelhantes estão próximas umas das outras. Meses junto de meses (aquela bola meio indiscernível junto ao centro), números próximos de números, séculos perto de séculos. Vemos agrupamentos de nomes de reis (guilherme, carlos, henrique), membros dos Beatles /apóstolos (paul, john), palavras da mesma vizinhança semântica (território, reino, catedral, comuna, castelo, convento / casa, população, área / personagem, filmes), pares de sinônimos e antônimos. Em alguns casos, parece não haver relação alguma. Em outros, a relação é vaga e o ceticismo faz pensar se não estamos forçando uma correlação onde agiram apenas forças do acaso.

Mais resultados (aqui o corpus parece ter uma inclinação a Senhor dos Anéis). Esse último mapa é uma visualização das 500 palavras mais frequentes, excluídas as 75 primeiras (que, como vimos, são geralmente palavras funcionais). Além das relações acima, podemos ver algumas classes de palavras se agrupando (numerais: dois, duas, segundo; pronomes demonstrativos: esses, estes, aqueles / deste, neste; advérbios de lugar: trás, dentro, fora), flexões de um mesmo verbo (olhe, olha / teria, tivesse / estava, esteja). Verbos no mesmo tempo e modo também estão juntos: pensei, achei / fazendo, acontecendo / ficar, deixar, passar.

Uma função implementada no programa permite que vejamos quais são as palavras mais próximas a uma palavra desejada (à direita das palavras está a razão entre a distância até a palavra comparada e a distância média entre duas palavras quaisquer).

Da coluna da esquerda para a coluna da direita: palavras mais próximas de pensar, esse, mulherpessoa.

Tá, e daí?

Os resultados apresentados são rudimentares e restam muitas dúvidas: quão eficaz é a heurística implementada? Como sua qualidade pode ser medida, e como o tamanho do corpus, número de dimensões e número de comparações afetam os resultados? Como os resultados poderiam ser visualizados mais adequadamente? Tudo isso é assunto para investigações posteriores, dispondo — esperançosamente — de mais tempo e mais poder computacional.

É possível encontrar resultados muito mais refinados derivados de pesquisas análogas. Talvez o mais impressionante seja essa imagem (Turian et al., 2010). O Centro de Pesquisas em Leitura disponibiliza vários estudos— que combinam pesquisas com voluntários — , incluindo essa plataforma (muito amigável, porém bugada) de consulta aos resultados.

No fim das contas, estudos como esses permitem o desenvolvimentos de recursos como autocompletar ou autocorreção, encontrados em qualquer smartphone; dicionários de sinônimos e analogias, melhores amigos de revisores e poetas; traduções assistidas por computador. Também são um importante elo entre a linguística e a psicologia.

Download do código-fonte

O projeto foi desenvolvido em Python3, com os módulos nativos, além de NumPy, PyLab e mais alguns módulos escritos por terceiros. Clique aqui para baixar o código-fonte, junto com os corpora empregados e os programas geradores dos corpora.