日本ソフトウェア科学会第 37 回大会 (2020 年度) 講演論文集

教師ラベルなし単言語学習データのみでのcross-language コードクローン検出の試み
劉 宇澤

千葉 滋

近年，同じプロジェクトでも複数の言語に関わることが増え，教師あり学習で cross-language コードクローンを検出する手法が研究され始めている．しかしながら，教師あり学習はデータセットの質に依存するため，良いデータセットが存在しない今の状況では，実用に応用するにはまだ現実ではない．そこで，本研究は教師データが必要ない教師なし学習での cross-language コードクローンの検出を試みた．まだ研究されたことのないタスクであるため，その可能性を追求するに，二つの仮説を立てた．そして，二つの仮説の元に，LSTM を使った autoencoder やTransformer を使った言語モデルとそれぞれの改善法合計五つの手法について実験した．結果はかなり高い精度でcross-language のコードクローンを検出することができた．とに，言語の間の違い部分もベクトル空間上の近い位1 はじめに置に学習できるという仮説である．二つ目は，プログ

コードクローンはソフトウェアの開発および保守に

ラミング言語は分布仮説に従っていて，英語ベースで悪影響を与える恐れがある．同一言語でのクローン付けられた変数名や関数名は隠しラベルの役目を果検出はたくさん研究されている [2] [13] [18] [12] [5] [19]．

たす．

近年，同じプロジェクトでも複数の言語に関わること学習データとして GitHub†1 からアルゴリズムに関が増えている．こういう背景の中に，cross-language係する Java と Python のコードを集め，LSTM [11]コードクローンを検出する手法が研究され始めていを使った autoencoder [10] や Transformer [20] を使っる [14] [1] [4] [21] [17] [16]．そして昨年に，教師データを使って，教師あり学習で cross-language コードクローた言語モデルとそれぞれの改善法合計五つの手法について実験した．評価は LeetCode†2 の解答を使ってンを検出する論文が二つ出た [17] [16]．しかしながら，行った．結果はかなり高い精度で cross-language の教師あり学習はデータセットの質に依存するため，良コードクローンを検出することができた．

いデータセットが存在しない今の状況では，実用に応用するにはまだ現実ではない．

2 背景

そこで，本研究は教師データが必要ない教師なし

コードクローンはソフトウェアの開発および保守に学習での cross-language コードクローンの検出を試

悪影響を与える恐れがある．同一言語でのクローン検みた．まだ研究されたことのないタスクであるため，出はたくさん研究されている．

その可能性を追求するに，二つの仮説を立てた．一つ

近年，同じプロジェクトでも複数の言語に関わるこ

目は，自然言語と違い，プログラミング言語は違う言とが増えている．例えば，プロトタイプコードとプロ語でもたくさんの共通点があり，これらの共通点をもダクトコードは違う言語を使うことがある．プロト

This is an unrefereed paper. Copyrights belong to theAuthor(s).
Yuze Liu, 東京大学大学院情報理工学系研究科, Graduate School Information and Science Technology, The
University of Tokyo.

タイプコードは Python などのスクリプト言語を使い，実際のプロダクトコードは C++や Java などの†1 https://github.com†2 https://leetcode.com

速い言語で実装する．また，アプリケーションが動く

競技プログラミングで学習されたモデルは，競技プロ環境によって，使える言語が限られている．同じ機能

グラミングのコードに使えるが，実用的の領域には使のソフトウェアでも，iOS アプリケーションは Swiftえない．実用的の領域にはまだ学習データが存在してや Objective C を使い，Android アプリケーションいないため，実用に応用するにはまだ現実ではない．

は Java や Kotlin で実装し，ブラウザアプリケーショ
ンは JavaScript で書く．

3 教師なし学習による cross-language コー
ドクローン検出

こういう背景の中に cross-language のコードクローンが存在する可能性が増えている．cross-language の教師ラベルなし単言語学習データのみを使った教師

コードクローンでもソフトウェアの開発に悪影響を与なし学習による cross-language コードクローン検出える恐れがあるから，検出することが大切だ．

を提案する．

例として，同じ機能のソフトウェアが複数言語で実教師なし学習による cross-language コードクロー

装される場合は，一つ言語のコードが修正される時，ン検出の基本的考えは，教師データ不要のあるタスク

他の言語の同じ部分も修正される必要がある．多言語をモデルに学習させて，その副産物としてコードの分のプロジェクトは通常複数のチームで協力して開発こ散表現が得られる．コードの分散表現のコサイン類似とが多い．開発者は自分が専門している言語の部分だ度を計算して，コードクローンを判断する．

け開発している．一つ言語のコードが修正された時，教師なし学習は教師あり学習に比べて，主に以下三開発者は自分が詳しくない別の言語のコードからコーつの利点がある：

ドクローンを探し出す必要がある．システムアーキテ

1）

性能に期待できる．教師あり学習は教師デークチャや別の言語の予備知識を知る必要があるため，タの質に依存するため，まだ良い教師データが同一言語のコードクローンよりも時間消費やコスト存在しない今の状況では，性能は高くない．一が大きい．

方，教師ラベルなしの単言語データはたくさん

また，ウェブアプリケーションはマイクロサービスアーキテクチャを採用することがある [17]．サービス

存在する．教師なし学習の精度が期待できます．

2）

汎用性に期待できる．教師あり学習は学習さごとに違うチームで違い言語を使って開発するため，れたパターンに強く，学習されていない他の領サービスの間に機能的に重複するコードが存在する

域のパターンに弱い．今までの論文は競技プロ可能性がある．これらのコードは単一責任原則を違反

グラミングの教師データを使って学習した．実しているから，cross-language コードクローンを検出用的の領域にはまだ学習データが存在していなする技術を使って，避けるべきだ．

いため，実用に応用することはできない．一方，Cross-language コードクローンの検出は研究され教師ラベルなしの単言語データはどの領域でも始めている．そして，昨年に，教師データを使って，たくさん存在している．実用にすぐ応用できる．

教師あり学習で cross-language コードクローンを検出する論文が二つ出た [17] [16] が，あまり性能が良くない．論文は二つとも教師データとして，AtCoder†33）モデルに通す計算量が低い，大規模の検出にも応用できる．教師あり学習はコードクローンのペアをインプットとして，クローンかどうかをや Google CodeJam†4 などの競技プログラミングのアウトプットする．検出候補のコードを二つずつデータを使って，学習した．競技プログラミングの組み合わせてモデルに通すため，モデルに通す

コードはコーディングスタイルや解決方法に差が大き

計算量は O(n2 )．教師なし学習はコードを一つすぎるため，良いデータではない．そして，教師ありずつモデルに通して，コードの分散表現をアウ

学習は学習されていない他の領域のパターンに弱い．

トプットする．後は分散表現のコサイン類似度†3 https://atcoder.jp†4 https://www.go-hero.net/jam/10/languages/0を計算して，コードクローンかどうかを判断する．モデルに通す計算量は O(n) である．モデル

に通す時間コストはコサイン類似度を計算するより遥かに大きいため，モデルに通す計算量を抑えると，検出全体の時間は大幅に抑えられる．
大規模のコードクローン検出にも応用できる．
教師なし学習による cross-language コードクロー
ン検出は我々が知る限り，まだ研究されたことのないタスクであるため，その可能性を追求するに，二つの仮説を立てた．

3. 1 仮説 1

図1

自然言語と違い，プログラミング言語は違う言語

教師なし学習手法

でもたくさんの共通点があり，これらの共通点をもとに，言語の間の違い部分もベクトル空間上の近い位置に学習できる．
自然言語における cross-language タスクは，主に二つの言語を関連付けた教師データを使い，教師あり学習を行う．例えば，言語翻訳タスクは，事前に与えられた二つの言語の翻訳文ペアを学習データとして

図2

プログラミング言語の形使い，そうすることで二つの言語を関連付ける．自然
言語では，言語によって使う文字や文法は全然違うた役目を果たす．

め，教師データをなしに二つの言語を関連付けるのは分布仮説とは，同じ文脈で出現する単語は意味も難しい．だが，プログラミング言語はそうではない．

類似する [9]．言い換えれば，単語の意味は周辺文脈プログラミング言語は違う言語でもたくさんの共通によって定義される [7]．分布仮説は統計的意味論 [22]点がある．特に，汎用的な言語は共通点が多い．の基礎である．

共通点の例として：分布仮説は近年発展している教師なし学習手法と• 入れ子構造がある強く関係していると考える．図 1 に示した通り，例え• 式を使ってデータ処理をする

ば，skip-gram モデル [15] は，単語をインプットとし• if, for, while, function, class などの statementて，その単語の周りの単語を予測する．言語モデルがあるは，今までの文脈をインプットとして，次の単語を予• 英語ベースで変数名や関数名を付ける

測する．マスク言語モデル [6] は，マスクされていな• AST に変換して，実行する

い単語をインプットとして，マスクされた単語を予測

教師なし学習では，トークンの意味をベクトル化すする．

る．言語の間の共通点をもとに，違う言語のベクトルプログラミング言語は，形から見ると，分布仮説に空間は独立なものでは無くなって，関連付けられる．

従っていると思われる．図 2 に示した通り，例えば，言語の間の違い部分もベクトル空間上の近い位置に関数を定義する時，関数名を書いてから，後ろにコー学習できる．

ドの内容を書く．関数名の意味は後ろのコードによって定義される．そして，後ろのコードの意味も関数名

3. 2 仮説 2によって定義される．式の場合も同じ．例えば，x =プログラミング言語は分布仮説に従っていて，英語

a + b の場合は，x の意味は a + b によって定義されベースで付けられた変数名や関数名は隠しラベルのる．a + b の意味もまた x によって定義される．

違う言語でも，同じく英語ベースで関数名や変数かを評価する．

名を付けている．そして，機能的に近いコードは，関4. 1. 3 BPE(byte pair encoding)

数名や変数名も関係している．分布仮説が成立すれBPE(byte pair encoding) [8] はデータ圧縮法の一ば，変数名や関数名は隠しラベルの役目を果たす．こつである．自然言語では，BPE を使って，非頻出語れで，教師なし学習が可能になる．

をサブワードに分けることで未知語を対応することがある．

4 手法と実験結果

BPE は特にプログラミング言語に適していると考LSTM を使った autoencoder や Transformer を使える．プログラミング言語は開発者が自分で名前をった言語モデルとそれぞれの改善法合計五つの手法に付けるため，未知語は避けられない．今までの研究はついて実験した．4.1 は学習データ，評価データ，デー非頻出語を identiﬁer などの型に変えることが多い．

タの前処理について紹介する．4.2 から 4.6 まではそ

しかし，そうすると多くの情報が損失することにな

れぞれの手法と実験結果について紹介する．4.7 は実る．プログラミング言語で名前を付ける時よくキャメ験結果について議論する．

ルケースやスネークケースを使って意味を表現する．

BPE を使えば，上手く名前を意味のあるサブワード
4. 1 データセットに分けられるではないかと思って，実験をした．結果

4. 1. 1 学習データ

は，ほとんどの変数名や関数名は意味のあるサブワー

学習データは GitHub から集めた．GitHub からドに分けることができた．

LeetCode や algorithm のキーワードを含めたリポジ

学習データに BPE を使うことにした．Java とトリを Java と Python それぞれ 550 個を集めた．長Python のコードの語彙数は合わせて 157347 である．

さ 512 トークン以上のファイルを取り除いて，JavaBPE を使って，30829 にした．

は 123623 ファイル，Python は 83398 ファイルを学習データとして使用した．
LeetCode†5 は IT 企業のコーディング面接を練習

4. 2 手法 1
LSTM [11] を使った autoencoder [10] について実験するためのサイトである．LeetCode を学習データした．図 3 で示した通り，コードを LSTM encoderとして選んだ理由は，競技プログラミングと違って，に入れて，一つの code embedding にエンコードす

LeetCode は時間を競うではなく，コーディングスタる．そして，LSTM decoder は code embedding をイルを重視している．LeetCode は競技プログラミン元に戻すように学習する．学習の結果として，コードグより，実際の仕事現場で書いたコードに近いである．

をコードの意味を含めた一つの code embedding にエ

4. 1. 2 評価データ

ンコードできる encoder を得られる．評価するとき，評価データは LeetCode の解答を使う．同じ問題をその encoder を使って，コードをエンコードする．得解く Java と Python のコードは cross-language コー

られた code embedding のコサイン類似度を計算しドクローンと見なす．103 個の問題にそれぞれ一つて，コードクローンかどうかを判断する．レイヤーはJava の解答と一つ Python の解答がある．組み合わせて，全部 10609 ペアの中に 103 ペアだけの正解ペアを検出するというタスクになる．実際の実用の時も，コードクローンの数に対してコードの種類数が遥かに多いである．そのため，たくさん種類のコードの中に，数少ないコードクローンを見つかられるかどう
図3†5 https://leetcode.com

手法 1

図4

手法１の結果図6

手法 2 の結果一つで，embedding は次元数は 512 である．予想として，二つの言語を一つのモデルで学習することで，embedding に記憶させる．

仮説 1 で言語の間の共通点をもとに，言語の間の違結果は図 6 で示した．F1 は 39.2%でちょっと上がっい部分もベクトル空間上の近い位置に学習できる．

たが，一番近いペアの類似度は 0.58 で逆に下がりま結果は図で示した．F1 は 38.6%である．10609 ペした．二つの decoder を使うことは言語の間の距離アの中に 103 ペアが正解なので，ランダムで判断すを縮めないことが分かった．

る場合は正解率約 1%である．したがって，性能は確かにあった．しかし，高いとは言えない．そして，一4. 4 手法 3

番近いペアの類似度は 0.66 なので，Java のコードと図 7 で示した通り，言語ごとに違うスタートトーク

Python のコードの距離が離れていることが分かった．

ンを使うことにした．手法２で，二つの decoder を二つの言語の間の違いが code embedding に含まれ使うことは言語の間の距離を縮めないことが分かっていると考えられる．

たので，言語の間の違いを decoder に記憶させるではなく，スタートトークンの embedding に記憶さ4. 3 手法 2

せる．decoder は二つのインプットがある．一つは

図 5 で示した通り，言語ごとに違う decoder を使

code embedding で，一つはスタートトークンの word用することにした．二つの言語のコードは同じ en-embedding である．スタートトークンの embedding

coder でエンコードするが，元に戻す時にそれぞれは code embedding と同じ記憶空間がある．言語ごの decoder を使う．手法１で二つの言語の間の違いとに違うスタートトークンを使うことで，言語に関すが code embedding に含まれていることが分かった．

る情報はスタートトークンの embedding に記憶させ，二つの decoder を使うことで，言語の間の違い部分

意味に関する情報は code embedding に流れさせる．

が decoder で吸収され，意味に関わる部分だけ code

結果は図 8 で示した．F1 は 51.2%で，大幅に上がりました．そして，一番近いペアの類似度は 0.79 ま

図5

手法 2

図7

手法 3

能が出た．しかも一番近いペアの類似度は 0.918 である．二つの仮説で予想した通り，違う言語のコードでも距離がかなり近くなった．

4. 6 手法 5
手法 4 で得られたコードの分散表現の 512 次元の中に言語に関わる特徴と意味に関わる特徴があると
図8

手法 3 の結果予想した．言語に関わる特徴の影響を減らせる実験をした．

で上がった．予想通りに，言語ごとに違うスタートコードの分散表現をインプットとして，一つの lin-トークンを使うことで，言語の間の距離を縮めること

ear 層の classiﬁer を使って，Python か Java かと分ができた．

類させる．その linear 層の重みの絶対値が高いとこ
ろは言語に関係強い特徴であると予想した．学習時に4. 5 手法 4

L1 正則化をかけた．L1 正則化をかけることで，予測Transformer [20] を使った language model についに影響が弱い特徴の重みは 0 に近く，予測に影響が強て実験をした．language model とは前の文脈を見い特徴だけ重みが高く学習できる．て，次の単語を予測し続けるモデルである．モデル

結果は精度 99.97%で分類できる．重みは図 10 には Transformer の decoder だけを使った．レイヤー

示した通り，ほとんどの重みは 0 に近いである．残りは 6 で，次元数は 512 である．評価する時に，後ろの重みの絶対値が高い特徴は言語に関わる特徴だとの padding を取り除いたアウトプットを各トークン思われる．の平均を取ってコードの分散表現にする．得られた重みの絶対値が高い特徴は以下の式で減らせる．

コードの分散表現のコサイン類似度を計算して，コードクローンかどうかを判断する．予想として，二つのvi′ = (1 − min(| wi | +α, 1)) · vi

(1)

言語を一つのモデルで学習することで，仮説 1 で言語式の中，vi はコードの分散表現にインデックスがの間の共通点をもとに，言語の間の違い部分もベクトi である要素．vi′ は減らした後の要素である．wi はル空間上の近い位置に学習できる．そして，languagelinear 層の重みにインデックスが i である要素．α はmodel を使うことで，仮説 2 で分布仮説が成立するハイパーパラメーターである. 重みの絶対値が 1 − αのおかげで，変数名や関数名は隠しラベルの役目を果以上の特徴は取り除かれる．残りの特徴は重みの絶対たす．

値が大きければ大きいほど減らされる．結果として，結果は図 9 で示した．F1 は 82.4%でかなり高い性

α が 0.95 の時一番高い性能が得られた．
結果は図 11 で示した．F1 は 84.2%で，性能がちょっ

図9

手法 4 の結果

図 10linear 層の重み図 11

図 13

サンプル 2

図 14

サンプル 3

図 15

サンプル 4

手法 5 の結果と上がった．そして，一番近いペアの類似度は 0.922で，もっと近くなった．性能はちょっとしか上がらな
かったのはデータセットに原因があると思われる．4.7で議論する．

4. 7 議論
評価データでは，10609 ペアの中に 103 ペアが正解である．そのため，ランダムで判断する場合は正解率約 1%である．実験結果では，F1 は 84.2%を得られた．かなり高い精度と思われる．性能の数字だけじゃなく、もっと正確にモデルの性能を評価するため，モデルが正解だと判断したペアの中に，間違ったペアを見てみた．
図 12 から図 15 まではコードペアのサンプルが挙げられた．左は Python のコードで，右は Java のコードである．こちらのペアはモデルが近いと判定されたが、違う問題を解くコードなので、間違いだとカウントされた。でも、これらのペアは違う問題のコードだ
けど、実はかなり近いであった。

じようなことをやっている。コードクローンであると

例えば，図 12 サンプル 1 のペアはどっちでも bi-考えられる．モデルはうまくこれらのコードをコードnary search のアルゴリズムを使ったコードである．

クローンだと認識している．図 14 サンプル 3 のペア

図 13 サンプル 2 のペアは，問題が違うけど、実は同はちょっと興味深い．完全に違うアルゴリズムを使っている。でも、実は目的が似ていて、一つは 1 からn まで全て無くなって数字を探し出しこと、一つは 1から n まで一つだけ無くなった数字を探し出すことである。アルゴリズムが違うし、そして、関数名も違う言い方や単語をつかっている。なぜか、モデルはコードクローンだと認識している．図 15 サンプル 4のペアははどっちでも 2 pointer のテクニックを使っ
図 12

サンプル 1ている。一つは LinkedList の真ん中のノードを探し出すこと、一つは後ろから n 番目のノードを見つけ用したフィルタを使う．最後に，on-the-ﬂy または競て削除する。アルゴリズム的にはかなり近いである。

技プログラミングのデータを使った教師あり学習をサンプル以外の他のペアもほとんどは違う問題だけ行う．Perez et al. と同じく，競技プログラミングのど、アルゴリズムあるいは目的が近いコードである．

教師データは良いデータではないため，精度は高くこれらのペアは場合によって，価値のあるコードクない．

ローンだと考えられる。

6 まとめ
5 関連研究本研究では二つの仮説の元に，教師なし学習でのCross-language コードクローンの検出は最近研究

cross-language コードクローン検出を試みた．実験のされ始めている．今までの研究について簡単に紹介

結果，高い性能を得られた．結果から見ると，二つのする．

仮説が成立すると考えられる．今後，マスク言語モデ

Kraft et al.(2008) [14] は cross-language コードク
ローンの検出に関する最初の研究を行なった．Mi-ルについて実験を行う予定である，また，既存手法と同じデータセットで比較する．

crosoft .NET フレームワークの CodeDOM ライブ
ラリーを基づいて，C2D2 というツールを開発した．

参 考 文 献C#と VB.NET. の共通 CodeDOM グラフを生成で[ 1 ] Al-omari, F., Keivanloo, I., Roy, C., and Rilling,J.: Detecting Clones Across Microsoft .NET Programming Languages, 10 2012, pp. 405–414.
[ 2 ] Baker, B.: A Program for Identifying Duplicated Code, Proceedings of Computing Scienceand Statistics: 24th Symposium on the Interface,Vol. 24(1992).
[ 3 ] Budimac, Z., Rakić, G., and Savi’c, M.: SSQSAarchitecture, 09 2012, pp. 287–290.
[ 4 ] CHENG, X., PENG, Z., Jiang, L., Zhong,H., Yu, H., and Zhao, J.: CLCMiner: Detecting Cross-Language Clones without Intermediates,
IEICE Transactions on Information and Systems,Vol. E100.D(2017), pp. 273–284.
[ 5 ] Cordy, J. and Roy, C.: The NiCad clone detector, 06 2011, pp. 219–220.
[ 6 ] Devlin, J., Chang, M.-W., Lee, K., andToutanova, K.: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, 10 2018.
[ 7 ] Firth, J.: A synopsis of linguistic theory 193055, Studies in linguistic analysis. The PhilologicalSociety, Oxford, (1957), pp. 1–32.
[ 8 ] Gage, P.: A new algorithm for data compression,
The C Users Journal, Vol. 12(1994), pp. 23–38.
[ 9 ] Harris, Z.: Distributional Structure, Word,
Vol. 10(1954), pp. 146–162.
[10] Hinton, G. and Salakhutdinov, R.: Reducing theDimensionality of Data with Neural Networks, Science (New York, N.Y.), Vol. 313(2006), pp. 504–7.
[11] Hochreiter, S. and Schmidhuber, J.: Long Shortterm Memory, Neural computation, Vol. 9(1997),pp. 1735–80.
[12] Jiang, L., Misherghi, G., Su, Z., and Glondu,S.: DECKARD: scalable and accurate tree-based
detection of code clones, 06 2007, pp. 96–105.

きる．また，Al-omari et al..(2012) [1] は共通中間言語（Common Intermediate Language (CIL)）を利用して C#，J#と VB.NET. のコードクローンを検出できる．二つとも.NET 言語についての研究である．Java と Python などの違うプラットフォームの言語には使えない．

X. Cheng et al.(2017) [4] は CLCMiner を開発した．多言語プロジェクトの Cross-language コードク
ローンは修正履歴 (diﬀ) も類似するという仮説を基づいて研究を行なった．でも，修正履歴を持たない一般コードには使えない．

T. Vislavski et al.(2018) [21] は Budimac et al. のSSQSA アーキテクチャー [3] を利用して，コードをenriched Concrete Syntax Tree (eCST) に変換して行列を生成する．それを用いてコードクローンを検出する．しかし，比較できるコードは制限がある．コードの長さ，ステップとフローが同じでなければならな
い．実用的に使うには難しい．

Perez et al.(2019) [17] は AST を利用してトークンの分散表現を生成する．それから，競技プログラミングのデータを教師データとして，教師あり学習でコードクローンを検出する，K.Naﬁ et al.(2019) [16]はあらかじめ決めた文法特徴を使って，コードを分析する．それから，API ドキュメントの類似度を利[13] Kamiya, T., Kusumoto, S., and Inoue, K.:
CCFinder: A multilinguistic token-based code
clone detection system for large scale source
code, Software Engineering, IEEE Transactions on,Vol. 28(2002), pp. 654– 670.
[14] Kraft, N., Bonds, B., and Smith, R.: Crosslanguage Clone Detection., 01 2008, pp. 54–59.
[15] Mikolov, T., Sutskever, I., Chen, K., Corrado,G., and Dean, J.: Distributed Representations ofWords and Phrases and their Compositionality, Advances in Neural Information Processing Systems,Vol. 26(2013).
[16] Naﬁ, K., Kar, T., Roy, B., Roy, C., and Schneider, K.: CLCDSA: Cross Language Code Clone Detection using Syntactical Features and API Documentation, 11 2019, pp. 1026–1037.
[17] Perez, D. and Chiba, S.: Cross-Language Clone

Detection by Learning Over Abstract Syntax Trees,
05 2019, pp. 518–528.
[18] Roy, C. and Cordy, J.: A Survey on Software
Clone Detection Research, School of Computing TR
2007-541, (2007).
[19] Sajnani, H., Saini, V., Svajlenko, J., Roy, C.,
and Lopes, C.: SourcererCC: scaling code clone detection to big-code, 05 2016, pp. 1157–1168.
[20] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit,J., Jones, L., Gomez, A., Kaiser, L., and Polosukhin,I.: Attention Is All You Need, (2017).
[21] Vislavski, T., Rakić, G., Cardozo, N., and Budimac, Z.: LICCA: A tool for cross-language clone
detection, 03 2018.
[22] Weaver, W.: Translation, Machine Translationof Languages. Cambridge, Massachusetts: MITPress, (1955), pp. 15–23.