<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Text analysis for hate speech detection in Italian messages on Twitter and Facebook</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Giulio Bianchini</string-name>
          <email>giulio.bianchini@studenti.unipg.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Lorenzo Ferri</string-name>
          <email>lorenzo.ferri@studenti.unipg.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Tommaso Giorni</string-name>
          <email>tommaso.giorni@studenti.unipg.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Perugia</institution>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>English. In this paper, we present a system able to classify hate speeches in Italian messages from Facebook and Twitter platforms. The system combines several typical techniques from Natural Language Processing with a classifier based on Artificial Neural Networks. It has been trained and tested on a corpus of 3000 messages from the Twitter platform and 3000 messages from the Facebook platform. The system has been submitted to the HaSpeeDe task within the EVALITA 2018 competition and the experimental results obtained in the evaluation phase of the competition are presented and discussed.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Italiano. In questo documento
presentiamo un sistema in grado di classificare
messaggi di incitamento all’odio in
lingua italiana presi dalle piattaforme
Facebook e Twitter. Il sistema combina
diverse tecniche tipiche del Natural
Language Processing con un classificatore
basato su una Rete Neurale Artificiale.
Quest’ultimo stato allenato e testato con
un corpus di 3000 messaggi presi dalla
piattaforma Twitter e 3000 messaggi presi
dalla piattaforma Facebook. Il sistema
stato sottomesso al task HaSpeeDe
relativo alla competizione EVALITA 2018, e
sono presentati e discussi i risultati
sperimentali ottenuti nella fase di valutazione
della competizione.</p>
    </sec>
    <sec id="sec-2">
      <title>1 Introduction</title>
      <p>
        In the last years, social networks have
revolutionized in a radical way the world of communication
and the publication of contents. However, if on
one hand social networks represent an instrument
of freedom of expression and connection, on the
other hand they are used for propagation and
incitement to hatred. For this reason, recently, many
softwares and technologies have been developed
to reduce this phenomenon
        <xref ref-type="bibr" rid="ref13">(Zhang and Luo, 2018)</xref>
        <xref ref-type="bibr" rid="ref11 ref12">(Waseem and Hovy, 2016)</xref>
        <xref ref-type="bibr" rid="ref7">(Del Vigna et al., 2017)</xref>
        <xref ref-type="bibr" rid="ref6">(Davidson et al., 2017)</xref>
        <xref ref-type="bibr" rid="ref2">(Badjatiya et al., 2017)</xref>
        <xref ref-type="bibr" rid="ref5 ref8">(Gitari et al., 2015)</xref>
        .
      </p>
      <p>
        Specifically, approaches based on machine
learning and deep learning are used by large companies
to stem and stop this widespread fact. Despite the
efforts spent to produce systems for the English
language, there are very few resources for Italian
        <xref ref-type="bibr" rid="ref7">(Del Vigna et al., 2017)</xref>
        . In order to bridge this
gap, a specific task
        <xref ref-type="bibr" rid="ref3">(Bosco et al., 2018)</xref>
        for the
detection of hateful contents has been proposed
within the context of EVALITA 2018, the 6th
evaluation campaign of Natural Language Processing
and Speech tools for Italian. The EVALITA team
provided the participants with the initial starting
data sets, each consisting of 3000 classified
comments taken respectively from Facebook and
Twitter pages. The objective of the competition is
to produce systems able to automatically annotate
messages with boolean values (1 for message
containing Hate Speech, 0 otherwise).
      </p>
      <p>
        In this paper we describe the system submitted
by the Vulpecula team. The system works in
four phases: preprocessing of the initial dataset;
encoding of the preprocessed dataset; training
of the Machine Learning model; testing of the
trained model. In the first phase, the comments
were cleaned by applying text analysis techniques
and some features have been extrapolated from
these; then in the second phase, using a trained
Word2Vec model
        <xref ref-type="bibr" rid="ref9">(Mikolov et al., 2013)</xref>
        , the
comments were coded in a vector of 256 real
numbers. In the third phase, an artificial neural
network model was trained using the encoded
comments as input along with their respective extra
features. In order to have better and reliable
results, to train and evaluate the model a
crossvalidation was used. In addition, together with
accuracy and evaluation of the error, the F-measure
were used to evaluate the quality of the model.
Finally, in the fourth and last phase, the test set
comments provided by EVALITA were classified. The
rest of the paper is organized as follows. A system
overview is provided in Section 2, while some
details about the system components and the external
tools used are provided in Section 3.
Experimental results are shown and discussed in Section 7,
while some conclusions and ideas for future works
are depicted in Section 8.
2
      </p>
    </sec>
    <sec id="sec-3">
      <title>System overview</title>
      <p>
        The system has a structure similar to
        <xref ref-type="bibr" rid="ref4">(Castellini
et al., 2017)</xref>
        ; it has been organized into four main
phases: preprocessing, encondig, training, testing,
as also shown in Figure 1.
      </p>
      <p>In the first phase the corpus of 3000 Facebook
comments, and the corpus of 3000 Twitter
comments are cleaned and prepared to be
encoded. In parallel within the cleaning we
have extrapolated some interesting features
for each comment. The entire phase is
explained in details in section 4 and 5.</p>
      <p>In the second phase we trained a Word2Vec
model, starting from 200k comments we
download from some Facebook pages known
to contain hate messages. Each of the
initial data set comment has been encoded in a
vector of real values by submitting it to the
Word2Vec model. This phase is explained in
details in the section 5.</p>
      <p>In the third phase we trained a multi-layer
feed-forward neural network using the 3000
encoded comments and the respective
features we extracted in the first phase. The
description of the ANN is in the section 6.</p>
      <p>In the last phase the test set comments
provided by EVALITA were classified and we
joined the competition. This phase is
explained in details in the section 7.</p>
      <p>The source code of the project is provided
online1.
3</p>
    </sec>
    <sec id="sec-4">
      <title>Tools Used</title>
      <p>The entire project was developed using the Python
programming language, for which several libraries
are available and usable for the purpose of the
project. Specifically, the following libraries were
used for the preprocessing phase of the dataset:
nltk: toolkit for natural language processing;
unicode emoji: library for the recognition
and translation of emoticons;
treetaggerwrapper: library for lemming and
word tagging;
textblob: another library for natural language
processing;
gensim: library that contains word2vec;
sequence matcher: library for calculating the
spelling distance between words;</p>
      <p>
        For the training phase of the ML model the
following libraries were used:
keras
        <xref ref-type="bibr" rid="ref5">(Chollet and others, 2015)</xref>
        : High-level
neural network API;
sklearn
        <xref ref-type="bibr" rid="ref10">(Pedregosa et al., 2011)</xref>
        : Simple and
efficient tools for data mining and data
analysis ;
      </p>
      <sec id="sec-4-1">
        <title>Finally, some corpora have been used:</title>
        <p>
          SentiWordNet
          <xref ref-type="bibr" rid="ref1">(Baccianella et al., 2010)</xref>
          ;
dataset of badwords, provided by Prof. Spina
and research group of the University for
Foreigners of Perugia;
dataset of italian words;
1https://github.com/VulpeculaTeam/
Hate-Speech-Detection
dataset of 220k comments downloaded from
Facebook pages (Italia agli italiani stop
ai clandestini, matteo renzi official, matteo
salvini official, noiconsalvini, politici
corrotti)
4
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Preprocessing</title>
      <p>In the Knowledge Discovery in Databases (KDD)
one of the crucial phases is data preparation. In
this project this phase was tackled and the
comments given to us were processed and prepared.
Specific text analysis techniques have been
applied in order to prepare the data in the best
possible way in order to extract the most important
information from them. All the operations
performed for the data cleaning and for the
extrafeature extraction are listed below. Each operation
is iterated for all the 3000 comments of the data
set.</p>
      <p>Extraction of the first feature: length of the
comment.</p>
      <p>Extraction of the second feature:
percentage of words written in CAPS-LOCK inside
the comment. Calculated by the number of
words written in CAPS-LOCK divided by the
number of words in the comment.</p>
      <p>Conversion of disguised bad words. An
interesting function added to the preprocessing
is the recognition of censored bad-words, i.e.
bad-words where some of their middle
letters are replaced by special character
(symbol, punctuation...) to make it recognizable
by an human but not by a computer. At this
scope we don’t use a large vocabulary but
it’s better a simple list of most common
badwords censored (because only a small group
of bad words is commonly censored). At this
python function we pass an entire sentence
creating a list splitting this by space. We scan
the list of sentence words and we control if
the first and last characters are letters and not
number or symbols. Then we take this word
without first and last letters and control if this
middle sub-word is formed by special
symbols/punctuation or by letter x (because ”x”
is often used for hiding bad-words). If yes,
this middle sub-word is deleted from the
censored bad-word, taking the top and end part
of this formed by letters. At the end we scan
the list of bad-words and we control if this
top and end part matching with one of this
scanned bad-words. If yes, this is replaced
by the real word.</p>
      <p>Hashtag splitting. One of the most
difficult cleaning phases is the Hashtag Splitting.
For this we used a large dictionary of italian
words in .csv format. First, we scan every
word in this file and we control if these word
is in the hashtag and then (for convenience
we avoid the words of lenght 2) saving it in
a list. In this phase will be taken also
useless words not contextualized to the hashtag,
so we will need to filter them. For this, first
we sort all found words in decreasing length
and we scan the list. So, starting to the first
word on, we delete it from the hashtag. In this
way the useless words in the list contained in
larger words are found, saved in another list,
and deleted from the beginning list
containing all the words (both useful and useless) in
the hashtag. In the final phase for each word
in the resulting list we find its position within
the hashtag and with this we create the real
sentence, separating every word with a space.
Removal of all the links from the comment.
Editing of each word in the comment by this
way: removal of nearby equal vowels,
removal of nearby equal consonants if they are
more than 2. Examples: from ”caaaaane” to
”cane”, from ”gallllina” to ”gallina”.</p>
      <p>Extraction of the third feature: number of
sentences inside the comment. By sentence
we mean a list of words that ends with ’.’ or
’?’ or ’!’.</p>
      <p>Extraction of the fourth feature: number of
’?’ or ’!’ inside the comment.</p>
      <p>Extraction of the fifth feature: number of ’.’
or ’,’ inside the comment.</p>
      <sec id="sec-5-1">
        <title>Punctuation removal.</title>
        <p>Translation of emoticons (for Twitter
messages). Given the large presence of
emoticons in Twitter messages, it was decided to
translate the emoticons with the respective
English translations. To do this, each
sentence is scanned and if there are emoticons,
these are translated into their corresponding
meaning in English. Using the library
unicode emoji,</p>
      </sec>
      <sec id="sec-5-2">
        <title>Emoticon removal.</title>
        <p>Replacement of the abbreviations with the
respective words, using a list of abbreviations
created by ourselves.</p>
        <p>Removal of articles, pronouns, prepositions,
conjunctions and numbers.</p>
      </sec>
      <sec id="sec-5-3">
        <title>Removal of the laughs.</title>
        <p>Replacement of accented characters with
their unaccented characters.</p>
        <p>Lemmatization of each comment with the
treetaggerwrapper library.</p>
        <p>Extraction of the sixth feature : polarity of the
message. This feature is compute using the
SentiWordNet corpora and his APIs. Since
SentiWordNet was created to find the
polarity of sentences in English, each message is
translated using TextBlob in English and the
polarity is then calculated.</p>
        <p>Extraction of the seventh feature : Percentage
of spelling errors in the comment. To
calculate a spelling error a word is compared with
all the words of the Italian Vocabulary
corpora; if the word is not present in the corpora
there is a spelling error. Calculated by the
number of spelling error divided by the
number of words in the comment.</p>
        <p>Replacement of spelling error: In parallel
with the previous step every spelling error is
replaced with the most similar word in the
Italian Vocabulary corpora. The similarity
between the wrong word and all the other
is calculated using a function of
SequenceMatcher library. The wrong word is replaced
with the most similar word in Italian
Vocabulary corpora.</p>
        <p>Extraction of the eighth feature: number of
bad words in the comment. Every word in
the comment is compared with all the word
in the Bad Words corpora; if the word is in
the corpora it’s a bad word.</p>
        <p>Extraction of the ninth feature: percentage of
bad words. Calculated by the number of bad
words divided by the number of words in the
comment.</p>
        <p>Extraction of the tenth feature : Polarity
TextBlob. This value is compute using a
TextBlob function that allows to calculate the
polarity. Also in this case the message is
translated into English.</p>
        <p>Extraction of the final feature : Subjectivity
TextBlob. Another value computed with a
function in TextBlob.
5</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Word Embeddings with Word2Vec</title>
      <p>Very briefly, Word Embedding turns text into
numbers. This transformation is necessary because
many Machine Learning algorithms don’t work
with plain text but they require vectors of
continuous values. Word Embedding has
fundamental advantages in particular, it is a more efficient
representation (dimensionality reduction) and also
it is a more expressive representation
(contextual similarity). So we have created a Word2Vec
model for word embedding. For the training of
the model, 200k messages were downloaded from
several Facebook pages. These messages were
preprocessed as explained in the previous
section 4 and (in addiction with the messages
provided by EVALITA’s team) were used to train the
Word2Vec model. The trained model encode each
word in a vector of 128 real numbers. Each
sentence is instead encoded with a vector of 256 real
numbers divided into two components of 128
elements: the first component is the vector sum of
the coding of each word in the sentence, while the
second component is the arithmetic mean. At this
point each of the 3000 comments of the starting
training set is a vector of 265 reals: 256 for the
coding of the sentence and 9 for the previously
calculated features.
6</p>
    </sec>
    <sec id="sec-7">
      <title>Model training</title>
      <p>
        The vectors obtained by the process described in
section 5 were used as input for training an
Artificial Neural Network - ANN.
        <xref ref-type="bibr" rid="ref11 ref12">(Russell and Norvig,
2016)</xref>
        The Articial Neural Network mathematical
model composed of artificial ”neurons”, vaguely
inspired by the simplification of a biological
neural network. There are different types of ANN, the
one used in this research is a feed-forward: this
means that the connections between nodes do not
form cycles as opposed to recurrent neural
networks. In this neural network, the information
moves only in one direction, ahead, with respect to
input nodes, through hidden nodes (if existing) up
to the exit nodes. In the class of feed-forward
networks there is the multilayer perceptron one. The
network we have built is made up of two hidden
layers in which the first layer consists of 128 nodes
and the second one is 56. The last layer is the
output one and is formed by 2 nodes. The activation
functions for the respective levels are sigmoid, relu
and softmax and the chosen optimizer is Adagrad,
each layer has a dropout of 0.45. The reason why
these parameters have been chosen is because after
having tried countless configurations, the best
results during the training phase have been obtained
with these parameters. In particular, have been
tried all the possible combinations of these
parameters:
      </p>
      <p>Number of nodes of the hidden layers: 56,
128, 256, 512;
Activation function of the hidden layers:
sigmoid, relu, tanh, softplus;</p>
      <sec id="sec-7-1">
        <title>Optimizer: Adagrad, RMSProp, Adam.</title>
        <p>Furthermore, the dropout was essential to prevent
over-fitting. In fact, dropout consists to not
consider neurons during the training phase of
certain set of neurons which is chosen randomly.
The dropout rate is set to 45%, meaning that the
45% of the inputs will be randomly excluded from
each update cycle. As methods of estimation,
cross-validation was used, partitioning the data
into 10 disjoint subsets. As metrics for
performance evaluation, the goodness of the model was
analyzed by calculating True Positive, True
Negative, False Positive and False Negative. From
these the cost-sensitive measures precision, recall
and f-score were calculated. These are the best
results achieved with the training dataset of
Facebook comments obtained during the cross
validation:</p>
        <p>Accuracy: 83.73%;</p>
        <sec id="sec-7-1-1">
          <title>Standard deviation: 1.09;</title>
        </sec>
        <sec id="sec-7-1-2">
          <title>True Positive: 1455;</title>
        </sec>
        <sec id="sec-7-1-3">
          <title>True Negative: 1057;</title>
        </sec>
        <sec id="sec-7-1-4">
          <title>False Positive: 163;</title>
        </sec>
        <sec id="sec-7-1-5">
          <title>False Negative: 325; Precision: 0.899%;</title>
          <p>Recall: 0.817%;
F1-Score: 0.856%;</p>
          <p>F1-Score Macro: 0.856%;
7</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>Experimental Results</title>
      <p>After the release of the unlabelled test set, the new
2000 messages (1000 of them from Facebook and
1000 of them from Twitter) were cleaned as
explained in section 4 and the respective features
were extrapolated. Then, these new comments
were added to the comment’s pool used to
create the Word2Vec model, and a new Word2Vec
model was created with the new pool. Finally, the
2000 comments were encoded as previously
explained in section 5 in the 265 component vectors
and these were the input of the neural network that
classified them. From the training phase, two
neural network models were built: one trained with
the dataset of 3000 Facebook messages and the
other trained with the dataset of 3000 Twitter
messages. We call the first model VTfb and the
second one VTtw. EVALITA’s task consisted in four
sub-tasks that were:</p>
      <p>HaSpeeDe-FB: test VTfb with the 1000
messages taken from Facebook;
HaSpeeDe-TW: test VTtw with the 1000
messages taken from Twitter;</p>
      <sec id="sec-8-1">
        <title>Cross-HaSpeeDe-FB: test VTfb with the</title>
        <p>1000 messages taken from Facebook;</p>
      </sec>
      <sec id="sec-8-2">
        <title>Cross-HaSpeeDe-TW: test VTtw with the</title>
        <p>1000 messages taken from Twitter;</p>
      </sec>
      <sec id="sec-8-3">
        <title>Sub-task</title>
        <p>HaSpeeDe-FB
HaSpeeDe-TW
Cross-HaSpeeDe-FB
Cross-HaSpeeDe-TW</p>
      </sec>
      <sec id="sec-8-4">
        <title>Model</title>
        <p>VTfb
VTtw
VTfb
VTtw
In Table 1 we report the Macro-Average F1 score
for each sub-task together with the differences
with the best result obtained in the competition
(column ”Distance” in the table). Compared with
the results we had in the training phases (section
6), we would have expected better results in the
HaSpeede-FB task. However, our system appears
to be more general and not specifically targeted to
a platform, in fact the differences in the other tasks
are minimal.
8</p>
      </sec>
    </sec>
    <sec id="sec-9">
      <title>Conclusion and Future Work</title>
      <p>In this paper we presented a system based on
neural networks for the hate speech detection in social
media messages in Italian language. Recognizing
negative comments is not easy, as the concept of
negativity is often subjective. However, good
results have been achieved that are not so far from
the results obtained by the best within the
competition. The proposed system can certainly be
improved, an idea can be to use clustering techniques
to categorize the messages (cleaned and with the
related features) in two subgroups (positive and
negative) and then, for each comment, calculate
how much this is more similar to negative
comments or positive comments and add it as a feature.</p>
    </sec>
    <sec id="sec-10">
      <title>Acknowledgments</title>
      <p>The authors would like to thank prof. Valentina
Poggioni who has helped and supported us in
the development of the whole project. A special
thanks to Manuela Sanguinetti, our shepherd in
EVALITA competition for all the support she has
given to us.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <given-names>Stefano</given-names>
            <surname>Baccianella</surname>
          </string-name>
          , Andrea Esuli, and
          <string-name>
            <given-names>Fabrizio</given-names>
            <surname>Sebastiani</surname>
          </string-name>
          .
          <year>2010</year>
          .
          <article-title>Sentiwordnet 3.0: an enhanced lexical resource for sentiment analysis and opinion mining</article-title>
          .
          <source>In Proceedings of Lrec</source>
          <year>2010</year>
          , pages
          <fpage>2200</fpage>
          -
          <lpage>2204</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <given-names>Pinkesh</given-names>
            <surname>Badjatiya</surname>
          </string-name>
          , Shashank Gupta, Manish Gupta, and
          <string-name>
            <given-names>Vasudeva</given-names>
            <surname>Varma</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Deep learning for hate speech detection in tweets</article-title>
          .
          <source>In Proceedings of the 26th International Conference on World Wide Web Companion</source>
          , pages
          <fpage>759</fpage>
          -
          <lpage>760</lpage>
          . International World Wide Web Conferences Steering Committee.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <given-names>Cristina</given-names>
            <surname>Bosco</surname>
          </string-name>
          , Felice Dell'Orletta, Fabio Poletto, Manuela Sanguinetti, and
          <string-name>
            <given-names>Maurizio</given-names>
            <surname>Tesconi</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>Overview of the EVALITA 2018 Hate Speech Detection Task</article-title>
          . In Tommaso Caselli, Nicole Novielli, Viviana Patti, and Paolo Rosso, editors,
          <source>Proceedings of the 6th Evaluation Campaign of Natural Language Processing and Speech Tools for Italian (EVALITA</source>
          <year>2018</year>
          ), Turin, Italy. CEUR.org.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <given-names>Jacopo</given-names>
            <surname>Castellini</surname>
          </string-name>
          , Valentina Poggioni, and
          <string-name>
            <given-names>Giulia</given-names>
            <surname>Sorbi</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Fake Twitter Followers Detection by Denoising Autoencoder</article-title>
          .
          <source>In Proceedings of the International Conference on Web Intelligence</source>
          , WI '
          <volume>17</volume>
          , pages
          <fpage>195</fpage>
          -
          <lpage>202</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <surname>Franc¸ois Chollet</surname>
          </string-name>
          et al.
          <year>2015</year>
          . Keras. https:// keras.io.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <string-name>
            <given-names>Thomas</given-names>
            <surname>Davidson</surname>
          </string-name>
          , Dana Warmsley,
          <string-name>
            <given-names>Michael</given-names>
            <surname>Macy</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Ingmar</given-names>
            <surname>Weber</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Automated hate speech detection and the problem of offensive language</article-title>
          .
          <source>arXiv preprint arXiv:1703</source>
          .
          <fpage>04009</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <string-name>
            <surname>Fabio Del Vigna</surname>
            ,
            <given-names>Andrea</given-names>
          </string-name>
          <string-name>
            <surname>Cimino</surname>
            , Felice Dell'Orletta,
            <given-names>Marinella</given-names>
          </string-name>
          <string-name>
            <surname>Petrocchi</surname>
            , and
            <given-names>Maurizio</given-names>
          </string-name>
          <string-name>
            <surname>Tesconi</surname>
          </string-name>
          .
          <year>2017</year>
          . Hate Me, Hate Me Not:
          <article-title>Hate Speech Detection on Facebook</article-title>
          .
          <source>In ITASEC</source>
          , volume
          <volume>1816</volume>
          <source>of CEUR Workshop Proceedings</source>
          , pages
          <fpage>86</fpage>
          -
          <lpage>95</lpage>
          . CEUR-WS.org.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <given-names>Njagi</given-names>
            <surname>Dennis Gitari</surname>
          </string-name>
          , Zhang Zuping, Hanyurwimfura Damien, and
          <string-name>
            <given-names>Jun</given-names>
            <surname>Long</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>A lexicon-based approach for hate speech detection</article-title>
          .
          <source>International Journal of Multimedia and Ubiquitous Engineering</source>
          ,
          <volume>10</volume>
          (
          <issue>4</issue>
          ):
          <fpage>215</fpage>
          -
          <lpage>230</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <string-name>
            <given-names>Tomas</given-names>
            <surname>Mikolov</surname>
          </string-name>
          , Kai Chen, Greg Corrado, and
          <string-name>
            <given-names>Jeffrey</given-names>
            <surname>Dean</surname>
          </string-name>
          .
          <year>2013</year>
          .
          <article-title>Efficient Estimation of Word Representations in Vector Space</article-title>
          .
          <source>arXiv preprint arXiv:1301</source>
          .
          <fpage>3781</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <string-name>
            <given-names>F.</given-names>
            <surname>Pedregosa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Varoquaux</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gramfort</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Michel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Thirion</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Grisel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Blondel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Prettenhofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Weiss</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Dubourg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Vanderplas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Passos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Cournapeau</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Brucher</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Perrot</surname>
          </string-name>
          , and
          <string-name>
            <given-names>E.</given-names>
            <surname>Duchesnay</surname>
          </string-name>
          .
          <year>2011</year>
          .
          <article-title>Scikit-learn: Machine Learning in Python</article-title>
          .
          <source>Journal of Machine Learning Research</source>
          ,
          <volume>12</volume>
          :
          <fpage>2825</fpage>
          -
          <lpage>2830</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          <string-name>
            <given-names>Stuart J.</given-names>
            <surname>Russell</surname>
          </string-name>
          and
          <string-name>
            <given-names>Peter</given-names>
            <surname>Norvig</surname>
          </string-name>
          .
          <year>2016</year>
          .
          <article-title>Artificial Intelligence: A Modern Approach</article-title>
          . Malaysia; Pearson Education Limited.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          <string-name>
            <given-names>Zeerak</given-names>
            <surname>Waseem</surname>
          </string-name>
          and
          <string-name>
            <given-names>Dirk</given-names>
            <surname>Hovy</surname>
          </string-name>
          .
          <year>2016</year>
          .
          <article-title>Hateful symbols or hateful people? predictive features for hate speech detection on twitter</article-title>
          .
          <source>In Proceedings of the NAACL student research workshop</source>
          , pages
          <fpage>88</fpage>
          -
          <lpage>93</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          <string-name>
            <given-names>Ziqi</given-names>
            <surname>Zhang</surname>
          </string-name>
          and
          <string-name>
            <given-names>Lei</given-names>
            <surname>Luo</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>Hate speech detection: A solved problem? the challenging case of long tail on twitter</article-title>
          . arXiv preprint arXiv:
          <year>1803</year>
          .03662.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>