検索
ニュース

GitHub、機械学習を用いてソースコードから言語を検出/分類するツール「OctoLingua」を開発学習方法を工夫

GitHubは、GitHub上のソースコードがどのような言語で記述されているのかを特定するツール「OctoLingua」を開発した。50種類の主要な言語に対応しており、今後はソースコードの一部分だけが与えられた場合でも判定できるように改良を続ける。

Share
Tweet
LINE
Hatena

 GitHubは2019年7月2日(米国時間)、GitHubで管理されているソースコードがどのようなプログラミング言語で記述されているのかを特定するツール「OctoLingua」を開発したと発表。同ツールに関する今後の計画も明らかにした。

 GitHub上で最も人気のある上位の5言語はJavaScript、Java、HTML、Python、PHPだが、ホストしているソースコードは300種類以上のプログラミング言語にわたるという。GitHubにとって、リポジトリにコードがプッシュされた際にその種類を認識することが重要だという。検索やセキュリティ脆弱(ぜいじゃく)性アラート、構文のハイライト表示といった観点があるからだ。

 だが「.h」のように1つのファイル拡張子が複数のプログラミング言語で利用されている場合や、その逆の場合も珍しくない。さらにはプログラマーが誤った拡張子を付ける場合もある。


GitHubがホストしているソースコードの中で最も人気のある上位10言語(リポジトリ数換算)(出典:GitHub

なぜ新しいツールが必要なのか

 GitHubはこれまで、コーディングに使われた言語を検出するツールとして、Rubyベースのアプリケーション「Linguist」を使ってきた。Linguistの精度は84%に達し、ファイルレベルの言語検出をかなり正確に行ってきた。だが、想定されていない命名規約がファイルで使われていると、性能が大幅に低下する上に、ファイルの拡張子が設定されていないと、さらに性能がひどく低下するという。

 そこでGitHubは、長期にわたってメンテナンス可能で堅牢(けんろう)な言語検出ツールを目指し、人工ニューラルネットワーク(ANN)アーキテクチャに基づく機械学習分類器OctoLinguaを開発した。

 GitHubによればOctoLinguaは現在、「高度なプロトタイピング段階」にあり、GitHubでよく使われる上位50の言語を検出できる。精度とパフォーマンスは既にLinguistを上回っているという。

OctoLinguaをどうやって開発したのか

 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で抽出している特徴は次の通りだ。

  • ファイルごとの上位5つの特殊文字
  • ファイル当たり上位20種類のトークン
  • ファイル拡張子
  • コロンや中かっこ、セミコロンなど、ソースコードファイルで一般に使う特定の特殊文字の存在

ANNモデルの構造は?

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る