Frank Coelho de Alcantara -2021
Algoritmo de aprendizagem supervisionada para a vetorização criado em 2013.
Mikolov, Tomas; et al. (2013). "Efficient Estimation of Word Representations in Vector Space". arXiv:1301.3781.
Mikolov, Tomas (2013). "Distributed representations of words and phrases and their compositionality". Advances in Neural Information Processing Systems. arXiv:1310.4546.
O objetivo é criar conjuntos de vetores menos esparsos e mais uteis para descobrir a relação entre termos em documentos.
Já vimos que a vetorização cria matrizes que relacionam termos e documentos de uma forma esparsa (muitos zeros).
Existe informação nesta representação, mas perdemos semântica e criamos grandes matrizes cheias de zeros. Matrizes caras.
Ainda assim, criamos vetores que representam documentos em um espaço multidimensional onde cada termo é uma dimensão.
Podemos ver a relação entre os vetores de cada documento usando a distância entre eles.
Dois documentos exatamente iguais terão o mesmo comprimento e o ângulo entre eles será zero. O ângulo é importante. Muito importante.
Métrica utilizada para determinar o grau de similaridade entre dois documentos independente dos seus tamanhos.
Mediremos o cosseno do ângulo entre dois vetores em um espaço multidimensional.
Nossos dois vetores são estruturas de dados contendo informações sobre os dois documentos (frase, parágrafo...).
Cada termo corresponde a uma dimensão e a quantidade destes termos indica o escalar da dimensão. E podemos determinar a orientação do vetor que representa o texto.
Usando o cosseno entre os ângulos podemos criar uma medida de similaridade entre os vetores criados independente do comprimento destes vetores.
A Similaridade entre dois vetores, $A$ e $B$ será dada por: $$cos(\theta) = \frac{A\cdot B}{|A||B|} $$
Ou, considerando as múltiplas dimensões teremos: $$cos(\theta)= \frac{\sum_{i=1}^{n}A_i B_i}{\sqrt{\sum_{i=1}^{n}A_i} \sqrt{\sum_{i=1}^{n}B_i}}$$
O que é bastante simples usando o Numpy $$cos\_sim = np.dot(a, b)/(np.linalg.norm(a)*np.linalg.norm(b))$$
Word2Vector usa dois algoritmos para a criação do vetor: CBOW e SKIP-GRAM
CBOW Common Bag Of Words: considera o contexto de um determinado termo e tenta inferir que termo é este.
Funciona com a determinação de uma janela, um conjunto de palavras e dentro desta janela, centraliza a palavra desejada.
Trata-se de um algoritmo de aprendizagem supervisionada consistindo de uma rede neural com três camadas com apenas uma camada oculta.
Você pode ver uma implementação deste algoritmo em python, usando o Keras aqui!
SKIP-GRAM: partindo de um termo determinado o Skip-Gram tenta determinar os termos que rodeiam este termo.
Funciona com a determinação de uma janela, e vai criar os termos que estão dentro desta janela em torno do termo chave. É o processo inverso ao CBOW
Trata-se de um algoritmo de aprendizagem supervisionada consistindo de uma rede neural com três camadas com apenas uma camada oculta.
Você pode ver uma implementação deste algoritmo em python aqui!
o Word2Vector usa estes dois algoritmos com a intensão de criar um vetor a partir de um determinado corpus.
Tanto o CBOW quanto o SKIP-GRAM são usados apenas para descobrir as informações que criarão um vetor mais próximo de algum sentido semântico.
A dimensão do vetor é o número de features que temos na saída.
Esta imagem está disponível aqui!
Seu trabalho será, usando o Google Colaboratory, ou o Repl.it determinar a similaridade, usando Cossine Similarity entre todos os documentos formados por um corpus de dois arquivos científicos, quaisquer, com mais de 15 páginas em PDF, escritos em inglês, ou português, e convertidos para txt com a ferramenta que você desejar.
O resultado deve ser uma matriz relacionando estes parágrafos e a sua similaridade.
Este trabalho vale até um ponto na média do segundo bimestre. Poste se link Aqui