|
|
<!DOCTYPE html> |
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> |
|
|
|
|
|
<meta charset="utf-8"> |
|
|
<meta name="generator" content="quarto-1.8.25"> |
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> |
|
|
|
|
|
|
|
|
<title>quickmt vs. libretranslate</title> |
|
|
<style> |
|
|
code{white-space: pre-wrap;} |
|
|
span.smallcaps{font-variant: small-caps;} |
|
|
div.columns{display: flex; gap: min(4vw, 1.5em);} |
|
|
div.column{flex: auto; overflow-x: auto;} |
|
|
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} |
|
|
ul.task-list{list-style: none;} |
|
|
ul.task-list li input[type="checkbox"] { |
|
|
width: 0.8em; |
|
|
margin: 0 0.8em 0.2em -1em; |
|
|
vertical-align: middle; |
|
|
} |
|
|
|
|
|
html { -webkit-text-size-adjust: 100%; } |
|
|
pre > code.sourceCode { white-space: pre; position: relative; } |
|
|
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } |
|
|
pre > code.sourceCode > span:empty { height: 1.2em; } |
|
|
.sourceCode { overflow: visible; } |
|
|
code.sourceCode > span { color: inherit; text-decoration: inherit; } |
|
|
div.sourceCode { margin: 1em 0; } |
|
|
pre.sourceCode { margin: 0; } |
|
|
@media screen { |
|
|
div.sourceCode { overflow: auto; } |
|
|
} |
|
|
@media print { |
|
|
pre > code.sourceCode { white-space: pre-wrap; } |
|
|
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; } |
|
|
} |
|
|
pre.numberSource code |
|
|
{ counter-reset: source-line 0; } |
|
|
pre.numberSource code > span |
|
|
{ position: relative; left: -4em; counter-increment: source-line; } |
|
|
pre.numberSource code > span > a:first-child::before |
|
|
{ content: counter(source-line); |
|
|
position: relative; left: -1em; text-align: right; vertical-align: baseline; |
|
|
border: none; display: inline-block; |
|
|
-webkit-touch-callout: none; -webkit-user-select: none; |
|
|
-khtml-user-select: none; -moz-user-select: none; |
|
|
-ms-user-select: none; user-select: none; |
|
|
padding: 0 4px; width: 4em; |
|
|
} |
|
|
pre.numberSource { margin-left: 3em; padding-left: 4px; } |
|
|
div.sourceCode |
|
|
{ } |
|
|
@media screen { |
|
|
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; } |
|
|
} |
|
|
</style> |
|
|
|
|
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js" integrity="sha384-ZvpUoO/+PpLXR1lu4jmpXWu80pZlYUAfxl5NsBMWOEPSjUn/6Z/hRTt8+pR6L4N2" crossorigin="anonymous"></script><script src="quickmt-vs-libretranslate_files/libs/clipboard/clipboard.min.js"></script> |
|
|
<script src="quickmt-vs-libretranslate_files/libs/quarto-html/quarto.js" type="module"></script> |
|
|
<script src="quickmt-vs-libretranslate_files/libs/quarto-html/tabsets/tabsets.js" type="module"></script> |
|
|
<script src="quickmt-vs-libretranslate_files/libs/quarto-html/axe/axe-check.js" type="module"></script> |
|
|
<script src="quickmt-vs-libretranslate_files/libs/quarto-html/popper.min.js"></script> |
|
|
<script src="quickmt-vs-libretranslate_files/libs/quarto-html/tippy.umd.min.js"></script> |
|
|
<script src="quickmt-vs-libretranslate_files/libs/quarto-html/anchor.min.js"></script> |
|
|
<link href="quickmt-vs-libretranslate_files/libs/quarto-html/tippy.css" rel="stylesheet"> |
|
|
<link href="quickmt-vs-libretranslate_files/libs/quarto-html/quarto-syntax-highlighting-7b89279ff1a6dce999919e0e67d4d9ec.css" rel="stylesheet" id="quarto-text-highlighting-styles"> |
|
|
<script src="quickmt-vs-libretranslate_files/libs/bootstrap/bootstrap.min.js"></script> |
|
|
<link href="quickmt-vs-libretranslate_files/libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> |
|
|
<link href="quickmt-vs-libretranslate_files/libs/bootstrap/bootstrap-607bf762899387bf4c6794576fa88f01.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light"> |
|
|
<script src="https://cdn.jsdelivr.net/npm/requirejs@2.3.6/require.min.js" integrity="sha384-c9c+LnTbwQ3aujuU7ULEPVvgLs+Fn6fJUvIGTsuu1ZcCf11fiEubah0ttpca4ntM sha384-6V1/AdqZRWk1KAlWbKBlGhN7VG4iE/yAZcO6NZPMF8od0vukrvr0tg4qY6NSrItx" crossorigin="anonymous"></script> |
|
|
|
|
|
<script type="application/javascript">define('jquery', [],function() {return window.jQuery;})</script> |
|
|
<script type="text/javascript"> |
|
|
window.PlotlyConfig = {MathJaxConfig: 'local'}; |
|
|
if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});} |
|
|
</script> |
|
|
<script type="module">import "https://cdn.plot.ly/plotly-3.2.0.min"</script> |
|
|
|
|
|
|
|
|
|
|
|
</head> |
|
|
|
|
|
<body class="fullcontent quarto-light"> |
|
|
|
|
|
<div id="quarto-content" class="page-columns page-rows-contents page-layout-article"> |
|
|
|
|
|
<main class="content" id="quarto-document-content"> |
|
|
|
|
|
<header id="title-block-header" class="quarto-title-block default"> |
|
|
<div class="quarto-title"> |
|
|
<h1 class="title">quickmt vs. libretranslate</h1> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div class="quarto-title-meta"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
</header> |
|
|
|
|
|
|
|
|
<p><code>libretranslate</code> is a popular (<a href="https://github.com/LibreTranslate/LibreTranslate">13k stars</a> on Github!) library enabling users to self-host (or do offline) translation for many <a href="https://www.argosopentech.com/argospm/index/">different languages</a>. The neural machine translation component of the system is provided by <a href="https://github.com/argosopentech/argos-translate"><code>argos translate</code></a> (5k stars on Github). <code>libretranslate</code> and <code>argostranslate</code> are both quite easy to get up and running with and the <code>libretranslate</code> user interface is quite slick but neither of these libraries are <em>quick</em>.</p> |
|
|
<p>In this short article we examine the quality and speed of <code>libretranslate</code> in comparison with <code>quickmt</code>.</p> |
|
|
<p>In all of the experiments we are translating the <a href="https://huggingface.co/datasets/Muennighoff/flores200/tree/main"><code>flores-devtest</code></a> test set. This is a popular general-domain machine translation test set for evaluation between any of 200 different languages including 1012 segments (sentences or short paragraphs).</p> |
|
|
<p>All of the <code>quickmt</code> models are available on <a href="https://huggingface.co/collections/quickmt/quickmt-models">Huggingface</a>, and the <code>libretranslate</code> models are available from <a href="https://www.argosopentech.com/argospm/index/"><code>argos translate</code></a>.</p> |
|
|
<p><code>libretranslate</code> and <code>quickmt</code> were both configured to run on an Nvidia RTX 4070s with batch size 32, and <code>libretranslate</code> was launched withe the following command:</p> |
|
|
<pre class="{bash}"><code>ARGOS_DEVICE_TYPE=cuda libretranslate --load-only pt,de,fa,cs,tr,es,pl,bn,vi,fr,it,id,hu,th,lv,ko,ar,en,zh,ro,hi,he,ja,da,el,ur,ru </code></pre> |
|
|
<section id="speed-comparison" class="level2"> |
|
|
<h2 class="anchored" data-anchor-id="speed-comparison">Speed Comparison</h2> |
|
|
<p><code>quickmt</code> is considerably faster than <code>libretranslate</code>:</p> |
|
|
<div id="f635ea6a" class="cell" data-execution_count="1"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="im">import</span> pandas <span class="im">as</span> pd</span> |
|
|
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="im">from</span> plotly <span class="im">import</span> express <span class="im">as</span> px</span> |
|
|
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a></span> |
|
|
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>df_data <span class="op">=</span> {<span class="st">'index'</span>: {<span class="dv">0</span>: <span class="dv">0</span>, <span class="dv">1</span>: <span class="dv">1</span>, <span class="dv">2</span>: <span class="dv">2</span>, <span class="dv">3</span>: <span class="dv">3</span>, <span class="dv">4</span>: <span class="dv">4</span>, <span class="dv">5</span>: <span class="dv">5</span>, <span class="dv">6</span>: <span class="dv">6</span>, <span class="dv">7</span>: <span class="dv">7</span>, <span class="dv">8</span>: <span class="dv">8</span>, <span class="dv">9</span>: <span class="dv">9</span>, <span class="dv">10</span>: <span class="dv">10</span>, <span class="dv">11</span>: <span class="dv">11</span>, <span class="dv">12</span>: <span class="dv">12</span>, <span class="dv">13</span>: <span class="dv">13</span>, <span class="dv">14</span>: <span class="dv">14</span>, <span class="dv">15</span>: <span class="dv">15</span>, <span class="dv">16</span>: <span class="dv">16</span>, <span class="dv">17</span>: <span class="dv">17</span>, <span class="dv">18</span>: <span class="dv">18</span>, <span class="dv">19</span>: <span class="dv">19</span>, <span class="dv">20</span>: <span class="dv">20</span>, <span class="dv">21</span>: <span class="dv">21</span>, <span class="dv">22</span>: <span class="dv">22</span>, <span class="dv">23</span>: <span class="dv">23</span>, <span class="dv">24</span>: <span class="dv">24</span>, <span class="dv">25</span>: <span class="dv">25</span>, <span class="dv">26</span>: <span class="dv">26</span>, <span class="dv">27</span>: <span class="dv">27</span>, <span class="dv">28</span>: <span class="dv">28</span>, <span class="dv">29</span>: <span class="dv">29</span>, <span class="dv">30</span>: <span class="dv">30</span>, <span class="dv">31</span>: <span class="dv">31</span>, <span class="dv">32</span>: <span class="dv">32</span>, <span class="dv">33</span>: <span class="dv">33</span>, <span class="dv">34</span>: <span class="dv">34</span>, <span class="dv">35</span>: <span class="dv">35</span>, <span class="dv">36</span>: <span class="dv">36</span>, <span class="dv">37</span>: <span class="dv">37</span>, <span class="dv">38</span>: <span class="dv">38</span>, <span class="dv">39</span>: <span class="dv">39</span>, <span class="dv">40</span>: <span class="dv">40</span>, <span class="dv">41</span>: <span class="dv">41</span>, <span class="dv">42</span>: <span class="dv">42</span>, <span class="dv">43</span>: <span class="dv">43</span>, <span class="dv">44</span>: <span class="dv">44</span>, <span class="dv">45</span>: <span class="dv">45</span>, <span class="dv">46</span>: <span class="dv">46</span>, <span class="dv">47</span>: <span class="dv">47</span>, <span class="dv">48</span>: <span class="dv">48</span>, <span class="dv">49</span>: <span class="dv">49</span>, <span class="dv">50</span>: <span class="dv">50</span>, <span class="dv">51</span>: <span class="dv">51</span>, <span class="dv">52</span>: <span class="dv">0</span>, <span class="dv">53</span>: <span class="dv">1</span>, <span class="dv">54</span>: <span class="dv">2</span>, <span class="dv">55</span>: <span class="dv">3</span>, <span class="dv">56</span>: <span class="dv">4</span>, <span class="dv">57</span>: <span class="dv">5</span>, <span class="dv">58</span>: <span class="dv">6</span>, <span class="dv">59</span>: <span class="dv">7</span>, <span class="dv">60</span>: <span class="dv">8</span>, <span class="dv">61</span>: <span class="dv">9</span>, <span class="dv">62</span>: <span class="dv">10</span>, <span class="dv">63</span>: <span class="dv">11</span>, <span class="dv">64</span>: <span class="dv">12</span>, <span class="dv">65</span>: <span class="dv">13</span>, <span class="dv">66</span>: <span class="dv">14</span>, <span class="dv">67</span>: <span class="dv">15</span>, <span class="dv">68</span>: <span class="dv">16</span>, <span class="dv">69</span>: <span class="dv">17</span>, <span class="dv">70</span>: <span class="dv">18</span>, <span class="dv">71</span>: <span class="dv">19</span>, <span class="dv">72</span>: <span class="dv">20</span>, <span class="dv">73</span>: <span class="dv">21</span>, <span class="dv">74</span>: <span class="dv">22</span>, <span class="dv">75</span>: <span class="dv">23</span>, <span class="dv">76</span>: <span class="dv">24</span>, <span class="dv">77</span>: <span class="dv">25</span>, <span class="dv">78</span>: <span class="dv">26</span>, <span class="dv">79</span>: <span class="dv">27</span>, <span class="dv">80</span>: <span class="dv">28</span>, <span class="dv">81</span>: <span class="dv">29</span>, <span class="dv">82</span>: <span class="dv">30</span>, <span class="dv">83</span>: <span class="dv">31</span>, <span class="dv">84</span>: <span class="dv">32</span>, <span class="dv">85</span>: <span class="dv">33</span>, <span class="dv">86</span>: <span class="dv">34</span>, <span class="dv">87</span>: <span class="dv">35</span>, <span class="dv">88</span>: <span class="dv">36</span>, <span class="dv">89</span>: <span class="dv">37</span>, <span class="dv">90</span>: <span class="dv">38</span>, <span class="dv">91</span>: <span class="dv">39</span>, <span class="dv">92</span>: <span class="dv">40</span>, <span class="dv">93</span>: <span class="dv">41</span>, <span class="dv">94</span>: <span class="dv">42</span>, <span class="dv">95</span>: <span class="dv">43</span>, <span class="dv">96</span>: <span class="dv">44</span>, <span class="dv">97</span>: <span class="dv">45</span>, <span class="dv">98</span>: <span class="dv">46</span>, <span class="dv">99</span>: <span class="dv">47</span>, <span class="dv">100</span>: <span class="dv">48</span>, <span class="dv">101</span>: <span class="dv">49</span>, <span class="dv">102</span>: <span class="dv">50</span>}, <span class="st">'time'</span>: {<span class="dv">0</span>: <span class="fl">1.2328033447</span>, <span class="dv">1</span>: <span class="fl">1.7316634655</span>, <span class="dv">2</span>: <span class="fl">1.1428749561</span>, <span class="dv">3</span>: <span class="fl">1.2016947269</span>, <span class="dv">4</span>: <span class="fl">1.1951999664</span>, <span class="dv">5</span>: <span class="fl">1.2683308125</span>, <span class="dv">6</span>: <span class="fl">1.0825681686</span>, <span class="dv">7</span>: <span class="fl">1.2144613266</span>, <span class="dv">8</span>: <span class="fl">1.2252991199</span>, <span class="dv">9</span>: <span class="fl">1.2541656494</span>, <span class="dv">10</span>: <span class="fl">1.1193022728</span>, <span class="dv">11</span>: <span class="fl">1.0900781155</span>, <span class="dv">12</span>: <span class="fl">1.0908696651</span>, <span class="dv">13</span>: <span class="fl">1.1799731255</span>, <span class="dv">14</span>: <span class="fl">1.1092069149000001</span>, <span class="dv">15</span>: <span class="fl">1.3009929657</span>, <span class="dv">16</span>: <span class="fl">1.1924922466</span>, <span class="dv">17</span>: <span class="fl">1.321138382</span>, <span class="dv">18</span>: <span class="fl">1.404417038</span>, <span class="dv">19</span>: <span class="fl">1.2471661568</span>, <span class="dv">20</span>: <span class="fl">1.0757014751</span>, <span class="dv">21</span>: <span class="fl">1.1705803871</span>, <span class="dv">22</span>: <span class="fl">1.1219103336</span>, <span class="dv">23</span>: <span class="fl">1.2237184048</span>, <span class="dv">24</span>: <span class="fl">1.1639976501</span>, <span class="dv">25</span>: <span class="fl">1.1322209834999999</span>, <span class="dv">26</span>: <span class="fl">1.0975823402</span>, <span class="dv">27</span>: <span class="fl">1.0930819511</span>, <span class="dv">28</span>: <span class="fl">1.121234417</span>, <span class="dv">29</span>: <span class="fl">1.4847657681</span>, <span class="dv">30</span>: <span class="fl">1.1623337269</span>, <span class="dv">31</span>: <span class="fl">1.2030494213</span>, <span class="dv">32</span>: <span class="fl">1.2224872112</span>, <span class="dv">33</span>: <span class="fl">1.2217383385</span>, <span class="dv">34</span>: <span class="fl">1.0560030937</span>, <span class="dv">35</span>: <span class="fl">0.9569888115</span>, <span class="dv">36</span>: <span class="fl">1.1156563759</span>, <span class="dv">37</span>: <span class="fl">1.2865319252</span>, <span class="dv">38</span>: <span class="fl">1.1470780373</span>, <span class="dv">39</span>: <span class="fl">1.2559833527</span>, <span class="dv">40</span>: <span class="fl">1.2100195885</span>, <span class="dv">41</span>: <span class="fl">1.1664426327</span>, <span class="dv">42</span>: <span class="fl">1.2318534851</span>, <span class="dv">43</span>: <span class="fl">1.2992098331</span>, <span class="dv">44</span>: <span class="fl">1.4252364635</span>, <span class="dv">45</span>: <span class="fl">2.0381476879</span>, <span class="dv">46</span>: <span class="fl">1.3772408962</span>, <span class="dv">47</span>: <span class="fl">1.0434963703</span>, <span class="dv">48</span>: <span class="fl">1.0937628746</span>, <span class="dv">49</span>: <span class="fl">1.1264841557</span>, <span class="dv">50</span>: <span class="fl">1.1113624573</span>, <span class="dv">51</span>: <span class="fl">1.2100260258</span>, <span class="dv">52</span>: <span class="fl">52.0006783009</span>, <span class="dv">53</span>: <span class="fl">47.4294705391</span>, <span class="dv">54</span>: <span class="fl">48.9193472862</span>, <span class="dv">55</span>: <span class="fl">51.4381048679</span>, <span class="dv">56</span>: <span class="fl">51.9525535107</span>, <span class="dv">57</span>: <span class="fl">51.6938693523</span>, <span class="dv">58</span>: <span class="fl">50.0207080841</span>, <span class="dv">59</span>: <span class="fl">54.0675241947</span>, <span class="dv">60</span>: <span class="fl">50.6869974136</span>, <span class="dv">61</span>: <span class="fl">47.6485154629</span>, <span class="dv">62</span>: <span class="fl">50.6348552704</span>, <span class="dv">63</span>: <span class="fl">48.9413232803</span>, <span class="dv">64</span>: <span class="fl">49.865562439</span>, <span class="dv">65</span>: <span class="fl">53.2831482887</span>, <span class="dv">66</span>: <span class="fl">57.5475423336</span>, <span class="dv">67</span>: <span class="fl">52.2292399406</span>, <span class="dv">68</span>: <span class="fl">56.8881397247</span>, <span class="dv">69</span>: <span class="fl">51.0274362564</span>, <span class="dv">70</span>: <span class="fl">53.1056745052</span>, <span class="dv">71</span>: <span class="fl">50.9684550762</span>, <span class="dv">72</span>: <span class="fl">52.7217481136</span>, <span class="dv">73</span>: <span class="fl">48.5589823723</span>, <span class="dv">74</span>: <span class="fl">51.3466742039</span>, <span class="dv">75</span>: <span class="fl">49.7405352592</span>, <span class="dv">76</span>: <span class="fl">45.0998287201</span>, <span class="dv">77</span>: <span class="fl">49.0215342045</span>, <span class="dv">78</span>: <span class="fl">45.2211201191</span>, <span class="dv">79</span>: <span class="fl">53.4577124119</span>, <span class="dv">80</span>: <span class="fl">50.652441263200004</span>, <span class="dv">81</span>: <span class="fl">50.4762699604</span>, <span class="dv">82</span>: <span class="fl">51.7814288139</span>, <span class="dv">83</span>: <span class="fl">51.7295336723</span>, <span class="dv">84</span>: <span class="fl">52.9573953152</span>, <span class="dv">85</span>: <span class="fl">49.7250933647</span>, <span class="dv">86</span>: <span class="fl">46.9384317398</span>, <span class="dv">87</span>: <span class="fl">50.8940937519</span>, <span class="dv">88</span>: <span class="fl">56.0273029804</span>, <span class="dv">89</span>: <span class="fl">47.4176292419</span>, <span class="dv">90</span>: <span class="fl">53.34983325</span>, <span class="dv">91</span>: <span class="fl">51.4188220501</span>, <span class="dv">92</span>: <span class="fl">52.6518859863</span>, <span class="dv">93</span>: <span class="fl">52.7884061337</span>, <span class="dv">94</span>: <span class="fl">76.0510730743</span>, <span class="dv">95</span>: <span class="fl">51.4100003242</span>, <span class="dv">96</span>: <span class="fl">58.9121079445</span>, <span class="dv">97</span>: <span class="fl">49.9179136753</span>, <span class="dv">98</span>: <span class="fl">48.0125050545</span>, <span class="dv">99</span>: <span class="fl">47.6589736938</span>, <span class="dv">100</span>: <span class="fl">51.1337733269</span>, <span class="dv">101</span>: <span class="fl">55.2462155819</span>, <span class="dv">102</span>: <span class="fl">58.4858531952</span>}, <span class="st">'src_lang'</span>: {<span class="dv">0</span>: <span class="st">'ko'</span>, <span class="dv">1</span>: <span class="st">'en'</span>, <span class="dv">2</span>: <span class="st">'it'</span>, <span class="dv">3</span>: <span class="st">'en'</span>, <span class="dv">4</span>: <span class="st">'es'</span>, <span class="dv">5</span>: <span class="st">'en'</span>, <span class="dv">6</span>: <span class="st">'hu'</span>, <span class="dv">7</span>: <span class="st">'en'</span>, <span class="dv">8</span>: <span class="st">'zh'</span>, <span class="dv">9</span>: <span class="st">'en'</span>, <span class="dv">10</span>: <span class="st">'ar'</span>, <span class="dv">11</span>: <span class="st">'en'</span>, <span class="dv">12</span>: <span class="st">'hi'</span>, <span class="dv">13</span>: <span class="st">'en'</span>, <span class="dv">14</span>: <span class="st">'vi'</span>, <span class="dv">15</span>: <span class="st">'en'</span>, <span class="dv">16</span>: <span class="st">'ro'</span>, <span class="dv">17</span>: <span class="st">'en'</span>, <span class="dv">18</span>: <span class="st">'pl'</span>, <span class="dv">19</span>: <span class="st">'en'</span>, <span class="dv">20</span>: <span class="st">'pt'</span>, <span class="dv">21</span>: <span class="st">'en'</span>, <span class="dv">22</span>: <span class="st">'de'</span>, <span class="dv">23</span>: <span class="st">'en'</span>, <span class="dv">24</span>: <span class="st">'he'</span>, <span class="dv">25</span>: <span class="st">'en'</span>, <span class="dv">26</span>: <span class="st">'tr'</span>, <span class="dv">27</span>: <span class="st">'en'</span>, <span class="dv">28</span>: <span class="st">'ja'</span>, <span class="dv">29</span>: <span class="st">'en'</span>, <span class="dv">30</span>: <span class="st">'cs'</span>, <span class="dv">31</span>: <span class="st">'en'</span>, <span class="dv">32</span>: <span class="st">'lv'</span>, <span class="dv">33</span>: <span class="st">'en'</span>, <span class="dv">34</span>: <span class="st">'id'</span>, <span class="dv">35</span>: <span class="st">'en'</span>, <span class="dv">36</span>: <span class="st">'el'</span>, <span class="dv">37</span>: <span class="st">'en'</span>, <span class="dv">38</span>: <span class="st">'th'</span>, <span class="dv">39</span>: <span class="st">'en'</span>, <span class="dv">40</span>: <span class="st">'da'</span>, <span class="dv">41</span>: <span class="st">'en'</span>, <span class="dv">42</span>: <span class="st">'ru'</span>, <span class="dv">43</span>: <span class="st">'en'</span>, <span class="dv">44</span>: <span class="st">'fr'</span>, <span class="dv">45</span>: <span class="st">'en'</span>, <span class="dv">46</span>: <span class="st">'bn'</span>, <span class="dv">47</span>: <span class="st">'en'</span>, <span class="dv">48</span>: <span class="st">'fa'</span>, <span class="dv">49</span>: <span class="st">'en'</span>, <span class="dv">50</span>: <span class="st">'ur'</span>, <span class="dv">51</span>: <span class="st">'en'</span>, <span class="dv">52</span>: <span class="st">'ko'</span>, <span class="dv">53</span>: <span class="st">'en'</span>, <span class="dv">54</span>: <span class="st">'it'</span>, <span class="dv">55</span>: <span class="st">'en'</span>, <span class="dv">56</span>: <span class="st">'es'</span>, <span class="dv">57</span>: <span class="st">'en'</span>, <span class="dv">58</span>: <span class="st">'hu'</span>, <span class="dv">59</span>: <span class="st">'en'</span>, <span class="dv">60</span>: <span class="st">'zh'</span>, <span class="dv">61</span>: <span class="st">'en'</span>, <span class="dv">62</span>: <span class="st">'ar'</span>, <span class="dv">63</span>: <span class="st">'en'</span>, <span class="dv">64</span>: <span class="st">'hi'</span>, <span class="dv">65</span>: <span class="st">'en'</span>, <span class="dv">66</span>: <span class="st">'en'</span>, <span class="dv">67</span>: <span class="st">'ro'</span>, <span class="dv">68</span>: <span class="st">'en'</span>, <span class="dv">69</span>: <span class="st">'pl'</span>, <span class="dv">70</span>: <span class="st">'en'</span>, <span class="dv">71</span>: <span class="st">'pt'</span>, <span class="dv">72</span>: <span class="st">'en'</span>, <span class="dv">73</span>: <span class="st">'de'</span>, <span class="dv">74</span>: <span class="st">'en'</span>, <span class="dv">75</span>: <span class="st">'he'</span>, <span class="dv">76</span>: <span class="st">'en'</span>, <span class="dv">77</span>: <span class="st">'tr'</span>, <span class="dv">78</span>: <span class="st">'en'</span>, <span class="dv">79</span>: <span class="st">'ja'</span>, <span class="dv">80</span>: <span class="st">'en'</span>, <span class="dv">81</span>: <span class="st">'cs'</span>, <span class="dv">82</span>: <span class="st">'en'</span>, <span class="dv">83</span>: <span class="st">'lv'</span>, <span class="dv">84</span>: <span class="st">'en'</span>, <span class="dv">85</span>: <span class="st">'id'</span>, <span class="dv">86</span>: <span class="st">'en'</span>, <span class="dv">87</span>: <span class="st">'el'</span>, <span class="dv">88</span>: <span class="st">'en'</span>, <span class="dv">89</span>: <span class="st">'th'</span>, <span class="dv">90</span>: <span class="st">'en'</span>, <span class="dv">91</span>: <span class="st">'da'</span>, <span class="dv">92</span>: <span class="st">'en'</span>, <span class="dv">93</span>: <span class="st">'ru'</span>, <span class="dv">94</span>: <span class="st">'en'</span>, <span class="dv">95</span>: <span class="st">'fr'</span>, <span class="dv">96</span>: <span class="st">'en'</span>, <span class="dv">97</span>: <span class="st">'bn'</span>, <span class="dv">98</span>: <span class="st">'en'</span>, <span class="dv">99</span>: <span class="st">'fa'</span>, <span class="dv">100</span>: <span class="st">'en'</span>, <span class="dv">101</span>: <span class="st">'ur'</span>, <span class="dv">102</span>: <span class="st">'en'</span>}, <span class="st">'tgt_lang'</span>: {<span class="dv">0</span>: <span class="st">'en'</span>, <span class="dv">1</span>: <span class="st">'ko'</span>, <span class="dv">2</span>: <span class="st">'en'</span>, <span class="dv">3</span>: <span class="st">'it'</span>, <span class="dv">4</span>: <span class="st">'en'</span>, <span class="dv">5</span>: <span class="st">'es'</span>, <span class="dv">6</span>: <span class="st">'en'</span>, <span class="dv">7</span>: <span class="st">'hu'</span>, <span class="dv">8</span>: <span class="st">'en'</span>, <span class="dv">9</span>: <span class="st">'zh'</span>, <span class="dv">10</span>: <span class="st">'en'</span>, <span class="dv">11</span>: <span class="st">'ar'</span>, <span class="dv">12</span>: <span class="st">'en'</span>, <span class="dv">13</span>: <span class="st">'hi'</span>, <span class="dv">14</span>: <span class="st">'en'</span>, <span class="dv">15</span>: <span class="st">'vi'</span>, <span class="dv">16</span>: <span class="st">'en'</span>, <span class="dv">17</span>: <span class="st">'ro'</span>, <span class="dv">18</span>: <span class="st">'en'</span>, <span class="dv">19</span>: <span class="st">'pl'</span>, <span class="dv">20</span>: <span class="st">'en'</span>, <span class="dv">21</span>: <span class="st">'pt'</span>, <span class="dv">22</span>: <span class="st">'en'</span>, <span class="dv">23</span>: <span class="st">'de'</span>, <span class="dv">24</span>: <span class="st">'en'</span>, <span class="dv">25</span>: <span class="st">'he'</span>, <span class="dv">26</span>: <span class="st">'en'</span>, <span class="dv">27</span>: <span class="st">'tr'</span>, <span class="dv">28</span>: <span class="st">'en'</span>, <span class="dv">29</span>: <span class="st">'ja'</span>, <span class="dv">30</span>: <span class="st">'en'</span>, <span class="dv">31</span>: <span class="st">'cs'</span>, <span class="dv">32</span>: <span class="st">'en'</span>, <span class="dv">33</span>: <span class="st">'lv'</span>, <span class="dv">34</span>: <span class="st">'en'</span>, <span class="dv">35</span>: <span class="st">'id'</span>, <span class="dv">36</span>: <span class="st">'en'</span>, <span class="dv">37</span>: <span class="st">'el'</span>, <span class="dv">38</span>: <span class="st">'en'</span>, <span class="dv">39</span>: <span class="st">'th'</span>, <span class="dv">40</span>: <span class="st">'en'</span>, <span class="dv">41</span>: <span class="st">'da'</span>, <span class="dv">42</span>: <span class="st">'en'</span>, <span class="dv">43</span>: <span class="st">'ru'</span>, <span class="dv">44</span>: <span class="st">'en'</span>, <span class="dv">45</span>: <span class="st">'fr'</span>, <span class="dv">46</span>: <span class="st">'en'</span>, <span class="dv">47</span>: <span class="st">'bn'</span>, <span class="dv">48</span>: <span class="st">'en'</span>, <span class="dv">49</span>: <span class="st">'fa'</span>, <span class="dv">50</span>: <span class="st">'en'</span>, <span class="dv">51</span>: <span class="st">'ur'</span>, <span class="dv">52</span>: <span class="st">'en'</span>, <span class="dv">53</span>: <span class="st">'ko'</span>, <span class="dv">54</span>: <span class="st">'en'</span>, <span class="dv">55</span>: <span class="st">'it'</span>, <span class="dv">56</span>: <span class="st">'en'</span>, <span class="dv">57</span>: <span class="st">'es'</span>, <span class="dv">58</span>: <span class="st">'en'</span>, <span class="dv">59</span>: <span class="st">'hu'</span>, <span class="dv">60</span>: <span class="st">'en'</span>, <span class="dv">61</span>: <span class="st">'zh'</span>, <span class="dv">62</span>: <span class="st">'en'</span>, <span class="dv">63</span>: <span class="st">'ar'</span>, <span class="dv">64</span>: <span class="st">'en'</span>, <span class="dv">65</span>: <span class="st">'hi'</span>, <span class="dv">66</span>: <span class="st">'vi'</span>, <span class="dv">67</span>: <span class="st">'en'</span>, <span class="dv">68</span>: <span class="st">'ro'</span>, <span class="dv">69</span>: <span class="st">'en'</span>, <span class="dv">70</span>: <span class="st">'pl'</span>, <span class="dv">71</span>: <span class="st">'en'</span>, <span class="dv">72</span>: <span class="st">'pt'</span>, <span class="dv">73</span>: <span class="st">'en'</span>, <span class="dv">74</span>: <span class="st">'de'</span>, <span class="dv">75</span>: <span class="st">'en'</span>, <span class="dv">76</span>: <span class="st">'he'</span>, <span class="dv">77</span>: <span class="st">'en'</span>, <span class="dv">78</span>: <span class="st">'tr'</span>, <span class="dv">79</span>: <span class="st">'en'</span>, <span class="dv">80</span>: <span class="st">'ja'</span>, <span class="dv">81</span>: <span class="st">'en'</span>, <span class="dv">82</span>: <span class="st">'cs'</span>, <span class="dv">83</span>: <span class="st">'en'</span>, <span class="dv">84</span>: <span class="st">'lv'</span>, <span class="dv">85</span>: <span class="st">'en'</span>, <span class="dv">86</span>: <span class="st">'id'</span>, <span class="dv">87</span>: <span class="st">'en'</span>, <span class="dv">88</span>: <span class="st">'el'</span>, <span class="dv">89</span>: <span class="st">'en'</span>, <span class="dv">90</span>: <span class="st">'th'</span>, <span class="dv">91</span>: <span class="st">'en'</span>, <span class="dv">92</span>: <span class="st">'da'</span>, <span class="dv">93</span>: <span class="st">'en'</span>, <span class="dv">94</span>: <span class="st">'ru'</span>, <span class="dv">95</span>: <span class="st">'en'</span>, <span class="dv">96</span>: <span class="st">'fr'</span>, <span class="dv">97</span>: <span class="st">'en'</span>, <span class="dv">98</span>: <span class="st">'bn'</span>, <span class="dv">99</span>: <span class="st">'en'</span>, <span class="dv">100</span>: <span class="st">'fa'</span>, <span class="dv">101</span>: <span class="st">'en'</span>, <span class="dv">102</span>: <span class="st">'ur'</span>}, <span class="st">'bleu'</span>: {<span class="dv">0</span>: <span class="fl">27.08</span>, <span class="dv">1</span>: <span class="fl">14.93</span>, <span class="dv">2</span>: <span class="fl">32.09</span>, <span class="dv">3</span>: <span class="fl">30.52</span>, <span class="dv">4</span>: <span class="fl">28.63</span>, <span class="dv">5</span>: <span class="fl">26.64</span>, <span class="dv">6</span>: <span class="fl">35.0</span>, <span class="dv">7</span>: <span class="fl">28.71</span>, <span class="dv">8</span>: <span class="fl">28.74</span>, <span class="dv">9</span>: <span class="fl">2.35</span>, <span class="dv">10</span>: <span class="fl">42.88</span>, <span class="dv">11</span>: <span class="fl">29.6</span>, <span class="dv">12</span>: <span class="fl">39.84</span>, <span class="dv">13</span>: <span class="fl">35.94</span>, <span class="dv">14</span>: <span class="fl">37.57</span>, <span class="dv">15</span>: <span class="fl">43.69</span>, <span class="dv">16</span>: <span class="fl">44.93</span>, <span class="dv">17</span>: <span class="fl">42.29</span>, <span class="dv">18</span>: <span class="fl">27.46</span>, <span class="dv">19</span>: <span class="fl">21.76</span>, <span class="dv">20</span>: <span class="fl">48.68</span>, <span class="dv">21</span>: <span class="fl">50.51</span>, <span class="dv">22</span>: <span class="fl">44.16</span>, <span class="dv">23</span>: <span class="fl">40.15</span>, <span class="dv">24</span>: <span class="fl">45.01</span>, <span class="dv">25</span>: <span class="fl">34.32</span>, <span class="dv">26</span>: <span class="fl">39.46</span>, <span class="dv">27</span>: <span class="fl">32.75</span>, <span class="dv">28</span>: <span class="fl">27.85</span>, <span class="dv">29</span>: <span class="fl">3.59</span>, <span class="dv">30</span>: <span class="fl">39.61</span>, <span class="dv">31</span>: <span class="fl">33.73</span>, <span class="dv">32</span>: <span class="fl">35.3</span>, <span class="dv">33</span>: <span class="fl">31.47</span>, <span class="dv">34</span>: <span class="fl">44.51</span>, <span class="dv">35</span>: <span class="fl">48.68</span>, <span class="dv">36</span>: <span class="fl">35.45</span>, <span class="dv">37</span>: <span class="fl">28.86</span>, <span class="dv">38</span>: <span class="fl">29.32</span>, <span class="dv">39</span>: <span class="fl">9.56</span>, <span class="dv">40</span>: <span class="fl">49.02</span>, <span class="dv">41</span>: <span class="fl">46.61</span>, <span class="dv">42</span>: <span class="fl">34.69</span>, <span class="dv">43</span>: <span class="fl">32.28</span>, <span class="dv">44</span>: <span class="fl">44.35</span>, <span class="dv">45</span>: <span class="fl">50.05</span>, <span class="dv">46</span>: <span class="fl">32.9</span>, <span class="dv">47</span>: <span class="fl">19.26</span>, <span class="dv">48</span>: <span class="fl">37.55</span>, <span class="dv">49</span>: <span class="fl">26.17</span>, <span class="dv">50</span>: <span class="fl">31.48</span>, <span class="dv">51</span>: <span class="fl">20.81</span>, <span class="dv">52</span>: <span class="fl">14.13</span>, <span class="dv">53</span>: <span class="fl">6.11</span>, <span class="dv">54</span>: <span class="fl">28.58</span>, <span class="dv">55</span>: <span class="fl">25.9</span>, <span class="dv">56</span>: <span class="fl">25.63</span>, <span class="dv">57</span>: <span class="fl">23.43</span>, <span class="dv">58</span>: <span class="fl">29.71</span>, <span class="dv">59</span>: <span class="fl">24.3</span>, <span class="dv">60</span>: <span class="fl">20.51</span>, <span class="dv">61</span>: <span class="fl">1.1</span>, <span class="dv">62</span>: <span class="fl">29.36</span>, <span class="dv">63</span>: <span class="fl">17.24</span>, <span class="dv">64</span>: <span class="fl">26.72</span>, <span class="dv">65</span>: <span class="fl">28.76</span>, <span class="dv">66</span>: <span class="fl">33.8</span>, <span class="dv">67</span>: <span class="fl">39.71</span>, <span class="dv">68</span>: <span class="fl">33.06</span>, <span class="dv">69</span>: <span class="fl">26.18</span>, <span class="dv">70</span>: <span class="fl">18.82</span>, <span class="dv">71</span>: <span class="fl">46.33</span>, <span class="dv">72</span>: <span class="fl">45.83</span>, <span class="dv">73</span>: <span class="fl">36.3</span>, <span class="dv">74</span>: <span class="fl">31.75</span>, <span class="dv">75</span>: <span class="fl">32.19</span>, <span class="dv">76</span>: <span class="fl">24.37</span>, <span class="dv">77</span>: <span class="fl">23.9</span>, <span class="dv">78</span>: <span class="fl">18.75</span>, <span class="dv">79</span>: <span class="fl">13.55</span>, <span class="dv">80</span>: <span class="fl">1.85</span>, <span class="dv">81</span>: <span class="fl">35.05</span>, <span class="dv">82</span>: <span class="fl">28.51</span>, <span class="dv">83</span>: <span class="fl">31.1</span>, <span class="dv">84</span>: <span class="fl">29.67</span>, <span class="dv">85</span>: <span class="fl">32.65</span>, <span class="dv">86</span>: <span class="fl">37.75</span>, <span class="dv">87</span>: <span class="fl">31.4</span>, <span class="dv">88</span>: <span class="fl">26.34</span>, <span class="dv">89</span>: <span class="fl">15.33</span>, <span class="dv">90</span>: <span class="fl">1.05</span>, <span class="dv">91</span>: <span class="fl">44.64</span>, <span class="dv">92</span>: <span class="fl">42.43</span>, <span class="dv">93</span>: <span class="fl">36.95</span>, <span class="dv">94</span>: <span class="fl">32.07</span>, <span class="dv">95</span>: <span class="fl">42.0</span>, <span class="dv">96</span>: <span class="fl">47.23</span>, <span class="dv">97</span>: <span class="fl">15.84</span>, <span class="dv">98</span>: <span class="fl">7.92</span>, <span class="dv">99</span>: <span class="fl">26.25</span>, <span class="dv">100</span>: <span class="fl">21.79</span>, <span class="dv">101</span>: <span class="fl">13.29</span>, <span class="dv">102</span>: <span class="fl">13.12</span>}, <span class="st">'chrf2'</span>: {<span class="dv">0</span>: <span class="fl">56.24</span>, <span class="dv">1</span>: <span class="fl">36.89</span>, <span class="dv">2</span>: <span class="fl">61.47</span>, <span class="dv">3</span>: <span class="fl">59.73</span>, <span class="dv">4</span>: <span class="fl">58.61</span>, <span class="dv">5</span>: <span class="fl">55.13</span>, <span class="dv">6</span>: <span class="fl">62.41</span>, <span class="dv">7</span>: <span class="fl">59.4</span>, <span class="dv">8</span>: <span class="fl">57.9</span>, <span class="dv">9</span>: <span class="fl">34.5</span>, <span class="dv">10</span>: <span class="fl">67.01</span>, <span class="dv">11</span>: <span class="fl">61.65</span>, <span class="dv">12</span>: <span class="fl">65.0</span>, <span class="dv">13</span>: <span class="fl">59.92</span>, <span class="dv">14</span>: <span class="fl">62.84</span>, <span class="dv">15</span>: <span class="fl">60.76</span>, <span class="dv">16</span>: <span class="fl">69.3</span>, <span class="dv">17</span>: <span class="fl">66.07</span>, <span class="dv">18</span>: <span class="fl">57.18</span>, <span class="dv">19</span>: <span class="fl">52.1</span>, <span class="dv">20</span>: <span class="fl">71.48</span>, <span class="dv">21</span>: <span class="fl">71.75</span>, <span class="dv">22</span>: <span class="fl">68.83</span>, <span class="dv">23</span>: <span class="fl">66.25</span>, <span class="dv">24</span>: <span class="fl">68.39</span>, <span class="dv">25</span>: <span class="fl">62.37</span>, <span class="dv">26</span>: <span class="fl">65.02</span>, <span class="dv">27</span>: <span class="fl">63.78</span>, <span class="dv">28</span>: <span class="fl">56.98</span>, <span class="dv">29</span>: <span class="fl">42.02</span>, <span class="dv">30</span>: <span class="fl">65.63</span>, <span class="dv">31</span>: <span class="fl">60.29</span>, <span class="dv">32</span>: <span class="fl">62.91</span>, <span class="dv">33</span>: <span class="fl">60.5</span>, <span class="dv">34</span>: <span class="fl">68.77</span>, <span class="dv">35</span>: <span class="fl">71.94</span>, <span class="dv">36</span>: <span class="fl">61.89</span>, <span class="dv">37</span>: <span class="fl">54.93</span>, <span class="dv">38</span>: <span class="fl">58.4</span>, <span class="dv">39</span>: <span class="fl">54.79</span>, <span class="dv">40</span>: <span class="fl">71.78</span>, <span class="dv">41</span>: <span class="fl">70.07</span>, <span class="dv">42</span>: <span class="fl">62.31</span>, <span class="dv">43</span>: <span class="fl">59.11</span>, <span class="dv">44</span>: <span class="fl">68.15</span>, <span class="dv">45</span>: <span class="fl">71.31</span>, <span class="dv">46</span>: <span class="fl">59.7</span>, <span class="dv">47</span>: <span class="fl">53.32</span>, <span class="dv">48</span>: <span class="fl">63.34</span>, <span class="dv">49</span>: <span class="fl">54.07</span>, <span class="dv">50</span>: <span class="fl">58.35</span>, <span class="dv">51</span>: <span class="fl">48.55</span>, <span class="dv">52</span>: <span class="fl">42.15</span>, <span class="dv">53</span>: <span class="fl">23.95</span>, <span class="dv">54</span>: <span class="fl">58.81</span>, <span class="dv">55</span>: <span class="fl">56.37</span>, <span class="dv">56</span>: <span class="fl">56.91</span>, <span class="dv">57</span>: <span class="fl">52.71</span>, <span class="dv">58</span>: <span class="fl">58.63</span>, <span class="dv">59</span>: <span class="fl">55.59</span>, <span class="dv">60</span>: <span class="fl">51.7</span>, <span class="dv">61</span>: <span class="fl">29.57</span>, <span class="dv">62</span>: <span class="fl">56.44</span>, <span class="dv">63</span>: <span class="fl">44.69</span>, <span class="dv">64</span>: <span class="fl">55.25</span>, <span class="dv">65</span>: <span class="fl">53.65</span>, <span class="dv">66</span>: <span class="fl">52.98</span>, <span class="dv">67</span>: <span class="fl">66.1</span>, <span class="dv">68</span>: <span class="fl">60.73</span>, <span class="dv">69</span>: <span class="fl">55.67</span>, <span class="dv">70</span>: <span class="fl">49.69</span>, <span class="dv">71</span>: <span class="fl">69.84</span>, <span class="dv">72</span>: <span class="fl">69.27</span>, <span class="dv">73</span>: <span class="fl">63.56</span>, <span class="dv">74</span>: <span class="fl">60.49</span>, <span class="dv">75</span>: <span class="fl">56.77</span>, <span class="dv">76</span>: <span class="fl">53.62</span>, <span class="dv">77</span>: <span class="fl">52.91</span>, <span class="dv">78</span>: <span class="fl">52.15</span>, <span class="dv">79</span>: <span class="fl">42.83</span>, <span class="dv">80</span>: <span class="fl">29.2</span>, <span class="dv">81</span>: <span class="fl">62.47</span>, <span class="dv">82</span>: <span class="fl">56.74</span>, <span class="dv">83</span>: <span class="fl">59.21</span>, <span class="dv">84</span>: <span class="fl">59.08</span>, <span class="dv">85</span>: <span class="fl">60.71</span>, <span class="dv">86</span>: <span class="fl">65.21</span>, <span class="dv">87</span>: <span class="fl">58.94</span>, <span class="dv">88</span>: <span class="fl">53.27</span>, <span class="dv">89</span>: <span class="fl">45.03</span>, <span class="dv">90</span>: <span class="fl">44.97</span>, <span class="dv">91</span>: <span class="fl">68.93</span>, <span class="dv">92</span>: <span class="fl">67.42</span>, <span class="dv">93</span>: <span class="fl">63.11</span>, <span class="dv">94</span>: <span class="fl">59.01</span>, <span class="dv">95</span>: <span class="fl">66.74</span>, <span class="dv">96</span>: <span class="fl">69.45</span>, <span class="dv">97</span>: <span class="fl">42.95</span>, <span class="dv">98</span>: <span class="fl">37.76</span>, <span class="dv">99</span>: <span class="fl">53.3</span>, <span class="dv">100</span>: <span class="fl">49.47</span>, <span class="dv">101</span>: <span class="fl">38.88</span>, <span class="dv">102</span>: <span class="fl">38.33</span>}, <span class="st">'comet22'</span>: {<span class="dv">0</span>: <span class="fl">86.01</span>, <span class="dv">1</span>: <span class="fl">87.05</span>, <span class="dv">2</span>: <span class="fl">87.29</span>, <span class="dv">3</span>: <span class="fl">87.54</span>, <span class="dv">4</span>: <span class="fl">86.1</span>, <span class="dv">5</span>: <span class="fl">85.15</span>, <span class="dv">6</span>: <span class="fl">87.76</span>, <span class="dv">7</span>: <span class="fl">88.01</span>, <span class="dv">8</span>: <span class="fl">86.34</span>, <span class="dv">9</span>: <span class="fl">85.3</span>, <span class="dv">10</span>: <span class="fl">87.4</span>, <span class="dv">11</span>: <span class="fl">86.32</span>, <span class="dv">12</span>: <span class="fl">88.76</span>, <span class="dv">13</span>: <span class="fl">79.05</span>, <span class="dv">14</span>: <span class="fl">87.2</span>, <span class="dv">15</span>: <span class="fl">87.52</span>, <span class="dv">16</span>: <span class="fl">89.31</span>, <span class="dv">17</span>: <span class="fl">89.67</span>, <span class="dv">18</span>: <span class="fl">85.04</span>, <span class="dv">19</span>: <span class="fl">87.14</span>, <span class="dv">20</span>: <span class="fl">89.09</span>, <span class="dv">21</span>: <span class="fl">89.23</span>, <span class="dv">22</span>: <span class="fl">88.9</span>, <span class="dv">23</span>: <span class="fl">86.9</span>, <span class="dv">24</span>: <span class="fl">88.31</span>, <span class="dv">25</span>: <span class="fl">87.91</span>, <span class="dv">26</span>: <span class="fl">88.99</span>, <span class="dv">27</span>: <span class="fl">89.42</span>, <span class="dv">28</span>: <span class="fl">87.24</span>, <span class="dv">29</span>: <span class="fl">89.06</span>, <span class="dv">30</span>: <span class="fl">88.17</span>, <span class="dv">31</span>: <span class="fl">88.77</span>, <span class="dv">32</span>: <span class="fl">86.98</span>, <span class="dv">33</span>: <span class="fl">86.22</span>, <span class="dv">34</span>: <span class="fl">89.24</span>, <span class="dv">35</span>: <span class="fl">91.02</span>, <span class="dv">36</span>: <span class="fl">87.29</span>, <span class="dv">37</span>: <span class="fl">88.85</span>, <span class="dv">38</span>: <span class="fl">87.15</span>, <span class="dv">39</span>: <span class="fl">84.52</span>, <span class="dv">40</span>: <span class="fl">90.0</span>, <span class="dv">41</span>: <span class="fl">89.49</span>, <span class="dv">42</span>: <span class="fl">85.96</span>, <span class="dv">43</span>: <span class="fl">87.76</span>, <span class="dv">44</span>: <span class="fl">88.76</span>, <span class="dv">45</span>: <span class="fl">86.99</span>, <span class="dv">46</span>: <span class="fl">86.99</span>, <span class="dv">47</span>: <span class="fl">84.68</span>, <span class="dv">48</span>: <span class="fl">87.76</span>, <span class="dv">49</span>: <span class="fl">85.79</span>, <span class="dv">50</span>: <span class="fl">84.25</span>, <span class="dv">51</span>: <span class="fl">77.67</span>, <span class="dv">52</span>: <span class="fl">72.46</span>, <span class="dv">53</span>: <span class="fl">71.64</span>, <span class="dv">54</span>: <span class="fl">85.24</span>, <span class="dv">55</span>: <span class="fl">83.68</span>, <span class="dv">56</span>: <span class="fl">84.79</span>, <span class="dv">57</span>: <span class="fl">82.75</span>, <span class="dv">58</span>: <span class="fl">85.8</span>, <span class="dv">59</span>: <span class="fl">83.99</span>, <span class="dv">60</span>: <span class="fl">83.07</span>, <span class="dv">61</span>: <span class="fl">83.15</span>, <span class="dv">62</span>: <span class="fl">80.94</span>, <span class="dv">63</span>: <span class="fl">76.66</span>, <span class="dv">64</span>: <span class="fl">82.34</span>, <span class="dv">65</span>: <span class="fl">73.22</span>, <span class="dv">66</span>: <span class="fl">83.76</span>, <span class="dv">67</span>: <span class="fl">87.97</span>, <span class="dv">68</span>: <span class="fl">86.77</span>, <span class="dv">69</span>: <span class="fl">84.12</span>, <span class="dv">70</span>: <span class="fl">84.76</span>, <span class="dv">71</span>: <span class="fl">88.57</span>, <span class="dv">72</span>: <span class="fl">87.99</span>, <span class="dv">73</span>: <span class="fl">86.35</span>, <span class="dv">74</span>: <span class="fl">81.21</span>, <span class="dv">75</span>: <span class="fl">80.46</span>, <span class="dv">76</span>: <span class="fl">81.42</span>, <span class="dv">77</span>: <span class="fl">78.82</span>, <span class="dv">78</span>: <span class="fl">78.31</span>, <span class="dv">79</span>: <span class="fl">76.04</span>, <span class="dv">80</span>: <span class="fl">77.92</span>, <span class="dv">81</span>: <span class="fl">86.71</span>, <span class="dv">82</span>: <span class="fl">85.81</span>, <span class="dv">83</span>: <span class="fl">85.02</span>, <span class="dv">84</span>: <span class="fl">86.18</span>, <span class="dv">85</span>: <span class="fl">85.17</span>, <span class="dv">86</span>: <span class="fl">86.6</span>, <span class="dv">87</span>: <span class="fl">85.84</span>, <span class="dv">88</span>: <span class="fl">87.38</span>, <span class="dv">89</span>: <span class="fl">77.89</span>, <span class="dv">90</span>: <span class="fl">78.78</span>, <span class="dv">91</span>: <span class="fl">88.77</span>, <span class="dv">92</span>: <span class="fl">87.28</span>, <span class="dv">93</span>: <span class="fl">86.44</span>, <span class="dv">94</span>: <span class="fl">88.32</span>, <span class="dv">95</span>: <span class="fl">88.31</span>, <span class="dv">96</span>: <span class="fl">85.97</span>, <span class="dv">97</span>: <span class="fl">76.92</span>, <span class="dv">98</span>: <span class="fl">74.34</span>, <span class="dv">99</span>: <span class="fl">81.26</span>, <span class="dv">100</span>: <span class="fl">80.39</span>, <span class="dv">101</span>: <span class="fl">65.69</span>, <span class="dv">102</span>: <span class="fl">69.6</span>}, <span class="st">'system'</span>: {<span class="dv">0</span>: <span class="st">'quickmt'</span>, <span class="dv">1</span>: <span class="st">'quickmt'</span>, <span class="dv">2</span>: <span class="st">'quickmt'</span>, <span class="dv">3</span>: <span class="st">'quickmt'</span>, <span class="dv">4</span>: <span class="st">'quickmt'</span>, <span class="dv">5</span>: <span class="st">'quickmt'</span>, <span class="dv">6</span>: <span class="st">'quickmt'</span>, <span class="dv">7</span>: <span class="st">'quickmt'</span>, <span class="dv">8</span>: <span class="st">'quickmt'</span>, <span class="dv">9</span>: <span class="st">'quickmt'</span>, <span class="dv">10</span>: <span class="st">'quickmt'</span>, <span class="dv">11</span>: <span class="st">'quickmt'</span>, <span class="dv">12</span>: <span class="st">'quickmt'</span>, <span class="dv">13</span>: <span class="st">'quickmt'</span>, <span class="dv">14</span>: <span class="st">'quickmt'</span>, <span class="dv">15</span>: <span class="st">'quickmt'</span>, <span class="dv">16</span>: <span class="st">'quickmt'</span>, <span class="dv">17</span>: <span class="st">'quickmt'</span>, <span class="dv">18</span>: <span class="st">'quickmt'</span>, <span class="dv">19</span>: <span class="st">'quickmt'</span>, <span class="dv">20</span>: <span class="st">'quickmt'</span>, <span class="dv">21</span>: <span class="st">'quickmt'</span>, <span class="dv">22</span>: <span class="st">'quickmt'</span>, <span class="dv">23</span>: <span class="st">'quickmt'</span>, <span class="dv">24</span>: <span class="st">'quickmt'</span>, <span class="dv">25</span>: <span class="st">'quickmt'</span>, <span class="dv">26</span>: <span class="st">'quickmt'</span>, <span class="dv">27</span>: <span class="st">'quickmt'</span>, <span class="dv">28</span>: <span class="st">'quickmt'</span>, <span class="dv">29</span>: <span class="st">'quickmt'</span>, <span class="dv">30</span>: <span class="st">'quickmt'</span>, <span class="dv">31</span>: <span class="st">'quickmt'</span>, <span class="dv">32</span>: <span class="st">'quickmt'</span>, <span class="dv">33</span>: <span class="st">'quickmt'</span>, <span class="dv">34</span>: <span class="st">'quickmt'</span>, <span class="dv">35</span>: <span class="st">'quickmt'</span>, <span class="dv">36</span>: <span class="st">'quickmt'</span>, <span class="dv">37</span>: <span class="st">'quickmt'</span>, <span class="dv">38</span>: <span class="st">'quickmt'</span>, <span class="dv">39</span>: <span class="st">'quickmt'</span>, <span class="dv">40</span>: <span class="st">'quickmt'</span>, <span class="dv">41</span>: <span class="st">'quickmt'</span>, <span class="dv">42</span>: <span class="st">'quickmt'</span>, <span class="dv">43</span>: <span class="st">'quickmt'</span>, <span class="dv">44</span>: <span class="st">'quickmt'</span>, <span class="dv">45</span>: <span class="st">'quickmt'</span>, <span class="dv">46</span>: <span class="st">'quickmt'</span>, <span class="dv">47</span>: <span class="st">'quickmt'</span>, <span class="dv">48</span>: <span class="st">'quickmt'</span>, <span class="dv">49</span>: <span class="st">'quickmt'</span>, <span class="dv">50</span>: <span class="st">'quickmt'</span>, <span class="dv">51</span>: <span class="st">'quickmt'</span>, <span class="dv">52</span>: <span class="st">'libretranslate'</span>, <span class="dv">53</span>: <span class="st">'libretranslate'</span>, <span class="dv">54</span>: <span class="st">'libretranslate'</span>, <span class="dv">55</span>: <span class="st">'libretranslate'</span>, <span class="dv">56</span>: <span class="st">'libretranslate'</span>, <span class="dv">57</span>: <span class="st">'libretranslate'</span>, <span class="dv">58</span>: <span class="st">'libretranslate'</span>, <span class="dv">59</span>: <span class="st">'libretranslate'</span>, <span class="dv">60</span>: <span class="st">'libretranslate'</span>, <span class="dv">61</span>: <span class="st">'libretranslate'</span>, <span class="dv">62</span>: <span class="st">'libretranslate'</span>, <span class="dv">63</span>: <span class="st">'libretranslate'</span>, <span class="dv">64</span>: <span class="st">'libretranslate'</span>, <span class="dv">65</span>: <span class="st">'libretranslate'</span>, <span class="dv">66</span>: <span class="st">'libretranslate'</span>, <span class="dv">67</span>: <span class="st">'libretranslate'</span>, <span class="dv">68</span>: <span class="st">'libretranslate'</span>, <span class="dv">69</span>: <span class="st">'libretranslate'</span>, <span class="dv">70</span>: <span class="st">'libretranslate'</span>, <span class="dv">71</span>: <span class="st">'libretranslate'</span>, <span class="dv">72</span>: <span class="st">'libretranslate'</span>, <span class="dv">73</span>: <span class="st">'libretranslate'</span>, <span class="dv">74</span>: <span class="st">'libretranslate'</span>, <span class="dv">75</span>: <span class="st">'libretranslate'</span>, <span class="dv">76</span>: <span class="st">'libretranslate'</span>, <span class="dv">77</span>: <span class="st">'libretranslate'</span>, <span class="dv">78</span>: <span class="st">'libretranslate'</span>, <span class="dv">79</span>: <span class="st">'libretranslate'</span>, <span class="dv">80</span>: <span class="st">'libretranslate'</span>, <span class="dv">81</span>: <span class="st">'libretranslate'</span>, <span class="dv">82</span>: <span class="st">'libretranslate'</span>, <span class="dv">83</span>: <span class="st">'libretranslate'</span>, <span class="dv">84</span>: <span class="st">'libretranslate'</span>, <span class="dv">85</span>: <span class="st">'libretranslate'</span>, <span class="dv">86</span>: <span class="st">'libretranslate'</span>, <span class="dv">87</span>: <span class="st">'libretranslate'</span>, <span class="dv">88</span>: <span class="st">'libretranslate'</span>, <span class="dv">89</span>: <span class="st">'libretranslate'</span>, <span class="dv">90</span>: <span class="st">'libretranslate'</span>, <span class="dv">91</span>: <span class="st">'libretranslate'</span>, <span class="dv">92</span>: <span class="st">'libretranslate'</span>, <span class="dv">93</span>: <span class="st">'libretranslate'</span>, <span class="dv">94</span>: <span class="st">'libretranslate'</span>, <span class="dv">95</span>: <span class="st">'libretranslate'</span>, <span class="dv">96</span>: <span class="st">'libretranslate'</span>, <span class="dv">97</span>: <span class="st">'libretranslate'</span>, <span class="dv">98</span>: <span class="st">'libretranslate'</span>, <span class="dv">99</span>: <span class="st">'libretranslate'</span>, <span class="dv">100</span>: <span class="st">'libretranslate'</span>, <span class="dv">101</span>: <span class="st">'libretranslate'</span>, <span class="dv">102</span>: <span class="st">'libretranslate'</span>}}</span> |
|
|
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a></span> |
|
|
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a>df <span class="op">=</span> pd.DataFrame(df_data)</span> |
|
|
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a>df[[<span class="st">"system"</span>, <span class="st">"time"</span>]].groupby(<span class="st">"system"</span>).mean()</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display" data-execution_count="1"> |
|
|
<div> |
|
|
|
|
|
|
|
|
<table class="dataframe caption-top table table-sm table-striped small" data-border="1"> |
|
|
<thead> |
|
|
<tr class="header"> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
<th data-quarto-table-cell-role="th">time</th> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">system</th> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
</tr> |
|
|
</thead> |
|
|
<tbody> |
|
|
<tr class="odd"> |
|
|
<th data-quarto-table-cell-role="th">libretranslate</th> |
|
|
<td>51.787339</td> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">quickmt</th> |
|
|
<td>1.216358</td> |
|
|
</tr> |
|
|
</tbody> |
|
|
</table> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<p>It takes just over 1 second to translate 1000 sentences with <code>quickmt</code>, and more than <strong>50 seconds</strong> using <code>libretranslate</code>! The <code>libretranslate</code> models were warmed up (loaded) before starting the timer.</p> |
|
|
<section id="why-is-there-such-a-large-difference-in-speed" class="level3"> |
|
|
<h3 class="anchored" data-anchor-id="why-is-there-such-a-large-difference-in-speed">Why is there such a large difference in speed?</h3> |
|
|
<p>Both <code>libretranslate</code> and <code>quickmt</code> use <code>ctranslate2</code> for translation and <code>sentencepiece</code> for tokenization under the hood, but <code>libretranslate</code> uses <a href="https://github.com/stanfordnlp/stanza"><code>stanza</code></a> for sentence splitting while <code>quickmt</code> uses <a href="https://github.com/microsoft/BlingFire"><code>blingfire</code></a>. While <code>blingfire</code> is not a <a href="https://arxiv.org/abs/2010.09657">particularly <em>accurate</em></a> sentence segmenter, it is dramatically faster than <a href="https://github.com/nipunsadvilkar/pySBD?tab=readme-ov-file">other</a> <a href="https://github.com/segment-any-text/wtpsplit">methods</a>.</p> |
|
|
<p>Another difference between <code>quickmt</code> and <code>libretranslate</code> is that our models were designed to be quick by having a small number of decoder layers. Most of the <code>libretranslate</code> models are re-packaged Opus-MT models which have 6 decoder layers.</p> |
|
|
<p>How does <code>quickmt</code> compare to <code>libretranslate</code> in terms of translation quality?</p> |
|
|
</section> |
|
|
</section> |
|
|
<section id="quality-comparison" class="level2"> |
|
|
<h2 class="anchored" data-anchor-id="quality-comparison">Quality Comparison</h2> |
|
|
<p>We use <code>chrf</code> was calculated with <a href="https://github.com/mjpost/sacrebleu"><code>sacrebleu</code></a> and <code>comet</code> with the <a href="https://github.com/Unbabel/COMET"><code>comet</code></a> library and the default model (comet22).</p> |
|
|
<p>First let’s take a look at translation from the languages supported by <code>quickmt</code> into English:</p> |
|
|
<div id="84016fc4" class="cell" data-execution_count="2"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>px.bar(</span> |
|
|
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a> df[df.src_lang <span class="op">!=</span> <span class="st">"en"</span>],</span> |
|
|
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a> x<span class="op">=</span><span class="st">"src_lang"</span>,</span> |
|
|
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a> y<span class="op">=</span><span class="st">"comet22"</span>,</span> |
|
|
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a> color<span class="op">=</span><span class="st">"system"</span>,</span> |
|
|
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a> barmode<span class="op">=</span><span class="st">"group"</span>,</span> |
|
|
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a> title<span class="op">=</span><span class="st">"XX->EN Machine Translation Quality - comet22 measure"</span>,</span> |
|
|
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a> range_y<span class="op">=</span>[<span class="dv">70</span>, <span class="dv">95</span>],</span> |
|
|
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a> height<span class="op">=</span><span class="dv">500</span></span> |
|
|
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display"> |
|
|
<div> <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script> <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: 'local'};</script> |
|
|
<script charset="utf-8" src="https://cdn.plot.ly/plotly-3.2.0.min.js" integrity="sha256-iZ2u/oU2wf/vDbl/ChcX93WgbBRSBvUO6N413hDz7xM=" crossorigin="anonymous"></script> <div id="6abb4305-50ce-4929-95be-ca86945b0a22" class="plotly-graph-div" style="height:500px; width:100%;"></div> <script type="text/javascript"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("6abb4305-50ce-4929-95be-ca86945b0a22")) { Plotly.newPlot( "6abb4305-50ce-4929-95be-ca86945b0a22", [{"alignmentgroup":"True","hovertemplate":"system=quickmt\u003cbr\u003esrc_lang=%{x}\u003cbr\u003ecomet22=%{y}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"quickmt","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"quickmt","offsetgroup":"quickmt","orientation":"v","showlegend":true,"textposition":"auto","x":["ko","it","es","hu","zh","ar","hi","vi","ro","pl","pt","de","he","tr","ja","cs","lv","id","el","th","da","ru","fr","bn","fa","ur"],"xaxis":"x","y":{"dtype":"f8","bdata":"cT0K16OAVUDD9Shcj9JVQGZmZmZmhlVAcT0K16PwVUD2KFyPwpVVQJqZmZmZ2VVAcT0K16MwVkDNzMzMzMxVQKRwPQrXU1ZAw\u002fUoXI9CVUD2KFyPwkVWQJqZmZmZOVZApHA9CtcTVkCPwvUoXD9WQI\u002fC9Shcz1VAexSuR+EKVkAfhetRuL5VQI\u002fC9ShcT1ZAw\u002fUoXI\u002fSVUCamZmZmclVQAAAAAAAgFZAPQrXo3B9VUBxPQrXozBWQI\u002fC9Shcv1VAcT0K16PwVUAAAAAAABBVQA=="},"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"system=libretranslate\u003cbr\u003esrc_lang=%{x}\u003cbr\u003ecomet22=%{y}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"libretranslate","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"libretranslate","offsetgroup":"libretranslate","orientation":"v","showlegend":true,"textposition":"auto","x":["ko","it","es","hu","zh","ar","hi","ro","pl","pt","de","he","tr","ja","cs","lv","id","el","th","da","ru","fr","bn","fa","ur"],"xaxis":"x","y":{"dtype":"f8","bdata":"PQrXo3AdUkCPwvUoXE9VQMP1KFyPMlVAMzMzMzNzVUAUrkfhesRUQFyPwvUoPFRA9ihcj8KVVECuR+F6FP5VQEjhehSuB1VAFK5H4XokVkBmZmZmZpZVQD0K16NwHVRAFK5H4Xq0U0DD9ShcjwJTQD0K16NwrVVA4XoUrkdBVUB7FK5H4UpVQPYoXI\u002fCdVVAKVyPwvV4U0DhehSuRzFWQFyPwvUonFVApHA9CtcTVkB7FK5H4TpTQHE9CtejUFRAXI\u002fC9ShsUEA="},"yaxis":"y","type":"bar"}], {"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermap":[{"type":"scattermap","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"},"margin":{"b":0,"l":0,"r":0,"t":30}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"src_lang"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"comet22"},"range":[70,95]},"legend":{"title":{"text":"system"},"tracegroupgap":0},"title":{"text":"XX-\u003eEN Machine Translation Quality - comet22 measure"},"barmode":"group","height":500}, {"responsive": true} ).then(function(){ |
|
|
|
|
|
var gd = document.getElementById('6abb4305-50ce-4929-95be-ca86945b0a22'); |
|
|
var x = new MutationObserver(function (mutations, observer) {{ |
|
|
var display = window.getComputedStyle(gd).display; |
|
|
if (!display || display === 'none') {{ |
|
|
console.log([gd, 'removed!']); |
|
|
Plotly.purge(gd); |
|
|
observer.disconnect(); |
|
|
}} |
|
|
}}); |
|
|
|
|
|
|
|
|
var notebookContainer = gd.closest('#notebook-container'); |
|
|
if (notebookContainer) {{ |
|
|
x.observe(notebookContainer, {childList: true}); |
|
|
}} |
|
|
|
|
|
|
|
|
var outputEl = gd.closest('.output'); |
|
|
if (outputEl) {{ |
|
|
x.observe(outputEl, {childList: true}); |
|
|
}} |
|
|
|
|
|
}) }; </script> </div> |
|
|
</div> |
|
|
</div> |
|
|
<div id="51a7e312" class="cell" data-execution_count="3"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>px.bar(</span> |
|
|
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a> df[df.src_lang <span class="op">!=</span> <span class="st">"en"</span>],</span> |
|
|
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a> x<span class="op">=</span><span class="st">"src_lang"</span>,</span> |
|
|
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a> y<span class="op">=</span><span class="st">"chrf2"</span>,</span> |
|
|
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a> color<span class="op">=</span><span class="st">"system"</span>,</span> |
|
|
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a> barmode<span class="op">=</span><span class="st">"group"</span>,</span> |
|
|
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a> title<span class="op">=</span><span class="st">"XX->EN Machine Translation Quality - chrf measure"</span>,</span> |
|
|
<span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a> height<span class="op">=</span><span class="dv">500</span></span> |
|
|
<span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display"> |
|
|
<div> <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script> <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: 'local'};</script> |
|
|
<script charset="utf-8" src="https://cdn.plot.ly/plotly-3.2.0.min.js" integrity="sha256-iZ2u/oU2wf/vDbl/ChcX93WgbBRSBvUO6N413hDz7xM=" crossorigin="anonymous"></script> <div id="4cf0e640-eb92-478d-8b1b-3a4bc58afd06" class="plotly-graph-div" style="height:500px; width:100%;"></div> <script type="text/javascript"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("4cf0e640-eb92-478d-8b1b-3a4bc58afd06")) { Plotly.newPlot( "4cf0e640-eb92-478d-8b1b-3a4bc58afd06", [{"alignmentgroup":"True","hovertemplate":"system=quickmt\u003cbr\u003esrc_lang=%{x}\u003cbr\u003echrf2=%{y}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"quickmt","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"quickmt","offsetgroup":"quickmt","orientation":"v","showlegend":true,"textposition":"auto","x":["ko","it","es","hu","zh","ar","hi","vi","ro","pl","pt","de","he","tr","ja","cs","lv","id","el","th","da","ru","fr","bn","fa","ur"],"xaxis":"x","y":{"dtype":"f8","bdata":"H4XrUbgeTEBcj8L1KLxOQK5H4XoUTk1AFK5H4Xo0T0AzMzMzM\u002fNMQHE9CtejwFBAAAAAAABAUEDsUbgehWtPQDMzMzMzU1FA16NwPQqXTEAfhetRuN5RQIXrUbgeNVFAKVyPwvUYUUDhehSuR0FQQD0K16NwfUxAuB6F61FoUEAUrkfhenRPQOF6FK5HMVFAUrgehevxTkAzMzMzMzNNQFK4HoXr8VFASOF6FK4nT0CamZmZmQlRQJqZmZmZ2U1A7FG4HoWrT0DNzMzMzCxNQA=="},"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"system=libretranslate\u003cbr\u003esrc_lang=%{x}\u003cbr\u003echrf2=%{y}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"libretranslate","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"libretranslate","offsetgroup":"libretranslate","orientation":"v","showlegend":true,"textposition":"auto","x":["ko","it","es","hu","zh","ar","hi","ro","pl","pt","de","he","tr","ja","cs","lv","id","el","th","da","ru","fr","bn","fa","ur"],"xaxis":"x","y":{"dtype":"f8","bdata":"MzMzMzMTRUBI4XoUrmdNQBSuR+F6dExAcT0K16NQTUCamZmZmdlJQLgehetROExAAAAAAACgS0BmZmZmZoZQQPYoXI\u002fC1UtA9ihcj8J1UUBI4XoUrsdPQMP1KFyPYkxAFK5H4Xp0SkAK16NwPWpFQFyPwvUoPE9AexSuR+GaTUB7FK5H4VpOQLgehetReE1ApHA9CteDRkDsUbgehTtRQK5H4XoUjk9Aj8L1KFyvUECamZmZmXlFQGZmZmZmpkpAcT0K16NwQ0A="},"yaxis":"y","type":"bar"}], {"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermap":[{"type":"scattermap","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"},"margin":{"b":0,"l":0,"r":0,"t":30}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"src_lang"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"chrf2"}},"legend":{"title":{"text":"system"},"tracegroupgap":0},"title":{"text":"XX-\u003eEN Machine Translation Quality - chrf measure"},"barmode":"group","height":500}, {"responsive": true} ).then(function(){ |
|
|
|
|
|
var gd = document.getElementById('4cf0e640-eb92-478d-8b1b-3a4bc58afd06'); |
|
|
var x = new MutationObserver(function (mutations, observer) {{ |
|
|
var display = window.getComputedStyle(gd).display; |
|
|
if (!display || display === 'none') {{ |
|
|
console.log([gd, 'removed!']); |
|
|
Plotly.purge(gd); |
|
|
observer.disconnect(); |
|
|
}} |
|
|
}}); |
|
|
|
|
|
|
|
|
var notebookContainer = gd.closest('#notebook-container'); |
|
|
if (notebookContainer) {{ |
|
|
x.observe(notebookContainer, {childList: true}); |
|
|
}} |
|
|
|
|
|
|
|
|
var outputEl = gd.closest('.output'); |
|
|
if (outputEl) {{ |
|
|
x.observe(outputEl, {childList: true}); |
|
|
}} |
|
|
|
|
|
}) }; </script> </div> |
|
|
</div> |
|
|
</div> |
|
|
<p>For both <code>chrf</code> and <code>comet22</code> and for all languages, with the notable exception of Russian (85.96 comet22 for <code>quickmt</code> vs. 86.44 for <code>libretranslate</code>), <code>quickmt</code> is higher quality than <code>libretranslate</code>. The differences are <strong>huge</strong> for Korean (86.01 vs 72.46 comet22), Turkish (88.99 vs. 78.82 comet22), japanese (87.24 vs. 76.04 comet22), Thai (87.15 vs. 77.79 comet22) and Bengali (86.99 vs. 76.92 comet22).</p> |
|
|
<p>On average, <code>quickmt</code> is 4.95 higher in comet22 and 7.14 higher in chrf2 than <code>libretranslate</code> for translation into English:</p> |
|
|
<div id="479ccc51" class="cell" data-execution_count="4"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>df[df.tgt_lang<span class="op">==</span><span class="st">"en"</span>][[<span class="st">"system"</span>, <span class="st">"comet22"</span>]].groupby(<span class="st">"system"</span>).mean()</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display" data-execution_count="4"> |
|
|
<div> |
|
|
|
|
|
|
|
|
<table class="dataframe caption-top table table-sm table-striped small" data-border="1"> |
|
|
<thead> |
|
|
<tr class="header"> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
<th data-quarto-table-cell-role="th">comet22</th> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">system</th> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
</tr> |
|
|
</thead> |
|
|
<tbody> |
|
|
<tr class="odd"> |
|
|
<th data-quarto-table-cell-role="th">libretranslate</th> |
|
|
<td>82.599600</td> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">quickmt</th> |
|
|
<td>87.549615</td> |
|
|
</tr> |
|
|
</tbody> |
|
|
</table> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div id="29a775e8" class="cell" data-execution_count="5"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>df[df.tgt_lang<span class="op">==</span><span class="st">"en"</span>][[<span class="st">"system"</span>, <span class="st">"chrf2"</span>]].groupby(<span class="st">"system"</span>).mean()</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display" data-execution_count="5"> |
|
|
<div> |
|
|
|
|
|
|
|
|
<table class="dataframe caption-top table table-sm table-striped small" data-border="1"> |
|
|
<thead> |
|
|
<tr class="header"> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
<th data-quarto-table-cell-role="th">chrf2</th> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">system</th> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
</tr> |
|
|
</thead> |
|
|
<tbody> |
|
|
<tr class="odd"> |
|
|
<th data-quarto-table-cell-role="th">libretranslate</th> |
|
|
<td>56.313600</td> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">quickmt</th> |
|
|
<td>63.457308</td> |
|
|
</tr> |
|
|
</tbody> |
|
|
</table> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<p>Next we look at translation from English into the languages supported by <code>quickmt</code>:</p> |
|
|
<div id="8a66d0df" class="cell" data-execution_count="6"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>px.bar(</span> |
|
|
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a> df[df.src_lang <span class="op">==</span> <span class="st">"en"</span>],</span> |
|
|
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a> x<span class="op">=</span><span class="st">"tgt_lang"</span>,</span> |
|
|
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a> y<span class="op">=</span><span class="st">"comet22"</span>,</span> |
|
|
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a> color<span class="op">=</span><span class="st">"system"</span>,</span> |
|
|
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a> barmode<span class="op">=</span><span class="st">"group"</span>,</span> |
|
|
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a> title<span class="op">=</span><span class="st">"EN->XX Machine Translation Quality - comet22 measure"</span>,</span> |
|
|
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a> range_y<span class="op">=</span>[<span class="dv">70</span>, <span class="dv">95</span>],</span> |
|
|
<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a> height<span class="op">=</span><span class="dv">500</span></span> |
|
|
<span id="cb7-10"><a href="#cb7-10" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display"> |
|
|
<div> <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script> <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: 'local'};</script> |
|
|
<script charset="utf-8" src="https://cdn.plot.ly/plotly-3.2.0.min.js" integrity="sha256-iZ2u/oU2wf/vDbl/ChcX93WgbBRSBvUO6N413hDz7xM=" crossorigin="anonymous"></script> <div id="e006ea2f-e030-4a59-b958-e832545e8195" class="plotly-graph-div" style="height:500px; width:100%;"></div> <script type="text/javascript"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("e006ea2f-e030-4a59-b958-e832545e8195")) { Plotly.newPlot( "e006ea2f-e030-4a59-b958-e832545e8195", [{"alignmentgroup":"True","hovertemplate":"system=quickmt\u003cbr\u003etgt_lang=%{x}\u003cbr\u003ecomet22=%{y}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"quickmt","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"quickmt","offsetgroup":"quickmt","orientation":"v","showlegend":true,"textposition":"auto","x":["ko","it","es","hu","zh","ar","hi","vi","ro","pl","pt","de","he","tr","ja","cs","lv","id","el","th","da","ru","fr","bn","fa","ur"],"xaxis":"x","y":{"dtype":"f8","bdata":"MzMzMzPDVUDD9Shcj+JVQJqZmZmZSVVAcT0K16MAVkAzMzMzM1NVQBSuR+F6lFVAMzMzMzPDU0DhehSuR+FVQHsUrkfhalZAKVyPwvXIVUAfhetRuE5WQJqZmZmZuVVACtejcD36VUB7FK5H4VpWQKRwPQrXQ1ZA4XoUrkcxVkCuR+F6FI5VQOF6FK5HwVZAZmZmZmY2VkDhehSuRyFVQI\u002fC9ShcX1ZAcT0K16PwVUCPwvUoXL9VQOxRuB6FK1VAw\u002fUoXI9yVUB7FK5H4WpTQA=="},"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"system=libretranslate\u003cbr\u003etgt_lang=%{x}\u003cbr\u003ecomet22=%{y}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"libretranslate","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"libretranslate","offsetgroup":"libretranslate","orientation":"v","showlegend":true,"textposition":"auto","x":["ko","it","es","hu","zh","ar","hi","vi","ro","pl","pt","de","he","tr","ja","cs","lv","id","el","th","da","ru","fr","bn","fa","ur"],"xaxis":"x","y":{"dtype":"f8","bdata":"KVyPwvXoUUDsUbgehetUQAAAAAAAsFRAj8L1KFz\u002fVECamZmZmclUQArXo3A9KlNArkfhehROUkBxPQrXo\u002fBUQOF6FK5HsVVAcT0K16MwVUCPwvUoXP9VQD0K16NwTVRAexSuR+FaVECkcD0K15NTQHsUrkfhelNApHA9CtdzVUDsUbgehYtVQGZmZmZmplVAuB6F61HYVUBSuB6F67FTQFK4HoXr0VVAFK5H4XoUVkCuR+F6FH5VQPYoXI\u002fClVJAKVyPwvUYVEBmZmZmZmZRQA=="},"yaxis":"y","type":"bar"}], {"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermap":[{"type":"scattermap","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"},"margin":{"b":0,"l":0,"r":0,"t":30}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"tgt_lang"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"comet22"},"range":[70,95]},"legend":{"title":{"text":"system"},"tracegroupgap":0},"title":{"text":"EN-\u003eXX Machine Translation Quality - comet22 measure"},"barmode":"group","height":500}, {"responsive": true} ).then(function(){ |
|
|
|
|
|
var gd = document.getElementById('e006ea2f-e030-4a59-b958-e832545e8195'); |
|
|
var x = new MutationObserver(function (mutations, observer) {{ |
|
|
var display = window.getComputedStyle(gd).display; |
|
|
if (!display || display === 'none') {{ |
|
|
console.log([gd, 'removed!']); |
|
|
Plotly.purge(gd); |
|
|
observer.disconnect(); |
|
|
}} |
|
|
}}); |
|
|
|
|
|
|
|
|
var notebookContainer = gd.closest('#notebook-container'); |
|
|
if (notebookContainer) {{ |
|
|
x.observe(notebookContainer, {childList: true}); |
|
|
}} |
|
|
|
|
|
|
|
|
var outputEl = gd.closest('.output'); |
|
|
if (outputEl) {{ |
|
|
x.observe(outputEl, {childList: true}); |
|
|
}} |
|
|
|
|
|
}) }; </script> </div> |
|
|
</div> |
|
|
</div> |
|
|
<div id="a0c73aa9" class="cell" data-execution_count="7"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>px.bar(</span> |
|
|
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a> df[df.src_lang <span class="op">==</span> <span class="st">"en"</span>],</span> |
|
|
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a> x<span class="op">=</span><span class="st">"tgt_lang"</span>,</span> |
|
|
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a> y<span class="op">=</span><span class="st">"chrf2"</span>,</span> |
|
|
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a> color<span class="op">=</span><span class="st">"system"</span>,</span> |
|
|
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a> barmode<span class="op">=</span><span class="st">"group"</span>,</span> |
|
|
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a> title<span class="op">=</span><span class="st">"EN->XX Machine Translation Quality - chrf2 measure"</span>,</span> |
|
|
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a> height<span class="op">=</span><span class="dv">500</span></span> |
|
|
<span id="cb8-9"><a href="#cb8-9" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display"> |
|
|
<div> <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG"></script><script type="text/javascript">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: "STIX-Web"}});}</script> <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: 'local'};</script> |
|
|
<script charset="utf-8" src="https://cdn.plot.ly/plotly-3.2.0.min.js" integrity="sha256-iZ2u/oU2wf/vDbl/ChcX93WgbBRSBvUO6N413hDz7xM=" crossorigin="anonymous"></script> <div id="39c3dfcb-28d9-4388-b45b-6d033f0203af" class="plotly-graph-div" style="height:500px; width:100%;"></div> <script type="text/javascript"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("39c3dfcb-28d9-4388-b45b-6d033f0203af")) { Plotly.newPlot( "39c3dfcb-28d9-4388-b45b-6d033f0203af", [{"alignmentgroup":"True","hovertemplate":"system=quickmt\u003cbr\u003etgt_lang=%{x}\u003cbr\u003echrf2=%{y}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"quickmt","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"quickmt","offsetgroup":"quickmt","orientation":"v","showlegend":true,"textposition":"auto","x":["ko","it","es","hu","zh","ar","hi","vi","ro","pl","pt","de","he","tr","ja","cs","lv","id","el","th","da","ru","fr","bn","fa","ur"],"xaxis":"x","y":{"dtype":"f8","bdata":"UrgehetxQkA9CtejcN1NQHE9CtejkEtAMzMzMzOzTUAAAAAAAEBBQDMzMzMz005A9ihcj8L1TUDhehSuR2FOQBSuR+F6hFBAzczMzMwMSkAAAAAAAPBRQAAAAAAAkFBAj8L1KFwvT0CkcD0K1+NPQMP1KFyPAkVAhetRuB4lTkAAAAAAAEBOQFyPwvUo\u002fFFA16NwPQp3S0CF61G4HmVLQBSuR+F6hFFArkfhehSOTUCkcD0K19NRQClcj8L1qEpAKVyPwvUIS0BmZmZmZkZIQA=="},"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"system=libretranslate\u003cbr\u003etgt_lang=%{x}\u003cbr\u003echrf2=%{y}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"libretranslate","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"libretranslate","offsetgroup":"libretranslate","orientation":"v","showlegend":true,"textposition":"auto","x":["ko","it","es","hu","zh","ar","hi","vi","ro","pl","pt","de","he","tr","ja","cs","lv","id","el","th","da","ru","fr","bn","fa","ur"],"xaxis":"x","y":{"dtype":"f8","bdata":"MzMzMzPzN0CPwvUoXC9MQHsUrkfhWkpA7FG4HoXLS0BSuB6F65E9QLgehetRWEZAMzMzMzPTSkA9CtejcH1KQD0K16NwXU5AuB6F61HYSEDhehSuR1FRQB+F61G4Pk5Aj8L1KFzPSkAzMzMzMxNKQDMzMzMzMz1AH4XrUbheTEAK16NwPYpNQD0K16NwTVBAw\u002fUoXI+iSkBcj8L1KHxGQHsUrkfh2lBA4XoUrkeBTUDNzMzMzFxRQOF6FK5H4UJAXI\u002fC9Si8SEAK16NwPSpDQA=="},"yaxis":"y","type":"bar"}], {"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermap":[{"type":"scattermap","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"},"margin":{"b":0,"l":0,"r":0,"t":30}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"tgt_lang"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"chrf2"}},"legend":{"title":{"text":"system"},"tracegroupgap":0},"title":{"text":"EN-\u003eXX Machine Translation Quality - chrf2 measure"},"barmode":"group","height":500}, {"responsive": true} ).then(function(){ |
|
|
|
|
|
var gd = document.getElementById('39c3dfcb-28d9-4388-b45b-6d033f0203af'); |
|
|
var x = new MutationObserver(function (mutations, observer) {{ |
|
|
var display = window.getComputedStyle(gd).display; |
|
|
if (!display || display === 'none') {{ |
|
|
console.log([gd, 'removed!']); |
|
|
Plotly.purge(gd); |
|
|
observer.disconnect(); |
|
|
}} |
|
|
}}); |
|
|
|
|
|
|
|
|
var notebookContainer = gd.closest('#notebook-container'); |
|
|
if (notebookContainer) {{ |
|
|
x.observe(notebookContainer, {childList: true}); |
|
|
}} |
|
|
|
|
|
|
|
|
var outputEl = gd.closest('.output'); |
|
|
if (outputEl) {{ |
|
|
x.observe(outputEl, {childList: true}); |
|
|
}} |
|
|
|
|
|
}) }; </script> </div> |
|
|
</div> |
|
|
</div> |
|
|
<p>The pattern here is similar - <code>quickmt</code> is higher-quality than <code>libretranslate</code> for all languages (except Russian!), sometimes dramatically but by an average of 4.97 comet22 and 6.38 chrf2.</p> |
|
|
<div id="20b7bb4f" class="cell" data-execution_count="8"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>df[df.tgt_lang<span class="op">!=</span><span class="st">"en"</span>][[<span class="st">"system"</span>, <span class="st">"comet22"</span>]].groupby(<span class="st">"system"</span>).mean()</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display" data-execution_count="8"> |
|
|
<div> |
|
|
|
|
|
|
|
|
<table class="dataframe caption-top table table-sm table-striped small" data-border="1"> |
|
|
<thead> |
|
|
<tr class="header"> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
<th data-quarto-table-cell-role="th">comet22</th> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">system</th> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
</tr> |
|
|
</thead> |
|
|
<tbody> |
|
|
<tr class="odd"> |
|
|
<th data-quarto-table-cell-role="th">libretranslate</th> |
|
|
<td>81.841538</td> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">quickmt</th> |
|
|
<td>86.808846</td> |
|
|
</tr> |
|
|
</tbody> |
|
|
</table> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div id="0c5249cc" class="cell" data-execution_count="9"> |
|
|
<details class="code-fold"> |
|
|
<summary>Code</summary> |
|
|
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a>df[df.tgt_lang<span class="op">!=</span><span class="st">"en"</span>][[<span class="st">"system"</span>, <span class="st">"chrf2"</span>]].groupby(<span class="st">"system"</span>).mean()</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> |
|
|
</details> |
|
|
<div class="cell-output cell-output-display" data-execution_count="9"> |
|
|
<div> |
|
|
|
|
|
|
|
|
<table class="dataframe caption-top table table-sm table-striped small" data-border="1"> |
|
|
<thead> |
|
|
<tr class="header"> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
<th data-quarto-table-cell-role="th">chrf2</th> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">system</th> |
|
|
<th data-quarto-table-cell-role="th"></th> |
|
|
</tr> |
|
|
</thead> |
|
|
<tbody> |
|
|
<tr class="odd"> |
|
|
<th data-quarto-table-cell-role="th">libretranslate</th> |
|
|
<td>51.745000</td> |
|
|
</tr> |
|
|
<tr class="even"> |
|
|
<th data-quarto-table-cell-role="th">quickmt</th> |
|
|
<td>58.123077</td> |
|
|
</tr> |
|
|
</tbody> |
|
|
</table> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</section> |
|
|
<section id="conclusion" class="level2"> |
|
|
<h2 class="anchored" data-anchor-id="conclusion">Conclusion</h2> |
|
|
<p><code>quickmt</code> is more than 40 times faster than <code>libretranslate</code> (on a RTX 4070s GPU) and quite a bit higher quality (for all languages except Russian).</p> |
|
|
<p>You can give <code>quickmt</code> a try on <a href="https://huggingface.co/spaces/quickmt/QuickMT-Demo">Huggingface Spaces</a>, download the models from <a href="https://huggingface.co/collections/quickmt/quickmt-models">Huggingface</a> and make it your own by forking our <a href="https://github.com/quickmt/quickmt">Github repository</a>. Thanks for reading!</p> |
|
|
</section> |
|
|
|
|
|
</main> |
|
|
|
|
|
<script id="quarto-html-after-body" type="application/javascript"> |
|
|
window.document.addEventListener("DOMContentLoaded", function (event) { |
|
|
const icon = ""; |
|
|
const anchorJS = new window.AnchorJS(); |
|
|
anchorJS.options = { |
|
|
placement: 'right', |
|
|
icon: icon |
|
|
}; |
|
|
anchorJS.add('.anchored'); |
|
|
const isCodeAnnotation = (el) => { |
|
|
for (const clz of el.classList) { |
|
|
if (clz.startsWith('code-annotation-')) { |
|
|
return true; |
|
|
} |
|
|
} |
|
|
return false; |
|
|
} |
|
|
const onCopySuccess = function(e) { |
|
|
|
|
|
const button = e.trigger; |
|
|
|
|
|
button.blur(); |
|
|
|
|
|
button.classList.add('code-copy-button-checked'); |
|
|
var currentTitle = button.getAttribute("title"); |
|
|
button.setAttribute("title", "Copied!"); |
|
|
let tooltip; |
|
|
if (window.bootstrap) { |
|
|
button.setAttribute("data-bs-toggle", "tooltip"); |
|
|
button.setAttribute("data-bs-placement", "left"); |
|
|
button.setAttribute("data-bs-title", "Copied!"); |
|
|
tooltip = new bootstrap.Tooltip(button, |
|
|
{ trigger: "manual", |
|
|
customClass: "code-copy-button-tooltip", |
|
|
offset: [0, -8]}); |
|
|
tooltip.show(); |
|
|
} |
|
|
setTimeout(function() { |
|
|
if (tooltip) { |
|
|
tooltip.hide(); |
|
|
button.removeAttribute("data-bs-title"); |
|
|
button.removeAttribute("data-bs-toggle"); |
|
|
button.removeAttribute("data-bs-placement"); |
|
|
} |
|
|
button.setAttribute("title", currentTitle); |
|
|
button.classList.remove('code-copy-button-checked'); |
|
|
}, 1000); |
|
|
|
|
|
e.clearSelection(); |
|
|
} |
|
|
const getTextToCopy = function(trigger) { |
|
|
const outerScaffold = trigger.parentElement.cloneNode(true); |
|
|
const codeEl = outerScaffold.querySelector('code'); |
|
|
for (const childEl of codeEl.children) { |
|
|
if (isCodeAnnotation(childEl)) { |
|
|
childEl.remove(); |
|
|
} |
|
|
} |
|
|
return codeEl.innerText; |
|
|
} |
|
|
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { |
|
|
text: getTextToCopy |
|
|
}); |
|
|
clipboard.on('success', onCopySuccess); |
|
|
if (window.document.getElementById('quarto-embedded-source-code-modal')) { |
|
|
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { |
|
|
text: getTextToCopy, |
|
|
container: window.document.getElementById('quarto-embedded-source-code-modal') |
|
|
}); |
|
|
clipboardModal.on('success', onCopySuccess); |
|
|
} |
|
|
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); |
|
|
var mailtoRegex = new RegExp(/^mailto:/); |
|
|
var filterRegex = new RegExp('/' + window.location.host + '/'); |
|
|
var isInternal = (href) => { |
|
|
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); |
|
|
} |
|
|
|
|
|
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)'); |
|
|
for (var i=0; i<links.length; i++) { |
|
|
const link = links[i]; |
|
|
if (!isInternal(link.href)) { |
|
|
|
|
|
|
|
|
if (link.dataset.originalHref !== undefined) { |
|
|
link.href = link.dataset.originalHref; |
|
|
} |
|
|
} |
|
|
} |
|
|
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { |
|
|
const config = { |
|
|
allowHTML: true, |
|
|
maxWidth: 500, |
|
|
delay: 100, |
|
|
arrow: false, |
|
|
appendTo: function(el) { |
|
|
return el.parentElement; |
|
|
}, |
|
|
interactive: true, |
|
|
interactiveBorder: 10, |
|
|
theme: 'quarto', |
|
|
placement: 'bottom-start', |
|
|
}; |
|
|
if (contentFn) { |
|
|
config.content = contentFn; |
|
|
} |
|
|
if (onTriggerFn) { |
|
|
config.onTrigger = onTriggerFn; |
|
|
} |
|
|
if (onUntriggerFn) { |
|
|
config.onUntrigger = onUntriggerFn; |
|
|
} |
|
|
window.tippy(el, config); |
|
|
} |
|
|
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); |
|
|
for (var i=0; i<noterefs.length; i++) { |
|
|
const ref = noterefs[i]; |
|
|
tippyHover(ref, function() { |
|
|
|
|
|
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); |
|
|
try { href = new URL(href).hash; } catch {} |
|
|
const id = href.replace(/^#\/?/, ""); |
|
|
const note = window.document.getElementById(id); |
|
|
if (note) { |
|
|
return note.innerHTML; |
|
|
} else { |
|
|
return ""; |
|
|
} |
|
|
}); |
|
|
} |
|
|
const xrefs = window.document.querySelectorAll('a.quarto-xref'); |
|
|
const processXRef = (id, note) => { |
|
|
|
|
|
const stripColumnClz = (el) => { |
|
|
el.classList.remove("page-full", "page-columns"); |
|
|
if (el.children) { |
|
|
for (const child of el.children) { |
|
|
stripColumnClz(child); |
|
|
} |
|
|
} |
|
|
} |
|
|
stripColumnClz(note) |
|
|
if (id === null || id.startsWith('sec-')) { |
|
|
|
|
|
const container = document.createElement("div"); |
|
|
if (note.children && note.children.length > 2) { |
|
|
container.appendChild(note.children[0].cloneNode(true)); |
|
|
for (let i = 1; i < note.children.length; i++) { |
|
|
const child = note.children[i]; |
|
|
if (child.tagName === "P" && child.innerText === "") { |
|
|
continue; |
|
|
} else { |
|
|
container.appendChild(child.cloneNode(true)); |
|
|
break; |
|
|
} |
|
|
} |
|
|
if (window.Quarto?.typesetMath) { |
|
|
window.Quarto.typesetMath(container); |
|
|
} |
|
|
return container.innerHTML |
|
|
} else { |
|
|
if (window.Quarto?.typesetMath) { |
|
|
window.Quarto.typesetMath(note); |
|
|
} |
|
|
return note.innerHTML; |
|
|
} |
|
|
} else { |
|
|
|
|
|
const anchorLink = note.querySelector('a.anchorjs-link'); |
|
|
if (anchorLink) { |
|
|
anchorLink.remove(); |
|
|
} |
|
|
if (window.Quarto?.typesetMath) { |
|
|
window.Quarto.typesetMath(note); |
|
|
} |
|
|
if (note.classList.contains("callout")) { |
|
|
return note.outerHTML; |
|
|
} else { |
|
|
return note.innerHTML; |
|
|
} |
|
|
} |
|
|
} |
|
|
for (var i=0; i<xrefs.length; i++) { |
|
|
const xref = xrefs[i]; |
|
|
tippyHover(xref, undefined, function(instance) { |
|
|
instance.disable(); |
|
|
let url = xref.getAttribute('href'); |
|
|
let hash = undefined; |
|
|
if (url.startsWith('#')) { |
|
|
hash = url; |
|
|
} else { |
|
|
try { hash = new URL(url).hash; } catch {} |
|
|
} |
|
|
if (hash) { |
|
|
const id = hash.replace(/^#\/?/, ""); |
|
|
const note = window.document.getElementById(id); |
|
|
if (note !== null) { |
|
|
try { |
|
|
const html = processXRef(id, note.cloneNode(true)); |
|
|
instance.setContent(html); |
|
|
} finally { |
|
|
instance.enable(); |
|
|
instance.show(); |
|
|
} |
|
|
} else { |
|
|
|
|
|
fetch(url.split('#')[0]) |
|
|
.then(res => res.text()) |
|
|
.then(html => { |
|
|
const parser = new DOMParser(); |
|
|
const htmlDoc = parser.parseFromString(html, "text/html"); |
|
|
const note = htmlDoc.getElementById(id); |
|
|
if (note !== null) { |
|
|
const html = processXRef(id, note); |
|
|
instance.setContent(html); |
|
|
} |
|
|
}).finally(() => { |
|
|
instance.enable(); |
|
|
instance.show(); |
|
|
}); |
|
|
} |
|
|
} else { |
|
|
|
|
|
|
|
|
fetch(url) |
|
|
.then(res => res.text()) |
|
|
.then(html => { |
|
|
const parser = new DOMParser(); |
|
|
const htmlDoc = parser.parseFromString(html, "text/html"); |
|
|
const note = htmlDoc.querySelector('main.content'); |
|
|
if (note !== null) { |
|
|
|
|
|
|
|
|
|
|
|
if (note.children.length > 0 && note.children[0].tagName === "HEADER") { |
|
|
note.children[0].remove(); |
|
|
} |
|
|
const html = processXRef(null, note); |
|
|
instance.setContent(html); |
|
|
} |
|
|
}).finally(() => { |
|
|
instance.enable(); |
|
|
instance.show(); |
|
|
}); |
|
|
} |
|
|
}, function(instance) { |
|
|
}); |
|
|
} |
|
|
let selectedAnnoteEl; |
|
|
const selectorForAnnotation = ( cell, annotation) => { |
|
|
let cellAttr = 'data-code-cell="' + cell + '"'; |
|
|
let lineAttr = 'data-code-annotation="' + annotation + '"'; |
|
|
const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; |
|
|
return selector; |
|
|
} |
|
|
const selectCodeLines = (annoteEl) => { |
|
|
const doc = window.document; |
|
|
const targetCell = annoteEl.getAttribute("data-target-cell"); |
|
|
const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); |
|
|
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); |
|
|
const lines = annoteSpan.getAttribute("data-code-lines").split(","); |
|
|
const lineIds = lines.map((line) => { |
|
|
return targetCell + "-" + line; |
|
|
}) |
|
|
let top = null; |
|
|
let height = null; |
|
|
let parent = null; |
|
|
if (lineIds.length > 0) { |
|
|
|
|
|
const el = window.document.getElementById(lineIds[0]); |
|
|
top = el.offsetTop; |
|
|
height = el.offsetHeight; |
|
|
parent = el.parentElement.parentElement; |
|
|
if (lineIds.length > 1) { |
|
|
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); |
|
|
const bottom = lastEl.offsetTop + lastEl.offsetHeight; |
|
|
height = bottom - top; |
|
|
} |
|
|
if (top !== null && height !== null && parent !== null) { |
|
|
|
|
|
let div = window.document.getElementById("code-annotation-line-highlight"); |
|
|
if (div === null) { |
|
|
div = window.document.createElement("div"); |
|
|
div.setAttribute("id", "code-annotation-line-highlight"); |
|
|
div.style.position = 'absolute'; |
|
|
parent.appendChild(div); |
|
|
} |
|
|
div.style.top = top - 2 + "px"; |
|
|
div.style.height = height + 4 + "px"; |
|
|
div.style.left = 0; |
|
|
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); |
|
|
if (gutterDiv === null) { |
|
|
gutterDiv = window.document.createElement("div"); |
|
|
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); |
|
|
gutterDiv.style.position = 'absolute'; |
|
|
const codeCell = window.document.getElementById(targetCell); |
|
|
const gutter = codeCell.querySelector('.code-annotation-gutter'); |
|
|
gutter.appendChild(gutterDiv); |
|
|
} |
|
|
gutterDiv.style.top = top - 2 + "px"; |
|
|
gutterDiv.style.height = height + 4 + "px"; |
|
|
} |
|
|
selectedAnnoteEl = annoteEl; |
|
|
} |
|
|
}; |
|
|
const unselectCodeLines = () => { |
|
|
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; |
|
|
elementsIds.forEach((elId) => { |
|
|
const div = window.document.getElementById(elId); |
|
|
if (div) { |
|
|
div.remove(); |
|
|
} |
|
|
}); |
|
|
selectedAnnoteEl = undefined; |
|
|
}; |
|
|
|
|
|
window.addEventListener( |
|
|
"resize", |
|
|
throttle(() => { |
|
|
elRect = undefined; |
|
|
if (selectedAnnoteEl) { |
|
|
selectCodeLines(selectedAnnoteEl); |
|
|
} |
|
|
}, 10) |
|
|
); |
|
|
function throttle(fn, ms) { |
|
|
let throttle = false; |
|
|
let timer; |
|
|
return (...args) => { |
|
|
if(!throttle) { |
|
|
fn.apply(this, args); |
|
|
throttle = true; |
|
|
} else { |
|
|
if(timer) clearTimeout(timer); |
|
|
timer = setTimeout(() => { |
|
|
fn.apply(this, args); |
|
|
timer = throttle = false; |
|
|
}, ms); |
|
|
} |
|
|
}; |
|
|
} |
|
|
|
|
|
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); |
|
|
for (const annoteDlNode of annoteDls) { |
|
|
annoteDlNode.addEventListener('click', (event) => { |
|
|
const clickedEl = event.target; |
|
|
if (clickedEl !== selectedAnnoteEl) { |
|
|
unselectCodeLines(); |
|
|
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); |
|
|
if (activeEl) { |
|
|
activeEl.classList.remove('code-annotation-active'); |
|
|
} |
|
|
selectCodeLines(clickedEl); |
|
|
clickedEl.classList.add('code-annotation-active'); |
|
|
} else { |
|
|
|
|
|
unselectCodeLines(); |
|
|
clickedEl.classList.remove('code-annotation-active'); |
|
|
} |
|
|
}); |
|
|
} |
|
|
const findCites = (el) => { |
|
|
const parentEl = el.parentElement; |
|
|
if (parentEl) { |
|
|
const cites = parentEl.dataset.cites; |
|
|
if (cites) { |
|
|
return { |
|
|
el, |
|
|
cites: cites.split(' ') |
|
|
}; |
|
|
} else { |
|
|
return findCites(el.parentElement) |
|
|
} |
|
|
} else { |
|
|
return undefined; |
|
|
} |
|
|
}; |
|
|
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); |
|
|
for (var i=0; i<bibliorefs.length; i++) { |
|
|
const ref = bibliorefs[i]; |
|
|
const citeInfo = findCites(ref); |
|
|
if (citeInfo) { |
|
|
tippyHover(citeInfo.el, function() { |
|
|
var popup = window.document.createElement('div'); |
|
|
citeInfo.cites.forEach(function(cite) { |
|
|
var citeDiv = window.document.createElement('div'); |
|
|
citeDiv.classList.add('hanging-indent'); |
|
|
citeDiv.classList.add('csl-entry'); |
|
|
var biblioDiv = window.document.getElementById('ref-' + cite); |
|
|
if (biblioDiv) { |
|
|
citeDiv.innerHTML = biblioDiv.innerHTML; |
|
|
} |
|
|
popup.appendChild(citeDiv); |
|
|
}); |
|
|
return popup.innerHTML; |
|
|
}); |
|
|
} |
|
|
} |
|
|
}); |
|
|
</script> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body></html> |