Estou tentando incorporar cerca de 60 milhões de frases em um espaço vetorial e calcular a semelhança de cosseno entre elas. Eu tenho usado o sklearn's CountVectorizer
com uma função de tokenizer personalizada que produz unigramas e bigrams. Acontece que, para obter representações significativas, tenho que permitir um número tremendo de colunas, linear no número de linhas. Isso leva a matrizes incrivelmente esparsas e está prejudicando o desempenho. Não seria tão ruim se houvesse apenas 10.000 colunas, o que eu acho bastante razoável para incorporar palavras.
Estou pensando em tentar usar o Google, word2vec
porque tenho certeza de que produz muito menos dimensões e combinações mais densas. Mas antes disso, existem outros casamentos que possam justificar uma olhada no início? O principal requisito seria poder escalar cerca de 60 milhões de frases (linhas).
Eu sou muito novo no campo de incorporação de palavras, portanto, qualquer conselho ajudaria.
Devo acrescentar também que já estou usando decomposição de valor singular para melhorar o desempenho.
Respostas:
Recentemente, tem havido algum trabalho em atribuir dinamicamente a dimensão word2vec (ignorar grama) usando máquinas Boltzmann. Confira este artigo:
"Incorporação infinita de palavras dimensionais" -Nalsnick, Ravi
A idéia básica é permitir que seu conjunto de treinamento dite a dimensionalidade do seu modelo word2vec, que é penalizado por um termo de regularização relacionado ao tamanho da dimensão.
O artigo acima faz isso por palavras, e eu ficaria curioso para ver como isso funciona com as frases.
fonte