artigo - Universidade Federal do Paraná

Transcrição

artigo - Universidade Federal do Paraná
Classificação de Postagens de Grupos do Facebook
Fabrı́cio José de Oliveira Ceschin
Universidade Federal do Paraná
R. Cel. Francisco H. dos Santos, 100
Renan Luciano Burda
Universidade Federal do Paraná
R. Cel. Francisco H. dos Santos, 100
[email protected]
[email protected]
Abstract
mais semelhante trata da classificação de postagens de empresas no facebook, utilizando o classificador SVM e a
representação de vetores de pesos TF-IDF [9]. O SVM
também foi utilizado para extrair a opinião de publicações
de status dos usuários [8]. Outra aplicação de aprendizado
de máquina na rede social classifica o gênero de uma pessoa, através do classificador Naı̈ve Bayes, baseando-se em
um texto postado [15]. Entretanto, muitos artigos relacionados a uma generalização do problema, a classificação de
texto, tarefa de classificar automaticamente um conjunto de
documentos em diferentes categorias predefinidas [30], foram encontrados. Nestes artigos, são encontrados os mais
variados tipos de classificadores, desde o k-nearest neighbors (KNN) até redes neuronais. A representação mais utilizada nos artigos, em sua grande maioria, é o vetor de pesos TF-IDF, embora exista a representação de vetor de palavras [16]. As abordagens que utilizam o KNN apresentam
diversas variações. A abordagem mostrada em [11], por
exemplo, utiliza uma função de similaridade para calcular a
distância entre os texto. Os k textos mais similares ao texto
de entrada são selecionados e a classe mais presente é escolhida. Já em [30] calcula-se o centroide de todas as classes e utiliza a mesma função de similaridade, calculando a
distância do texto de entrada com as categorias. A categoria
mais próxima é escolhida neste caso. Como as abordagens
que visam o KNN, as que fazem uso de redes neuronais têm
uma vasta variação, como em [16], no qual apenas uma camada escondida é utilizada.
Large groups are always a problem in social networks.
Due to their constant activity, it’s difficult to find something,
especially in sales groups, where the categorization is very
important. In this paper we use machine learning techniques, such as cossine similarity, KNN, multilayer perceptron and SVM, as a suggestion to solve this problem in a
facebook group. For this, we created a dataset, containing
posts from a facebook group classified into categories.
1. Introdução
Com o objetivo de fornecer aos usuários as novidades mais recentes, as redes sociais procuram manter seu
conteúdo organizado de forma temporal, dando prioridade
ao conteúdo mais atual. Entretanto, esta abordagem pode
não ser boa em grupos, locais em que pessoas com interesse
em comum podem compartilhar conteúdo. Em grupos de
venda, por exemplo, o conteúdo mais recente nem sempre é
o mais importante. Para este tipo de grupo, abordagens semelhantes aos sites de venda seriam interessantes: separar o
conteúdo em categorias, facilitando o acesso de um possı́vel
comprador a um item que ele realmente tem interesse. Este
trabalho tem como objetivo classificar postagens de grupos
de venda do facebook utilizando algoritmos de aprendizado
de máquina, com a finalidade de manter o conteúdo organizado em categorias. Para tal, foi criado um dataset [10],
com postagens de um grupo de venda do facebook divididas
em categorias.
Inicialmente, este artigo apresenta os trabalhos relacionados a este tema, na Seção 2. Em seguida, na Seção
3, os conceitos utilizados são explicados, seguido pela
implementação, na Seção 4, que utiliza estes conceitos. Finalmente, na Seção 5, encontram-se as conclusões obtidas.
3. Conceitos
Nesta seção são apresentados os conceitos utilizados
para a implementação do trabalho, primeiramente no préprocessamento, seção 3.1, e na classificação, seção 3.2.
3.1. Pré-processamento
2. Revisão Bibliográfica
A obtenção de caracterı́sticas é um dos desafios da
classificação de texto. Esta seção tem como objetivo mostrar a representação utilizada neste trabalho.
Ao pesquisar artigos relacionados na literatura, não encontramos nenhum com o mesmo objetivo. A publicação
1
3.1.1
• Term Frequency (TF): mede com que frequência uma
palavra t ocorre em um texto. O TF é dado pela função:
Case folding e normalização
O primeiro passo no pré-processamento de textos é o case
folding e a normalização. O case folding trata de manter
um padrão para a comparação, mantendo todos os textos
em caixa baixa [2]. Já a normalização consiste em remover todos os acentos, caracteres especiais e números de um
texto [33]. A normalização pode seguir várias regras, como
substituir sı́mbolos e números por seus nomes, por exemplo.
3.1.2
T F (t) =
• Inverse Document Frequency (IDF): mede o quão importante é uma palavra t. O IDF é dado pela função:
Remoção de stop words
Após a normalização do texto, é necessário remover as stop
words, palavras que não têm significados essenciais em um
texto, normalmente as palavras mais comuns em uma lı́ngua
[32].
3.1.3
Número de vezes que t aparece no texto
Número total de palavras do texto
IDF (t) = loge
Bag-of-words
3.1.5
A bag-of-words é uma representação utilizada em processamento de linguagem natural e recuperação de informação,
geralmente utilizada em classificação de documentos. Nesta
representação, a frequência de ocorrência de cada palavra é
usada como caracterı́stica para treinar um classificador [31].
Considere os seguintes textos:
Número total de textos
Número de textos com a palavra t
Vector space model (VSM)
O vector space model (VSM) representa cada texto como
um vetor, que contém o TD-IDF de cada palavra [28]. Dado
um texto i e o TF-IDF de uma palavra j deste texto, wi,j , ele
é representado por:
d~i = (wi,1 , wi,2 , ..., wi,t )
1. João gosta de assistir filmes. Maria também gosta de
filmes.
3.2. Classificação
2. João também gosta de assistir jogos de futebol.
Os seguintes métodos de classificação foram utilizados
neste trabalho: Similaridade do Cosseno, K-Nearest Neighbors, Multilayer Perceptron (MLP) e Support Vector Machine (SVM).
Utilizando a representação bag-of-words, cada texto é uma
instância, representada pela frequência da palavra, tratada
como uma caracterı́stica. Assim, as caracterı́sticas destes
textos são representadas pelo conjunto de todas as palavras
presentes nos textos. No exemplo, as caracterı́sticas são:
[ ”João”, ”gosta”, ”de”, ”assistir”, ”filmes”, ”Maria”,
”também”, ”jogos”, ”futebol” ]. Cada texto, então, é representado pela frequência deste conjunto de palavras, cada
posição referente a uma palavra, na ordem apresentada no
conjunto de caracterı́sticas. No exemplo, os textos são representados da forma:
3.2.1
Similaridade do Cosseno
Dada a representação Vector space model (VSM) de dois
textos i e j, a similaridade entre eles é calculada através do
cosseno do ângulo formado pelos vetores de pesos di e dj ,
da seguinte forma:
1. [ 1, 2, 2, 1, 2, 1, 1, 0, 0 ]
n
P
2. [ 1, 1, 2, 1, 0, 0, 1, 1, 1 ]
sim(di , dj ) = s
Assim, temos uma possı́vel representação para textos que
pode ser utilizada em um classificador.
3.1.4
n
P
k=0
TF-IDF
(wi,k × wj,k )
k=0
2
wi,k
n
P 2
∗
wj,k
k=0
Logo, se os textos forem muito similares, o cosseno do
ângulo gerado entre eles tende a ser próximo à 1. Em contrapartida, se os ângulos forem muito distintos, o cosseno
deste ângulo tende a ficar próximo de zero. A figura 1 mostra a representação de quatro textos em um espaço bidimensional.
O TF-IDF é uma medida estatı́stica utilizada para avaliar o
quão importante uma palavra é para um texto em relação a
uma coleção de textos [29]. Esta medida pode ser obtida utilizando a representação bag-of-words, citada na seção anterior, através da multiplicação de dois termos:
2
3.2.3
Uma rede neuronal do tipo MPL (Multilayer Perceptron) é
formada por nós fontes, que são utilizados como entrada.
Seguindo esta construção, existe uma camada, ou mais, escondida (hidden layers) e os nós de saı́da, respectivamente.
Todas as camadas, retirando a de entrada, é constituı́da por
neurônios, sendo cada um deles inicializados com um peso
randômico. A rede é progressiva, ou seja, os neurônios
de uma camada estão apenas conectados à próxima. Desta
forma, a entrada passa por todas as camadas existentes. O
número de nós de entrada é, respectivamente, o módulo
da entrada, ou seja, sua dimensionalidade e, consequentemente, a quantidade de neurônios da camada de saı́da é dado
pela máxima dimensionalidade do conjunto resposta desejado [4]. A figura 3 apresenta uma rede neuronal com duas
camadas escondidas.
Figura 1: A semelhança entre dois textos é medida através
do cosseno do ângulo formado entre seus vetores [7].
Tendo essa métrica de comparação, no préprocessamento é feita a média dos itens de cada classe,
gerando um único vetor para a classe, o seu centroide.
Dado um texto de entrada, é calculada a sua similaridade
com cada classe. Então, o texto é classificado como sendo
da classe que tiver maior similaridade [30].
3.2.2
Multilayer Perceptron (MLP)
K-Nearest Neighbors
Assim como a Similaridade do Cosseno, suas instâncias
de entrada são os Vector space model (VSM), em que a
classificação de uma nova instância é baseada na distância
dos K elementos de treinamento mais próximos. Assim,
este novo elemento será classificado na classe que mais
ocorreu entre estes K elementos, como pode ser observado
na figura 2.
Figura 3: Arquitetura de uma rede neural multilayer
perceptron com duas camadas escondidas [4].
3.2.4
Support Vector Machine (SVM)
O SVM (Support Vector Machine), originalmente desenvolvido para classificação binária, busca, em padrões linearmente separáveis, a construção de um hiperplano como
superfı́cie de decisão (uma fronteira), de tal forma que
a separação entre os exemplos seja máxima. Quando os
padrões são não-linearmente separáveis,o SVM busca uma
função de mapeamento, que projeta os dados em um espaço
em que os dados são linearmente separáveis [14, 18]. A
ideia do SVM é maximizar a margem do hiperplano dos
dados de treinamento. Um hiperplano ótimo é aquele cuja
distância da margem para o exemplo da classe positiva é
igual a distância da margem para o exemplo da classe negativa. A figura 4 ilustra um hiperplano ótimo definido pelos vetores de suporte, os exemplos da base de treinamento
mais próximos.
Figura 2: A classe é calculada a partir dos K vizinhos mais
próximos [5].
A semelhança entre as instâncias é medida em termos
da distância euclidiana. Dada uma instância x, descrita por
(a1 (x),a2 (x),...,an (x)), onde ai (x) é o i-ésimo atributo, a
distância entre duas instâncias xi e xj é dada por [20]:
v
u n
uX
d(xi , xj ) = t (ar (xi ) − ar (xj ))2 )
r=1
3
duas classes, é necessário utilizar uma abordagem diferente,
já que o SVM é um classificador binário. A abordagem
mais comum é a um-contra-todos, também chamada de um
contra-o-resto [2], em que existem q classificadores, onde q
é o número de classes. Cada SVM ci é treinado para a classe
i, usando como contra exemplo as outras classes. A decisão
final, então, pode ser obtida através de uma ”apuração de
votos”[18].
4. Implementação
Figura 4: Os exemplos da base de treinamento mais
próximos do hiperplano são chamados de vetores de
suporte [18].
Esta seção apresenta as informações referentes à
implementação do trabalho, iniciando com a obtenção do
dataset, na seção 4.1, seguido pelo funcionamento do préprocessamento, na seção 4.2, e da classificação, na seção
4.3.
A função de decisão, responsável por construir o hiperplano, onde K é a função de kernel, responsável por projetar o espaço de entrada no espaço de caracterı́sticas, α e
b são os parâmetros encontrados durante o treinamento, xi
são os vetores de caracterı́sticas e yi , os rótulos da classe, é
definida por [18]:
f (x) =
X
4.1. Dataset
αi yi K(x, xi ) + b
i
Utilizando a biblioteca Facebook Python SDK [6] e gerando um token de acesso através da Graph API da rede
social [12], foram coletados 1524 postagens do UFPR Mercadão [13], um grupo com cerca de 145 mil membros, cujo
principal objetivo é a venda, compra e troca de produtos. O
conteúdo, salvo no formato csv, foi exportado para o Google Drive, disponı́vel em [10], para facilitar a classificação
das postagens, classificadas manualmente em 12 classes:
animais, crianças, comida, serviços, entretenimento, moda,
casa, esportes, eletrônicos, imóveis, negócios e eletrônicos.
Além da classificação em classes, um pré-processamento do
texto é feito manualmente, removendo palavras que possam
influenciar na classificação do texto, como nomes pessoais, e corrigindo erros de digitação. Fazendo isso, garantimos que um texto de entrada que contém nome pessoal
ou erro de digitação seja considerado similar a um texto do
conjunto de treinamento, justamente por ele conter aquele
nome ou mesmo erro. Devido a classificação manual e o
tempo hábil disponı́vel, não foi possı́vel coletar mais postagens. Entretanto, pretendemos aumentar a base de dados
para dar sequência a este trabalho. A Tabela 1 apresenta a
distribuição dos dados do dataset. A partir desta tabela, com
os textos classificados, é gerado um novo arquivo csv, utilizado como entrada do pré-processamento, contendo o texto
da postagem e sua categoria em cada linha.
Na maioria das vezes, os problemas não são linearmente
separáveis. Por conta disso, é necessário projetar os dados
em um espaço em que os dados são linearmente separáveis,
projetando o espaço de entrada no espaço de caracterı́sticas
utilizando a função kernel (kernel trick). Assim que projetados, é possı́vel encontrar um hiperplano que separe os
dados neste espaço [18]. A figura 5 exemplifica o uso do
kernel trick para projetar os dados em outra dimensão.
Figura 5: Exemplo de projeção de um problema
não-linearmente separável, em que os dados são projetados
em outra dimensão (bidimensional para tridimensional)
[18].
Como a maioria dos problemas reais envolvem mais que
4
Classe
Animais
Crianças
Comida
Serviços
Entretenimento
Moda
Casa
Esportes
Eletrônicos
Imóveis
Negócios
Veı́culos
Quantidade
39
19
89
131
67
271
218
49
409
66
15
151
entrada para o classificador, junto com os rótulos de cada
texto. Os testes realizados sobre os classificadores utilizou cross validation, com 20% dos dados para teste e 80%
para treino. Cada teste foi executado cem vezes e a acurácia
média foi calculada, como medida de comparação.
4.3.1
Tabela 1: Distribuição do dataset criado em suas 12
classes.
Similaridade do Cosseno
Ao utilizar a similaridade de cosseno como classificador,
é calculada a média do vetor de pesos dos textos de cada
classe, gerando um cluster para cada classe. A similaridade de um texto com uma classe é calculada através do
método cosine similarity, também da biblioteca scikit-learn
[21, 19]. O texto é classificado como sendo da classe que
obteve maior similaridade. Este método de classificação obteve 80.53% de acurácia.
4.2. Pré-processamento
Todos os conceitos apresentados na seção 3.1 foram utilizados na implementação do pré-processamento. O arquivo
csv gerado na criação do dataset é lido, linha a linha. Para
cada texto, primeiramente, são removidos caracteres especiais. Em seguida, o texto é deixado em caixa baixa e os
números são removidos. Então, os espaços duplicados são
removidos. Finalmente, as stop words, também em csv [17],
com a inclusão de palavras frequentes em grupos de venda,
são removidas do texto, que é adicionado a um dicionário,
assim como sua categoria. Depois de processados, os textos
e suas classes são escritos em um novo arquivo csv. Utilizando a classe TfidfVectorizer [26], da biblioteca scikitlearn [19], os textos são transformados na representação
Vector space model (VSM), antes de ser utilizado no classificador. O método fit ”treina”a classe com os dados de treinamento, guardando as caracterı́sticas que representam os
textos, ou seja, o conjunto de palavras dos dados de treinamento. Com o método transform, os dados passados como
parâmetro são transformados para a representação Vector
space model (VSM), com as caracterı́sticas de acordo com
o ”treinamento”feito anteriormente, na forma de uma matriz esparsa da biblioteca scipy [27]. 0
4.3.2
K-Nearest Neighbors
Utilizando o classificador KNeighborsClassifier [22], da biblioteca scikit-learn [19], os valores de K foram variados de
1 a 16. A figura 6 apresenta os resultados obtidos. As maiores acurácias foram com os valores 10 e 11, com 78.32%.
4.3. Classificação
Para implementar a classificação, foram utilizadas as bibliotecas scikit-learn [19] e tensorflow [1]. Os classificadores utilizados são os mesmos apresentados na seção 3.2:
primeiramente a Similaridade do Cosseno, na seção 4.3.1,
seguido pelo K-Nearest Neighbors, na seção 4.3.2, Multilayer Perceptron (MLP), na seção 4.3.3, e Support Vector
Machine (SVM), na seção 4.3.4. Todos os classificadores
lêem o arquivo csv gerado na fase de pré-processamento e
a classe TfidfVectorizer [26], da biblioteca scikit-learn [19],
para criar o vetor de pesos das postagens, utilizado como
Figura 6: Comparação das acurácias com a variação do
parâmetro K.
5
4.3.3
Multilayer Perceptron (MLP)
Figura 8: Comparação das implementações e funções de
kernel do SVM.
5. Conclusão
Dentre todos os classificadores utilizados, o LinearSVC
(SVM com função kernel linear) obteve a melhor acurácia,
com 82.93%, seguido pela similaridade de cosseno, com
80.53%, KNN (com K igual a 10 ou 11), com 78.32%, e o
Multilayer Perceptron, com 77.82%. A figura 9 apresenta
uma comparação da acurácia dos classificadores utilizados.
Figura 7: Grafo gerado pelo tensorflow representando a
rede multilayer perceptron.
Para este classificador, utilizamos a biblioteca tensorflow
[1], do Google. Seguindo alguns exemplos disponı́veis no
github [3], criamos uma rede neuronal do tipo Multilayer
Perceptron (MLP). Dentre diversos testes e diante do curto
perı́odo de tempo disponı́vel, a rede que apresentou melhor
resultado, com 77.82% de acurácia, teve taxa de aprendizagem de 10%, 20 épocas, duas camadas escondidas, a primeira com o n/2 neurônios e a segunda com n/4, onde n é
o número de caracterı́sticas, e a divisão em 30 partições no
treinamento. A figura 7 mostra o grafo gerado pelo tensorflow, representando a rede neural criada.
4.3.4
Figura 9: Comparação da acurácia dos classificadores.
5.1. Trabalhos Futuros
Embora o SVM tenha apresentado melhores resultados,
no futuro, pretendemos fazer testes com diferentes redes
neuronais. Além disso, é necessário aumentar o dataset e
equilibrar a quantidade de textos por classe para verificar
se a acurácia se mantém, mesmo com uma maior diversidade dos textos. Um problema encontrado durante o trabalho foi a categorização dos posts em uma única classe,
já que muitos deles podem ser encaixados em mais de uma
classe. Acreditamos que uma redefinição de classes ou a
utilização de alguma técnica de classificação multi-classes
(ou seja, adicionar o texto para diversas categorias que ele
se encaixa). Uma técnica de rejeição também pode ser utilizada para descartar os textos que o classificador apresentar
maior dificuldade (ou baixa precisão) em classificar. Assim,
a responsabilidade de classificação destes textos não são da
Support Vector Machine (SVM)
Foram utilizados duas implementações do SVM [24]: o
SVC [25], com quatro funções de kernel diferentes (linear,
polinomial, rbf e sigmóide), e LinearSVC [23], que possui
apenas a função de kernel linear. A figura 8 apresenta os
resultados das duas implementações, incluindo as variações
de função de kernel do SVC. O LinearSVC apresentou a
melhor acurácia, com 82.93%.
6
máquina, as possı́veis classes de um determinado texto podem funcionar apenas como uma sugestão. Os textos que
não forem rejeitados podem, então, ser classificados, aumentando a acurácia.
[10] Fabrı́cio Ceschin e Renan Burda. Dataset - grupos de venda.
https://docs.google.com/spreadsheets/d/
1cvKZEeUMuDCvCs4n9xFmdQ81EXr5crb3IqdCHDtyNkU/
edit?usp=sharing, acessado em novembro de 2015.
[11] Lijun Wang e Zhang Jiakou. Improved knn classification algorithms research in text categorization, 2012.
http://ieeexplore.ieee.org/xpl/login.
jsp?tp=&arnumber=6201850, acessado em novembro
de 2015.
Referências
[1] Martı́n Abadi, Ashish Agarwal, Paul Barham, Eugene
Brevdo, Zhifeng Chen, Craig Citro, Greg S. Corrado, Andy
Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat,
Ian Goodfellow, Andrew Harp, Geoffrey Irving, Michael
Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dan Mané, Rajat Monga,
Sherry Moore, Derek Murray, Chris Olah, Mike Schuster, Jonathon Shlens, Benoit Steiner, Ilya Sutskever, Kunal Talwar,
Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Viégas, Oriol Vinyals, Pete Warden, Martin Wattenberg, Martin Wicke, Yuan Yu, e Xiaoqiang Zheng. TensorFlow: Large-scale machine learning on heterogeneous systems, 2015. Software available from tensorflow.org.
[12] Facebook. Graph api explorer - facebook for developers.
https://developers.facebook.com/tools/
explorer/?method=GET&path=me%3Ffields%
3Did%2Cname&version=v2.1&__mref=message_
bubble, acessado em novembro de 2015.
[13] Facebook. Ufpr mercadão. https://www.facebook.
com/groups/ufprmercadao/, acessado em novembro
de 2015.
[14] André Ricardo Gon¸calves. Máquina de vetores de suporte. http://www-users.cs.umn.edu/˜andre/
arquivos/pdfs/svm.pdf, acessado em dezembro de
2015.
[2] Prabhakar Raghavan e Hinrich Schütze Christopher
D. Manning.
Introduction to Information Retrieval.
Cambridge University Press, 2008.
http://nlp.
stanford.edu/IR-book/html/htmledition/
capitalizationcase-folding-1.html, acessado
em novembro de 2015.
[15] Zach Galant e David Kravitz Jeremy Keeshin.
Machine Learning and Feature Based Approaches to Gender Classification of Facebook Statuses. Stanford University, 2010. http://thekeesh.com/cs224n/final_
writeup.pdf, acessado em novembro de 2015.
[3] Aymeric
Damien.
Tensorflow
examples.
https://github.com/aymericdamien/
TensorFlow-Examples, acessado em dezembro
de 2015.
[16] Taeho Jo. Automatic text categorization using ntc, 2009.
http://ieeexplore.ieee.org/xpl/login.
jsp?tp=&arnumber=5272193, acessado em novembro
de 2015.
[4] Fernando César C. de Castro e Maria Cristina F. de Castro.
Multilayer perceptrons. http://www.feng.pucrs.
br/˜decastro/pdf/RNA_C4.pdf, acessado em dezembro de 2015.
[17] Stanley Loh.
Listas de stopwords - stoplist (portugues,
ingles,
espanhol).
http:
//miningtext.blogspot.com.br/2008/11/
listas-de-stopwords-stoplist-portugues.
html, acessado em novembro de 2015.
[5] Rodrigo Fernandes de Mello. Aprendizado baseado em
instâncias. http://scikit-learn.org/stable/
modules/svm.html, acessado em dezembro de 2015.
[18] David Menotti.
Classificadores lineares.
http://
web.inf.ufpr.br/menotti/ci171-2015-2-1/
slides/aula-ClassificadoresLineares.pdf,
acessado em dezembro de 2015.
[6] Martey Dodoo.
Facebook python sdk.
https:
//github.com/pythonforfacebook/
facebook-sdk, acessado em novembro de 2015.
[7] Alexandre Duarte.
Modelo de espaço vetorial.
http://pt.slideshare.net/alexandrend/
modelo-de-espao-vetorial-16256538, acessado
em dezembro de 2015.
[19] F. Pedregosa, G. Varoquaux, A. Gramfort, V. Michel, B. Thirion, O. Grisel, M. Blondel, P. Prettenhofer, R. Weiss, V. Dubourg, J. Vanderplas, A. Passos, D. Cournapeau, M. Brucher,
M. Perrot, e E. Duchesnay. Scikit-learn: Machine learning
in Python. Journal of Machine Learning Research, 12:2825–
2830, 2011.
[8] Akash Shrivatava e Bhasker Pant. Opinion Extraction
and Classification of Real Time Facebook Status. Global
Journal of Computer Science and Technology, 2012. http:
[20] Aurora Trinidad Ramirez Pozo. Aprendizado baseado
//globaljournals.org/GJCST_Volume12/
7-Opinion-Extraction-and-Classification-of-Real.em instâncias. http://www.inf.ufpr.br/aurora/
disciplinas/datamining/ibk.pdf, acessado em
pdf, acessado em dezembro de 2015.
dezembro de 2015.
[9] Bei Yu e Linchi Kwok. Classifying Business Marketing Mes[21] Scikit-learn.
Cosine similarity.
http://
sages on Facebook. SIGIR 2011 Workshop: Internet Adverscikit-learn.org/stable/modules/metrics.
tising, 2011. http://research.microsoft.com/
html#cosine-similarity, acessado em novembro
en-us/um/beijing/events/ia2011/n7.pdf,
de 2015.
acessado em novembro de 2015.
7
[22] Scikit-learn.
Kneighborsclassifier.
http:
//scikit-learn.org/stable/modules/
generated/sklearn.neighbors.
KNeighborsClassifier.html#sklearn.
neighbors.KNeighborsClassifier,
acessado
em dezembro de 2015.
[23] Scikit-learn. Linearsvc. http://scikit-learn.org/
stable/modules/generated/sklearn.svm.
LinearSVC.html#sklearn.svm.LinearSVC,
acessado em dezembro de 2015.
[24] Scikit-learn.
Support vector machines.
http:
//pt.slideshare.net/alexandrend/
modelo-de-espao-vetorial-16256538, acessado
em dezembro de 2015.
[25] Scikit-learn.
Svc.
http://scikit-learn.org/
stable/modules/generated/sklearn.svm.
SVC.html#sklearn.svm.SVC, acessado em dezembro
de 2015.
[26] Scikit-learn. Tfidfvectorizer. http://scikit-learn.
org/stable/modules/generated/sklearn.
feature_extraction.text.TfidfVectorizer.
html, acessado em novembro de 2015.
[27] Scipy. Sparce matrices. http://docs.scipy.org/
doc/scipy/reference/sparse.html, acessado em
novembro de 2015.
[28] Dr. Ian Soboroff. Ir models: The vector space mode.
http://www.csee.umbc.edu/˜ian/irF02/
lectures/07Models-VSM.pdf, acessado em novembro de 2015.
[29] tf idf. Tf-idf: A single-page tutorial - information retrieval
and text mining. http://www.tfidf.com/, acessado
em novembro de 2015.
[30] Pinki Kumari e Jordan Pascual Vishwanath Bijalwan, Vinay Kumar. Knn based machine learning approach for
text and document mining, 2014. http://www.sersc.
org/journals/IJDTA/vol7_no1/6.pdf, acessado
em novembro de 2015.
[31] Wikipedia.
Bag-of-words model.
https://en.
wikipedia.org/wiki/Bag-of-words_model,
acessado em novembro de 2015.
[32] Wikipedia. Stop words. https://en.wikipedia.
org/wiki/Stop_words, acessado em novembro de
2015.
[33] Wikipedia.
Text normalization.
https://en.
wikipedia.org/wiki/Text_normalization,
acessado em novembro de 2015.
8