laboratório: classificação de...
TRANSCRIPT
1
Laboratório:Classificação de textos
MCZA017-13Processamento de Linguagem Natural
Prof. Jesús P. Mena-Chalco
1Q-2018
2
Bibliografia
Daniel Jurafsky & James H. Martin.Speech and language processing: An introduction to natural language processing, computational linguistics, and speech recognition. Pearson/Prentice Hall.
University of Colorado, Boulder
Stanford University
2000 2009
2019?
3
Bibliografia – Capítulo 6
https://web.stanford.edu/~jurafsky/slp3/
4
classificação de texto?
Text classification
5
Classificação
Formalmente, a tarefa de classificação pode ser definida como:
Dada uma entrada x, eUm conjunto finito de classes Y = {y
1, y
2, … , y
n}
Determinar, para x, uma classe y que pertence a Y.
Em Classificação de texto:Dada uma entrada d, eUm conjunto finito de classes C = {c
1, c
2, … , c
n}
Determinar, para d, uma classe c que pertence a C.
Documento
Classe n
6
Métodos de classificação:Usando Aprendizado de Máquina
dx
(d1,c
1)
(d2,c
15)
...(d
m,c
n)
(dx, c
i)
O desafio: Construir um classificador que seja capaz de mapear o novo documento d à sua classe correta c
i.
Ψ: d→ c
7
Métodos de classificação:Usando Aprendizado de Máquina
Existe uma quantidade grande classificadores:
Naive Bayes
Regressão logística
Support-vector machines (SVM)
K-Nearest Neighbors (KNN)
8
Classificação de texto usando Naive Bayes
Aprendizado supervisionado
9
Bag-of-words
Um documento pode ser representado como uma bag-of-words
Bag-of-words: Conjunto não-ordenado de palavras (desonsidera a gramática, mas mantendo a multiplicidade).
10
Classificador Naive Bayes
MAPMaximum a posteriori
O documento drepresentado por um
conjunto de características
Qual a probabilidadeda classe c aparecer
no corpus (treinamento)?
Simplificação ingênua mas na prática permite resolver grandes
problemas
11
Classificador Naive Bayes
Para aplicar o classificador para a sequência: w1,w
2,w
3,…,w
n
Considerando bag-of-words(a posição da palavra não importa)
As probabilidades P(wi,c) são independentes
12
Classificador Bayesiano “ingênuo”:Aprendizado (treinamento)
13
Treinamento
Número de documentoscuja classe é igual a c
Número de documentostotais (no treinamento)
Corpus:
P(classe_verde) = 3/10
P(classe_vermelha) = 7/10
14
Corpus:
Treinamento
V é o vocabulário de todo o corpus (ie., de todaspalavras de todos os documentos)
15
Treinamento
Qual seria o valor de P(wx|c) quando w
x é palavra
desconhecida no treinamento?
Zero! (não importando os outros termos)
Alternativa:
Laplace add-1 smoothing
16
17
Se uma palavra é desconhecidano treinamento, então será
desconsiderada (solucção padrão)
18
Prática 1: Implementar a função 'test’
19
Prática 1: naiveBayes1.py
20
Prática 1: naiveBayes1.py
neg just plain boringneg entirely predictable and lacks energyneg no surprises and very few laughspos very powerfulpos the most fun film of the summer
train1.txt
21
Prática 1: naiveBayes1.py
22
Prática 1: naiveBayes1.py
23
Prática 1
S = “predictable with no fun”
S deve ser classificada como ‘neg’
Classe Texto
neg just plain boring
neg entirely predictable and lacks energy
neg no surprises and very few laughs
pos very powerful
pos the most fun film of the summer
24
Prática 1: naiveBayes1.py
python3 naiveBayes1.py train1.txt Total: classes=2 documentos=5 vocabulario=20
{'few', 'very', 'fun', 'no', 'energy', 'plain', 'entirely', 'the', 'most', 'of', 'surprises', 'boring', 'predictable', 'just', 'lacks', 'powerful', 'film', 'summer', 'laughs', 'and'}
{'neg': ['just', 'plain', 'boring', 'entirely', 'predictable', 'and', 'lacks', 'energy', 'no', 'surprises', 'and', 'very', 'few', 'laughs'], 'pos': ['very', 'powerful', 'the', 'most', 'fun', 'film', 'of', 'the', 'summer']}
{'neg': 0.6, 'pos': 0.4}
{('just', 'neg'): 0.058823529411764705, ('entirely', 'neg'): 0.058823529411764705, ('boring', 'neg'): 0.058823529411764705, ('surprises', 'pos'): 0.034482758620689655, ('film', 'pos'): 0.06896551724137931, ('very', 'pos'): 0.06896551724137931, ('energy', 'pos'): 0.034482758620689655, ('no', 'pos'): 0.034482758620689655, ('plain', 'neg'): 0.058823529411764705, ('predictable', 'neg'): 0.058823529411764705, ('fun', 'pos'): 0.06896551724137931, ('few', 'pos'): 0.034482758620689655, ('very', 'neg'): 0.058823529411764705, ('the', 'neg'): 0.029411764705882353, ('lacks', 'pos'): 0.034482758620689655, ('and', 'pos'): 0.034482758620689655, ('predictable', 'pos'): 0.034482758620689655, … , ('plain', 'pos'): 0.034482758620689655}
Testando: predictable with no funTeste 1: neg
25
Prática 1: naiveBayes1.py
26
Prática 2: Opiniões em português?
pos eu amo esse sanduíchepos este é um lugar incrível!pos eu me sinto bem com essas cervejaspos este é o meu melhor trabalhopos que visão incrívelneg eu não gosto deste restauranteneg estou cansado dessas coisasneg não consigo lidar com issoneg ele é meu inimigo jurado!neg meu chefe é horrível
27
Prática 1: .naiveBayes2.py
python3 .naiveBayes2.py train2.txt Total: classes=2 documentos=10 vocabulario=37
{'não', 'eu', 'este', 'com', 'consigo', 'o', 'esse', 'gosto', 'que', 'sanduíche', 'é', 'bem', 'restaurante', 'visão', 'cansado', 'chefe', 'estou', 'um', 'jurado', 'incrível', 'deste', 'trabalho', 'inimigo', 'melhor', 'meu', 'sinto', 'lugar', 'lidar', 'coisas', 'horrível', 'me', 'essas', 'cervejas', 'isso', 'amo', 'ele', 'dessas'}
{'neg': ['eu', 'não', 'gosto', 'deste', 'restaurante', 'estou', 'cansado', 'dessas', 'coisas', 'não', 'consigo', 'lidar', 'com', 'isso', 'ele', 'é', 'meu', 'inimigo', 'jurado', 'meu', 'chefe', 'é', 'horrível'], 'pos': ['eu', 'amo', 'esse', 'sanduíche', 'este', 'é', 'um', 'lugar', 'incrível', 'eu', 'me', 'sinto', 'bem', 'com', 'essas', 'cervejas', 'este', 'é', 'o', 'meu', 'melhor', 'trabalho', 'que', 'visão', 'incrível']}
{'neg': 0.5, 'pos': 0.5}…
Teste 1: neg Teste 2: neg Teste 3: neg Teste 4: pos Teste 5: pos Teste 6: neg
"a cerveja era boa""eu não gosto do meu trabalho""eu não estou me sentindo bem hoje""eu me sinto incrível""Roberto é um amigo meu""eu não posso acreditar que estou fazendo isso"
28
Prática 3: Identificar idioma?
29
Prática 3: .naiveBayes3.py
python3 .naiveBayes3.py capivara.csv
Total: classes=3 documentos=15 vocabulario=915
{'sp': 0.26666666666666666, 'pt': 0.4, 'eng': 0.3333333333333333}
Digite uma frase: es un animalResposta: sp
Digite uma frase: é um animalResposta: pt
Digite uma frase: it is an animalResposta: eng
Teste com outras frases.
Dependente do corpus!
30
Prática 4: Classificar notícias?
31
Prática 4: .naiveBayes3.py
python3 .naiveBayes3.py noticias.csv Total: classes=3 documentos=7 vocabulario=1709
{'Noticia-Fapesp': 0.42857142857142855, 'Noticia-Folha': 0.2857142857142857, 'Noticia-Sensacionalista': 0.2857142857142857}
Digite uma frase: importante para o desenvolvimento humanoResposta: Noticia-Fapesp
Digite uma frase: o procurador avaliará o casoResposta: Noticia-Folha
Digite uma frase: comemorar gol antes de tempoResposta: Noticia-Sensacionalista
32
Prática 5: Identificar disciplina?
Modifique o programa anterior Para listar as 5 classes com Maior probabilidade
Catalogo.csv