GitHub、機械学習を用いてソースコードから言語を検出/分類するツール「OctoLingua」を開発:学習方法を工夫
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をどうやって開発したのか
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.
関連記事
- GitHubが新プランを発表、プライベートリポジトリを無料で利用可能に
GitHubは2つの新プランを提供開始する。一つは、無料でプライベートリポジトリも利用できる「GitHub Free」、もう一つは有料の「GitHub Enterprise」だ。 - ニューラルネットワークライブラリTensorFlow/Kerasで実践するディープラーニング
最近流行の機械学習/Deep Learningを試してみたいという人のために、Pythonを使った機械学習について主要なライブラリ/ツールの使い方を中心に解説する連載。今回はニューラルネットワークのライブラリであるTensorFlow/Kerasについて解説します。 - 「GitHub Actions」は、開発者に直接パワーを与える自動化ツール
GitHubが2018年10月中旬に発表した「GitHub Actions」は、一言で言えば「開発者のワークフローを自動化するサービス」。だが、一般的な自動化ツールではなく、開発者がそのパワーを直接、自身の問題を解決するために構成し、利用し、共有できるものだという。