Vamos imaginar que estamos sozinhos num quarto.

Olhamos em volta. O quarto não tem janelas nem portas, apenas uma pequena fenda numa das paredes e prateleiras cheias de livros e volumes. Os livros estão cheios de símbolos estranhos e acompanhados de instruções em inglês que nos ajudam a convertê-los em novos símbolos, igualmente estranhos.

Eventualmente, um pedaço de papel cai através da ranhura. Contém uma série de símbolos que não entendemos, semelhantes aos que estão nos livros. Percorremos todas as páginas de todos os livros até encontrarmos os caracteres correspondentes, e seguimos as instruções que dizem para escrevermos abaixo da mensagem original e colocar o papel de volta no lugar. Isto, é o que fazemos.

O que acabámos de ver não eram símbolos sem sentido rabiscados num pedaço de papel. Do outro lado da sala, há nativos chineses, que acabaram de receber uma resposta perfeita para a pergunta que fizeram. Como seriam de esperar concluem que há um nativo chinês na outra sala. Só nós sabemos que este não é o caso.

Esta é a sala chinesa, uma experiência de pensamento muito debatida proposta em 1980, pelo filósofo John Searle. Na experiência, os livros não são dicionários chinês-inglês – não há altura nenhuma em que tentem explicar o significado dos símbolos. Apenas fornecem instruções sobre como obter uma entrada, manipular os caracteres com base nas relações entre si e fornecer uma saída. Os livros agem como um programa de computador.

Searle argumentou que o teste de Turing não era um teste fiável para avaliar a inteligência de uma máquina. Qualquer programa eficaz de IA poderia eventualmente aprender as regras que governam uma língua em particular e dar a ilusão de que tem o mesmo entendimento que um falante nativo.

Estas interações entre computadores e linguagens humanas estão no centro do campo de Processamento de Linguagem Natural, ou PNL.  Reconhecimento de discurso, resumo de textos, análise de sentimentos, tradução automática – o PNL está em todo o lado. E tem vindo a sofrer grandes melhorias desde os anos 80. Embora ainda hajam bastantes traduções automáticas que nos dão vontade de rir, percorremos um longo caminho desde os dias do BabelFish. Nós, sobretudo eu, um americano monolingue que vive em Lisboa, tomamos o acesso a traduções rápidas e razoavelmente precisas como garantido.  

Já se perguntaram como é que os programas de computador são capazes de processar palavras?

Afinal, mesmo as frases mais simples podem ser campos de minas semânticos, cheios de conotações e nuances gramaticais que apenas falantes nativos podem entender instantaneamente. Vejam, por exemplo, a seguinte frase: “Ontem, fui ao banco e dei de caras com um amigo meu.” Como é que um computador pode traduzir isto para francês? A forma mais rudimentar, talvez, seria uma substituição palavra por palavra utilizando um dicionário bilingue. Provavelmente acabaríamos com a tradução: “Hier, je allé à le banque et couru dans mon ami.” Para começar, há problemas de conjugação de verbos e de concordância de género artigo-substantivo (“le banque” deve ser “la banque”). Mas se realmente quiséssemos traduzir desta maneira, poderíamos elaborar um conjunto de regras que tratasse destes problemas gramaticais. Depois de as implementar, podemos acabar com a seguinte tradução: “Hier, je suis allé à banque et j’ai couru dans mon ami.” Definitivamente uma melhoria – mas, nesta versão, ainda parece que estamos a atirar o nosso amigo ao chão.

No momento da redação, o Google Translate – que não é exatamente conhecido por fazer uma tradução perfeita – dá-nos o seguinte: “Hier, je suis allé à banque et suis tombé sur mon ami.” Traduz corretamente o significado da expressão idiomática para encontrar alguém inesperadamente. Este não pode ser um trabalho de substituição palavra por palavra.

Então, o que está a acontecer? Primeiro, devemos considerar a forma como os humanos aprendem a resolver a ambiguidade verbal. Quando experimentamos exemplos suficientes enquanto crianças, começamos a atribuir valor semântico às palavras e abstraímos e extrapolamos esses valores semânticos, dadas as combinações de palavras. Em termos mais simples, sem ser explicitamente ensinados, entendemos o que as palavras significam e como são afetadas pelo contexto. Voltando ao exemplo anterior de inglês para francês, o nosso primeiro instinto é pensar que encontramos o nosso amigo e não que colidimos com ele. Temos experiências do mundo físico e uma vida inteira de informações linguísticas para nos ajudar a contextualizar as coisas.

O que significam as palavras e frases para um computador que só pode entender zeros e uns?

Embora os computadores não possam realmente “entender” a linguagem num sentido humano, treiná-los para gerar informações úteis a partir de textos não é assim tão diferente da nossa própria experiência de aquisição de linguagem. Se mostrarmos exemplos suficientes a um computador, ele começará a reconhecer padrões. Mas qual é o substituto para o entendimento humano? Incorporação de palavras, as unidades fundamentais de qualquer tarefa de processamento de linguagem natural.

Uma incorporação de palavras é essencialmente uma sequência de números – um vetor – que armazena informações sobre o significado da palavra.

O objetivo da criação de incorporações de palavra é duplo: melhorar outras tarefas de PNL, como, por exemplo, a tradução automática, ou analisar semelhanças entre palavras e grupos de palavras.

Devido a uma série de inovações nos métodos de incorporação de palavras, 2018 foi saudado como a era de ouro do PNL. Estes novos métodos produziram melhorias significativas na nossa capacidade de modelar a linguagem e deverão manifestar-se em produtos de consumo e negócios, muito em breve.

Vejamos um exemplo simples para ter uma ideia do que é uma incorporação de palavras.

Suponhamos que queremos criar palavras bidimensionais (isto é, cada palavra é representada por um conjunto de dois números) para certos animais: hipopótamo, cobra, borboleta, ornitorrinco. Além disso, suponhamos que as nossas duas dimensões representam duas características que os animais podem exibir em graus variados: “perigoso” e “peludo.”

A incorporação falsa de palavras para estes animais pode ser a seguinte:

AnimalPerigosoPeludo
Hipopótamo0.850.13
Serpente0.88-0.97
Borboleta-0.91-0.86
Ornitorrinco0.610.79

Neste exemplo, “hipopótamo” é representado pelo vetor [0,85, 0,13], cobra por [0,88, -0,97] e assim por diante. Agora temos uma representação numérica, embora simplista, de cada um desses animais em termos dessas duas características. Todos os tipos de operações matemáticas podem ser executadas nestes vetores para nos fornecer novas informações.

Um exemplo frequentemente citado para destacar o poder das operações de incorporação de palavras é Kinghomem + mulher = rainha. Neste diagrama, pode dizer-se que as setas azuis representam o género e as flechas laranja realeza.

Uma tal operação é comparação. Quão similar é uma palavra com a outra? No nosso exemplo com os animais, podemos imaginar a representação numérica de “hipopótamo,” “serpente,” “borboleta” e “ornitorrinco” num gráfico 2D, como uma linha que se estende desde a origem e passa pelos pontos indicados pelo números. A similaridade destas palavras pode, portanto, ser determinada pelo ângulo entre os seus vetores (chamamos a isto semelhança de cosseno). Essencialmente, as palavras separadas por um ângulo de 90º não têm relação semântica, enquanto as palavras separadas por um ângulo de 180º são perfeitos opostos.

Neste exemplo, a distância entre o hipopótamo e o ornitorrinco é de cerca de 16°, enquanto a distância entre o hipopótamo e a borboleta é de 104°.

É claro que este é apenas um exemplo divertido e hipotético, apenas para explicar o que a incorporação de palavras é e começar a descrever como pode ser útil. Na prática, vetores dimensionais muito mais altos são utilizados (normalmente na casa das centenas), e tentar atribuir campos semânticos como “perigoso” e “peludo” a essas dimensões seria tão difícil quanto injusto, já que o algoritmo não conhece verdadeiramente o significado das palavras. Além disso, são necessários corpora muito grandes, na ordem de dezenas de milhões de palavras, para “aprender” uma incorporação de palavras satisfatória.

Mas primeiro, precisamos de tocar rapidamente num campo da linguística chamado semântica distribucional.

A incorporação de palavras captura com eficiência algo chamado “hipótese distribucional,” apropriadamente resumida pelo linguista britânico John Rupert Firth na sua obra de 1957, ” Uma sinopse da teoria linguística“:

“Vai reconhecer a palavra pelas suas vizinhas.”

O campo da semântica distribuída postula que palavras e frases que ocorrem em contextos semelhantes – distribuições similares – têm significados semelhantes.

Por exemplo, suponhamos que temos um corpus de várias frases:

  • Ele fez festas ao cão fofo.
  • Ele fez festas ao gato felpudo.
  • Ele brincou com o cão.

Para um humano, é imediatamente aparente que gatos e cães estão relacionados (ambos animais de estimação), enquanto “fazer festas” e “brincar” estão relacionados (ambas atividades relacionadas com o animal de estimação). Mas também é imediatamente aparente que não se consegue que um gato vá buscar coisas, embora não por falta de tentativas!

Os métodos computacionais de incorporação de palavras aproveitam essa ideia – que o contexto de uma palavra nos pode ajudar a dizer o que a palavra significa se tivermos visto um número e uma variedade suficientes de exemplos.

Isto leva-nos, por fim, aos algoritmos reais para calcular a incorporação de palavras, como o Word2Vec, introduzido por Tomas Mikolov e os seus colegas investigadores no Google, em 2013. A ideia principal por trás do algoritmo é prever, para qualquer palavra, termos vizinhos, utilizando texto – muito texto – como dados de treino.

Voltemos a uma ligeira variação da nossa frase original: “Ontem eu fui ao banco e li o jornal”.

Com o Word2Vec, primeiro queremos definir uma janela de contexto de palavras – digamos duas. Assim, para cada palavra nos nossos dados de treino, vamos olhar para as duas palavras anteriores e as duas palavras posteriores, criar pares com a palavra atual e cada uma das quatro palavras de contexto. A palavra central é a entrada e a palavra de contexto é a saída, onde queremos utilizar a palavra de entrada para prever a palavra de saída.

Por exemplo, se a palavra central for “banco”, os pares para treinar são: (banco, ao), (bank e), (bank, eu).

Esse processo de criação de pares é repetido para cada palavra da frase, e utilizar a palavra de entrada para prever a palavra de saída de cada par é o que acaba por gerar a palavra de incorporação.

Se conseguirmos imaginar que temos milhões de linhas de texto para treinar, mais emparelhamentos comuns ocorrerão com mais frequência nesses exemplos, o que tornará o modelo mais propenso a aprender essas combinações. Mesmo nesta frase podemos ver que (banco, ao) / (jornal, o) e (fui, eu) / (li, eu) são pares semelhantes, pois seguem os paradigmas substantivo-artigo e pronome-verbo, respetivamente.

O próximo passo é transformar estas palavras em vetores de distribuição, como no exemplo dos animais, onde os números carregam significados uns em relação aos outros.

Para fazer isto, estudamos cada par de treino que criámos e aplicamos o procedimento que se segue. Primeiro, inicializamos a incorporação da palavra de entrada como um vetor de números aleatórios. Depois, uma série de funções matemáticas são aplicadas ao vetor. O resultado destas operações é outro vetor que, por sua vez, representa uma palavra que queremos que seja a palavra de saída do nosso par de treino. Se a palavra prevista não for a nossa palavra de saída, ajustamos ligeiramente os números da palavra de entrada, de forma a que o resultado das operações seja mais próximo do vetor da palavra de saída.

Neste exemplo, o nosso par de treino é (banco, o). Depois de aplicar as funções de saída à palavra de incorporação para “banco” (em laranja), olhamos para o vetor de palavra prevista (verde) para ver se corresponde à palavra de destino, “o”. Finalmente, modificamos a incorporação laranja de “Banco” para que o vetor verde previsto esteja mais próximo de “o.”

Atualizamos estas palavras incorporadas para maximizar a probabilidade de que, dada uma palavra de entrada, a palavra de saída produzida apareça frequentemente como uma palavra de contexto nos dados. Palavras semelhantes terão contextos semelhantes e, portanto, uma incorporação de palavra semelhante.

Para destacar a robustez destes modelos, aqui estão alguns exemplos do documento original que apresenta o Word2Vec.

RelaçãoExemplo 1Exemplo 2Exemplo 3
França: ParisItália: RomaJapão: TóquioFlórida: Tallahassee
Einstein: cientistaMessi: médioMozart: violinistaPicasso: pintor
Microsoft: BallmerGoogle: YahooIBM: McNealyApple: Jobs

Nota: Como pode ser visto, a precisão é muito boa, embora haja claramente muito espaço para melhorias adicionais.

Através da incorporação de palavras, podemos pedir ao modelo que realize analogias como “A França é para Paris, como a Itália é para ___?” Ainda que o computador ainda não entenda, é como se soubesse que Roma é a capital da Itália e que Picasso era um pintor. Com base na hipótese distributiva, traduziria o nome “Steve Jobs” como “Steve Jobs” num artigo de tecnologia, mas “empregos” como “emplois” num relatório económico. Iria detetar que eu não atirei o meu amigo ao chão; apenas o encontrei no banco.

Utilizando este tipo de técnica de incorporação de palavras, vimos resultados surpreendentes em diferentes tarefas, como análises de sentimento, geração de texto e, mais importante para a Unbabel, tradução automática.

Ainda assim, o problema de linguagem da IA não está resolvido – estamos longe de conseguir que os computadores entendam mesmo a linguagem natural. Afinal, a linguagem é uma atividade inerentemente humana, que diferencia a nossa inteligência. É preciso uma mistura de abstração e associação, interação com o mundo físico ao nosso redor e, talvez, um pouco de engenho humano, algo que temos em abundância, mas a IA não tem.

Na busca por máquinas realmente inteligentes, é difícil imaginar qualquer sistema de IA complexo que não tenha a linguagem no seu núcleo. Mas, apesar do que algumas empresas e manchetes querem que se acredite, isto não vai acontecer tão cedo.

Fontes:

Herbelot, A. Distributional semantics: a light introduction. [ https://aurelieherbelot.net/research/distributional-semantics-intro/]

McCormick, C. (2016, 19 de abril). Word2Vec Tutorial – The Skip-Gram Model Obtido de http://www.mccormickml.com

Mikolov, T. et al. Efficient Estimation of Word Representations in Vector Space. 2013. https://arxiv.org/pdf/1301.3781.pdf. Mikolov, T. et al. Distributed Representations of Words and Phrases and their Compositionality. 2013. https://arxiv.org/pdf/1301.3781.pdf.