Estou trabalhando na análise de sentimentos sobre tweets usando o word2vec como representação de palavras.
Eu treinei meu modelo word2vec. Mas quando vou treinar meu classificador, enfrento o problema de que cada tweet tem tamanho diferente e o classificador (RandomForest) precisa que todos os exemplos sejam do mesmo tamanho.
Atualmente, para cada tweet, estou calculando a média dos vetores de todas as suas palavras, para terminar com uma representação vetorial do tweet.
Por exemplo: Meu modelo word2vec representa cada palavra como vetores de tamanho 300.
Eu Tweet1
formei por 10 palavras e Tweet2
por 5 palavras.
Então, o que eu faço é, por Tweet1
(v1_Tweet1 + v2_Tweet1 + ... +v10_Tweet1)/10 = v_Tweet1 #avg vector of 300 elements.
Para Tweet2
:
(v1_Tweet2 + v2_Tweet2 + ... +v5_Tweet1)/5 = v_Tweet2 #avg vector of 300 elements.
* Sendo v1_TweetX o vetor da primeira palavra do TweetX e assim por diante.
Isso funciona 'bem', mas eu gostaria de saber que outras abordagens você adota para superar os diferentes tamanhos nos exemplos de trem e texto para o classificador.
Obrigado.
No meu trabalho, fiz da mesma maneira calculando a média dos vetores de palavras. Mas há outra idéia que eu queria tentar. É com a ajuda de tags POS.
Primeiro construa uma frase mais complicada com todas as tags POS quanto possível e defina essas tags POS como um modelo. Para cada frase no corpus do twitter, o POS marca todas as palavras nele e aplica esses vetores de palavras respectivos às tags POS no modelo. Portanto, as tags POS invisíveis terão zeros.
Por exemplo:
NNP PDT DT NNS VB MD JJS CC PRP RBS
é o modelo. Assim, cada posição conterá um vetor tridimensional totalmente um vetor tridimensional. E se as tags POS do primeiro tweet foremNNP VB JJS PRP
, os vetores de palavras serão aplicados nessas posições e terão vetores nasNNP VB JJS PRP
posições e vetores zero tridimensionais em outras posições.Esse método não apenas resolve o problema de representar a sentença por um único vetor, mas também preserva a estrutura sintática da sentença, posicionando-o no POS correto.
Obviamente, haverá problemas quando houver mais de uma tag POS ou posições confusas das tags. Esta é apenas uma das possibilidades.
fonte
Eu posso pensar em algumas possibilidades que podem se adequar ao seu caso:
fonte