Processamento dos Dados - Segmentation-Fault-Machine-Learning/Knowledge GitHub Wiki
Introdução
Inicialmente, houve um estudo dos dados para identificação de múltiplas linguagens, estrutura dos e-mails, dentre outras informações. Com o dado compreendido, foram estudadas algumas opções de processamento de texto, sendo elas: Bag of words, TF-IDF, Stemming, Lammatization e Fatorização Não-negativa de Matriz. Os algoritmos de aprendizado de máquina analisados foram executados com combinações destes processamentos, e os resultados foram comparados.
Opções de processamento
Stemming
Stemming é o processo de transformação de uma palavra para sua versão 'raiz', ou seja, o processo de stemming utiliza um algoritmo que remove os principais sufixos do idioma 1. A técnica de stemming, também é conhecida por ser uma forma de normalização que tenta extrair a forma normal de uma palavra. 1 Por exemplo:
1. Considere as palavras: 'Carefully', 'Cared', 'Cares', 'Caringly'.
2. Nesse caso, o algoritmo remove todos os sufixos da língua inglesa. ('fully','es','ed','s' etc..)
3. O retorno para todas as palavras descritas no item 1, seria a palavra 'care', que seria então, a versão raíz de todas as expressões citadas no item 1.
Stemming (Fonte: codeschool.com)
Utilizar a técnica de stemming pode auxiliar a criação de modelos mais compactos, otimizando a performance do processamento de texto. 2.
Bibliografia
[1] - Mastering Machine Learning With Python in six steps - (Manohar Swamynathan - Apress, 2017)
[2] - Introduction to Machine Learning with Python_ A Guide for Data Scientists - (Andreas C. Muller & Sarah Guido, O'Reilly Media, 2016)
Lemmatization
Assim como o stemming, a lemmatização também possui o objetivo de extrair a raiz de palavras que possuem inflexões, entretanto, o stemming realiza um corte indiscriminado, cortando o fim, ou em alguns casos, o começo da palavra, já a lemmatização leva em consideração a análise morfológica da palavra.
No artigo de Tita Risueño, do blog Bitext, um verbo grego tem diferentes stems para formas perfeitas e imperfeitas, dessa forma, com o stemming não seria possível relacioná-los com a mesma palavra, mas usando a lemmatização, é possível fazê-lo.
Bibliografia
[1] - Stemming and lemmatization (Cambridge University Press, 2008) Disponível em:https://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html. Acesso em 18 de Setembro de 2017.
[2] - What is the difference between stemming and lemmatization? (Tita Risueño, 2017) Disponível em:https://blog.bitext.com/what-is-the-difference-between-stemming-and-lemmatization/. Acesso em 18 de Setembro de 2017.
NMF (Non-negative Matrix Factorization)
O NMF é um algoritmo que permite que você descubra padrões ocultos, ou algumas estruturas temáticas, em uma grande coleção de documentos 1.
NMF é um método de decomposição para dados multivariados e é dado por V = WH, onde V é o produto das matrizes W e H. W é uma matriz de classificação de palavras, geralmente classificadas por sua frequência, enquanto H é a matriz de coeficientes, onde cada linha é uma feature. As três matrizes não possuem elementos negativos 1.
Bibliografia
[1] - Mastering Machine Learning With Python in six steps - (Manohar Swamynathan - Apress, 2017)
Count Ocurrences - (Vetorização)
É um algoritmo que registra o número de ocorrências de uma determinada palavra no texto, salvando suas ocorrências em uma matriz esparsa este método e utilizado para transformar o texto em uma grandeza discreta.
No sklearn este método é implementado pela classe CountVectorizer que oferece suporte a n_grams, stop_words dentre outros.
Retirando Stop-Words (Fonte: codeschool.com)
Bibliografia
[1] - CountVectorizer Documentation - link
TF-IDF
Uma forma de identificar o quão importante uma palavra é em um documento, é através da frequência do termo, isto é, o número de vezes que o termo aparece em um documento. Entretanto, termos muito genéricos e pouco relevantes podem aparecer com frequência, como "the", "is" e "of" da língua inglesa, dessa forma, o inverso da frequência nos documentos é incorporado ao cálculo de forma a estabelecer uma ponderação, chegando a seguinte fórmula:
https://deeplearning4j.org/bagofwords-tf-idf. Acesso em 18 de Setembro de 2017.
Fonte: DeepLearning4J (2017) Disponível em:Bibliografia
[1] - TF-IDF (Wikipédia, 2016). Disponível em:https://pt.wikipedia.org/wiki/Tf%E2%80%93idf. Acesso em 18 de Setembro de 2017.
[2] - Term Frequency and Inverse Document Frequency (tf-idf) Using Tidy Data Principles (Julia Silge and David Robinson, 2017). Disponível em:https://cran.r-project.org/web/packages/tidytext/vignettes/tf_idf.html. Acesso em 18 de Setembro de 2017.
[3] - Bag of words and TF-IDF (DeepLearning4J, 2017). Disponível em:https://deeplearning4j.org/bagofwords-tf-idf. Acesso em 18 de Setembro de 2017.
Bag of words
O conjunto de processamentos composto por: tokenização, vetorização e normalização dos dados é tão comum que tem um nome próprio: Bag of Words, essa técnica é capaz de processar o texto para medidas discretas e analisar trechos do texto.
No sklearn esse método é sumarizado em TfidfVectorizer que realiza o processamento em matriz esparsa do texto, executa o método TfidfTransfom e gera o dado resultante, com opções de retirar stop words, analisar n-grams no texto dentre outros.
Bibliografia
[1] TfidfVectorizer - link [2] Bag Of Words for Beginners Kaggle - link
LDA (Latent Dirichlet allocation)
LDA é um metodo comum de modelagem de tópicos. Por exemplo, se temos um documento e queremos descobrir se ele é um artigo esportivo, ou um texto de literatura, pode-se aplicar LDA para construir um sistema que olha para outros artigos esportivos e textos de literatura e automaticamente decide se o tópico deste novo documento é de esportes ou de literatura.
Para o LDA, um documento é somente uma coleção de tópicos, onde cada tópicos tem uma probabilidade de gerar uma palavra em particular. Esta probabilidade é determinada olhando cada documento de treino como um "bag of words" criado por uma distribuição através do processo Dirichlet.
Dirichlet é uma distribuição especificada por um parâmetro vetorial α, contendo algumas αi correspondentes a cada tópicos i, que é escrito como Dir(α). A fórmula para computar a função de densidade probabilística para cada tópico vetorial x é proporcional ao produto de todos os tópicos i de xiαi
Dirichlet is a distribution specified by a vector parameter α containing some αi corresponding to each topic i, which we write as Dir(α). The formula for computing the probability density function for each topic vector x is proportional to the product over all topics i of xiαi. xi é a probabilidade que o tópico é i, então, os números em x devem somar 1.
Bibliografia
[1] - LDA complete explanation
[2] - LDA succinct explanation
PCA (Principal Component Analysis)
PCA (Principal Component Analysis: Análise de Componente Principal) é um método de extração de features. É um método linear. De maneira geral, o PCA acha uma projeção em uma dimensão com menos espaço. Pode ser usada tanto em classificação quanto em regressão.
Passos:
- Centralizar os dados subtraindo a média deles;
- Calcular a matriz de covariância;
- Calcular os autovetores para a matriz de covariância.
O ponto negativo desse algoritmo é quando os dados são não-lineares.
Bibliografia
Building Machine Learning Systems with Python
Chi-Squared
O algoritmo conhecido como 'chi-squared' é utilizado majoritariamente para seleção de features. O método é utilizado com o intuito de testar o nível de independência entre dois eventos. Em machine learning, geralmente é testado o nível te o intuito do método é testar o nível de independência entre uma feature e um target. O grau de independência é dado pelo valor de X², desta forma, você pode gerar um ranking de features com as melhores pontuações, caso o grau de independência seja muito grande, a feature não é muito útil para inferir sobre a classe. O cáculo é dado por:
Onde X² é a pontuação para o grau de independência,
Oi é o número de observações em uma classe,
Ei é o número esperado de observações em uma classe, caso não houvesse nenhuma relação entre a feature e o target.
Bibliografia
[1] - Feature selectionChi2 Feature selection - Stanford
[2] - Chi-Squared For Feature Selection
Escolhas
Dadas as opções estudadas, os algoritmos fora analisados utilizando Bag of words, Lemmatization e TF-IDF. A comparação entre os resultados com diferentes técnicas está registrada no tópico de Resultados.