Estou lendo o artigo abaixo e tenho alguns problemas em entender o conceito de amostragem negativa.
http://arxiv.org/pdf/1402.3722v1.pdf
Alguém pode ajudar por favor?
machine-learning
nlp
word2vec
Andy K
fonte
fonte
Respostas:
A ideia
word2vec
é maximizar a similaridade (produto escalar) entre os vetores para palavras que aparecem juntas (no contexto umas das outras) no texto e minimizar a similaridade de palavras que não aparecem. Na equação (3) do artigo que você vincula, ignore a exponenciação por um momento. Você temO numerador é basicamente a semelhança entre as palavras
c
(o contexto) ew
(a palavra alvo). O denominador calcula a semelhança de todos os outros contextosc1
e da palavra-alvow
. Maximizar essa proporção garante que as palavras que aparecem mais próximas no texto tenham vetores mais semelhantes do que as palavras que não aparecem. No entanto, computar isso pode ser muito lento, porque existem muitos contextosc1
. A amostragem negativa é uma das maneiras de abordar esse problema - basta selecionar alguns contextosc1
ao acaso. O resultado final é que, secat
aparecer no contexto defood
, o vetor defood
é mais semelhante ao vetor decat
(conforme medido por seu produto escalar) do que os vetores de várias outras palavras escolhidas aleatoriamente(por exemplodemocracy
,greed
,Freddy
), em vez de todas as outras palavras na linguagem . Isso tornaword2vec
muito mais rápido treinar.fonte
word2vec
, para qualquer palavra dada, você tem uma lista de palavras que precisam ser semelhantes a ela (a classe positiva), mas a classe negativa (palavras que não são semelhantes à palavra targer) é compilada por amostragem.Calcular Softmax (função para determinar quais palavras são semelhantes à palavra-alvo atual) é caro, pois requer a soma de todas as palavras em V (denominador), que geralmente é muito grande.
O que pode ser feito?
Diferentes estratégias foram propostas para aproximar o softmax. Estas abordagens podem ser agrupadas em softmax baseados em e baseados em amostragem abordagens. As abordagens baseadas em Softmax são métodos que mantêm a camada softmax intacta, mas modificam sua arquitetura para melhorar sua eficiência (por exemplo, softmax hierárquico). As abordagens baseadas em amostragem , por outro lado, eliminam completamente a camada softmax e, em vez disso, otimizam alguma outra função de perda que se aproxima de softmax (Eles fazem isso aproximando a normalização no denominador de softmax com alguma outra perda que é barata de calcular como amostragem negativa).
A função de perda no Word2vec é algo como:
Qual logaritmo pode se decompor em:
Com alguma fórmula matemática e gradiente (veja mais detalhes em 6 ), ele foi convertido para:
Como você pode ver, ele foi convertido para a tarefa de classificação binária (y = 1 classe positiva, y = 0 classe negativa). Como precisamos de rótulos para realizar nossa tarefa de classificação binária, designamos todas as palavras de contexto c como rótulos verdadeiros (y = 1, amostra positiva) ek selecionados aleatoriamente de corpora como rótulos falsos (y = 0, amostra negativa).
Veja o parágrafo seguinte. Suponha que nossa palavra-alvo seja " Word2vec ". Com a janela de 3, nossas palavras de contexto são:
The
,widely
,popular
,algorithm
,was
,developed
. Essas palavras de contexto são consideradas rótulos positivos. Também precisamos de alguns rótulos negativos. Nós escolher aleatoriamente algumas palavras do corpus (produce
,software
,Collobert
,margin-based
,probabilistic
) e considerá-los como amostras negativas. Esta técnica que escolhemos como um exemplo aleatório do corpus é chamada de amostragem negativa.Referência :
fonte
Eu escrevi um artigo tutorial sobre amostragem negativa aqui .
Por que usamos amostragem negativa? -> para reduzir o custo computacional
A função de custo para amostragem vanilla Skip-Gram (SG) e Skip-Gram negativo (SGNS) é semelhante a esta:
Observe que
T
é o número de todos os vocabs. É equivalente aV
. Em outras palavras,T
=V
.A distribuição de probabilidade
p(w_t+j|w_t)
em SG é calculada para todos osV
vocabs no corpus com:V
pode facilmente exceder dezenas de milhares ao treinar o modelo Skip-Gram. A probabilidade precisa ser computadaV
vezes, o que a torna computacionalmente cara. Além disso, o fator de normalização no denominador requerV
cálculos extras .Por outro lado, a distribuição de probabilidade em SGNS é calculada com:
c_pos
é um vetor de palavras para palavras positivas eW_neg
vetores de palavras para todas asK
amostras negativas na matriz de ponderação de saída. Com SGNS, a probabilidade precisa ser calculada apenas algumasK + 1
vezes, ondeK
normalmente está entre 5 ~ 20. Além disso, nenhuma iteração extra é necessária para calcular o fator de normalização no denominador.Com o SGNS, apenas uma fração dos pesos é atualizada para cada amostra de treinamento, enquanto o SG atualiza todos os milhões de pesos para cada amostra de treinamento.
Como o SGNS consegue isso? -> transformando a tarefa de multi-classificação em tarefa de classificação binária.
Com o SGNS, os vetores de palavras não são mais aprendidos pela previsão de palavras de contexto de uma palavra central. Ele aprende a diferenciar as palavras de contexto reais (positivas) de palavras desenhadas aleatoriamente (negativas) da distribuição de ruído.
Na vida real, você geralmente não observa
regression
com palavras aleatórias comoGangnam-Style
, oupimples
. A ideia é que se o modelo puder distinguir entre os pares prováveis (positivos) e os pares improváveis (negativos), bons vetores de palavras serão aprendidos.Na figura acima, o par atual de contexto de palavra positivo é (
drilling
,engineer
).K=5
amostras negativas são desenhados de forma aleatória a partir da distribuição de ruído :minimized
,primary
,concerns
,led
,page
. À medida que o modelo itera nas amostras de treinamento, os pesos são otimizados para que a probabilidade de pares positivos seja geradap(D=1|w,c_pos)≈1
e a probabilidade de pares negativosp(D=1|w,c_neg)≈0
.fonte
K
comoV -1
, a amostragem negativa será igual ao modelo vanilla skip-gram. Meu entendimento está correto?