MO432 - Processamento de textos
Tecnologia pré 2018
o texto é representado pelo conjunto de palavras. A ordem das palavras no texto é perdida
Algumas palavras são “jogadas fora” e a maioria das palavras se refere a uma versão neutra delas (sem sufixo, sem plural, sem genero)
o menino mordeu o cachorro
o cachorro mordeu a menina
o menino não mordeu o cachorro
o cachorro morderá os meninos
menino = menina = meninos
o, a, não sao tipicamente jogados fora
Textos são uma matrix de palavras (colunas) e linhas (documentos)
Tokenization: determina as palavras, converte maiuscula/minuscula, remove acentos, remove pontuação (mas nem sempre). Palavras compostas: Rio de Janeiro
Stop words: palavras que são removidas, palavras frequentes sem muito sentido especifico:
Stemming e lemmatization - extrai a raiz das palavras (plural, genero, declinação verbal)
0/1 a palavra aparece ou não
TF - term frequency - quantas vezes a palavra aparece no documento (count vector)
TF-IDF - TF multiplicado por um termo “inverse document frequency” log (N/n_t) N numero de documentos (linhas da matriz) n_t numero de documentos onde o termo aparece
IDF de um stop word é super baixo (N=n_t)
IDF de uma palavra rara é alto (n_t = 1
a matriz TF ou TDIDF é esparsa
grande mas a maioria dos valores são 0
Nao fazer o PCA nessas matrizes pois voce precisa fazer a centralização que perde a esparsidade!
Redução de dimensionalidade em texto normalmente é chamada de topic model wikipedia
Cada documento tem “volumes” “cargas” diferentes de diferentes tópicos
Cada palavra tem tambem um distribuição de topicos que ela se refere
Matriz de documentos agora tem k tópicos (50-100-400) em vez de 10.000 palavras
A matriz reduzida é apenas positiva - uma documento pode ter uma carga 0 em relação a um tópico (“futebol”) mas nao uma carga negativa (um texto que é contra o futebol é ainda sobre futebol!!!)
Dai o non-negative matriz fatorization como uma alternativa.
Para TF ou TFIDF (ou 0/1) naive Bayes era uma alternativa competitiva. SVM Linear tambem
Com topic modeling, qualquer classificador pode ser usado
Count of TFIDF https://scikit-learn.org/stable/modules/classes.html#module-sklearn.feature_extraction vecotrizers input texto -> matriz
Topic model https://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition LDA e NMF
Outros pacotes de NLP (natural language processing)
name entity recognizer (NER)- reconhece nomes compostos: Rio de Janeiro
part of speech (POS)- faz a analise sintática da frase e associa a cada palavra sua classe/familia: pronome, preposição, substantivo, adjetivo, verbo, etc
n-gram - em vez de representar palavras individuais, representar sequencias de palavras (raizes) que aparecem no texto. 2-gram: pares adjacentes de palavras. (n^2 pares!!)
Representar cada palavra como um ponto num espaço de alta dimensão de 100 a 600
Palavras com sentido parecido são proximas
Ha algum sentido sobre diferenças: rei + (menino - menina) = rainha
BERT https://towardsdatascience.com/bert-explained-state-of-the-art-language-model-for-nlp-f8b21a9b6270 e http://jalammar.github.io/a-visual-guide-to-using-bert-for-the-first-time/
Rede gigante treinada com “a internet” em duas tarefas: Masked Language Model e Next sentence prediction.
Deve ser “fine tuned” para seu problema especifico - classificação: coloque uma camada de saída para as classes na saída “intermediaria” do BERT pretreinado, e faça o novo treinamento por decida do gradiente.
Variaçoes: veja https://huggingface.co/transformers/index.html Huggingface é um repositorio de modelos pre-treinados.
Outras redes:
XLM - para tradução
BART para sumarização
GPT2 e GPT3 para geração