Isso significa que a incorporação de todas as palavras tem a média e, portanto, obtemos um vetor 1D de recursos correspondentes a cada tweet. Esse formato de dados é o que os modelos de aprendizado de máquina típicos esperam, portanto, de certa forma, é conveniente.
No entanto, isso deve ser feito com muito cuidado porque a média não leva em conta a ordem das palavras. Por exemplo:
nosso presidente é um bom líder ele não falhará
nosso presidente não é um bom líder, ele irá falhar
Têm as mesmas palavras e, portanto, têm a mesma incorporação de palavras comum, mas os tweets têm significados muito diferentes.
Editar:
Para resolver esse problema, pode-se pesquisar: Sentença-BERT
https://github.com/UKPLab/sentence-transformers e https://arxiv.org/abs/1908.10084
Aqui está uma ilustração rápida com o exemplo acima:
de frase_transformers importar SentençaTransformer
importar numpy como np
def cosseno_similaridade (frase_embeddings, ind_a, ind_b):
s = frase_embeddings
return np.dot (s [ind_a], s [ind_b]) / (np.linalg.norm (s [ind_a]) * np.linalg.norm (s [ind_b]))
model = SentençaTransformer ('bert-base-nli-mean-tokens')
s0 = "nosso presidente é um bom líder ele não irá falhar"
s1 = "nosso presidente não é um bom líder, ele irá falhar"
s2 = "nosso presidente é um bom líder"
s3 = "nosso presidente terá sucesso"
sentenças = [s0, s1, s2, s3]
sentenças_embeddings = model.encode (sentenças)
s = frase_embeddings
imprimir (f "{s0} < - > {s1}: {cosine_similarity (frase_embeddings, 0, 1)}")
imprimir (f "{s0} < - > {s2}: {cosine_similarity (frase_embeddings, 0, 2)}")
imprimir (f "{s0} < - > {s3}: {cosine_similarity (frase_embeddings, 0, 3)}")
Resultado:
nosso presidente é um bom líder ele não vai falhar < - > nosso presidente não é um bom líder ele irá falhar: 0.46340954303741455
nosso presidente é um bom líder, ele não falhará < - > nosso presidente é um bom líder: 0,8822922110557556
nosso presidente é um bom líder, ele não falhará < - > nosso presidente terá sucesso: 0,7640182971954346