Classificação de textos - Dev in Sampa - 28nov2009
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Classificação de textos - Dev in Sampa - 28nov2009

on

  • 3,480 views

José Valim talks in portuguese about Text Classification at Dev in Sampa 2009

José Valim talks in portuguese about Text Classification at Dev in Sampa 2009

Statistics

Views

Total Views
3,480
Views on SlideShare
3,137
Embed Views
343

Actions

Likes
10
Downloads
84
Comments
1

7 Embeds 343

http://blog.plataformatec.com.br 301
http://feeds.feedburner.com 28
http://www.slideshare.net 9
http://localhost:3000 2
http://www.agaelebe.com.br 1
http://mi.o2.ie 1
http://dev.busk.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Essa apresentação de slides me ajudou muito em um trabalho de inteligência artificial. Muito obrigada por dividir esse conhecimento na web.
    Tenho uma pergunta, no algoritmo de Naive Bayes, como se faz a escolha do valor inicial e do peso inicial? (slide 62).
    Desde já agradeço novamente,
    Sheila Genesine Dada
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Classificação de textos - Dev in Sampa - 28nov2009 Presentation Transcript

  • 1. Tópicos de machine learning Classificação de textos @josevalim http://blog.plataformatec.com.br
  • 2. Quem sou eu?
  • 3. Mestrado na Itália com tese em classificação de textos
  • 4. Desenvolvedor Ruby a mais de 3 anos, contribuidor ativo do Rails Core
  • 5. Motivação
  • 6. Nas últimas décadas, a robótica desbravou a visão computacional. O que vêm em seguida?
  • 7. Em 2006, o Google indexou mais de 25 bilhões de documentos
  • 8. 95% de todos os e-mails enviados são spams
  • 9. O que é classificação de texto?
  • 10. É a assinalação de forma automática de um documento a um pré-definido grupo de classes baseada em seu conteúdo
  • 11. Conteúdo • Pré-processamento • Classificadores • Medidas
  • 12. Conteúdo • Pré-processamento - Remoção de stop words - Representação - Stemming - Pesagem • Classificadores • Medidas
  • 13. Remoção de stop words
  • 14. Stop words são palavras em um texto desprovidas de semântica
  • 15. Assunto: Especificações do protocolo http Eu preciso das especificações, ou pelo menos, uma interpretação verbosa das especificações do protocolo http. Artigos técnicos ou referência a livros também seriam de grande ajuda.
  • 16. Assunto: Especificações do protocolo http Eu preciso das especificações, ou pelo menos, uma interpretação verbosa das especificações do protocolo http. Artigos técnicos ou referência a livros também seriam de grande ajuda.
  • 17. Assunto: Especificações do protocolo http especificações protocolo http Eu preciso das especificações, preciso especificações pelo ou pelo menos, uma menos interpretação verbosa interpretação verbosa das especificações protocolo http especificações do protocolo artigos técnicos referência http. Artigos técnicos ou livros também seriam grande referência a livros também ajuda seriam de grande ajuda.
  • 18. Representação
  • 19. A representação mais comum é em saco de palavras (bag of words)
  • 20. especificações protocolo http preciso especificações pelo menos interpretação verbosa especificações protocolo http artigos técnicos referência livros também seriam grande ajuda
  • 21. especificações protocolo http Palavra Peso preciso especificações pelo menos interpretação verbosa especificações protocolo http artigos técnicos referência livros também seriam grande ajuda
  • 22. especificações protocolo http Palavra Peso preciso especificações pelo especificações 3 menos interpretação verbosa especificações protocolo http artigos técnicos referência livros também seriam grande ajuda
  • 23. especificações protocolo http Palavra Peso preciso especificações pelo especificações 3 menos interpretação verbosa protocolo 2 especificações protocolo http artigos técnicos referência livros também seriam grande ajuda
  • 24. especificações protocolo http Palavra Peso preciso especificações pelo especificações 3 menos interpretação verbosa protocolo 2 especificações protocolo http interpretação 1 artigos técnicos referência livros também seriam grande ajuda
  • 25. especificações protocolo http Palavra Peso preciso especificações pelo especificações 3 menos interpretação verbosa protocolo 2 especificações protocolo http interpretação 1 artigos técnicos referência artigos 1 livros também seriam grande ajuda
  • 26. especificações protocolo http Palavra Peso preciso especificações pelo especificações 3 menos interpretação verbosa protocolo 2 especificações protocolo http interpretação 1 artigos técnicos referência artigos 1 livros também seriam grande ajuda ajuda 1
  • 27. Stemming
  • 28. Stemming mapeia cada termo de um documento para sua raiz (morfológica)
  • 29. andei, andou, andamos
  • 30. andei, andou, andamos => andar
  • 31. Pesagem
  • 32. Pesagem por frequência
  • 33. Palavra Peso especificações 3 protocolo 2 interpretação 1 artigos 1 ajuda 1
  • 34. Pesagem por TF-IDF
  • 35. Pesagem por TF-IDF
  • 36. Pesagem por TF-IDF
  • 37. Pesagem por TF-IDF Term frequency
  • 38. Pesagem por TF-IDF Term frequency Palavra Peso especificações 3 protocolo 2 interpretação 1 artigos 1 ajuda 1
  • 39. Pesagem por TF-IDF Term frequency * Palavra Peso especificações 3 protocolo 2 interpretação 1 artigos 1 ajuda 1
  • 40. Pesagem por TF-IDF Term frequency * Palavra Peso especificações 3 protocolo 2 interpretação 1 artigos 1 ajuda 1
  • 41. Pesagem por TF-IDF Inverse document Term frequency * frequency Palavra Peso especificações 3 protocolo 2 interpretação 1 artigos 1 ajuda 1
  • 42. Pesagem por TF-IDF Inverse document Term frequency * frequency Palavra Peso especificações 3 protocolo 2 idf(tk) = log |N / df(tk)| interpretação 1 artigos 1 ajuda 1
  • 43. Conteúdo • Pré-processamento - Remoção de stop words - Representação - Stemming - Pesagem • Classificadores • Medidas
  • 44. Conteúdo • Pré-processamento • Classificadores - Naive bayes - k nearest neighbors - Rocchio classifier - Support vector machines • Medidas
  • 45. Naive Bayes
  • 46. Modelo matématico simples
  • 47. Baseado no Teorema de Bayes
  • 48. P(ci|dj)
  • 49. P(ci|dj) =
  • 50. P(ci|dj) = P(ci)
  • 51. P(ci|dj) = P(ci) *
  • 52. P(ci|dj) = P(ci) * P(dj|ci)
  • 53. P(ci|dj) = P(ci) * P(dj|ci) / P(dj)
  • 54. Exemplo: duas classes, cinco documentos de exemplo
  • 55. Document Class Ruby is a dynamic language Language Ruby has color between pink and red Gemstone Gems is a ruby packaging system Language Ruby is one of the four precious gems Gemstone The Ruby language was born in Japan Language
  • 56. Document Class Ruby is a dynamic language Language Ruby has color between pink and red Gemstone Gems is a ruby packaging system Language Ruby is one of the four precious gems Gemstone The Ruby language was born in Japan Language
  • 57. Term Language Gemstone ruby 3 2 gems 1 1 dynamic 1 0 language 2 0 color 0 1 pink 0 1 red 0 1 package 1 0 precious 0 1 japan 1 0
  • 58. (valor inicial + ocorrencias de wk em ci) P(wk|ci) = (peso do valor inicial + numero de documentos em ci)
  • 59. (0.5 + ocorrencias de wk em ci) P(wk|ci) = (1 + numero de documentos em ci)
  • 60. Term Language Gemstone ruby (0.5+3) / (1+3) (0.5+2) / (1+2) gems (0.5+1) / (1+3) (0.5+1) / (1+2) dynamic (0.5+1) / (1+3) (0.5+0) / (1+2) language (0.5+2) / (1+3) (0.5+0) / (1+2) color (0.5+0) / (1+3) (0.5+1) / (1+2) pink (0.5+0) / (1+3) (0.5+1) / (1+2) red (0.5+0) / (1+3) (0.5+1) / (1+2) package (0.5+1) / (1+3) (0.5+0) / (1+2) precious (0.5+0) / (1+3) (0.5+1) / (1+2) japan (0.5+1) / (1+3) (0.5+0) / (1+2)
  • 61. Term Language Gemstone ruby 0.88 0.83 gems 0.38 0.5 dynamic 0.38 0.17 language 0.62 0.17 color 0.12 0.5 pink 0.12 0.5 red 0.12 0.5 package 0.38 0.17 precious 0.12 0.5 japan 0.38 0.17
  • 62. A qual classe pertence o documento: “My ruby gems arrived in a pink package”
  • 63. A qual classe pertence o documento: “My ruby gems arrived in a pink package”
  • 64. P(language|d) = P(ci) * P(d|ci) / P(d)
  • 65. P(language|d) = P(ci) * P(d|ci) / P(d)
  • 66. P(language|d) = P(ci) * P(d|ci) / P(d) documentos em language / total documentos = 0.6
  • 67. P(language|d) = P(ci) * P(d|ci) / P(d) documentos em language / total documentos = 0.6
  • 68. P(language|d) = P(ci) * P(d|ci) / P(d) documentos em language / total documentos = 0.6 P(ruby|language) * P(gems|language) * P(pink|language) * P(package|language)
  • 69. P(language|d) = P(ci) * P(d|ci) / P(d) documentos em language / total documentos = 0.6 P(ruby|language) * P(gems|language) * P(pink|language) * P(package|language)
  • 70. P(language|d) = P(ci) * P(d|ci) / P(d) documentos em language / total documentos = 0.6 P(ruby|language) * P(gems|language) * P(pink|language) * P(package|language) Não importa ...
  • 71. P(gemstone|d) = P(ci) * P(d|ci) / P(d)
  • 72. P(gemstone|d) = P(ci) * P(d|ci) / P(d)
  • 73. P(gemstone|d) = P(ci) * P(d|ci) / P(d) documentos em gemstone / total documentos = 0.4
  • 74. P(gemstone|d) = P(ci) * P(d|ci) / P(d) documentos em gemstone / total documentos = 0.4
  • 75. P(gemstone|d) = P(ci) * P(d|ci) / P(d) documentos em gemstone / total documentos = 0.4 P(ruby|gemstone) * P(gems|gemstone) * P(pink|gemstone) * P(package|gemstone)
  • 76. P(gemstone|d) = P(ci) * P(d|ci) / P(d) documentos em gemstone / total documentos = 0.4 P(ruby|gemstone) * P(gems|gemstone) * P(pink|gemstone) * P(package|gemstone)
  • 77. P(gemstone|d) = P(ci) * P(d|ci) / P(d) documentos em gemstone / total documentos = 0.4 P(ruby|gemstone) * P(gems|gemstone) * P(pink|gemstone) * P(package|gemstone) Não importa ...
  • 78. P(language|d) = 0.6 * 0.88 * 0.38 * 0.12 * 0.38 / P(d)
  • 79. P(language|d) = 0.6 * 0.88 * 0.38 * 0.12 * 0.38 / P(d) P(gemstone|d) = 0.4 * 0.83 * 0.5 * 0.5 * 0.17 / P(d)
  • 80. P(language|d) = 0.6 * 0.88 * 0.38 * 0.12 * 0.38 / P(d) P(gemstone|d) = 0.4 * 0.83 * 0.5 * 0.5 * 0.17 / P(d) P(language|d) = 0.009149 / P(d)
  • 81. P(language|d) = 0.6 * 0.88 * 0.38 * 0.12 * 0.38 / P(d) P(gemstone|d) = 0.4 * 0.83 * 0.5 * 0.5 * 0.17 / P(d) P(language|d) = 0.009149 / P(d) P(gemstone|d) =0.014110 / P(d)
  • 82. P(language|d) = 0.6 * 0.88 * 0.38 * 0.12 * 0.38 / P(d) P(gemstone|d) = 0.4 * 0.83 * 0.5 * 0.5 * 0.17 / P(d) P(language|d) = 0.009149 / P(d) P(gemstone|d) =0.014110 / P(d) P(gemstone|d) > P(language|d)
  • 83. P(language|d) = 0.6 * 0.88 * 0.38 * 0.12 * 0.38 / P(d) P(gemstone|d) = 0.4 * 0.83 * 0.5 * 0.5 * 0.17 / P(d) P(language|d) = 0.009149 / P(d) P(gemstone|d) =0.014110 / P(d) P(gemstone|d) > P(language|d) d pertence à classe gemstone
  • 84. Considera que as palavras em um documento são independentes
  • 85. Simples e rápido
  • 86. k-nearest neighbor (k-nn)
  • 87. Representa documentos no espaço como um vetor em função dos seus pesos
  • 88. Um documento é classificado ao analizar os k documentos mais próximos a ele
  • 89. Document Class Ruby is a dynamic language Language Ruby has color between pink and red Gemstone Gems is a ruby packaging system Language Ruby is one of the four precious gems Gemstone The Ruby language was born in Japan Language
  • 90. <ruby, language, dynamic, gems, color, pink, red, package, precious, japan> <1, 1, 1, 0, 0, 0, 0, 0, 0, 0> <1, 0, 0, 1, 1, 1, 1, 0, 0, 0> <1, 0, 0, 1, 0, 0, 0, 1, 0, 0> <1, 0, 0, 1, 0, 0, 0, 0, 1, 0> <1, 1, 0, 0, 0, 0, 0, 0, 0, 1>
  • 91. A qual classe pertence o documento: “My ruby gems arrived in a pink package”
  • 92. <ruby, language, dynamic, gems, color, pink, red, package, precious, japan> <1, 1, 1, 0, 0, 0, 0, 0, 0, 0> <1, 0, 0, 1, 1, 1, 1, 0, 0, 0> <1, 0, 0, 1, 0, 0, 0, 1, 0, 0> <1, 0, 0, 1, 0, 0, 0, 0, 1, 0> <1, 1, 0, 0, 0, 0, 0, 0, 0, 1> <1, 0, 0, 1, 0, 1, 0, 1, 0, 0>
  • 93. Documents Distance Class <1, 1, 1, 0, 0, 0, 0, 0, 0, 0> 5 Language <1, 0, 0, 0, 1, 1, 1, 0, 0, 0> 4 Gemstone <1, 0, 0, 1, 0, 0, 0, 1, 0, 0> 1 Language <1, 0, 0, 1, 0, 0, 0, 0, 1, 0> 3 Gemstone <1, 1, 0, 0, 0, 0, 0, 0, 0, 1> 5 Language <1, 0, 0, 1, 0, 1, 0, 1, 0, 0>
  • 94. 5 4 3 2 1 ? language gemstone
  • 95. 5 4 3 2 1 ? language gemstone
  • 96. 5 4 3 2 1 ? language gemstone
  • 97. 5 4 3 2 1 ? language gemstone
  • 98. 5 4 3 2 1 ? language gemstone
  • 99. 5 4 3 2 1 ? language gemstone
  • 100. Para k = 1
  • 101. 5 4 3 2 1 ? language gemstone
  • 102. Documento pertence a language
  • 103. Para k = 3
  • 104. 5 4 3 2 1 ? language gemstone
  • 105. Documento pertence a gemstone
  • 106. Porém, k-nn sempre precisa de todos os dados de treino
  • 107. Classificador pesado e lento
  • 108. Rocchio classifier
  • 109. Similar ao k-nn, porém representa os documentos como uma média
  • 110. 5 4 3 2 1 ? language gemstone
  • 111. 5 4 3 2 1 ? language gemstone
  • 112. 5 4 3 2 1 ? language gemstone
  • 113. 5 4 3 2 1 ? language gemstone
  • 114. 5 4 3 2 1 ? language gemstone
  • 115. Para classificar um documento, calculamos a sua distância às médias
  • 116. 3.5 5 4 3 2 1 ? 3.66 language gemstone
  • 117. Documento pertence a gemstone
  • 118. Rocchio é leve e rápido, porém possui um problema óbvio...
  • 119. ?
  • 120. ?
  • 121. Support Vector Machines (SVM)
  • 122. Teoria matemática complexa
  • 123. Também representa os documentos no espaço
  • 124. Acha um hiperplano que divide o espaço dos documentos em dois
  • 125. 5 4 3 2 1 language gemstone
  • 126. language gemstone
  • 127. language gemstone
  • 128. Calcular este hiperplano, geralmente exige muito processamento
  • 129. Porém classificar um documento é rápido, basta determinar qual lado do hiperplano ele está
  • 130. language gemstone
  • 131. ? language gemstone
  • 132. ? language gemstone
  • 133. Conteúdo • Pré-processamento • Classificadores - Naive bayes - k nearest neighbors - Rocchio classifier - Support vector machines • Medidas
  • 134. Conteúdo • Pré-processamento • Classificadores - Naive bayes - k nearest neighbors - Rocchio classifier - Support vector machines • Medidas
  • 135. Medidas
  • 136. Analisar um classificador por sua acurácia é errado
  • 137. Classe real p n Verdadeiro Falso p Classe Positivo Positivo predita Falso Verdadeiro n Negativo Negativo
  • 138. Acurácia = (VP + VN) / (VP + VN + FP + FN)
  • 139. A acurácia esconde potenciais falso positivos ou falso negativos
  • 140. Use precisão e revocação
  • 141. Precisão = VP / (VP + FP)
  • 142. Revocação = VP / (VP + FN)
  • 143. Alta precisão significa poucos falso positivos, alta revocação equivale a poucos falso negativos
  • 144. Alguns resultados...
  • 145. Dataset da Reuters - RCV1-v2
  • 146. Precisão Revocação 100% 94.5 93.4 92.2 92.3 87.5% 89.9 85.5 80.3 75% 75.7 62.5% 50% Naive Bayes k-NN Rocchio SVM
  • 147. No geral, SVM possui os melhores resultados
  • 148. Naive Bayes possui altíssima precisão, excelente para filtros anti-spam
  • 149. Conteúdo • Pré-processamento • Classificadores • Medidas
  • 150. ?! @josevalim http://blog.plataformatec.com.br