GitHubは、GitHub上のソースコードがどのような言語で記述されているのかを特定するツール「OctoLingua」を開発した。50種類の主要な言語に対応しており、今後はソースコードの一部分だけが与えられた場合でも判定できるように改良を続ける。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
GitHubは2019年7月2日(米国時間)、GitHubで管理されているソースコードがどのようなプログラミング言語で記述されているのかを特定するツール「OctoLingua」を開発したと発表。同ツールに関する今後の計画も明らかにした。
GitHub上で最も人気のある上位の5言語はJavaScript、Java、HTML、Python、PHPだが、ホストしているソースコードは300種類以上のプログラミング言語にわたるという。GitHubにとって、リポジトリにコードがプッシュされた際にその種類を認識することが重要だという。検索やセキュリティ脆弱(ぜいじゃく)性アラート、構文のハイライト表示といった観点があるからだ。
だが「.h」のように1つのファイル拡張子が複数のプログラミング言語で利用されている場合や、その逆の場合も珍しくない。さらにはプログラマーが誤った拡張子を付ける場合もある。
GitHubはこれまで、コーディングに使われた言語を検出するツールとして、Rubyベースのアプリケーション「Linguist」を使ってきた。Linguistの精度は84%に達し、ファイルレベルの言語検出をかなり正確に行ってきた。だが、想定されていない命名規約がファイルで使われていると、性能が大幅に低下する上に、ファイルの拡張子が設定されていないと、さらに性能がひどく低下するという。
そこでGitHubは、長期にわたってメンテナンス可能で堅牢(けんろう)な言語検出ツールを目指し、人工ニューラルネットワーク(ANN)アーキテクチャに基づく機械学習分類器OctoLinguaを開発した。
GitHubによればOctoLinguaは現在、「高度なプロトタイピング段階」にあり、GitHubでよく使われる上位50の言語を検出できる。精度とパフォーマンスは既にLinguistを上回っているという。
OctoLinguaの開発目標は、高い精度と堅牢性、メンテナンスのしやすさを確保すること。このため「Keras」と「TensorFlow」をバックエンドとして、Pythonを使ってスクラッチ開発した。
OctoLinguaの現行バージョンのトレーニングでは、一般に公開されている「Rosetta Code」と、GitHub社内でクラウドソーシングされた高品質のリポジトリセットから取り出したファイルを用いた。Rosetta Codeは、同じタスクをさまざまなプログラミング言語で記述したソースコードを含んでいる。GitHubは、GitHubでよく使われる上位50の言語に限定して、これらの言語データセットをトレーニングのために用いた。
GitHubはこれらのデータセットから、各プログラミング言語の特徴を抽出し、KerasとTensorFlowをバックエンドとして作成したANNに入力し、OctoLinguaのトレーニングを行った。
ニューラルネットワークによるテキスト分類問題では、RNN(Recurrent Neural Network)やRNNを発展させたLSTM(Long Short Term Memory)といったようなメモリベースのアーキテクチャを使うことが多い。だが、プログラミング言語には語彙(ごい)やコメントスタイル、ファイル拡張子、構造、ライブラリのインポートスタイルなどの違いがある。そこで、これらの情報を表形式で抽出して用いる単純なアプローチを選択したという。
OctoLinguaで抽出している特徴は次の通りだ。
Copyright © ITmedia, Inc. All Rights Reserved.