Palavras como vetores no espaço
Autor: Erick | Publicado: 2013-04-27T06:46:00-07:00

Uma técnica relacionada ao Processamento de Língua Natural que tem me interessado bastante nos últimos tempos são os chamados modelos vetoriais. Sua ideia é considerar cada palavra como um vetor&nbsp;num espaço multi-dimensional. Na prática, significa que cada palavra pode ser entendida como uma sequência de números.

Isso pode gerar várias perguntas:&nbsp;Para que serve um vetor multi-dimensional? Por que usar números?&nbsp;De onde eles saem?&nbsp;

As respostas são simples, apesar do conceito poder parecer estranho. Primeiro, explico a motivação. Esse tipo de técnica começou a ser usado já há algumas décadas, com o objetivo de facilitar técnicas de recuperação de informação, como a busca do Google ou de qualquer site da Internet. A ideia é a seguinte: para ter uma busca mais inteligente, quando se procura por uma determinada palavra, o sistema não deve buscar somente por ela, escrita exatamente da mesma forma. Em vez disso, é interessante buscar palavras relacionadas.

E aí estava uma grande dificuldade: como ensinar ao computador quais palavras são relacionadas com quais, e pior, o quão&nbsp;relacionadas elas são? Elaborar uma ontologia que englobasse uma quantidade gigantesca de palavras é extremamente difícil (mas é o objetivo da&nbsp;WordNet, por exemplo). Buscou-se então uma alternativa automatizada, que surgiu como os tais modelos vetoriais.

A ideia é a seguinte. Dada uma enorme coleção de textos, dos mais variados assuntos e gêneros, monta-se uma tabela para contar as ocorrências de cada palavra em cada texto. Dessa forma, como é de se esperar, palavras relacionadas a um mesmo assunto costumam aparecer nos mesmos documentos.&nbsp;Parece simples, não?

Essa ideia inicial é, de fato, bastante simples. Só que uma tabela dessas fica gigantesca, e difícil de ser utilizada na prática. Pra se ter uma ideia, normalmente a tabela teria algumas dezenas de milhares de palavras, distribuídas em pelo menos algumas dezenas de milhares de documentos, o que dá alguns&nbsp;bilhões&nbsp;de contagens - equivalente a gigabytes de dados. Além do mais, a maioria das contagens seria zero, ou quase isso: praticamente nenhum texto iria conter sequer metade das palavras do vocabulário.

Aí entram algumas técnicas de redução de dimensionalidade, como o PCA (Principal Component Analysis) e LDA (Linear Discriminant Analysis). O que essas técnicas fazem com a tabela de contagens é reduzir o seu tamanho, mas mantendo tanto quanto possível as semelhanças entre as palavras.

Por exemplo: suponhamos que criamos uma tabela contando as ocorrências de umas 50 mil palavras ao longo de 500 mil documentos. Podemos então dizer que cada palavra possui um vetor de 500 mil dimensões. Se calcularmos a distância euclidiana&nbsp;entre os vetores de duas palavras parecidas, o valor deve ser baixo, refletindo que elas costumam ocorrer nos mesmos lugares. Ao se aplicar uma técnica como o PCA, é possível transformar os vetores em outros menores, com algo como 50 ou 100 dimensões, e ainda assim,&nbsp;manter&nbsp;a relação entre palavras semelhantes.

Agora as coisas ficam bem mais manuseáveis. Além dos sistemas de busca que já mencionei, os vetores podem ser usados para análises automáticas, como determinar classes gramaticais: também é comum que palavras de cada classe (substantivo, verbo, preposição, etc.) tenham vetores semelhantes. Naturalmente, muitas palavras podem ter mais de uma classe, dependendo do contexto, mas é aí que entra a inteligência de um classificador para também examiná-lo.

Em minha pesquisa durante o mestrado, usei esse tipo de técnica com o software Semantic Vectors, e tive resultados interessantes.&nbsp;Existem outras técnicas bem diferentes para gerar vetores numéricos para palavras, que também são bem exploradas por pesquisadores.&nbsp;

Aqui&nbsp;há material interessante a respeito dessas técnicas, além de arquivos com vetores que podem ser usados para o que você quiser. Acho particularmente interessante esta figura, onde palavras semelhantes aparecem juntas no espaço. Os vetores dessas palavras foram reduzidos a apenas 2 dimensões (o que certamente causa uma certa perda de precisão) para que elas pudessem ser plotadas.