(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024047943
(43)【公開日】2024-04-08
(54)【発明の名称】情報処理装置、情報処理方法およびプログラム
(51)【国際特許分類】
G06F 8/73 20180101AFI20240401BHJP
G06N 20/00 20190101ALI20240401BHJP
【FI】
G06F8/73
G06N20/00
【審査請求】有
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2022153722
(22)【出願日】2022-09-27
(11)【特許番号】
(45)【特許公報発行日】2024-03-15
(71)【出願人】
【識別番号】399037405
【氏名又は名称】楽天グループ株式会社
(74)【代理人】
【識別番号】100109380
【弁理士】
【氏名又は名称】小西 恵
(74)【代理人】
【識別番号】100109036
【弁理士】
【氏名又は名称】永岡 重幸
(72)【発明者】
【氏名】ロヨラ パブロ
(72)【発明者】
【氏名】ラーマン エムディ モスタフィズ
(72)【発明者】
【氏名】蛭子 ▲たく▼磨
(72)【発明者】
【氏名】コンダパカ マノゥチ
(72)【発明者】
【氏名】アブロール サティアン
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BB03
5B376DA22
(57)【要約】 (修正有)
【課題】コードに関連する文書化を自動的かつ高精度に実行する情報処理装置、情報処理方法およびプログラムを提供する。
【解決手段】コード文書化装置1は、コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成部と、グラフ生成部が生成したグラフの複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習部と、第1の学習部により特徴ベクタが機械学習されたグラフを入力として、機械学習モデルを機械学習させる第2の学習部と、第2の学習部により機械学習させた学習済みの機械学習モデルに、メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成部と、を備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成部と、
前記グラフ生成部により生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習部と、
前記第1の学習部により前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させる第2の学習部と、
前記第2の学習部により機械学習させた学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成部と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記第1の学習部は、前記グラフの前記複数のノードのそれぞれの前記コード変更を入力として、半教師あり学習により、前記複数のノードのそれぞれの特徴ベクタを機械学習する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記第2の学習部は、前記グラフの前記複数のノードのそれぞれの前記コード変更および前記メッセージの対を教師データとして、前記機械学習モデルを機械学習させる
ことを特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記第2の学習部は、前記グラフの前記複数のノードのそれぞれの前記コード変更の特徴ベクタのコード特徴空間におけるアラインメントを、前記コード変更に対応する前記メッセージの特徴ベクタで補正するよう、前記機械学習モデルを機械学習させる
ことを特徴とする請求項1に記載の情報処理装置。
【請求項5】
前記第2の学習部は、所定の損失関数を用いて、前記所定の損失関数の損失がより小さくなるよう、前記機械学習モデルを機械学習させる
ことを特徴とする請求項1に記載の情報処理装置。
【請求項6】
前記第2の学習部は、前記グラフの前記複数のノードの前記コード変更の特徴ベクタと、前記コード変更に対応する前記メッセージの特徴ベクタとの間の損失を算出し、当該損失がより小さくなるよう、前記機械学習モデルを機械学習させる
ことを特徴とする請求項5に記載の情報処理装置。
【請求項7】
前記グラフ生成部は、前記グラフの前記複数のノードのうち、コード変更における依存関係を有するノード間をエッジにより接続し、前記エッジが前記ノード間の依存関係における距離を示すよう、前記グラフを生成する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項8】
前記グラフ生成部は、前記エッジが、ソースノードからデスティネーションノードへのシグナルの伝搬方向を示すよう、前記グラフを有向グラフとして生成する
ことを特徴とする請求項7に記載の情報処理装置。
【請求項9】
前記第1の学習部は、前記グラフの前記複数のノードのそれぞれをコード特徴空間上にマッピングし、前記複数のノードのそれぞれの特徴ベクタを、前記コード特徴空間で初期化する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項10】
前記第1の学習部は、前記グラフに対して、前記メッセージが未知であるノードを付加し、前記メッセージが未知であるノードが付加された前記グラフの各ノードの特徴ベクタを、前記コード空間で初期化する
ことを特徴とする請求項9に記載の情報処理装置。
【請求項11】
前記第1の学習部は、前記グラフの各ノードの特徴ベクタを、第1の機械学習モデルを用いて機械学習し、
前記第2の学習部は、前記第1の機械学習モデルとは異なる第2の機械学習モデルを機械学習させる
ことを特徴とする請求項1に記載の情報処理装置。
【請求項12】
情報処理装置が実行する情報処理方法であって、
コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するステップと、
生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習するステップと、
前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させるステップと、
機械学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するステップと、
を含むことを特徴とする情報処理方法。
【請求項13】
情報処理をコンピュータに実行させるための情報処理プログラムであって、該プログラムは、前記コンピュータに、
コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成処理と、
前記グラフ生成処理により生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習処理と、
前記第1の学習処理により前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させる第2の学習処理と、
前記第2の学習処理により機械学習させた学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成処理、
を含む処理を実行させるためのものであることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理方法およびプログラムに関し、特に、機械学習によりコードに関連した文書化を実行するための技術に関する。
【背景技術】
【0002】
ソフトウエアに求められる機能の多様化は、ソフトウエア開発の規模を拡大させるとともに、ソフトウエア開発を複雑化させている。
さらに、既存のソフトウエアには恒常的に新たな機能や機能拡張が求められており、これらの新機能や機能拡張は、より迅速に市場にリリースされなければならない。
このため、近年のソフトウエア開発はよりオープン化されており、1つのソフトウエア開発プロジェクトに多数かつ多様な開発者が分散環境において協調して関与する状況を生じさせている。
【0003】
このように、多数かつ多様な開発者が分散環境において協調的に関与するソフトウエア開発の状況下においては、ソースコードの変更や追加に関連して、ソースコードの当該変更や追加の内容(仕様)を自然言語で記述する文書化を行って、多数の開発者間で情報を共有することがとりわけ不可欠である。この文書化は、例えば、ソースコードとは別途の設計文書の作成やソースコードへのコメントの付与等により行うことができる。
【0004】
特許文献1は、ソフトウエアの変更が影響を与える範囲を特定する変更影響分析装置を開示する。
具体的には、特許文献1に開示される変更影響分析装置は、ソフトウエアの過去開発および今回開発における変更要求と、自然言語で記述された変更仕様と、変更仕様のソースコードとが対応付けて記載された変更仕様書に基づき、仕様の依存関係を表す仕様依存関係モデルを生成する。さらに、この変更影響分析装置は、生成された仕様依存関係モデルと、ソフトウエアのソースコードの依存関係を示すソースコード依存関係とに基づき、ソフトウエアのソースコードの一部に変更が加えられた場合に変更が影響を及ぼす範囲である変更影響範囲を特定する。
特許文献1に開示される変更影響分析装置はさらに、過去ソースコード、今回ソースコード、およびコミットログを入力として、ソースコードの改訂内容、ファイル名、コメント、およびコミットログを、ソースコードと対応付けて、変更仕様書として文書化することができる。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、ソフトウエア開発の時間的制約の下では、ソースコードの変更や追加自体が優先されることにより、当該変更や追加に伴う文書化が、往々にして不十分なものとなりがちである。
ここで、特許文献1は、変更仕様書を生成することができるものの、変更仕様書を作成するために、コミットログやソースコードに付与されたコメントが存在することを前提としている。このため、そもそもコミットログ中のメッセージやソースコードに付与されたコメント等による、ソースコードの変更や追加の仕様の自然言語による記述を欠く場合には、ソースコードへの対応付けができず、変更仕様書を作成することができない。
したがって、特許文献1の技術は、ソースコードの変更や追加の記述を欠く場合に文書化を補完するものとはいえない。
【0007】
このように、従来は、ソースコードの変更や追加の内容の自然言語による記述が不十分であると、当該ソースコードの変更や追加の内容やその影響範囲を、多数の開発者間で共有することが困難であった。
このような文書化の欠如や不十分さは、ソフトウエアの開発や保守の負荷を増大させるとともにその期間を長期化させ、ひいては、ソフトウエアの要求品質や要求納期が担保できなくなるおそれがあった。
【0008】
本発明は上記課題を解決するためになされたものであり、その目的は、コードに関連する文書化を自動的かつ高精度に実行することが可能な情報処理装置、情報処理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【0009】
上記課題を解決するために、本発明に係る情報処理装置の一態様は、コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成部と、前記グラフ生成部により生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習部と、前記第1の学習部により前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させる第2の学習部と、前記第2の学習部により機械学習させた学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成部と、を備える。
【0010】
本発明に係る情報処理方法の一態様は、情報処理装置が実行する情報処理方法であって、コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するステップと、生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習するステップと、前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させるステップと、学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するステップと、を含む。
【0011】
本発明に係る情報処理プログラムの一態様は、情報処理をコンピュータに実行させるための情報処理プログラムであって、該プログラムは、前記コンピュータに、コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成処理と、前記グラフ生成処理により生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習処理と、前記第1の学習処理により前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させる第2の学習処理と、前記第2の学習処理により機械学習させた学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成処理、を含む処理を実行させるためのものである。
【発明の効果】
【0012】
本発明によれば、コードに関連する文書化を自動的かつ高精度に実行することができる。
上記した本発明の目的、態様及び効果並びに上記されなかった本発明の目的、態様及び効果は、当業者であれば添付図面及び請求の範囲の記載を参照することにより下記の発明を実施するための形態から理解できるであろう。
【図面の簡単な説明】
【0013】
【
図1】
図1は、本発明の各実施形態に係るコード文書化装置の機能構成の一例を示すブロック図である。
【
図2】
図2は、本実施形態に係るコード文書化装置が実行するコード文書化処理の概略処理手順の一例を示すフローチャートである。
【
図3】
図3は、本実施形態に係るコード文書化装置のグラフ生成部が生成するソースコードの複数のコミットを表すグラフであって、既知のノードで構成されるグラフの一例を説明する概念図である。
【
図4】
図4は、
図3の既知のノードで構成されるグラフに対して、コード変更を記述するメッセージを欠く未知のノードが追加されたグラフの一例を説明する概念図である。
【
図5】
図5は、
図4のグラフをコード特徴空間で初期化した状態のグラフの一例を説明する概念図である。
【
図6】
図6は、学習済みグラフを用いて機械学習モデルを学習させる、コード文書化装置の学習実行部が実行する機械学習処理の一例を説明する概念図である。
【
図7】
図7は、学習済み機械学習モデルを用いて、コード文書化装置のメッセージ生成部が実行する未知のノードのメッセージを生成する処理の一例を説明する概念図である。
【
図8】
図8は、
図2のステップS5の機械学習モデルを学習させる処理の詳細処理手順の一例を示すフローチャートである。
【
図9】
図9は、機械学習モデルへのコード変更および対応するメッセージ入力による、メッセージの変更ベクタの生成処理の一例を示す概念図である。
【
図10】
図10は、
図9で生成されたメッセージの変更ベクタを用いた機械学習モデルによる補正処理の一例を示す概念図である。
【
図11】
図11は、本実施形態に係るコード文書化装置のハードウエア構成の一例を示すブロック図である。
【発明を実施するための形態】
【0014】
以下、添付図面を参照して、本発明を実施するための実施形態について詳細に説明する。以下に開示される構成要素のうち、同一機能を有するものには同一の符号を付し、その説明を省略する。なお、以下に開示される実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正または変更されるべきものであり、本発明は以下の実施形態に限定されるものではない。また、本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【0015】
本実施形態に係るコード文書化装置は、変更対象であるコードからグラフを生成し、生成されたグラフの複数のノードの複数の特徴ベクタを機械学習により学習し、複数の特徴ベクタが学習された学習済みのグラフを入力として機械学習モデルを学習させる。
本実施形態に係るコード文書化装置はまた、学習済みの機械学習モデルに未知のノードを入力して、当該ノードに対応するメッセージを生成することにより、コードを文書化する。
【0016】
以下では、本実施形態が、プログラミング言語で記述されるソフトウエアのソースコードを変更対象として、当該ソースコードに対するコミットを各ノードとする、複数のノードを有するグラフを生成し、生成されたグラフを用いて、複数段階の機械学習により、ソースコードの変更内容を自然言語で記述するメッセージを生成する例を説明するが、本実施形態はこれに限定されない。
本実施形態は、ソフトウエアのソースコードのようなプログラミング言語で記述されたコードのみならず、例えば、Wikipedia等のインターネット上で自由に閲覧および編集が可能なオンライン百科事典のような自然言語で記述されたコードを変更する場合にも、同様に適用可能である。
【0017】
したがって、本実施形態において、変更対象の「コード」とは、プログラミング言語および自然言語を含むあらゆる言語で記述された言語表現としてのコードを広く含む。
ソースコードを変更対象とする場合、ソースコードに対するコミットとは、ソースコードのバージョン管理において、ソースコードへの最新の変更をリポジトリに送信して当該変更を確定させる操作であり、確定された変更はリポジトリの履歴に保持される。他のユーザがリポジトリから更新またはチェックアウト操作を行うと、コミットされたソースコードの最新バージョンを取得することができる。
自然言語で記述されたコードを変更対象とする場合であっても同様に、このコミットをバージョン管理に利用することができる。
【0018】
ソースコードのコミットは、ソースコードに対するコード変更と、当該変更の内容(仕様)を自然言語で記述するメッセージとの対を含む。
ソースコードの変更の文書化とは、当該ソースコードに対するコード変更を記述するメッセージを生成することである。文書化により生成されたメッセージは、リポジトリにおけるコミットを補完するとともに、例えば、ソースコードとは別途の設計文書に記述されてもよく、ソースコード中にコメントとして付与されてもよい。
また、以下、ソースコードに対するコード変更は、ソースコードの変更、追加、および削除等のあらゆる更新を含むものとする。
【0019】
<コード文書化装置の機能構成>
図1は、本実施形態に係るコード文書化装置1の機能構成の一例を示すブロック図である。
図1に示すコード文書化装置1は、入力部11、グラフ生成部12、グラフ解析部13、学習実行部14、メッセージ生成部15、および出力部16を備える。
コード文書化装置1は、コード格納部3に格納されたソースコードのコミット群を取得し、取得されたソースコードのコミット群からグラフを生成し、生成されたグラフを用いて、言語(コード)ベースの機械学習モデル(以下、単に「機械学習モデル」という。)2を機械学習させる。
学習済みの機械学習モデル2は、ソースコードの変更を自然言語で記述するコミットのメッセージ部分を推論により生成する。
【0020】
コード文書化装置1は、PC(Personal Computer)等で構成されるクライアント装置(不図示)とネットワークを介して通信可能に接続してよい。この場合、コード文書化装置1はサーバに実装され、クライアント装置は、コード文書化装置1が外部と情報の入出力を実行する際のユーザインタフェースを提供してよく、また、コード文書化装置1の各コンポーネント11~16の一部または全部を備えてもよい。
【0021】
入力部11は、コード格納部3から、本実施形態に係るコード文書化処理において文書化すべきソースコードを取得して、取得されたソースコードのコミット群を、グラフ生成部12へ供給する。
【0022】
コード格納部3は、HDD(Hard Disk Drive)、SSD(Solid State Drive)等の不揮発性記憶装置で構成され、開発対象のソースコード、および当該ソースコードのコミットの時系列データを関連付けて格納する。ソースコードのコミットは、上述のとおり、ソースコードに対する変更と、当該変更の内容(仕様)を自然言語で記述するメッセージとの対を含む。コミットはさらに、コミット操作が実行された時点のタイムスタンプを含んでよい。
【0023】
コード格納部3は、開発対象のソースコードのバージョン管理システムのリポジトリの全部または一部であってよく、あるいは、このリポジトリと適宜連携してソースコードのコミット群をコード文書化装置1に供給してよい。
コード格納部3に格納されるソースコードのコミットに含まれるコード変更およびメッセージの対はそれぞれ、機械学習モデル2を事前学習させるための教師データとなる。 ソースコードのコミットに含まれるコード変更と対をなすメッセージが、機械学習モデル2の機械学習の推論における正解を示す。
【0024】
入力部11は、コード格納部3に予め格納されたソースコードのコミット群(以下、「コミットデータ」ともいう。)を読み出すことにより、ソースコードのコミット群を取得してもよく、あるいは、ソースコードのコミット群を記憶する同一のまたは異なる対向装置から通信I/Fを介してソースコードのコミット群を受信してもよい。
【0025】
入力部11はまた、コード文書化装置1において機械学習処理を実行するために必要な各種パラメータの入力を受け付ける。入力部11は、コード文書化装置1と通信可能に接続されるクライアント装置のユーザインタフェースを介して、各種パラメータの入力を受け付けてよい。
【0026】
グラフ生成部12は、入力部11から供給されるソースコードのコミット群からグラフGを生成する。
具体的には、グラフ生成部12は、入力部11から供給されるソースコードのコミット群のそれぞれに対して、対応するノードNを生成する。各ノードは、1つのコミットに含まれるコード変更とメッセージとの対を有する。
【0027】
グラフ生成部12が生成するグラフGは、複数のノードNを有し、ノード間をエッジEで接続したグラフである。各エッジEは、当該エッジEの両端のノードN、すなわち両端のコミットの間の依存関係(依存度)を示す。エッジEの両端のノードNの依存度が高いほど、エッジEの長さで示される両端のノードNの距離は短くなる。
【0028】
ノードNはその一端のノードNから他端のノードNへ情報を伝搬するシグナルを表してよい。すなわち、グラフ生成部12は、有向グラフGを生成してよい。
本実施形態において、コード文書化装置1は、このソースコードのコミット群の各コミットの間の依存関係を表すグラフGを用いて機械学習モデル2を学習させる。グラフ生成部12が生成するこのグラフの構造の詳細は、
図3を参照して後述する。
【0029】
グラフ解析部13は、グラフ生成部12により生成されたグラフGを解析して、当該グラフGを機械学習により最適化する。
具体的には、グラフ解析部13は、グラフ生成部12から供給されるグラフGをコード特徴空間にマッピングし、グラフGの各ノードNの特徴ベクタを初期化し、次に、初期化されたグラフに畳み込み演算等を適用して、グラフGの各ノードNの特徴ベクタを学習する。ここで、グラフGの各ノードNの特徴ベクタは、コード特徴空間上にマッピングされたグラフGの各ノードNが表すコミットの変更をベクタで示す変更ベクタである。
【0030】
本実施形態において、グラフ解析部13は、コミットのコード変更部分のみを用いた半教師あり学習により、グラフGの各ノードNの特徴ベクタを機械学習してよい。これにより、コード変更に対応するメッセージを持たない未知のノードをグラフに付加した際に、コード変更とメッセージとの対を有する既知のノードと未知のノードとの双方について、同様にコード特徴空間における特徴ベクタを学習することができる。
【0031】
学習実行部14は、グラフ解析部13により解析されたグラフGを入力として、機械学習モデル2を学習させる。
具体的には、学習実行部14は、グラフ解析部13により解析されたグラフGのうち、既知のノード、すなわち既知のコミットのコード変更とメッセージとの対を教師データとして、機械学習モデル2を学習させる。学習実行部14が実行するこの機械学習処理の詳細は、
図8から
図10を参照して後述する。
【0032】
メッセージ生成部15は、グラフ解析部13により解析されたグラフGを用いて学習実行部14により学習させた学習済み機械学習モデル2を用いて、未知のノード、すなわち未知のコミットについて、コード変更に対応するメッセージを推論により生成する。
【0033】
出力部16は、メッセージ生成部15により生成されたメッセージを出力する。出力部16により出力されるメッセージは、リポジトリに保持されるソースコードのコミットを補完するために使用されてよい。また、出力部16により出力されるメッセージは、例えば、ソースコードとは別途の設計文書に記述されてもよく、ソースコード中にコメントとして付与されてもよい。
出力部14はまた、メッセージ生成部15により生成されたメッセージを、対応するコード変更とともに、表示装置等を介して外部に表示出力してもよい。
【0034】
<コード文書化装置1が実行するコード文書化処理>
図2は、本実施形態に係るコード文書化装置1が実行するコード文書化処理の概略処理手順の一例を示すフローチャートである。
なお、
図2の各ステップは、コード文書化装置1のHDD等の記憶装置に記憶されたプログラムをCPUが読み出し、実行することで実現される。また、
図2示すフローチャートの少なくとも一部をGPUなどの他のハードウエアにより実現してもよい。ハードウエアにより実現する場合、例えば、所定のコンパイラを用いることで、各ステップを実現するためのプログラムからFPGA(Field Programmable Gate Array)上に自動的に専用回路を生成すればよい。また、FPGAと同様にしてGate Array回路を形成し、ハードウエアとして実現するようにしてもよい。また、ASIC(Application Specific Integrated Circuit)により実現するようにしてもよい。
【0035】
S1で、コード文書化装置1の入力部11は、コード格納部3から、ソースコードのコミット群であるコミットデータを取得する。
ソースコードのコミット群を構成する各コミットは、ソースコードに対する変更と、当該変更の内容(仕様)を自然言語で記述するメッセージとの対を含む。S1でコード格納部3から入力部11へ入力されるコミットデータは、コミットの時系列データである。
【0036】
S2で、コード文書化装置1のグラフ生成部12は、S1で入力部11により入力されたソースコードのコミットデータからグラフGを生成する。
図3は、グラフ生成部12が生成するグラフの構造の一例を説明する図である。
図3に示すグラフGは、ノードN1からN5を有する。複数のノードN1からN5のそれぞれが、1つのコミットを表す。1つのノードNに対して、対応するコミットのコード変更(d_i)およびコード変更の内容(仕様)を自然言語で記述するメッセージ(m_i)の対が、ラベルとして付与されている。
【0037】
複数のノードN1からN5のうち、依存関係を有するノードNの間は、それぞれエッジEで接続されている。すなわち、エッジEは、両端のノードN(すなわち、コミット)の間の、ソースコードレベルでの依存関係(依存度)を表す。
エッジEで表されるソースコードレベルでの依存関係は、例えば、あるコード変更と他のコード変更との間の共通度ないし類似度として把握することができる。例えば、ソースコードが一致する割合が多いほど、あるいはより多くの変数を共有しているほど、依存度が高いと判断することができる。エッジEが示すノードN間の依存関係はまた、コード変更に加えて、メッセージ間の共通度ないし類似度に基づいて把握されてよい。
また、ソースコードを作成した開発者や、当該開発者の所属企業等のエンティティが共通しているほど、依存度が高いと判断してもよい。
【0038】
エッジEは、その一端のノードNから他端のノードNへのシグナルの伝搬方向を表してよい。
図3では、ノードN1からノードN2およびN3へ、ノードN2からノードN3~N5へ、それぞれエッジEの接続方向が示されており、ソースノード(N1、N2)が有する情報、すなわちコード変更およびメッセージが、デスティネーションノード(N2~N5)へそれぞれシグナルとして伝搬されることが表されている。エッジEの長さで表される両端のノード間の距離が、両端のノード間の依存度を示す。
【0039】
本実施形態では、コード文書化装置1は、ソースコードのコミットデータから
図3に示すようなグラフGを生成し、このグラフGをコード特徴空間に配置し、グラフの各ノードNの特徴ベクタを機械学習により学習する。
そして、コード文書化装置1は、このように各ノードNの特徴ベクタを機械学習した学習済みのグラフGを用いて、コミットのメッセージを生成するデコーダとなる機械学習モデル2を学習させ、コード変更のみを有する未知のノードを学習済みの機械学習モデル2に入力して、当該ノードのメッセージを推定する。
【0040】
メッセージが未知であるコミットについて、例えば、Seq2Seq(Sequence-to-Sequence)等の系列変換モデルを用いて、翻訳問題としてメッセージ生成に対処し、コミットのコード変更シーケンスから当該コード変更に対応するメッセージシーケンスに変換する手法も考えられる。
しかしながら、このように翻訳問題としてメッセージ生成に対処した場合、あるコミットが他のコミットに及ぼす影響を考慮することができない。
【0041】
これに対して、本実施形態では、コード文書化装置1は、ソースコードのコミット間の依存関係を規定するグラフGを生成し、このグラフGをコード特徴空間にマッピングして、ソースコードのコミット間の依存度(距離)を機械学習することで、あるノードNのコミットの情報を、当該ノードNとエッジEにより接続される他の近隣ノードNに伝搬させていく。
このように機械学習させた学習済みのグラフGを入力として、機械学習モデル2を事前学習させ、学習済みの機械学習モデル2により未知のノードのメッセージを生成するので、他のコミットとの間の依存性を考慮して、高精度にコミットのメッセージを生成することができる。
【0042】
図2に戻り、S3で、コード文書化装置1のグラフ解析部13は、S2でグラフ生成部12により生成されたグラフGをコード特徴空間上にマッピングして、当該コード空間上にマッピングされた複数のノードNのそれぞれの特徴ベクタを初期化する。
図4は、
図3の既知のノードで構成されるグラフGに対して、コード変更に対応するメッセージを欠く未知のノードが追加されたグラフGの一例を説明する概念図である。
【0043】
図3に示す当初のグラフGは、すべてのノードN1~N5が既知のノードであり、すなわち、ソースコードのコミットのコード変更とメッセージとの対で、すべてのノードN1~N5が完全にラベル付けされている。この当初のグラフに対して、
図4に示すように、グラフ生成部12により、未知のノードN6が追加されたものとする。
この未知のノードN6は、コミットのコード変更(d_x)のみを有し、当該コード変更に対するメッセージを持たないノードである。
【0044】
図5は、
図4のグラフGをコード特徴空間上で初期化した状態のグラフGの一例を示す概念図である。
S3で、グラフ解析部13は、
図4に示すように未知のノードが追加されたグラフGを、
図5に示すように、n次元のコード特徴空間(言語特徴空間)にマッピングし、既知のノードN1~N5、および未知のノードN6を含むグラフGのすべてのノードの特徴ベクタv1~v6をコード空間上で初期化する。
【0045】
グラフ解析部13は、事前学習させたコードベースの機械学習モデル、例えば、BERT(Bidirectional Encoder Representations from Transformers)等を用いてコード特徴空間へのマッピングを実行してよいが、本実施形態はこれに限定されず、自然言語処理等のコード処理に適用可能なあらゆる機械学習モデルが使用されてよい。
【0046】
図2に戻り、S4で、コード文書化装置1のグラフ解析部13は、S3でコード特徴空間上に初期化されたグラフGの既知のノードN1~N5、および未知のノードN6を含むグラフGのすべてのノードの特徴ベクタv1~v6を機械学習していく。
【0047】
グラフ解析部13は、例えば、GNN(Graph Neural Network)等を用いてグラフGの対象ノードNの周辺あるいはグラフ全体の情報を畳み込み演算していくことによって、グラフの各ノードの特徴ベクタv1~V6を機械学習してよい。
しかしながら、本実施形態はこれに限定されず、例えば、メッセージ伝達アルゴリズム(Message Passing Algorithm)等のグラフ表現の機械学習に適用可能なあらゆる機械学習モデルやアルゴリズムが使用されてよい。
【0048】
本実施形態では、上述したとおり、グラフ解析部13は、各ノードN1~N6のコミットのコード変更部分(d_i)のみを用いて、グラフの各ノードN1~N6の特徴ベクタv1~v6を学習していく。
【0049】
S5で、コード文書化装置1の学習実行部14は、グラフ解析部13により各ノードN1~N6の特徴ベクタv1~v6が機械学習されたグラフGを入力として、機械学習モデル2を事前学習させる。
図6は、グラフGを用いて機械学習モデル2を事前学習させる、学習実行部14が実行する機械学習の一例を説明する概念図である。
【0050】
図6を参照して、学習実行部14は、機械学習モデル2を、未知のノードについてコード変更に対応するメッセージを生成するデコーダとして学習させるため、S4でグラフ解析部13が出力する学習済みのグラフGのうち、既知のノードNにラベル付けされたコード変更(d_i)と対応するメッセージ(m_i)との対を教師データとして、機械学習モデル2に入力する。学習実行部14はまた、S4で学習されたグラフの特徴ベクタvを機械学習モデル2に入力する。
【0051】
なお、S5において学習実行部14が事前学習させる機械学習モデル2は、S3でグラフ解析部13がグラフGの各ノードNの特徴ベクタを初期化する際に使用する機械学習モデルと同じであってもよく、あるいはデコーダの機能を有する異なる機械学習モデルであってもよい。
【0052】
S5において、学習実行部14は、機械学習モデル2が出力するコミットのメッセージ(m_i´)を、所定の損失関数を使用して評価する。この損失関数は、あるノードNの機械学習モデル2に入力されたメッセージ(m_i)と機械学習モデル2から出力されるメッセージ(m_i´)との間の損失を算出するので、学習実行部14は、その損失がより小さくなるよう、機械学習モデル2を事前学習させていく。
S5における損失関数を用いた機械学習モデル2の機械学習処理の詳細は、
図8から
図10を参照して後述する。
【0053】
S6で、コード文書化装置1のメッセージ生成部15は、S5で学習実行部14により事前学習させた学習済みの機械学習モデル2を用いて、未知のノードについて、コード変更に対応するメッセージを推論により生成する。
図7は、学習済みの機械学習モデル2を用いて、メッセージ生成部15が実行する未知のノードNに対するメッセージの生成の一例を説明する概念図である。
【0054】
図7を参照して、メッセージ生成部15は、未知のノードN6、すなわちコミットのコード変更(d_x)のみを有し、当該コード変更を記述するメッセージ(m_x)を欠くノードN6を、当該ノードN6の機械学習された特徴ベクタv6とともに、学習済み機械学習モデル2に入力する。
学習済みの機械学習モデル2は、入力されたコード変更(d_x)に対応する未知のノードN6のメッセージ(m_i´)を出力する。
【0055】
本実施形態では、S4でグラフGの各ノードNの特徴ベクタvが機械学習されたグラフGを用いて、メッセージ生成部15が、未知のノードのコミットのメッセージ部分(m_i´)を生成する。このため、特徴ベクタvを介して、コード特徴空間上で距離(依存度)が近い近隣ノードの埋め込み情報が、推定対象ノード(未知のノード)に伝搬されている。
【0056】
したがって、依存関係を持つ他のコミットのコード変更とメッセージとの対の埋め込み情報(他のノードNの埋め込み情報)と、他のノードに対する距離(意味上の近接性や依存度)の情報(他のノードNへのエッジEの情報)を考慮して、高精度にコミットのメッセージを推定することができる。
【0057】
メッセージ生成部15は、S6で生成された推論結果であるコミットのメッセージ(m_i´)の全部または一部を正解ラベルとして機械学習モデル2に入力して、機械学習モデル2を再帰的に再学習させ、機械学習モデル2を強化してもよい。
一方、上記のとおり、S4でグラフ解析部13がグラフGの特徴ベクタvを学習する際には、グラフGに付与されたラベルのうち、コード変更(d_i)のラベルのみが使用され、既知のノードのメッセージ(m_i)のラベルは使用されない。
本実施形態では、このような半教師あり学習により、コミットデータから生成されたグラフGを機械学習し、かつ推論結果を正解ラベル(教師データ)として機械学習モデル2を再学習させるので、既知のコミットの教師データが十分でない場合であっても、高精度でコミットのメッセージを生成することができる。
【0058】
S7で、コード文書化装置1の出力部16は、メッセージ生成部15により生成されたメッセージを出力する。上記のとおり、出力部16により出力されるメッセージは、リポジトリに保持されるソースコードのコミットを補完するために使用されてよく、また、例えば、ソースコードとは別途の設計文書に記述されてもよく、ソースコード中にコメントとして付与されてもよい。
【0059】
<損失関数を用いた機械学習モデルの学習処理の詳細>
以下、
図8から
図10を参照して、コード文書化装置1の学習実行部14が実行する、損失関数を用いた機械学習モデル2の機械学習処理の詳細を説明する。
図8は、
図2のステップS5の機械学習モデル2を機械学習させる処理の詳細処理手順の一例を示すフローチャートである。
S51で、コード文書化装置1の学習実行部14は、ソースコードのコミットのコード変更とメッセージとの対を含むコミットデータを、教師データとして機械学習モデル2に入力して、機械学習モデル2を事前学習させる。
具体的には、S51で機械学習モデル2に入力されるのは、
図2のS4で各ノードNの特徴ベクタvが学習されたグラフGのうち、既知のノードN、すなわち、当該既知のノードにラベル付けされたコミットのコード変更(d_i)とメッセージ(m_i)との対、および当該既知のノードに対応して最適化されたコード特徴空間における特徴ベクタvである。
【0060】
S52で、機械学習モデル2は、S51で入力された既知のノードNおよび特徴ベクタvに対応するメッセージ(m_i´)を機械学習する。
S53で、コード文書化装置1の学習実行部14は、損失関数(Loss(m_i,m_i´))を用いて、機械学習モデル2に教師データ(正解ラベル)として入力されたノードNのメッセージ(m_i)と、機械学習モデル2が推定して生成したノードNのメッセージ(m_i´)との間の損失を算出する。
【0061】
S54で、コード文書化装置1の学習実行部14は、損失関数により算出された正解メッセージ(m_i)と推定されたメッセージ(m_i´)との間の損失が、所定の収束条件を満たすまで(S54:N)、例えば、所定の閾値以下となるまで繰り返す。損失関数により算出された正解メッセージ(m_i)と推定されたメッセージ(m_i´)との間の損失が所定の収束条件を満たすと判定されると(S54:Y)、
図8の機械学習処理が終了して、
図2のS6に進む。
【0062】
以下、
図9および
図10を参照して、本実施形態において学習実行部14が実行する、損失関数を用いた機械学習モデル2の評価手法につき詳述する。
学習実行部14は、機械学習モデル2を事前学習させる際に、例えば、クロスエントロピー損失を用いて、機械学習モデル2が出力するメッセージ(m_i´)の推定精度を評価してよい。クロスエントロピーにより、機械学習モデル2が出力する推論したデータの確率分布の、教師データ(正解ラベル)の確率分布に対する近似度を損失として算出することができ、両者が近似するほど損失が小さくなる。ただし、学習実行部14が利用可能な損失関数はクロスエントロピー損失に限定されず、例えば、二乗誤差等、他の損失を評価する関数を用いてもよい。
【0063】
本実施形態において、学習実行部14は、クロスエントロピー損失関数によりメッセージ(m_i´)の推定精度を評価する際に、ソースコードのコード変更の特徴ベクタのコード特徴空間におけるアラインメントを、当該コード変更に対応するメッセージからのシグナルを用いて補正する。
【0064】
図9は、機械学習モデル2への入出力を模式的に示す概念図である。
図9を参照して、
図8のS51において、学習実行部14は、機械学習モデル2に対して、グラフGの各ノードNの参照部分である時点tにおけるコード変更(c_t)と、当該コード変更(c_t)に対応して記述されたメッセージ(m)を入力する。
S52およびS53において、機械学習モデル2は、メッセージの特徴ベクタ(v_m)を機械学習する。
【0065】
図10は、
図9で生成されたメッセージの特徴ベクタを用いたコード変更の特徴ベクタのコード特徴空間におけるアラインメントの補正を説明する概念図である。
図10を参照して、学習実行部14は、機械学習モデル2が機械学習するメッセージの特徴ベクタ(v_m)が、ある時点tにおけるコード変更(c_t)を始点とし、時系列上で次の時点t+1におけるコード変更(c_t+1)に向かうように、メッセージの特徴ベクタ(v_m)を機械学習する。
【0066】
すなわち、本実施形態において、学習実行部14は、コード変更の特徴ベクタ(v_di)が、メッセージの特徴ベクタ(v_m)にできるだけ近づくよう、機械学習モデル2を機械学習させる。
したがって、本実施形態におけるクロスエントロピー損失は、コード変更とメッセージの特徴ベクタ間の損失Lvとして以下の式1により算出される。
Lv=cos(v_m,v_di) (式1)
機械学習モデル2のトータルのクロスエントロピー損失は、以下の式2で表されることになる。
L_T=CE+Lv (式2)
【0067】
このように、本実施形態に係るコード文書化装置1は、学習済みのグラフGを入力として、クロスエントロピー損失関数を用いて、コミットのコード変更の特徴ベクタと、対応するメッセージの特徴ベクタとの間の損失がより小さくなるよう、機械学習モデル2を事前学習させる。したがって、他のコミットとの間の依存関係を考慮し、かつ、コード変更とメッセージの変更との間の相関を考慮して、より高精度にコミットのメッセージを生成することができる。
【0068】
以上説明したように、本実施形態によれば、コード文書化装置は、変更対象であるコードのコミット群からグラフを生成し、生成されたグラフの複数のノードの複数の特徴ベクタを機械学習により学習し、複数の特徴ベクタが機械学習されたグラフを入力として機械学習モデルを事前学習させる。
コード文書化装置はまた、学習済みの機械学習モデルにグラフの未知のノードを入力して、当該未知のノードに対応するメッセージを生成することにより、コードを文書化する。
【0069】
これにより、例えばソースコードなどのコードに対する変更を記述するメッセージを自動的かつ高精度に生成することができる。したがって、コード変更に伴う文書化をより効率的に補完することができ、協調的なソフトウエア開発環境における品質向上に資する。
【0070】
<コード文書化装置のハードウエア構成>
図11は、本実施形態に係るコード文書化置1のハードウエア構成の非限定的一例を示す図である。
本実施形態に係るコード文書化装置1は、単一または複数の、あらゆるコンピュータ、モバイルデバイス、または他のいかなる処理プラットフォーム上にも実装することができる。
図11を参照して、コード文書化装置1は、単一のコンピュータに実装される例が示されているが、本実施形態に係るコード文書化装置1は、複数のコンピュータを含むコンピュータシステムに実装されてよい。複数のコンピュータは、有線または無線のネットワークにより相互通信可能に接続されてよい。
【0071】
図15に示すように、コード文書化装置1は、CPU111と、ROM112と、RAM113と、HDD114と、入力部115と、表示部116と、通信I/F117と、システムバス118とを備えてよい。コード文書化装置1はまた、外部メモリを備えてよい。
CPU(Central Processing Unit)111は、コード文書化装置1における動作を統括的に制御するものであり、データ伝送路であるシステムバス118を介して、各構成部(112~117)を制御する。なお、CPU111に替えて、またはこれに加えて、コード文書化装置1は、GPU(Graphics Processing Unit)を備え、このGPUにより、機械学習モデル2等の事前学習や推論処理を実行してもよい。
【0072】
ROM(Read Only Memory)112は、CPU111が処理を実行するために必要な制御プログラム等を記憶する不揮発性メモリである。なお、当該プログラムは、HDD(Hard Disk Drive)114、SSD(Solid State Drive)等の不揮発性メモリや着脱可能な記憶媒体(不図示)等の外部メモリに記憶されていてもよい。
RAM(Random Access Memory)113は、揮発性メモリであり、CPU111の主メモリ、ワークエリア等として機能する。すなわち、CPU111は、処理の実行に際してROM112から必要なプログラム等をRAM113にロードし、当該プログラム等を実行することで各種の機能動作を実現する。
【0073】
HDD114は、例えば、CPU111がプログラムを用いた処理を行う際に必要な各種データや各種情報等を記憶している。また、HDD114には、例えば、CPU111がプログラム等を用いた処理を行うことにより得られた各種データや各種情報等が記憶される。
入力部115は、キーボードやマウス等のポインティングデバイスにより構成される。
表示部116は、液晶ディスプレイ(LCD)等のモニターにより構成される。表示部116は、機械学習処理で使用される各種パラメータや、他の装置との通信で使用される通信パラメータ等をコード文書化装置1へ指示入力するためのユーザインタフェースであるGUI(Graphical User Interface)を提供してよい。
【0074】
通信I/F117は、コード文書化装置1と外部装置との通信を制御するインタフェースである。
通信I/F117は、ネットワークとのインタフェースを提供し、ネットワークを介して、外部装置との通信を実行する。通信I/F117を介して、外部装置との間で各種データや各種パラメータ等が送受信される。本実施形態では、通信I/F117は、イーサネット(登録商標)等の通信規格に準拠する有線LAN(Local Area Network)や専用線を介した通信を実行してよい。ただし、本実施形態で利用可能なネットワークはこれに限定されず、無線ネットワークで構成されてもよい。この無線ネットワークは、Bluetooth(登録商標)、ZigBee(登録商標)、UWB(Ultra Wide Band)等の無線PAN(Personal Area Network)を含む。また、Wi-Fi(Wireless Fidelity)(登録商標)等の無線LAN(Local Area Network)や、WiMAX(登録商標)等の無線MAN(Metropolitan Area Network)を含む。さらに、LTE/3G、4G、5G等の無線WAN(Wide Area Network)を含む。なお、ネットワークは、各機器を相互に通信可能に接続し、通信が可能であればよく、通信の規格、規模、構成は上記に限定されない。
【0075】
図1に示すコード文書化装置1の各要素のうち少なくとも一部の機能は、CPU111がプログラムを実行することで実現することができる。ただし、
図1に示すコード文書化装置1の各要素のうち少なくとも一部の機能が専用のハードウエアとして動作するようにしてもよい。この場合、専用のハードウエアは、CPU111の制御に基づいて動作する。
【0076】
なお、上記において特定の実施形態が説明されているが、当該実施形態は単なる例示であり、本発明の範囲を限定する意図はない。本明細書に記載された装置及び方法は上記した以外の形態において具現化することができる。また、本発明の範囲から離れることなく、上記した実施形態に対して適宜、省略、置換及び変更をなすこともできる。かかる省略、置換及び変更をなした形態は、請求の範囲に記載されたもの及びこれらの均等物の範疇に含まれ、本発明の技術的範囲に属する。
【0077】
(本開示の実施形態)
本開示は以下の実施形態を含む。
[1]コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成部と、前記グラフ生成部により生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習部と、前記第1の学習部により前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させる第2の学習部と、前記第2の学習部により機械学習させた学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成部と、を備えることを特徴とする情報処理装置。
【0078】
[2]前記第1の学習部は、前記グラフの前記複数のノードのそれぞれの前記コード変更を入力として、半教師あり学習により、前記複数のノードのそれぞれの特徴ベクタを機械学習することを特徴とする[1]に記載の情報処理装置。
【0079】
[3]前記第2の学習部は、前記グラフの前記複数のノードのそれぞれの前記コード変更および前記メッセージの対を教師データとして、前記機械学習モデルを機械学習させる ことを特徴とする[1]または[2]に記載の情報処理装置。
【0080】
[4]前記第2の学習部は、前記グラフの前記複数のノードのそれぞれの前記コード変更の特徴ベクタのコード特徴空間におけるアラインメントを、前記コード変更に対応する前記メッセージの特徴ベクタで補正するよう、前記機械学習モデルを機械学習させることを特徴とする[1]から[3]のいずれかに記載の情報処理装置。
【0081】
[5]前記第2の学習部は、所定の損失関数を用いて、前記所定の損失関数の損失がより小さくなるよう、前記機械学習モデルを機械学習させることを特徴とする[1]から[4]のいずれかに記載の情報処理装置。
【0082】
[6]前記第2の学習部は、前記グラフの前記複数のノードの前記コード変更の特徴ベクタと、前記コード変更に対応する前記メッセージの特徴ベクタとの間の損失を算出し、当該損失がより小さくなるよう、前記機械学習モデルを機械学習させることを特徴とする[5]に記載の情報処理装置。
【0083】
[7]前記グラフ生成部は、前記グラフの前記複数のノードのうち、コード変更における依存関係を有するノード間をエッジにより接続し、前記エッジが前記ノード間の依存関係における距離を示すよう、前記グラフを生成することを特徴とする[1]から[6]のいずれかに記載の情報処理装置。
【0084】
[8]前記グラフ生成部は、前記エッジが、ソースノードからデスティネーションノードへのシグナルの伝搬方向を示すよう、前記グラフを有向グラフとして生成することを特徴とする[7]に記載の情報処理装置。
【0085】
[9]前記第1の学習部は、前記グラフの前記複数のノードのそれぞれをコード特徴空間上にマッピングし、前記複数のノードのそれぞれの特徴ベクタを、前記コード特徴空間で初期化することを特徴とする[1]から[8]のいずれかに記載の情報処理装置。
【0086】
[10]前記第1の学習部は、前記グラフに対して、前記メッセージが未知であるノードを付加し、前記メッセージが未知であるノードが付加された前記グラフの各ノードの特徴ベクタを、前記コード空間で初期化することを特徴とする[9]に記載の情報処理装置。
【0087】
[11]前記第1の学習部は、前記グラフの各ノードの特徴ベクタを、第1の機械学習モデルを用いて機械学習し、前記第2の学習部は、前記第1の機械学習モデルとは異なる第2の機械学習モデルを機械学習させることを特徴とする[1]から[10]のいずれかに記載の情報処理装置。
【0088】
[12]情報処理装置が実行する情報処理方法であって、コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するステップと、生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習するステップと、前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させるステップと、機械学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するステップと、を含むことを特徴とする情報処理方法。
【0089】
[13]情報処理をコンピュータに実行させるための情報処理プログラムであって、該プログラムは、前記コンピュータに、コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成処理と、前記グラフ生成処理により生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習処理と、前記第1の学習処理により前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習させる第2の学習処理と、
前記第2の学習処理により機械学習させた学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成処理、を含む処理を実行させるためのものであることを特徴とする情報処理プログラム。
【符号の説明】
【0090】
1…コード文書化装置、2…機械学習モデル、3…コード格納部、11…入力部、12…グラフ生成部、13…グラフ解析部、14…学習実行部、15…メッセージ生成部、16…出力部、111…CPU、112…ROM、113…RAM、114…HDD、115…入力部、116…表示部、117…通信I/F、118…システムバス
【手続補正書】
【提出日】2023-12-12
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成部と、
前記グラフ生成部により生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習部と、
前記第1の学習部により前記特徴ベクタが機械学習された前記グラフの前記複数のノードのそれぞれの前記コード変更および前記メッセージの対を教師データとして、機械学習モデルを機械学習する第2の学習部と、
前記第2の学習部により機械学習された学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成部と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記第1の学習部は、前記グラフの前記複数のノードのそれぞれの前記コード変更を入力として、半教師あり学習により、前記複数のノードのそれぞれの特徴ベクタを機械学習する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記第2の学習部は、前記グラフの前記複数のノードのそれぞれの前記コード変更の特徴ベクタのコード特徴空間におけるアラインメントを、前記コード変更に対応する前記メッセージの特徴ベクタで補正するよう、前記機械学習モデルを機械学習する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記第2の学習部は、所定の損失関数を用いて、前記所定の損失関数の損失がより小さくなるよう、前記機械学習モデルを機械学習する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項5】
前記第2の学習部は、前記グラフの前記複数のノードの前記コード変更の特徴ベクタと、前記コード変更に対応する前記メッセージの特徴ベクタとの間の損失を算出し、当該損失がより小さくなるよう、前記機械学習モデルを機械学習する
ことを特徴とする請求項4に記載の情報処理装置。
【請求項6】
前記グラフ生成部は、前記グラフの前記複数のノードのうち、コード変更における依存関係を有するノード間をエッジにより接続し、前記エッジが前記ノード間の依存関係における距離を示すよう、前記グラフを生成する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項7】
前記グラフ生成部は、前記エッジが、ソースノードからデスティネーションノードへのシグナルの伝搬方向を示すよう、前記グラフを有向グラフとして生成する
ことを特徴とする請求項6に記載の情報処理装置。
【請求項8】
前記第1の学習部は、前記グラフの前記複数のノードのそれぞれをコード特徴空間上にマッピングし、前記複数のノードのそれぞれの特徴ベクタを、前記コード特徴空間で初期化する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項9】
前記第1の学習部は、前記グラフに対して、前記メッセージが未知であるノードを付加し、前記メッセージが未知であるノードが付加された前記グラフの各ノードの特徴ベクタを、前記コード特徴空間で初期化する
ことを特徴とする請求項8に記載の情報処理装置。
【請求項10】
前記第1の学習部は、前記グラフの各ノードの特徴ベクタを、第1の機械学習モデルを用いて機械学習し、
前記第2の学習部は、前記第1の機械学習モデルとは異なる第2の機械学習モデルを機械学習する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項11】
情報処理装置が実行する情報処理方法であって、
コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するステップと、
生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習するステップと、
前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習するステップと、
機械学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するステップと、
を含むことを特徴とする情報処理方法。
【請求項12】
情報処理をコンピュータに実行させるための情報処理プログラムであって、該プログラムは、前記コンピュータに、
コード変更および当該コード変更に対応するメッセージの対をそれぞれ有する複数のノードからグラフを生成するグラフ生成処理と、
前記グラフ生成処理により生成された前記グラフの前記複数のノードのそれぞれについて特徴ベクタを機械学習する第1の学習処理と、
前記第1の学習処理により前記特徴ベクタが機械学習された前記グラフを入力として、機械学習モデルを機械学習する第2の学習処理と、
前記第2の学習処理により機械学習された学習済みの前記機械学習モデルに、前記メッセージが未知であるノードを入力して、当該ノードに対応するメッセージを生成するメッセージ生成処理、
を含む処理を実行させるためのものであることを特徴とする情報処理プログラム。