Machine Learning · Insper · U4.3

Word Embeddings

Um vetor curto e denso por palavra, aprendido pelas companhias que ela tem

À mão (contagens → PPMI, a informação mútua pontual positiva → SVD, a decomposição em valores singulares), por predição (word2vec) e pré-treinados (GloVe)

O problema: cada palavra é uma coluna própria

  • No bag-of-words e no TF-IDF (frequência do termo × frequência inversa nos documentos) as colunas são ortogonais.
  • "carro" e "automóvel" são tão pouco relacionados quanto "carro" e "banana".
  • A representação sabe quais palavras um documento contém, nada sobre o que elas significam.
Um word embedding (vetor de palavra) troca a coluna por um vetor curto e denso (de 50 a 300 números), arranjado para que palavras usadas de jeitos parecidos recebam vetores parecidos.

O caminho desta aula

  1. Contexto → sentidoa hipótese distribucional
  2. Contar e comprimircontagens de coocorrência → PPMI → SVD truncada
  3. Aprender prevendoword2vec, GloVe, fastText
  4. Explorar o espaçovizinhos, analogias, viés, um vetor por palavra
Cada etapa responde a uma pergunta: de onde vem o sentido de uma palavra? → como contagens viram um vetor denso? → um modelo pode aprender os vetores prevendo? → o que os vetores captam e o que deixam escapar?
De onde vem o sentido de uma palavra?

Uma palavra que você nunca viu

  • Um copo de tiquira gelada.
  • A tiquira é feita de mandioca fermentada.
  • Bebeu tiquira demais e passou mal.
  • No Maranhão, servem tiquira nas festas.
Preveja. Ninguém a definiu. O que é tiquira e como você sabe?

A hipótese distribucional

Você deduziu pelas companhias da palavra: copo, gelada, fermentada, bebeu, demais, festas.

Harris, 1954

palavras que aparecem em contextos parecidos tendem a ter significados parecidos

Firth, 1957

"you shall know a word by the company it keeps"

O significado vira algo que se pode contar: se duas palavras têm os mesmos vizinhos, seus vetores devem ficar próximos.
Como contagens viram um vetor denso?

Um corpus de brinquedo: 11 frases

animais

o gato bebe leite · o gato come peixe · o cachorro bebe água · o cachorro come carne · o cachorro corre na rua

veículos

o carro usa gasolina · o carro corre na estrada · o automóvel usa gasolina · o automóvel anda na estrada · o caminhão usa diesel · o caminhão corre na estrada

Feito para que gato/cachorro e carro/automóvel nunca dividam uma frase, mas dividam os vizinhos.

Para cada palavra, conte cada outra palavra numa janela de duas palavras à esquerda ou à direita: uma matriz 20 × 20, 126 pares (palavra, contexto).

Uma linha à mão: "gato"

  • "o gato bebe leite": a janela tem o, bebe, leite.
  • "o gato come peixe": a janela tem o, come, peixe.
palavrasua linha: o perfil de contextos
gatobebe 1 · come 1 · leite 1 · o 2 · peixe 1
cachorrobebe 1 · carne 1 · come 1 · corre 1 · na 1 · o 3 · água 1
carrocorre 1 · gasolina 1 · na 1 · o 2 · usa 1
automóvelanda 1 · gasolina 1 · na 1 · o 2 · usa 1

Documentos versus contextos

Preveja. Qual o cosseno entre as colunas do bag-of-words de carro e automóvel (quais frases as contêm)?
parcolunas do bag-of-wordslinhas de coocorrência
gato / cachorro0,000,73
carro / automóvel0,000,87
gato / carro0,000,50
Palavras parecidas raramente aparecem juntas, mas aparecem ao lado das mesmas palavras. O problema que sobra: gato/carro 0,50, porque todo substantivo vem depois do artigo o.

PMI: contando o que surpreende

Não "com que frequência juntas?", mas "quanto mais que o acaso?": a informação mútua pontual (PMI, Church & Hanks, 1990).

\[ \text{PMI}(w, c) = \log_2 \frac{P(w, c)}{P(w)\,P(c)} = \log_2 \frac{n(w, c) \cdot N}{n(w) \cdot n(c)} \]

PMI(gato, bebe)

\(\log_2 \frac{1 \times 126}{6 \times 6}\)

1,81

PMI(gato, o)

\(\log_2 \frac{2 \times 126}{6 \times 22}\)

0,93

o está ao lado de tudo (22 vezes como contexto): quase nada surpreende. A ordem das contagens brutas se inverte. Corte os negativos em zero: a PPMI (PMI positiva) \(= \max(\text{PMI}, 0)\).

A PPMI resolve o artigo e fica literal demais

Dois mapas de calor da matriz 20 × 20: nas contagens, o artigo o domina; na PPMI a coluna o está entre as menores e os blocos de animais e veículos se destacam
parcontagensPPMI
gato / cachorro0,730,22
carro / automóvel0,870,75
gato / carro0,500,05

Gato e cachorro só dividem bebe e come: leite, água, peixe e carne são quatro colunas ortogonais.

SVD truncada: 20 colunas esparsas → 2 números densos

palavradim 1dim 2
gato3,77−0,97
cachorro2,55−0,35
leite2,78−0,79
carro0,611,87
automóvel0,702,28
gasolina0,642,44

A SVD (decomposição em valores singulares; a PCA, análise de componentes principais, sem centrar) guarda as \(k\) direções que mais explicam a matriz.

Animais e comida: primeira coordenada grande. Veículos e combustível: a segunda.

Ninguém disse a ela quais palavras são animais: os grupos dividem contextos por dentro, não entre si.

A seção inteira em quatro colunas

parcolunas do bag-of-wordscontagensPPMIPPMI + SVD
gato / cachorro0,000,730,220,99
carro / automóvel0,000,870,751,00
gato / carro0,000,500,050,06
A SVD das contagens brutas mistura animais e veículos num mesmo raio; a SVD da PPMI põe animais e comida num canto e veículos e combustível em outro

A mesma compressão em documentos: LSA

Cosseno de pares de palavras antes e depois da SVD da matriz TF-IDF: car/automobile de 0,07 a 0,64, gun/firearm de 0,15 a 0,92; pares sem relação ficam em 0,00–0,01

Análise semântica latente (LSA, Deerwester et al., 1990): SVD truncada da matriz TF-IDF, 11.314 posts, 100 componentes.

car/automobile 0,07 → 0,64; gun/firearm 0,15 → 0,92; pares sem relação ficam em 0,00–0,01.

Um post inteiro como contexto dá palavras do mesmo assunto (car: nissan, mileage). Uma janela pequena dá palavras do mesmo tipo (car: truck, vehicle).
Um modelo pode aprender os vetores prevendo?

word2vec: aprendendo por predição

Uma frase de seis palavras com janela de dois em torno de bebe: o skip-gram gera quatro exemplos, o CBOW um, a amostragem negativa junta o exemplo real a pares aleatórios

Mikolov et al., 2013. Deslize uma janela e gere exemplos de treino:

  • skip-gram: o centro prevê cada vizinho → 18 exemplos de 6 palavras;
  • CBOW (continuous bag-of-words): a média dos vizinhos prevê o centro → 6 exemplos.

Como os vetores se aproximam

  • Toda palavra começa com um vetor aleatório. Um par (centro, contexto) é pontuado pelo produto escalar.
  • O treino empurra os vetores para que os pares que de fato ocorrem tenham nota alta.
  • Palavras nos mesmos contextos recebem os mesmos empurrões: a hipótese distribucional virada otimização.

amostragem negativa

Em vez de pontuar as 100.000 palavras: "essas duas apareceram mesmo juntas?" Real (bebe, leite) → 1; aleatório (bebe, diesel) → 0, com 5 a 20 palavras aleatórias por par real.

Levy & Goldberg (2014): o skip-gram com amostragem negativa fatora uma matriz de PMI deslocada. Predição e contagem chegam ao mesmo lugar.

Treinando: os botões do gensim

parâmetroo que faz
vector_sizenúmeros por palavra (de 100 a 300 é o típico)
windowpequena (2–5): mesma função; grande (10+): mesmo assunto
sg1 = skip-gram (mais lento, melhor para palavras raras); 0 = CBOW
negativepalavras aleatórias por par real
min_countpalavras mais raras que isso saem
epochs, seedpassadas; seed e workers=1 para reprodutibilidade

GloVe e fastText

GloVe (Pennington et al., 2014)

De volta à contagem: ajusta vetores cujos produtos escalares aproximam o log das contagens de coocorrência de um corpus enorme.

fastText (Bojanowski et al., 2017)

Uma palavra é a soma dos seus n-gramas de caracteres:

latiu → <la, lat, ati, tiu, iu>, <lat, lati, …

6 pedaços em comum com latido

Uma palavra nunca vista ainda ganha um vetor; as formas flexionadas (latir, latiu, latia) ficam próximas.
O que os vetores captam e o que deixam escapar?

Vetores pré-treinados: GloVe, 400.000 palavras × 50 números

Preveja. Quais são as cinco palavras mais próximas de "python"?
palavramais próximas pelo cosseno
cartruck 0,92, cars 0,89, vehicle 0,88, driver 0,85, driving 0,84
mangopineapple 0,91, guava 0,90, papaya 0,89, pear 0,85, coconut 0,85
brazilportugal 0,88, argentina 0,87, rica 0,84, spain 0,83, costa 0,83
pythonreticulated 0,69, spamalot 0,66, php 0,64, owl 0,63, mouse 0,63

Nenhum número sozinho significa algo ("car" começa com 0,48, −0,08, 1,46…); só a geometria significa. "python" mistura a cobra, o Monty Python e a programação.

Parecido não é sinônimo

Preveja. hot / cold (quente / frio): cosseno alto ou baixo?
car / automobile0,70
doctor / physician0,80
hot / cold0,80
good / bad0,80
car / banana0,22

Um antônimo é a palavra mais intercambiável que existe: "a sopa está quente" / "a sopa está fria".

A hipótese mede relação, não sinonímia: bom para busca, uma armadilha para sentimento.

Analogias, medidas com honestidade

\(\text{king} - \text{man} + \text{woman} \approx\ ?\)

acertos

queen · tokyo · rome · swam · faster · worse · spanish

7 / 12

erros

  • bigger − big + small = larger
  • brother − man + woman = daughter
  • glove − hand + foot = "50,000-square"

Capitais, tempos verbais, comparativos e línguas quase sempre funcionam; relações raras não são direções retas.

O truque silencioso: as palavras de entrada ficam de fora

sem excluir nadaas três mais próximas
king − man + womanking 0,89, queen 0,85, throne 0,77
doctor − man + womandoctor 0,90, nurse 0,84, child 0,77
  • "doctor − man + woman = nurse" só aparece porque "doctor" está proibida (Nissim et al., 2020).
  • cos(king − queen, man − woman) = 0,58; um deslocamento sem relação: −0,05.
Analogias são uma regularidade real, mas aproximada.

Simulador: vendo o espaço

Preveja. Clique numa palavra e compare os vizinhos em 50-D (as linhas) com o mapa: o mapa da PCA (24,5% da variância) engana? Depois desmarque "excluir".

Viés: o que os vetores aprenderam sobre pessoas

A média de 8 diferenças (he − she, man − woman, …) dá uma direção de gênero; projete as profissões nela.

receptionist−0,31
nurse−0,30
teacher0,00
engineer0,24
manager0,37
captain0,42

Para referência: she −0,19, he 0,24. Receptionist pende mais para "she" que o próprio "she"; captain mais para "he" que "he".

Os vetores comprimiram quem aparece escrito em qual papel. Um sistema construído sobre eles herda a inclinação; removê-la é um problema em aberto.

O limite: um vetor por palavra

bank

banks, securities, banking, investment, exchange, financial…

bank/money 0,64 · bank/river 0,41

apple

blackberry, chips, iphone, microsoft, ipad…

a fruta não aparece entre as dez

  • Um vetor é aproximadamente uma média dos sentidos pesada pela frequência (Arora et al., 2018). Em português: banco, manga, vela.
  • "O cachorro mordeu o homem" / "o homem mordeu o cachorro": as mesmas palavras, então só vetores de palavras não dizem quem mordeu quem.
Próxima página, U4.4: o vetor de cada palavra calculado a partir da frase em volta.

Resumo

  1. Hipótese distribucional: contextos parecidos → vetores parecidos.
  2. À mão: contagens de coocorrência → PPMI (tira o óbvio) → SVD (generaliza).
  3. O word2vec prevê vizinhos e chega perto do mesmo lugar que a contagem. O fastText usa pedaços de palavras.
  4. Vetores pré-treinados: vizinhos, relação (antônimos também), analogias aproximadas, viés absorvido.
  5. Um vetor por palavra, qualquer que seja o sentido.
Lab · cerca de um minuto e meio na CPU de um notebook

Vetores de palavras de três jeitos

  • O primeiro milhão de palavras do text8 (Wikipédia em inglês, limpa).
  • Contagem (PPMI + SVD), predição (word2vec) e pré-treinados (GloVe): vizinhos, o teste de analogias (3.732 perguntas), o fastText em palavras nunca vistas e um mapa do espaço.
  • Baixe o notebook do lab e abra no Jupyter ou no Colab; no Colab, rode !pip install gensim antes.
  • Rode os blocos em ordem e compare com as saídas da página.

Downloads: 31 MB (text8) e 66 MB (GloVe).