<!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>Detecting Noisy Swiss German Web Text Using RNN- and Rule-Based Techniques</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Janis Goldzycher</string-name>
          <email>janis.goldzycher@uzh.ch</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jonathan Schaber</string-name>
          <email>jonathan.schaber@uzh.ch</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute of Computational Linguistics, University of Zurich</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>This paper presents the system we submitted to the Swiss German language detection shared task, part of the GermEval 2020 Campaign, held at the SwissText &amp; KONVENS 2020 conference. The goal of the task is to identify if a given text snippet is written in Swiss German. Our approach includes a reformulation of a binary to a multi-way classification problem, a character filter, a neural RNNbased classifier, and the addition of synthetic noise to the training set. The official evaluation of our submitted system results in an F1 score of 96.8%, achieving the second place in this shared task.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Introduction</title>
      <p>In this paper we describe our approach and results
for the Swiss German language detection shared
task (GSWID 2020) at the SwissText &amp;
KONVENS conference. The objective of the shared
task is to construct a system to automatically
identify Swiss German (GSW) text snippets.</p>
      <p>
        Generally, language identification has been
viewed as a solved problem “suitable for
undergraduate instruction”, as McNamee (2005)
deprecatingly remarks in the title of his paper. However,
it is not clear if this view holds true for text
snippets that are (1) short, (2) noisy, (3) from
multiple domains, (4) written in a scarce resource
language, or (5) which consist of non-standardized
dialects
        <xref ref-type="bibr" rid="ref12 ref22 ref4">(Gamallo et al., 2014; Jauhiainen et al.,
2019)</xref>
        . Since this shared task is about GSW
language identification and uses tweets as test data, it
combines all of these difficulties.
      </p>
      <p>
        Previous approaches based on classical machine
learning typically utilize character level features
like single characters, character combinations
(ngrams) and capitalization together with models
such as naive bayes classifiers, support vector
machines, and decision trees
        <xref ref-type="bibr" rid="ref16 ref20 ref22 ref22 ref4 ref7">(Gamallo et al., 2014;
Hanif et al., 2007; Kumar et al., 2015; Porta, 2014;
Zubiaga et al., 2014)</xref>
        . There have been both
CNNbased
        <xref ref-type="bibr" rid="ref11 ref17 ref9">(Jaech et al., 2016a,b; Li et al., 2018)</xref>
        and
RNN-based
        <xref ref-type="bibr" rid="ref13 ref13 ref15">(Jurgens et al., 2017; Kocmi and
Bojar, 2017)</xref>
        neural approaches to language
identification using character embeddings as
representations, sometimes with additional features
incorporated, like n-grams
        <xref ref-type="bibr" rid="ref1 ref14 ref4 ref8">(Chang and Lin, 2014)</xref>
        or
word embeddings
        <xref ref-type="bibr" rid="ref21">(Samih et al., 2016)</xref>
        . We
approach this problem using a bidirectional GRU
(BiGRU) architecture similar to the one put
forward by Kocmi and Bojar (2017).
      </p>
      <p>In this paper we describe our system,
comprising: (1) a reformulation of a binary to a multi-way
classification problem, (2) a BiGRU-based neural
architecture, (3) a character-based filter, and (4) a
noisifier module.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Data</title>
      <p>Provided Data The shared task organizers
provide a list of approximately 2,000 GSW tweets to
be used as positive training examples.1 The use of
further training material is explicitly allowed and
encouraged. In the following paragraphs we give
a review of additionally collected data.</p>
      <p>
        Swiss German We collect GSW data from the
following sources: the NOAH corpus
        <xref ref-type="bibr" rid="ref1 ref14 ref20 ref4 ref8">(Hollenstein
1Due to the distribution regulations of Twitter, the
organizers published only tweet IDs. At the time of downloading,
22 of these tweets were not available anymore, so the actual
number of tweets we are able to use is 1,978.
and Aepli, 2014)</xref>
        , a collection of texts from
various genres; the Swisscrawl corpus
        <xref ref-type="bibr" rid="ref18">(Linder et al.,
2019)</xref>
        , which consists of user entries from forums
and social media; the chatmania data from the
SpinningBytes corpus
        <xref ref-type="bibr" rid="ref6">(Grubenmann et al., 2018)</xref>
        ,
containing forum entries; and the GSW corpus
from the corpus collection of the University of
Leipzig
        <xref ref-type="bibr" rid="ref5">(Goldhahn et al., 2012)</xref>
        , that also
incorporates web data, mainly from chat forums.
Other Languages There is of course an
abundant amount of textual data in a multitude of other
languages which cannot be entirely considered, or
feasibly be included in a training set. We devise
the following difficulty-scale from A (easy) to D
(difficult) as a prioritization guideline as for which
languages we presume are hard to distinguish from
GSW and thus most important to include in the
training set as negative examples:
A: languages written in non-GSW character sets2
(e.g. Chinese, Hindi, Arabic)
B: languages written in scripts that overlap with
the GSW character set (e.g. Afrikaans,
Tagalog, English, Tok Pisin)
C: languages in B that share parts of the
lexicon with GSW (e.g. English, Italian, French,
Standard German)
D: languages and varieties in C that are closely
related to GSW (e.g. Standard German,
Dutch, English, Bavarian)
      </p>
      <p>Note that the following set memberships hold:
B C D and A \ B = ;.</p>
      <p>We only collect languages from B, with special
focus on C and D, since text snippets written in a
language from A can be filtered out in a rule-based
manner.</p>
      <p>
        We collect data for all languages from the
aforementioned corpus collection of the University of
Leipzig. For Standard German, we additionally
gather texts from the Hamburg Dependency
TreeBank
        <xref ref-type="bibr" rid="ref3">(Foth et al., 2014)</xref>
        . For all corpora that are
not comprised of tweet-like text, we treat each
sentence as an individual text snippet. An overview
of our collected data is shown in table 1. We split
our data set with a ratio of 0.95/0.05 resulting in a
training set containing 3,605,283 instances and a
development set of 189,752 instances.
      </p>
      <p>2We define the GSW character set as the set of characters
found on a GSW keyboard. This differs slightly from e.g. a
Standard German Keyboard, which lacks characters like “e`”,
“a`” and “e´”.</p>
      <p>Language
Swiss German (GSW)
Standard German
English
Italian
Dutch
Swedish
Luxembourgish
Norwegian
French
Low German
West Frisian
Portuguese
Romanian
Tagalog
Bavarian
Lombard
Yiddish
Croatian
Northern Frisian
Other
Total</p>
      <p>Noise Through manual inspection of the tweets
that were provided as training data we observed
that they are significantly noisier than the rest of
our training data.</p>
      <p>We identify two kinds of noise in this data:
token-level noise and character level noise. Both
can be produced on purpose or by accident.
Token-level noise consists of words, phrases or
citations in other languages, mainly English or
Standard German, in otherwise GSW tweets.
Character-level noise consists of omissions,
insertions or repetitions of single characters. Examples
can be found in Appendix B.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Method</title>
      <p>Task Formalization We formalize the task as
follows: Assign a label y 2 f0; 1g to an input
sequence of characters x = fx0; x1; x2; :::; xng,
where 0 corresponds to the class swiss german and
1 corresponds to the class not-swiss german.</p>
      <p>However, the not-swiss german class is a very
broad category since it not only contains all other
languages, some of which are similar to GSW, but
also all possible string sequences that do not
appear in GSW. Thus, we hypothesize that more
finegrained labels will lead to more homogeneous and
better separable classes.</p>
      <p>Following this line of reasoning, we define three
different granularity levels: binary, ternary and
fine-grained. The binary setting corresponds to the
task formalization described above. In the ternary
setting we split the class not-swiss german into the
classes standard german and other. And in the
fine-grained setting, each language present in
table 1 corresponds to one class, with an additional
class other. For our collected data set, this leads to
a total of 23 classes.</p>
      <p>Pipeline We construct a pipeline where an
incoming text snippet is first cleaned of hashtags,
mentions and URLs. Then a rule-based
character filter decides if the text snippet is a member of
A and if so, immediately classifies the text snippet
as not-swiss german. If the text snippet is not part
of A, it might be an instance of swiss german and
hence is clipped to a prespecified length, which we
treat as a hyper parameter, and fed into a neural
classifier.</p>
      <p>During training time, we make two
modifications to the pipeline: (1) The rule-based character
filter is left out because our data only consists of
text snippets from languages in B. (2) We make
use of an additional noisifier, which adds noise
specifically modeled after the noise that is actually
encountered in GSW text snippets on the web. In
the rest of this section we describe the main parts
of the pipeline in detail.</p>
    </sec>
    <sec id="sec-4">
      <title>Character-Based Filter For a given sequence</title>
      <p>of characters x, the character-based filter
computes the relative frequency of characters in x that
do not appear in the GSW character set. If this
frequency surpasses a given threshold, x is labeled as
not-swiss german.</p>
      <p>
        Neural Model Our neural model comprises
character embeddings, a BiGRU
        <xref ref-type="bibr" rid="ref2">(Cho et al.,
2014)</xref>
        , two blocks of dense layers and a final dense
layer. The BiGRU takes the embedded characters
as input and produces the outputs !o0; :::; o!n and
also a last hidden state h!n for the forward GRU.
For the backward GRU we get on; :::o0 and h0
respectively.
      </p>
      <p>We ignore all BiGRU outputs and only use the
last hidden states h!n and h0.3</p>
      <p>Each hidden state is fed into a block of two
dense layers with dropout before both layers and
the rectified unit linear function in between. The
outputs of the two dense blocks z1 and z2 are
concatenated and fed into a final dense layer with the
number of classes as the output dimension. We
apply a log-softmax function to the output to turn
the neural activations into a probability
distribution over the target classes. Note that the number
of target classes depends on the chosen level of
granularity.</p>
      <p>
        For optimization we use the negative log
likelihood loss combined with the Adam optimizer
        <xref ref-type="bibr" rid="ref1 ref14 ref4 ref8">(Kingma and Ba, 2014)</xref>
        . We initialize the
character embeddings randomly and train them jointly
with the rest of the model.
      </p>
      <p>Noisifier Based on the assumption that the test
data has a similar amount of noise as the tweets
provided for training, we introduce a noisifier with
the goal of injecting this type of noise into the
entire training data, which contains large amounts
of text snippets from “clean” resources like news
texts. We refer to this difference in noise between
corpora as noisiness gap. Recall that we observed
token-level and character-level noise in the
training data in section 2. In what follows, we will
address both types of noise separately.</p>
      <p>For the token level noise we created a
handcrafted list L consisting of English and Standard
German words often found in GSW tweets,
comments and messages. Additionally, we add
mentions of Swiss locations to L.4</p>
      <p>3In earlier experiments we also used the BiGRU outputs
by concatenating them with the last hidden states and then
fed this entire feature vector into dense layers. However, we
found that using these outputs decreased performance.</p>
      <p>4We try to avoid that the model learns to associate Swiss
location names with GSW text which presumably would lead
to false positives.</p>
      <p>The token-level noisifier receives as input a
clean training example x consisting of k tokens
and the two thresholds p1 2 [0; 1] and p2 2 [0; 1)
with p1 &gt; p2. For each token in x, a noise
token l 2 L is inserted with a probability of 1 p1.
We hypothesize that the presence of one noise
token increases the probability of additional noise
tokens. To model this, we use a higher second
probability 1 p2 for repeatedly adding an
additional noise token. We define an upper bound of
k=2 for the number of inserted noise tokens c
under the assumption that a text snippet with c k=2
does not resemble the original language of x
anymore. See algorithm 1 for more details.</p>
      <p>The algorithm inserting character level noise
receives as input a token-level noisified training
example xT noise and analogous to token-level noise
injection, the two thresholds p3 2 [0; 1] and
p4 2 [0; 1) with p3 &gt; p4. Additionally, the
algorithm receives a character set C, consisting of
alphanumeric and punctuation characters from the
Latin 1 character set. At each character in xT noise
character-level noise is injected with a probability
of 1 p3. The noise consists of either character
insertion, omission, or repetition. All three types of
noise are equally likely to happen. We hypothesize
that the presence of character-level noise makes
more such noise likelier. Thus, in case of insertion
or repetition, we repeatedly add additional noise
characters with a probability of 1 p4. See
algorithm 2 for more details.</p>
      <p>Our implementation of the approach described
in this section using PyTorch will be published at
https://github.com/JonathanSchaber/shared task.
4</p>
    </sec>
    <sec id="sec-5">
      <title>Results and Discussion</title>
      <p>Our submitted model achieves an F1 score of
96.8% in the official evaluation on the test set,
resulting in a second place, 1.4% behind the best
model.</p>
      <p>Table 2 gives an overview of different
hyperparameter settings with the corresponding results
on the development and test set.5 We report
the following observations: (1) More fine-grained
classes generally lead to better results. (2) There
is a strong performance drop from development to
test set supporting our noisiness gap assumption.
(3) Injecting noise alleviates this drop and,
compared to the same configurations without noise,
leads to relative performance increases ranging
from 1.2% to 2.7% F1 score on the test set.</p>
      <p>(4) Increasing embedding dimensionality leads
to more stable results over different granularities.
(5) Clipping after 100 characters leads to a
bisection of training time while on average upholding
performance.</p>
      <p>Since the test set does not contain languages
from A the character-based filter is rarely triggered
and its impact on performance is negligible.
However, the filter might be important when detecting
GSW text in settings where languages in A occur
more frequently. More information about
hyperparameters and hardware is given in Appendix C.
5</p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>This paper described our submission to the
GSWID 2020 shared task. We introduced a
BiGRU-based architecture, a character-based
filter and a noisifier module. Our evaluation results
5The test set evaluation relies on gold labels that were
made available after the submission deadline.
show that more fine-grained classes and adding
noise to the training data leads to performance
increases. Further investigations will concern
pretraining, transformer-based architectures, and a
more sophisticated noisifier.</p>
      <p>Acknowledgments Above all, we would like
to thank Simon Clematide who supervised this
project and suggested more fine-grained classes.
Further, we thank the shared task organizers,
especially Pius von Da¨niken who clarified our
questions, and also our proofreaders and reviewers.
We formally define our architecture as follows:
Let E(xi) denote a function that returns the
embedding for a given character xi 2 x. The last
hidden states h!n, h0 are given by
h!n, h0, !o0, ..., o!n, on, ... o0 = BiGRU(E(x0); :::; E(xn)). (1)
We feed each last hidden state into a block of
dense layers defined as
f block(v) = W2T
dr(ReLU(W1T
dr(v) + b1)) + b2 (2)
where W1 2 R300 150 and W2 2 R150 50 denote
the weight matrices of the block’s first and
second layer, dr denotes a dropout function, b1 and
b2 denote learnable biases, and ReLU denotes the
rectified linear unit activation function.</p>
      <p>z1 is computed as z1 = f block(h0) and z2
respectively as z2 = f block(h!n). Note that the
weights of the two dense blocks are not shared,
but initialized and trained independently. We
concatenate z1 and z2 to z, which is then fed through
a final layer formalized as follows:
f f inal(v) = log-softmax(W T
v + b)
(3)
with W 2 R100 Q where Q is the # target
classes.</p>
      <p>B</p>
    </sec>
    <sec id="sec-7">
      <title>Noisifier</title>
      <p>As examples for data containing token- and
character-level noise, consider the following two
made up text snippets.6 Character sequences we
regard as noise are boldfaced.</p>
      <p>Da¨ bus isch stablibe, mis ticket nu¨me gu¨ltig
trying to stay chill
ooohhhh neiiiii mir ha¨nds no¨d gschafft</p>
      <p>In the following algorithms, r() denotes a
function which returns a random value 2 [0; 1].</p>
      <p>In algorithm 2 parameter A contains
f’omission’, ’insertion’, ’repetition’g.</p>
      <p>For a given example input our noisifier with
parameters settings as shown in the hyper
parameter table in Appendix C introduces noise structures
into non-noisy texts, like the following:</p>
      <p>6For copyright reasons we do not cite or display real
tweets in the publication.</p>
      <p>Algorithm 1 Token-level noise injection
Input: x; p1; p2; L
Output: xT noise
t split x into tokens
initialize array u
for each tj 2 t do
if r1 r() &gt; p1 then
add randomly chosen token l 2 L to u
while r2 r() &gt; p2 ^ c &lt; k=2 do</p>
      <p>add randomly chosen token l 2 L to u
end while
end if
append tj to u
end for
return concatenate u to string xT noise
Algorithm 2 Character-level noise injection
Input: xT noise; p3; p4; C; A
Output: xCnoise
initialize empty string xCnoise
for each xi 2 xT noise do
if r3 r() &gt; p3 then
a choose random action 2 A
if a = ’omission’ then</p>
      <p>continue
else if a = ’insertion’ then</p>
      <p>b choose random character 2 C
else if a = ’repetition’ then</p>
      <p>b xi
end if
add b to xCnoise
while r4 r() &gt; p4 do</p>
      <p>add b to xCnoise
end while
end if
add xi to xCnoise
end for
return xCnoise
clean: Viele Personen sind nicht der U¨ berzeugung.
noisy: Viele Personen sind nicht der U¨ erzeugunnng.
clean: Hast du schon die neue xbox 3 gesehen?
noisy: Hast du music schon die neue xbox 3
geesehen?
clean: You’ll never guess what happened this
morning.
noisy: You’ll never guess Jwhat happened this
morninnng.
clean: Le tigre est un grand chat de proie originaire
d’Asie.
noisy: Le tigre estt un grand chatde proie originaire
d’Asie.
clean: C’e` ancora una mancanza di chiarezza, non
possiamo farci nulla.
noisy: C’e` ancor una mancanza di chiarezza, non
possiamo St. Moritz Friso¨r farci nulla.</p>
      <p>As is obvious from these examples, the noise
injected by the noisifier still looks quite different
from human created noise, thus a more
sophisticated noisifier is desirable.
during ablation testing. In the table below, we
report the parameters we left unchanged during
ablation testing.
Value
300
300
150
50
100
# target classes</p>
      <p>0.1
0.001</p>
      <p>15
0.99
0.6
0.97
0.5
0.8
all experiments.</p>
      <p>After two epochs the learning rate is decreased
from 0.001 to 0.0001 and after six epochs the
learning rate is further decreased to 0.00003.</p>
      <p>We ran our models on a NVIDIA GeForce GTX
TITAN X graphics processing unit.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <given-names>Joseph</given-names>
            <surname>Chee</surname>
          </string-name>
          Chang and
          <string-name>
            <surname>Chu-Cheng Lin</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <article-title>Recurrent-neural-network for language detection on twitter code-switching corpus</article-title>
          .
          <source>arXiv preprint arXiv:1412</source>
          .
          <fpage>4314</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <given-names>Kyunghyun</given-names>
            <surname>Cho</surname>
          </string-name>
          , Bart Van Merrie¨nboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Holger Schwenk, and
          <string-name>
            <given-names>Yoshua</given-names>
            <surname>Bengio</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <article-title>Learning phrase representations using rnn encoder-decoder for statistical machine translation</article-title>
          .
          <source>arXiv preprint arXiv:1406</source>
          .
          <fpage>1078</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <given-names>Kilian</given-names>
            <surname>Foth</surname>
          </string-name>
          , Arne Ko¨hn, Niels Beuck, and
          <string-name>
            <given-names>Wolfgang</given-names>
            <surname>Menzel</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <article-title>Because size does matter: The hamburg dependency treebank</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <given-names>Pablo</given-names>
            <surname>Gamallo</surname>
          </string-name>
          , Marcos Garcia, Susana Sotelo, and Jose´ Ramom Pichel Campos.
          <year>2014</year>
          .
          <article-title>Comparing ranking-based and naive bayes approaches to language detection on tweets</article-title>
          .
          <source>In TweetLID@ SEPLN</source>
          , pages
          <fpage>12</fpage>
          -
          <lpage>16</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <given-names>Dirk</given-names>
            <surname>Goldhahn</surname>
          </string-name>
          , Thomas Eckart, and
          <string-name>
            <given-names>Uwe</given-names>
            <surname>Quasthoff</surname>
          </string-name>
          .
          <year>2012</year>
          .
          <article-title>Building large monolingual dictionaries at the leipzig corpora collection: From 100 to 200 languages</article-title>
          . In LREC, volume
          <volume>29</volume>
          , pages
          <fpage>31</fpage>
          -
          <lpage>43</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <string-name>
            <given-names>Ralf</given-names>
            <surname>Grubenmann</surname>
          </string-name>
          , Don Tuggener, Pius Von Da¨niken, Jan Deriu, and
          <string-name>
            <given-names>Mark</given-names>
            <surname>Cieliebak</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>SB-CH: A Swiss German Corpus with Sentiment Annotations</article-title>
          .
          <source>In Proceedings of the Eleventh International Conference on Language Resources and Evaluation (LREC</source>
          <year>2018</year>
          ), Miyazaki,
          <string-name>
            <given-names>Japan. European</given-names>
            <surname>Language Resources Association (ELRA).</surname>
          </string-name>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <string-name>
            <given-names>Farheen</given-names>
            <surname>Hanif</surname>
          </string-name>
          , Fouzia Latif, and
          <string-name>
            <given-names>M Sikandar</given-names>
            <surname>Hayat Khiyal</surname>
          </string-name>
          .
          <year>2007</year>
          .
          <article-title>Unicode aided language identification across multiple scripts and heterogeneous data</article-title>
          .
          <source>Information Technology Journal</source>
          ,
          <volume>6</volume>
          (
          <issue>4</issue>
          ):
          <fpage>534</fpage>
          -
          <lpage>540</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <given-names>Nora</given-names>
            <surname>Hollenstein</surname>
          </string-name>
          and Noe¨mi Aepli.
          <year>2014</year>
          .
          <article-title>Compilation of a swiss german dialect corpus and its application to pos tagging</article-title>
          .
          <source>In Proceedings of the First Workshop on Applying NLP Tools to Similar Languages, Varieties and Dialects</source>
          , pages
          <fpage>85</fpage>
          -
          <lpage>94</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <string-name>
            <given-names>Aaron</given-names>
            <surname>Jaech</surname>
          </string-name>
          , George Mulcaire, Shobhit Hathi,
          <source>Mari Ostendorf, and Noah A Smith</source>
          .
          <year>2016a</year>
          .
          <article-title>Hierarchical character-word models for language identification</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <source>arXiv preprint arXiv:1608</source>
          .
          <fpage>03030</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          <string-name>
            <given-names>Aaron</given-names>
            <surname>Jaech</surname>
          </string-name>
          , George Mulcaire,
          <source>Mari Ostendorf, and Noah A Smith</source>
          .
          <year>2016b</year>
          .
          <article-title>A neural model for language identification in code-switched tweets</article-title>
          .
          <source>In Proceedings of The Second Workshop on Computational Approaches</source>
          to Code Switching, pages
          <fpage>60</fpage>
          -
          <lpage>64</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          <string-name>
            <given-names>Tommi</given-names>
            <surname>Sakari</surname>
          </string-name>
          <string-name>
            <surname>Jauhiainen</surname>
          </string-name>
          , Marco Lui, Marcos Zampieri, Timothy Baldwin, and Krister Linde´n.
          <year>2019</year>
          .
          <article-title>Automatic language identification in texts: A survey</article-title>
          .
          <source>Journal of Artificial Intelligence Research</source>
          ,
          <volume>65</volume>
          :
          <fpage>675</fpage>
          -
          <lpage>782</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          <string-name>
            <given-names>David</given-names>
            <surname>Jurgens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Yulia</given-names>
            <surname>Tsvetkov</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Dan</given-names>
            <surname>Jurafsky</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Incorporating dialectal variability for socially equitable language identification</article-title>
          .
          <source>In Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers)</source>
          , pages
          <fpage>51</fpage>
          -
          <lpage>57</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          <string-name>
            <surname>Diederik P Kingma and Jimmy Ba</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <article-title>Adam: A method for stochastic optimization</article-title>
          .
          <source>arXiv preprint arXiv:1412</source>
          .
          <fpage>6980</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          <string-name>
            <given-names>Tom</given-names>
            <surname>Kocmi and Ondrˇej Bojar</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Lanidenn: Multilingual language identification on character window</article-title>
          .
          <source>arXiv preprint arXiv:1701</source>
          .
          <fpage>03338</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          <string-name>
            <given-names>Rahul</given-names>
            <surname>Venkatesh Kumar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M Anand</given-names>
            <surname>Kumar</surname>
          </string-name>
          , and
          <string-name>
            <given-names>KP</given-names>
            <surname>Soman</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>Amritacen nlp@ fire 2015 language identification for indian languages in social media text</article-title>
          .
          <source>In FIRE workshops</source>
          , pages
          <fpage>26</fpage>
          -
          <lpage>28</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          <string-name>
            <given-names>Yitong</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Timothy</given-names>
            <surname>Baldwin</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Trevor</given-names>
            <surname>Cohn</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>What's in a domain? learning domain-robust text representations using adversarial training</article-title>
          . arXiv preprint arXiv:
          <year>1805</year>
          .06088.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          <string-name>
            <given-names>Lucy</given-names>
            <surname>Linder</surname>
          </string-name>
          , Michael Jungo, Jean Hennebert, Claudiu Musat, and
          <string-name>
            <given-names>Andreas</given-names>
            <surname>Fischer</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>Automatic creation of text corpora for low-resource languages from the internet: The case of swiss german</article-title>
          . arXiv preprint arXiv:
          <year>1912</year>
          .00159.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          <string-name>
            <given-names>Paul</given-names>
            <surname>McNamee</surname>
          </string-name>
          .
          <year>2005</year>
          .
          <article-title>Language identification: a solved problem suitable for undergraduate instruction</article-title>
          .
          <source>Journal of Computing Sciences in Colleges</source>
          ,
          <volume>20</volume>
          (
          <issue>3</issue>
          ):
          <fpage>94</fpage>
          -
          <lpage>101</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          <string-name>
            <given-names>Jordi</given-names>
            <surname>Porta</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <article-title>Twitter language identification using rational kernels and its potential application to sociolinguistics</article-title>
          .
          <source>In TweetLID@ SEPLN</source>
          , pages
          <fpage>17</fpage>
          -
          <lpage>20</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          <string-name>
            <given-names>Younes</given-names>
            <surname>Samih</surname>
          </string-name>
          , Suraj Maharjan, Mohammed Attia, Laura Kallmeyer, and
          <string-name>
            <given-names>Thamar</given-names>
            <surname>Solorio</surname>
          </string-name>
          .
          <year>2016</year>
          .
          <article-title>Multilingual code-switching identification via lstm recurrent neural networks</article-title>
          .
          <source>In Proceedings of the Second Workshop on Computational Approaches</source>
          to Code Switching, pages
          <fpage>50</fpage>
          -
          <lpage>59</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          <string-name>
            <given-names>Arkaitz</given-names>
            <surname>Zubiaga</surname>
          </string-name>
          , Inaki San Vicente, Pablo Gamallo, Jose´ Ramom Pichel Campos, In˜aki Alegr´ıa Loinaz, Nora Aranberri, Aitzol Ezeiza, and V´ıctor FresnoFerna´ndez.
          <year>2014</year>
          .
          <article-title>Overview of tweetlid: Tweet language identification at sepln 2014</article-title>
          . In TweetLID@ SEPLN, pages
          <fpage>1</fpage>
          -
          <lpage>11</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>