Laboratório: Classificação de...

Preview:

Citation preview

1

Laboratório:Classificação de textos

MCZA017-13Processamento de Linguagem Natural

Prof. Jesús P. Mena-Chalco

jesus.mena@ufabc.edu.br

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

Recommended