<!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>Word and Graph Embeddings for COVID-19 Retweet Prediction</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Tam T. Nguyen</string-name>
          <email>nthanhtam@gmail.com</email>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Karamjit Singh</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sangam Verma</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hardik Wadhwa</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Siddharth Vimal</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Lalasa Dheekollu</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sheng Jie Lui</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Divyansh Gupta</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dong Yang Jin</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Zha Wei</string-name>
        </contrib>
      </contrib-group>
      <fpage>5</fpage>
      <lpage>8</lpage>
      <abstract>
        <p>In this paper, we present our solution for COVID-19 retweet prediction challenge. The proposed approach consists of feature engineering and modeling. For feature engineering, we leverage both hand-crafted and unsupervised learning features. As the provided data set is large, we implement auto-encoding algorithms to reduce feature dimension. To develop predictive models, we utilize ensemble learning and deep learning algorithms. We then combine these models to generate the final blended model. Moreover, to stabilize the predictions, we also apply bagging as well as down-sampling techniques to remove the tweets where number of retweets equals to zero. Our solution is ranked    on the public test set and   on the private test set.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>INTRODUCTION</title>
      <p>
        Machine learning and Text mining have been proved to be a
powerful tools for processing unstructured text data and making
shortterm prediction, whether they are still helpful during the time of
crisis, e.g. the ongoing Coronavirus disease 2019 (COVID-19), is
still in question. In this paper, we take advantage of both text
mining and machine learning methods to build more accurate models
to predict number of retweets in Twitter. Our proposed approach
consists of two major parts: feature engineering and modelling.
For feature engineering, we leverage hand-crafted features and
auto feature learning based on neural networks models. We use
most of state-of-the-art algorithms in text mining and machine
learning. For example, we rely on word2vec [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], doc2vec [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], and
BERT [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] to learn embedding features. For graph features, we utilize
node2vec and pyTorch-biggraph [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] algorithms to extract features.
And finally, we build predictive models using emerging boosting
algorithms such as Catboost [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and LightGBM [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Our solution is
released as an open source on Github1.
      </p>
    </sec>
    <sec id="sec-2">
      <title>DESCRIPTIVE ANALYSIS</title>
      <p>
        The provided TweetsCOV19 dataset [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] contains extracted tweet
instances which can be broadly divided in three types. 1) Metadata:
tweet ID, username, and timestamp, 2) Connection: number of
followers, number of friends, and number of favorites, and 3) Tweet
text based: entities, sentiment, mentions, hashtags, and URLs. The
goal is to predict number of retweets for each tweet. The train,
validation, and test datasets are sequentially provided with respect
to time. The training data accounts for the tweet instances from
October, 2019 to April, 2020.
      </p>
    </sec>
    <sec id="sec-3">
      <title>FEATURE ENGINEERING</title>
      <p>Our feature set consists of both hand-crafted features and
unsupervised learning features.
3.1</p>
    </sec>
    <sec id="sec-4">
      <title>User-level Feature</title>
      <p>We aggregate data by users to generate user-level features. For
example, we group data by users and concatenate all tweets belonging
to the users. We then generate features for them as follows.
3.1.1</p>
      <p>Hand-crafted user feature .
• Followers and friends ratio. Along with the number of
followers and friends, we derive the ratio of followers/(friends+1).
• Tweet count. Number of tweets for each user is calculated.
• Statistical features. Since the followers, friends and favourites
vary for a given user over time for each user, various statistics
like sum, mean, median, min, max, standard deviation are
used to aggregate these columns separately for a user.
• Time based features. The number of tweets made by a user
in a particular month and hour, number of diferent hours
in which a user tweeted, the average time between two
consecutive tweets were used as features. Also the total number
of unique users who tweeted on a particular date and hour
are also calculated.
• User sentiments. For each user, the mean and standard
deviation are calculated for both positive and negative sentiments.
Also, the number of tweets for each value of positive and
negative sentiments for a user are calculated.
3.1.2 Hashtags/Mentions. There are two kind of hashtags/mentions
features in our models.</p>
      <p>Hand-crafted Feature. We calculate count features from hashtags
and mentions as follows.</p>
      <p>• Number of unique hashtags and mentions used by a user are
given as input for each tweet of that user.</p>
      <p>• Number of tweets that hashtags or mentions occur in.</p>
      <p>
        Word2Vec Features. There are only a few mentions in a tweet in
the given data set. Most of the time, users don’t mention anything
in their tweets. If we directly use mentions as features (e.g.
onehot encoding), the feature space will be very sparse. Therefore,
we propose to learn dense embedding features for mentions by
considering each mention as word and train a word2vec model of
64 dimension using Gensim [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
3.1.3 Entity Embedding Feature. In this section, we introduce our
approach on how to extract embedding features from entities as
follows.
      </p>
      <p>• Pre-process entity triples and keep matched entities only.
• Aggregate entities by concatenating them based on user
• Train diferent embedding models with various parameters
such as embedding size and vocabulary size.</p>
      <p>• Extract embedding features for each user.</p>
      <p>For embedding models, we try word2vec, doc2vec, and BERT
models. In the following sections, we present how we train these model
in detail.</p>
      <p>
        Doc2Vec. In order to generate doc2vec features [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], we treat all
entities of a user as a document. We then train doc2vec model
using diferent embedding sizes such as 32, 64, 128, and 256. We
then extract features and train our predictive models. Based on our
experimental results on our internal validation set, we choose the
embedding size of 64 as it gives us the best score.
      </p>
      <p>
        Bert. Similar to doc2vec model, we aggregate entities by users
and treat these as documents. We choose the top attention layer
of BERT model to extract features. As this layer has dimensions of
1024, we reduce its dimension using:
• Truncated SVD [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] with 55 components.
• Autoencoder: We train a enoder-decoder neural networks
with input and output size as 1024. We try diferent size of
hidden layer choose the size of 128 which gives us good
performance on both auto-encoding and predictive models.
3.1.4
      </p>
      <sec id="sec-4-1">
        <title>URL Feature.</title>
        <p>
          • Number of unique URLs used by a user
• Number of legit URLS in the tweet.
• URL field is fitted and transformed on a Count Vectorizer [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ].
        </p>
        <p>This is given as input to a SVD (Singular Value
Decomposition) with 5 principal components to obtain 5 URL_SVD
features.
• Domain name and sufix(url part followed by the domain
name) are extracted for each URL in a given tweet and
following are created:
(1) A flag that indicates the presence of ‘Twitter’ word in the
domain name.
(2) For each domain name, number of tweets with that domain
name are recorded. If a tweet has multiple URLs, then
statistics like min, max, average are computed on domain
frequencies for each tweet.</p>
        <p>• Same features are created for sufix also.
3.1.5</p>
      </sec>
      <sec id="sec-4-2">
        <title>Sentiment Feature.</title>
        <p>• For each tweet, the product of the number of followers and
the sentiment values, both positive and negative were taken.
For the negative sentiment values the absolute of the
sentiment value was taken.
• Similarly, the product of the number of friends and the
sentiment values was also used as a feature.
3.2</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Tweet-level Feature</title>
      <p>For tweet-level features, we generate the features using label
encoding for user ID, Hashtag, Mention and URL. We also use some
features given in the raw data directly like favourites, friends,
followers etc. Note that we only use label encoded features directly
in tree-based/boosting models. For neural network models, we use
embedding layer on top of these.
3.3</p>
    </sec>
    <sec id="sec-6">
      <title>Trend-level Feature</title>
      <p>Text based attributes of tweets such as hashtags {ℎ }, mentions
{ }, and entities { } can have a time based trend, also for each
tweet there can be multiple values of the above. Since these
attributes can have a time based trend, we create features to capture
those trends. For the explanation purpose, we will use { } for {ℎ },
{ }, and { }. First we created features for each { } and since
one tweet can have multiple { }, we aggregate these features to a
tweet level.</p>
      <p>• Score: Number of tweets which have used  in that day
• Age: Number of days since  came into existence.
• Life: Number of days  has been active through the course
of the data.
• Trend: Change in the score of  from the previous day.
• Peak: Fraction of tweets of  this day.</p>
      <p>Below are the aggregate tweet level features:
• Score based features: we take average and max of the score
of all  in a tweet.
• Weighted score features: Instead of normal average and
max of scores, we take weighted average where two type of
weights are used: inverse of ‘Age’ and ‘Life’ of 
• Age and life based features: we take average, min and max
of ‘Age’ of all  in a tweet attribute. Similar features are
created for life.
• Trend: we take average trend, max trend of all  in a tweet
attribute.
• Peak: we take average and max of peak values of all  in a
tweet.
3.4</p>
    </sec>
    <sec id="sec-7">
      <title>Graph-based Feature</title>
      <p>
        In this section, we introduce our graph-based feature set. In order
to generate the features, we build a few kind of graphs such as
user-entity graph (UE), user-hashtag graph (UH), and combined
user-hashtag-URL-mention graph (CG).
3.4.1 UE. To generate graph feature, we build a user-entity graph
as follows: (i) each node represents a user or an entity and (ii) create
an edge between a user and an entity if user tweets about that entity.
We use pyTorch-biggraph [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] to generate user level embedding of
the size 64, which we use as features in our models.
3.4.2 UH. Similar to user-entity graph, we build a user-hashtag
graph as follows: (i) each node represents a user or a hashtag and
(ii) create an edge between a user and a hashtag if the user uses
that hashtag in his tweet. Similar to UE, we also use
pyTorchbiggraph [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] to generate user level embedding of size 64 and use it
as features.
3.4.3 CG. This graph is similar to the above two graphs but we
replace entities and hashtags by mentions and URLs. The edges of
the graph is identified whether users use mentions or URLs in their
tweets.
      </p>
      <p>
        Additional to embedding graph features, we use traditional graph
algorithms to extract information of users from the graphs such as
centrality, average neighbor degrees, etc. Moreover, we also train
node2vec [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] models to extract embedding features.
4
      </p>
    </sec>
    <sec id="sec-8">
      <title>MODELING APPROACH</title>
      <p>
        We use hold-out testing technique to validate our models where 80%
of the data is for training and 20% is for testing. Our final solution
is an ensemble of 3 major popular machine learning algorithms:
Catboost [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], LightGBM [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], and Neural Networks using Keras [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
4.1
      </p>
    </sec>
    <sec id="sec-9">
      <title>Boosting Models</title>
      <p>
        We use Catboost (CAT) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and LightGBM (LGB) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] to train two
separate models on features discussed in Section 3. For LightGBM
algorithm, we also use bagging technique for LGB by repeating
training it using various random seed numbers. Doing so, we can
stablize its predictions in the validation and test sets. We will discuss
further on these algorithms’ parameters in the next section.
4.2
      </p>
      <p>Neural Network Models
4.2.1 Convolutional Neural Networks (CNN). Figure 2 shows the
architecture of the CNN and feed forward based model. Input to
the model are all numerical features discussed above, embeddings
for entity, hashtag, and mentions. We also graph based features
derived from user-hashtag graph as described in Section 3.4.2. 1D
convolutional layers are used to extract features from local input
patches allowing for representation modularity and data eficiency.
We use 64 filters for each variable followed by max pooling. We
then concatenate the output of these CNN Layers. Simultaneously,
we pass categorical features like hour, weekday, month, user id,
hashtag, and entity to the embedding layer. We concatenate all
of these layers together and pass them to a feed forward neural
networks and obtain the final retweet count.
4.2.2 Embedding Neural Networks Model. To develop embedding
neural networks model, we classify features into two categories:
numerical and categorical features. For numerical features such as
no. of friends, no. of followers, etc., we use log scale to transform
the data. For categorical features such as mentions, hashtags, and
entities, we use embedding layer to deal with them.
4.3</p>
    </sec>
    <sec id="sec-10">
      <title>Common-User Model</title>
      <p>As discussed in Section 2, there are about 50% common users in train
and test sets. This serves as the motivation to train a model specific
to the common users only. Apart from the features discussed in
Section 3, we create some additional features specific to common
user model. We used catboost to train the model</p>
      <p>K-Fold Target Encoding. Target encoding for each user is
created to capture the popularity of a user, but a model using
traditional target encoding (taking mean of the retweets for all the
tweets of a user) tends to overfit the training data set and did not
perform well. To tackle this problem, we use 5-Fold target encoding.</p>
      <p>Moving Averages. To capture the trend of a particular user
whether be the gain or loss in popularity over time, we create
trend based features. For a user on a given day we find the moving
averages of number of followers and friends for the last 3, 5, and
10 tweets. This is then used directly as a paramter in the model.
4.4</p>
    </sec>
    <sec id="sec-11">
      <title>K-fold Down Sampling</title>
      <p>We notice that most of tweets have no retweet count. If we use the
whole training data to train models, the prediction in the validation
and test sets tend to be smaller than the actual number of retweets.
Hence, we use k-fold down sampling these tweets as follows:
• Split the training data into two sets A (retweets &gt; 0) and B
(retweets = 0).
• Apply k-fold cross validation on set B to select 80% of the
data to have a new data set C. Merge sets A and C to train
predictive models and make prediction on validation and test
sets. In this case, we have total 5 predictions , corresponding
to each of the fold.
• The final prediction of validation and test sets will be the
averaged prediction of k folds.</p>
      <p>NN
test
val
0.12763
0.12649</p>
      <p>CNN
test
0.13139
0.13018</p>
    </sec>
    <sec id="sec-12">
      <title>4.5 Ensemble</title>
      <p>In practice, combining multiple machine learning models will help
improve the performance of the final model. In order to do that, the
simplest way is to use weighted average the prediction of selected
models. Our ensemble model prediction is a linear combination of
Catboost, LightGBM, and neural networks models. We estimate the
weights based on the performance of the models on the leaderboard
where the weights of Catboost, LightGBM, and neural networks
are 0.6, 0.3, and 0.1, respectively.</p>
    </sec>
    <sec id="sec-13">
      <title>5 EXPERIMENTS</title>
      <p>In this section, we discuss the experiment settings including
hyperparameters selected for each model and the performance of each
model in diferent settings based on our internal validation set.</p>
    </sec>
    <sec id="sec-14">
      <title>5.1 Experiment Settings</title>
      <p>We use two boosting based models: Catboost and LightGBM where
we use larger learning rate and fewer trees for LightGBM (LGB
Parameters - num_leaves: 35, max_depth: 8, min_child_sample: 100,
subsample: 0.7, colsample_bytree: 0.7, n_estimators: 15k, learning
rate: 0.2), and smaller learning rate for Catboost (CAT Parameters
- iterations: 53k, border_count: 254, max_depth: 11, learning rate:
0.03).</p>
    </sec>
    <sec id="sec-15">
      <title>5.2 Results</title>
      <p>As mentioned in Section 3.4, we generate two types of embeddings
from the following types of graphs: user-hashtag graph (UH) and
user entity graph (UE), where the embedding size is 64 in both
the cases. Table 2 shows the performance of Catboost model on
diferent feature sets. In this setting, we would like to study the
impact of graph based features on the performance of our models.
Without using any graph features, Catboost (CAT) has the error
of 0.12494. By using normal graph features such as UH and UE,
we can improve the model 0.0015. It means that adding the graph
embeddings improves the performance of the models.</p>
      <p>Table 1 shows the performance improvement using k-fold and
common model strategy with the baseline models. It shows that
all our base models improves by using these strategies. Further
Table 3 shows the performance of various ensemble approaches, it
shows that ensemble of all four models yields the best performance.
We use the weighted average approach to combined our predictive
models. Please note that we don’t have all results for every model.
We only choose important models to submit and get the score.</p>
      <p>Table 2: Graph Features on Internal Validation
Model + Embedding</p>
      <p>Validation Score</p>
      <p>CAT
0.12494</p>
      <p>CAT + UH
0.12464</p>
      <p>CAT + UE
0.12343</p>
      <p>As we only know the score after submitting our submission,
this table only shows part of all results. Note that we don’t submit
 ∗∗ +   ∗ ensemble in the validation phase so we don’t have
its score. Based on the results, one can see that adding more models
can improve the accuracy. For instance,  ∗∗ +   ∗ + ∗
ensemble works better than  ∗ + ∗ and out final ensemble
consists of 4 algorithms.
 ∗∗ +   ∗
 ∗∗ + ∗
 ∗∗ +   ∗ + ∗
 ∗∗ +   ∗ +   ∗ + ∗</p>
      <p>Note that ∗ indicates base model + k-fold and ∗∗: base + fold +
common model.</p>
    </sec>
    <sec id="sec-16">
      <title>6 CONCLUSION</title>
      <p>We have presented our solution for COVID-19 retweet prediction
which consists of feature engineering and bagging/down-sampling
modelling techniques. The proposed approach is ranked    and
  on the public and private test sets, respectively. With an
exhausted feature set and powerful modeling techniques, we hope
that our solution provides a solid baseline for retweet prediction
research, especially in the crisis time like COVID-19 pandemic.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Dorogush</given-names>
            <surname>Anna</surname>
          </string-name>
          <string-name>
            <surname>Veronika</surname>
          </string-name>
          , Ershov Vasily, and
          <string-name>
            <given-names>Gulin</given-names>
            <surname>Andrey</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>CatBoost: gradient boosting with categorical features support</article-title>
          . (
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Francois</given-names>
            <surname>Chollet</surname>
          </string-name>
          et al.
          <year>2015</year>
          . Keras. https://github.com/fchollet/keras
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Dimitar</given-names>
            <surname>Dimitrov</surname>
          </string-name>
          , Erdal Baran, Pavlos Fafalios, Ran Yu, Xiaofei Zhu, Matthäus Zloch, and
          <string-name>
            <given-names>Stefan</given-names>
            <surname>Dietze</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>TweetsCOV19 - A Knowledge Base of Semantically Annotated Tweets about the COVID-19 Pandemic</article-title>
          .
          <source>In Proceedings of the 29th ACM International Conference on Information &amp; Knowledge Management. Association for Computing Machinery</source>
          , New York, NY, USA,
          <fpage>2991</fpage>
          -
          <lpage>2998</lpage>
          . https://doi.org/10. 1145/3340531.3412765
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Kenton</given-names>
            <surname>Lee Jacob Devlin</surname>
          </string-name>
          ,
          <string-name>
            <surname>Ming-Wei Chang</surname>
            and
            <given-names>Kristina</given-names>
          </string-name>
          <string-name>
            <surname>Toutanova</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</article-title>
          . arXiv preprint arXiv:
          <year>1810</year>
          .
          <volume>04805</volume>
          (
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Guolin</given-names>
            <surname>Ke</surname>
          </string-name>
          , Qi Meng, Thomas Finley, Taifeng Wang,
          <string-name>
            <surname>Wei</surname>
            <given-names>Chen</given-names>
          </string-name>
          , Weidong Ma, Qiwei Ye, and
          <string-name>
            <surname>Tie-Yan Liu</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>LightGBM: A Highly Eficient Gradient Boosting Decision Tree</article-title>
          .
          <source>In Proceedings of the 31st International Conference on Neural Information Processing Systems</source>
          (Long Beach, California, USA) (
          <source>NIPS'17)</source>
          . Curran Associates Inc.,
          <string-name>
            <surname>Red</surname>
            <given-names>Hook</given-names>
          </string-name>
          ,
          <string-name>
            <surname>NY</surname>
          </string-name>
          , USA,
          <fpage>3149</fpage>
          -
          <lpage>3157</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Adam</given-names>
            <surname>Lerer</surname>
          </string-name>
          , Ledell Wu, Jiajun Shen, Timothee Lacroix, Luca Wehrstedt, Abhijit Bose, and
          <string-name>
            <given-names>Alex</given-names>
            <surname>Peysakhovich</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>Pytorch-biggraph: A large-scale graph embedding system</article-title>
          .
          <source>arXiv preprint arXiv:1903</source>
          .
          <volume>12287</volume>
          (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Adam</given-names>
            <surname>Lerer</surname>
          </string-name>
          , Ledell Wu, Jiajun Shen, Timothee Lacroix, Luca Wehrstedt, Abhijit Bose, and
          <string-name>
            <given-names>Alex</given-names>
            <surname>Peysakhovich</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>PyTorch-BigGraph: A Large-scale Graph Embedding System</article-title>
          .
          <source>In Proceedings of the 2nd SysML Conference</source>
          . Palo Alto, CA, USA.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <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>
          (
          <year>2011</year>
          ),
          <fpage>2825</fpage>
          -
          <lpage>2830</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Radim</given-names>
            <surname>Řehůřek</surname>
          </string-name>
          and
          <string-name>
            <given-names>Petr</given-names>
            <surname>Sojka</surname>
          </string-name>
          .
          <year>2010</year>
          .
          <article-title>Software Framework for Topic Modelling with Large Corpora</article-title>
          .
          <source>In Proceedings of the LREC 2010 Workshop on New Challenges for NLP Frameworks. ELRA</source>
          , Valletta, Malta,
          <fpage>45</fpage>
          -
          <lpage>50</lpage>
          . http://is.muni.cz/publication/ 884893/en.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>