GitHubは、"good first issues feature"の最新バージョンの提供を開始した。これは、マシンラーニング(ML)モデルが"easy"と特定したイシューと、プロジェクトメンテナが選択して"easy"とラベル付けしたイシューのリストとを組み合わせたものだ。オープンソースのコントリビュータならば、経験の深浅を問わずに、この機能を使ってプロジェクト内の簡単なイシューを見つけ、対処することができる。
教師付き(supervised)MLモデル用のトレーニングセットのラベル付けと構築という困難かつ面倒なタスクを回避するため、GitHubは、弱い教師付き(weakly supervised)モデルを採用することにした。このプロセスは、GitHubリポジトリ全体の既存のイシューから取得した何十万というサンプルに対して、自動的にラベルを推定することから始まる。潜在的にネガティブなトレーニングサンプルをフィルタするために、複数の基準が使用される。その内容は、選択した300のラベルリストとのマッチング、新しいコントリビュータが提供したプルリクエストによってクローズされたイシュー、単一ファイルに収まる簡単な変更のプルリクエストで解決したイシューなどだ。続く処理では、重複するイシューの排除と、サンプルをトレーニング/評価/テストセットに分ける処理が、リポジトリ全体にわたって行われる。
現時点では、機能毎にワンホットエンコード(one-hot encode)された前処理済みのタイトルとボディが、モデルのトレーニングに使用されている。モデルの実装にはTensorFlowフレームワークを選択した。モデルのトレーニングには、一般的な正規化の手法に加えて、テキストデータ拡張(text data augmentation)や早期終了(early stopping)といったテクニックが使用されている。
ユーザに"good first issues"をランク付けして提供するためにモデルが実行され、オープン中のすべてのイシューが分類される。イシューの分類子の確率スコアが特定の値を上回った場合、そのイシューは確率スコアとともに推奨予定イシューのバケットに追加される。次に、オープン状態のすべてのイシューから、選択したラベルリストにマッチするラベルを持つものが選ばれて、同じバケットに追加される。ラベルによって選択されたこれらのイシューには、高いスコアが割り当てられる。そして最後に、バケット内のすべてのイシューがスコアと、イシューの古さに基くペナルティによってランク付けされる。
今のところGitHubでは、オープンイシューに対するモデルのトレーニングと推論をオフラインで行っている。マシンラーニングパイプラインのスケジューリングと管理にはArgoワークフローを使用している。
2019年5月の最初のリリース時に比較すると、GitHub上で"easy"イシューのある推奨リポジトリの比率は、当初の40パーセントから70パーセントに増加した。それと同時に、プロジェクトメンテナによるオープンイシューの優先度付けやラベル付けの負荷も軽減されている。
将来的にGitHubは、データとMLモデルのトレーニングを繰り返すことによるイシューリコメンデーションの改善を計画している。さらに、プロジェクトメンテナに対して、マシンラーニングベースのレコメンデーションの有効化や排除を行うインターフェースを提供する予定である。