Como uso uma incorporação de palavras para mapear um documento para um vetor de recurso, adequado para uso com aprendizado supervisionado?
Uma incorporação de palavra mapeia cada palavra para um vetor , onde é um número não muito grande (por exemplo, 500). Os casamentos populares de palavras incluem word2vec e Glove .v ∈ R d d
Quero aplicar o aprendizado supervisionado para classificar documentos. Atualmente, estou mapeando cada documento para um vetor de recurso usando a representação de palavras-chave e aplicando um classificador pronto para uso. Gostaria de substituir o vetor de recurso de palavras-chave por algo baseado em uma incorporação de palavras pré-treinada existente, para aproveitar o conhecimento semântico contido na incorporação de palavras. Existe uma maneira padrão de fazer isso?
Posso imaginar algumas possibilidades, mas não sei se há algo que faça mais sentido. Abordagens de candidatos que considerei:
Eu poderia calcular o vetor para cada palavra no documento e calcular a média de todas elas. No entanto, parece que isso pode perder muita informação. Por exemplo, com a representação de palavras-chave, se houver algumas que sejam altamente relevantes para a tarefa de classificação e a maioria das palavras for irrelevante, o classificador poderá aprender isso facilmente; se eu calcular a média dos vetores para todas as palavras do documento, o classificador não terá chance.
Concatenar os vetores para todas as palavras não funciona, porque não leva a um vetor de recurso de tamanho fixo. Também parece uma péssima idéia, pois será muito sensível ao posicionamento específico de uma palavra.
Eu poderia usar a palavra incorporação para agrupar o vocabulário de todas as palavras em um conjunto fixo de agrupamentos, digamos, 1000 agrupamentos, onde eu uso a similaridade de cosseno nos vetores como uma medida de similaridade de palavras. Então, em vez de um conjunto de palavras, eu poderia ter um conjunto de conjuntos: o vetor de recurso que forneço ao classificador poderia ser um vetor de 1000, onde o ésimo componente conta o número de palavras no documento que fazem parte do cluster .eu
Dada uma palavra , essas palavras permitem calcular um conjunto das 20 principais palavras mais semelhantes e sua pontuação de similaridade . Eu poderia adaptar o vetor de recurso parecido com um saco de palavras usando isso. Quando vejo a palavra , além de aumentar o elemento correspondente à palavra em , também posso incrementar o elemento correspondente à palavra por , incrementar o elemento correspondente à palavra por e assim por diante.w 1 , … , w 20 s 1 , … , s 20 w w 1 w 1 s 1 w 2 s 2
Existe alguma abordagem específica que provavelmente funcione bem na classificação de documentos?
Eu não estou procurando paragraph2vec ou doc2vec; eles exigem treinamento em um grande corpus de dados e eu não tenho um grande corpus de dados. Em vez disso, quero usar uma incorporação de palavras existente.
Respostas:
Uma técnica simples que parece funcionar razoavelmente bem para textos curtos (por exemplo, uma frase ou um tweet) é calcular o vetor para cada palavra no documento e, em seguida, agregá-los usando a média coordenada, mín ou máx.
Com base nos resultados de um artigo recente, parece que usar o mínimo e o máximo funciona razoavelmente bem. Não é o ideal, mas é simples e é tão bom ou melhor quanto outras técnicas simples. Em particular, se os vetores para as palavras no documento forem , você calculará e . Aqui estamos tomando o mínimo em termos de coordenadas, ou seja, o mínimo é um vetor tal que e da mesma forma para o valor máx. O vetor de característica é a concatenação desses dois vetores, portanto, obtemos um vetor de característica emv 1 , v 2 , … , v n ∈ R d min ( v 1 , … , v n ) max ( v 1 , … , v n ) u u i = min ( v 1 i , … , v n i ) R 2 dn v1,v2,…,vn∈Rd min(v1,…,vn) max(v1,…,vn) u ui=min(v1i,…,vni) R2d . Não sei se isso é melhor ou pior do que uma representação de palavras-chave, mas para documentos curtos, suspeito que possa ter um desempenho melhor que palavras-chave e permite o uso de combinações de palavras pré-treinadas.
TL; DR: Surpreendentemente, a concatenação do min e max funciona razoavelmente bem.
Referência:
Aprendizado de representação para textos muito curtos usando agregação de incorporação de palavras ponderada. Cedric De Boom, Steven Van Canneyt, Thomas Demeester, Bart Dhoedt. Cartas de reconhecimento de padrões; arxiv: 1607.00570. resumo , pdf . Veja especialmente as Tabelas 1 e 2.
Créditos: Agradeço a @ user115202 por trazer este artigo à minha atenção.
fonte
Você pode usar o doc2vec semelhante ao word2vec e usar um modelo pré-treinado de um corpus grande. Em seguida, use algo como
.infer_vector()
no gensim para construir um vetor de documento. O treinamento do doc2vec não precisa vir do conjunto de treinamento.Outro método é usar uma rede RNN, CNN ou feed forward para classificar. Isso combina efetivamente os vetores de palavras em um vetor de documento.
Você também pode combinar recursos esparsos (palavras) com recursos densos (vetor de palavras) para se complementarem. Portanto, sua matriz de recursos seria uma concatenação da matriz de poucas palavras com a média dos vetores de palavras. https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html
Outro método interessante é usar um algoritmo semelhante ao word2vec, mas em vez de prever uma palavra de destino, você pode prever um rótulo de destino. Isso sintoniza diretamente os vetores de palavras para a tarefa de classificação. http://arxiv.org/pdf/1607.01759v2.pdf
Para métodos mais ad hoc, tente pesar as palavras de maneira diferente, dependendo da sintaxe. Por exemplo, você pode pesar verbos com mais força do que determinantes.
fonte
Se você está trabalhando com texto em inglês e deseja começar por incorporar palavras pré-treinadas, consulte: https://code.google.com/archive/p/word2vec/
Esta é a versão C original do word2vec. Junto com este lançamento, eles também lançaram um modelo treinado em 100 bilhões de palavras retiradas de artigos do Google Notícias (consulte a subseção: "Vetores pré-treinados de palavras e frases").
Na minha opinião e experiência em trabalhar com incorporação de palavras, para classificação de documentos, um modelo como doc2vec (com CBOW) funciona muito melhor do que um conjunto de palavras.
Como você tem um pequeno corpus, sugiro que você inicialize sua matriz de incorporação de palavras com as incorporações pré-treinadas mencionadas acima. Treine para o vetor de parágrafo no código doc2vec. Se você está familiarizado com o python, pode verificar a versão gensim, que é muito fácil de modificar.
Verifique também este documento que detalha o funcionamento interno do word2vec / doc2vec: http://arxiv.org/abs/1411.2738 . Isso facilitará a compreensão do código gensim.
fonte