(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-15
(45)【発行日】2024-10-23
(54)【発明の名称】移行先API推定装置、移行先API推定方法及びプログラム
(51)【国際特許分類】
G06F 8/76 20180101AFI20241016BHJP
G06F 8/65 20180101ALI20241016BHJP
【FI】
G06F8/76
G06F8/65
(21)【出願番号】P 2021204264
(22)【出願日】2021-12-16
【審査請求日】2024-01-29
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】110004381
【氏名又は名称】弁理士法人ITOH
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100124844
【氏名又は名称】石原 隆治
(72)【発明者】
【氏名】山口 大輔
(72)【発明者】
【氏名】ズェミン トウ
【審査官】松平 英
(56)【参考文献】
【文献】特開2012-113536(JP,A)
【文献】特開2004-246690(JP,A)
【文献】国際公開第2021/245950(WO,A1)
【文献】国際公開第2021/074990(WO,A1)
【文献】米国特許出願公開第2020/133690(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/38
8/60-8/77
9/44-9/445
9/451
18/00-18/40
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
移行元APIと、前記移行元APIの移行先の候補である候補APIとのそれぞれのシグネチャの埋め込みを計算し、計算された2つの埋め込み間の第1の類似度を計算するように構成されている第1の計算部と、
前記移行元APIと前記候補APIとのそれぞれのソースコードの埋め込みを計算し、計算された2つの埋め込み間の第2の類似度を計算するように構成されている第2の計算部と、
前記第1の類似度及び前記第2の類似度に基づいて、前記候補APIが前記移行元APIの移行先であるか否かを判定するように構成されている判定部と、
有することを特徴とする移行先API推定装置。
【請求項2】
前記第1の計算部は、更に、前記移行元APIと前記候補APIのうち、説明文が有るAPIについては、当該APIのシグネチャと説明文とを含む文字列の埋め込みを計算するように構成されている、
ことを特徴とする請求項1記載の移行先API推定装置。
【請求項3】
前記判定部は、前記第1の類似度と前記第2の類似度とを線形結合した結果に基づいて、前記候補APIが前記移行元APIの移行先であるか否かを判定するように構成されている、
ことを特徴とする請求項1又は2記載の移行先API推定装置。
【請求項4】
前記線形結合における前記第1の類似度及び前記第2の類似度に対する重み係数を、移行元APIと移行先のAPIとのペアを含む教師データに基づいて学習するように構成されている学習部、
を有することを特徴とする請求項3記載の移行先API推定装置。
【請求項5】
移行元APIと、前記移行元APIの移行先の候補である候補APIとのそれぞれのシグネチャの埋め込みを計算し、計算された2つの埋め込み間の第1の類似度を計算する第1の計算手順と、
前記移行元APIと前記候補APIとのそれぞれのソースコードの埋め込みを計算し、計算された2つの埋め込み間の第2の類似度を計算する第2の計算手順と、
前記第1の類似度及び前記第2の類似度に基づいて、前記候補APIが前記移行元APIの移行先であるか否かを判定する判定手順と、
コンピュータが実行することを特徴とする移行先API推定方法。
【請求項6】
移行元APIと、前記移行元APIの移行先の候補である候補APIとのそれぞれのシグネチャの埋め込みを計算し、計算された2つの埋め込み間の第1の類似度を計算する第1の計算手順と、
前記移行元APIと前記候補APIとのそれぞれのソースコードの埋め込みを計算し、計算された2つの埋め込み間の第2の類似度を計算する第2の計算手順と、
前記第1の類似度及び前記第2の類似度に基づいて、前記候補APIが前記移行元APIの移行先であるか否かを判定する判定手順と、
コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、移行先API推定装置、移行先API推定方法及びプログラムに関する。
【背景技術】
【0002】
ライブラリはソフトウェア開発で広く利用されている。ライブラリの利用にあたっては、新版の利用又は新版へのアップデートが推奨されている。しかし、新版から非推奨化又は消去されてしまったアプリケーションプログラムインターフェース(API)の代替となる移行先のAPIが示されていないことがある。移行先のAPIが示されていたとしても、示され方はライブラリやAPI毎に様々である。例えば、APIのドキュメント内に移行先のAPIが示されている場合や、コミットメッセージ、リリースノート、又は技術系のSNSやブログ等に移行先のAPIが示されている場合もある。そのため、移行先のAPIの特定には情報検索・収集などの多くの労力が必要とされる。これはライブラリのアップデートを妨げる要因となっている。
【0003】
従来、APIの移行先として有限個の候補が与えられた際に、移行元のAPI、移行先候補のAPIのそれぞれのシグネチャとAPIの説明文に基づいて、当該候補が移行先のAPIとして適切かを判定する技術がある(非特許文献1)。
【先行技術文献】
【非特許文献】
【0004】
【文献】Alrubaye, H., Mkaouer, M. W., Khokhlov, I., Reznik, L., Ouni, A., and Mcgoff, J." Learning to recommend third-party library migration opportunities at the api level". Applied Soft Computing 90 (2020), 106140.
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、APIに説明文が与えられていない場合は多い。したがって、説明文が与えられていないAPIが存在する場合に、非特許文献1の技術を利用するのは困難である。
【0006】
本発明は、上記の点に鑑みてなされたものであって、説明文が与えられていないAPIが存在する場合でも或るAPIの移行先のAPIを推定可能とすることを目的とする。
【課題を解決するための手段】
【0007】
そこで上記課題を解決するため、移行先API推定装置は、移行元APIと、前記移行元APIの移行先の候補である候補APIとのそれぞれのシグネチャの埋め込みを計算し、計算された2つの埋め込み間の第1の類似度を計算するように構成されている第1の計算部と、前記移行元APIと前記候補APIとのそれぞれのソースコードの埋め込みを計算し、計算された2つの埋め込み間の第2の類似度を計算するように構成されている第2の計算部と、前記第1の類似度及び前記第2の類似度に基づいて、前記候補APIが前記移行元APIの移行先であるか否かを判定するように構成されている判定部と、有する。
【発明の効果】
【0008】
説明文が与えられていないAPIが存在する場合でも或るAPIの移行先のAPIを推定可能とすることができる。
【図面の簡単な説明】
【0009】
【
図1】本発明の実施の形態における移行先API推定装置10のハードウェア構成例を示す図である。
【
図2】本発明の実施の形態における移行先API推定装置10の機能構成例を示す図である。
【
図4】機械学習による重み係数θの決定処理の処理手順の一例を説明するためのフローチャートである。
【
図5】移行先APIの推定処理の処理手順の一例を説明するためのフローチャートである。
【
図6】シグネチャ及びボディを説明するための図である。
【
図7】判定部11のインスタンスがコピーされた状態を示す図である。
【発明を実施するための形態】
【0010】
以下、図面に基づいて本発明の実施の形態を説明する。
図1は、本発明の実施の形態における移行先API推定装置10のハードウェア構成例を示す図である。
図1の移行先API推定装置10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、プロセッサ104、及びインタフェース装置105等を有する。
【0011】
移行先API推定装置10での処理を実現するプログラムは、CD-ROM等の記録媒体101によって提供される。プログラムを記憶した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【0012】
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。プロセッサ104は、CPU若しくはGPU(Graphics Processing Unit)、又はCPU及びGPUであり、メモリ装置103に格納されたプログラムに従って移行先API推定装置10に係る機能を実行する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。
【0013】
図2は、本発明の実施の形態における移行先API推定装置10の機能構成例を示す図である。
図2に示されるように、移行先API推定装置10は、判定部11及び学習部12を有する。これら各部は、移行先API推定装置10にインストールされた1以上のプログラムが、プロセッサ104に実行させる処理により実現される。
【0014】
判定部11は、移行元となるAPI(以下、「移行元API」という。)の情報と、そのAPIの移行先(以下、「移行先API」という。)の有限個の各候補(以下、「候補API」とい。)の情報とを入力とし、各候補APIについて、移行先APIであるか否かを判定する。APIの情報(以下、「API情報」という。)とは、当該APIの定義を与えるソースコード(以下、単位「ソースコード」という。)及びシグネチャの組である。
【0015】
但し、移行元API及び候補API群の中で、一部のAPI又は全部のAPIのAPI情報は、自然言語による当該APIの説明文(以下、単に「説明文」という。)を更に含んでもよい。
【0016】
学習部12は、判定部11が用いるパラメータ(係数)の値の学習を行う。
【0017】
図3は、判定部11の構成例を示す図である。
図3において、判定部11は、説明文・シグネチャ類似度計算部111、コード類似度計算部112、線形結合部113及び分類部114を含む。
【0018】
説明文・シグネチャ類似度計算部111は、移行元API及び1つの候補APIのそれぞれの説明文及びシグネチャを接続した文字列の埋め込みを計算し、計算された2つの埋め込み間の類似度(余弦類似度)を計算する。なお、説明文は必須の要素ではないため、説明文及びシグネチャを接続した文字列の埋め込みは、シグネチャのみを含む文字列の埋め込みである可能性もある。
【0019】
コード類似度計算部112は、移行元API及び1つの候補APIのそれぞれのソースコードの埋め込みを計算し、計算された2つの埋め込み間の類似度を計算する。判定部11による判定は、2つのAPIそれぞれの説明文及びシグネチャの埋め込みの類似度と、ソースコードの埋め込みの類似度とに基づいて行われる。
【0020】
但し、あるデータAの埋め込みとは、Aの多次元ベクトルへのエンコードの結果のことをいう。類似度に基づく理由は、仮に2つのAPIがそれぞれ移行元・移行先の関係にある場合、両者のソースコードの意味と説明文及びシグネチャの意味はそれぞれ類似する傾向にあり、これを推定に利用するためである。
【0021】
埋め込みを利用する理由は、ソースコード、説明文及びシグネチャが有する「意味」を多次元空間上の点にマップすることができるからである。ソースコード、説明文及びシグネチャの埋め込みは、それぞれ、以下の参考文献1、2にあるような表現学習のモデルを利用する(それぞれについて公開されている訓練済みモデルを利用してもよい。)。
[参考文献1]Devlin, J., Chang, M.-W., Lee, K., and Toutanova, K. BERT: Pre-training of deep bidirectional transformers for language understanding. In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers) (Minneapolis, Minnesota, June 2019), Association for Computational Linguistics, pp. 4171-4186.
[参考文献2]Feng, Z., Guo, D., Tang, D., Duan, N., Feng, X., Gong, M., Shou, L., Qin, B., Liu, T., Jiang, D., and Zhou, M. CodeBERT: A pre-trained model for programming and natural languages. In Findings of the Association for Computational Linguistics: EMNLP 2020 (Online, Nov. 2020), Association for Computational Linguistics, pp. 1536-1547.
線形結合部113は、説明文・シグネチャ類似度計算部111及びコード類似度計算部112によって計算されたそれぞれの類似度を重み係数θで線形結合する。線形結合は、説明文・シグネチャ類似度計算部111、コード類似度計算部112の出力をそれぞれpN、pCとしたとき、以下の式(1)で与えられる。
θN+pN+θC+pC+θi (1)
但し、θiはバイアス項である。θN、θC、θiは、学習部12が教師データを用いて2値分類結果に関する交差エントロピー誤差を最小化するように学習し決定する。
【0022】
分類部114は、線形結合の結果をシグモイド関数によって活性化することで2つのAPIが移行元・移行先の関係にあるか否かの2値の分類結果を出力する。
【0023】
以下、移行先API推定装置10が実行する処理手順について説明する。
図4は、機械学習による重み係数θの決定処理の処理手順の一例を説明するためのフローチャートである。
【0024】
ステップS101において、学習部12は、教師データを読み込む。ここで、教師データは、既知の移行元・移行先の関係にある2つのAPI(λs、λt)からなる正例のペアと、λsと、λtと同一のライブラリに属しているがλsの移行先ではないAPIとからなる負例のペアを含む。これらの正例のペア及び負例のペアは予め作成される。なお、教師データの構成をBNF(Backus-Naur form)記法に準拠した形式で定義すると以下の通りである。
教
教師データ::=(λs,λt,ラベル)+
λs::=API情報
λt::=API情報
ラベル::=0|1
なお、正例のラベルの値は1であり、負例のラベルの値は0である。
【0025】
続いて、学習部12は、教師データを判定部11に対する入力として、機械学習により重み係数θを決定する(S102)。具体的には、学習部12は、教師データが含む正例及び負例を教師信号とした場合の判定部11による判定結果の交差エントロピー誤差が最小となるように、重み係数θN、θC、θiを勾配降下法で最適化する。
【0026】
図5は、移行先APIの推定処理の処理手順の一例を説明するためのフローチャートである。
【0027】
ステップS201において、判定部11は、移行元API及び候補APIリストを読み込む。なお、
図5の説明において、移行元API及び候補APIリストの定義は以下の通りである。
移行元API::=API情報
候補APIリスト::=候補APIのリスト
候補API::=API情報
API情報::=(NL-info,Code-info)
NL-info::=説明文~Delimiter~シグネチャ|シグネチャ
Code-info::=シグネチャ~Delimiter~Body
Delimiter::=任意の区切り記号
なお、「~」は文字列結合の演算子である。「シグネチャ」、「Body」は、それぞれAPIの定義を与えるソースコードのシグネチャ、ボディを指す。シグネチャとは、APIの型情報、引数情報、可視性などの修飾子の情報を表す文字列をいう。ボディとは、APIの動作を定義する命令列である。すなわち、ボディは、ソースコードのうちシグネチャを含まない部分(シグネチャを除いた部分)をいう。例えば、
図6に示すソースコードのシグネチャは、部分p1であり、ボディは、部分p2である。
【0028】
続いて、判定部11は、候補APIリストに含まれる候補APIごとに、移行元APIとのペアを生成する(S202)。続いて、ペアごとにステップS203~S208が実行される。以下、処理対象(注目対象)のペアを「対象ペア」という。
【0029】
ステップS203において、説明文・シグネチャ類似度計算部111は、対象ペアの移行元APIのNL-info及び候補APIのNL-infoそれぞれの埋め込みを計算する。すなわち、説明文・シグネチャ類似度計算部111は、これらの各NL-infoを多値ベクトルへエンコードする。したがって、2つの埋め込みが得られる。続いて、説明文・シグネチャ類似度計算部111は、2つの埋め込み間の余弦類似度を計算する(S204)。
【0030】
ステップS205において、コード類似度計算部112は、対象ペアの移行元APIのCode-info及び候補APIのCode-infoそれぞれの埋め込みを計算する。すなわち、コード類似度計算部112は、これらの各Code-infoを多値ベクトルへエンコードする。したがって、2つの埋め込みが得られる。続いて、コード類似度計算部112は、2つの埋め込み間の余弦類似度を計算する(S206)。
【0031】
続いて、線形結合部113は、ステップS204において算出された余弦類似度、ステップS206で算出された余弦類似度、及び学習済みの重み係数θを式(1)に当てはめて、2つの余弦類似度を線形結合する(S207)。
【0032】
続いて、分類部114は、線形結合の結果をシグモイド関数によって活性化することで対象ペアに係る移行元API及び候補APIが移行元・移行先の関係にあるか否かについて2値に分類する(S208)。
【0033】
全てのペアについてステップS203~S208が実行されると、判定部11は、移行先APIの推定結果を出力する(S209)。推定結果の定義は、以下の通りである。
推定結果::=ラベルのリスト
ラベル::=0|1
ラベルについて、0は移行先APIではないという推定結果(判定結果)を示し、1は移行先APIであるという推定結果(判定結果)を示す。
【0034】
なお、
図5において、ステップS203~S208については、便宜上、ループ処理として説明したが、例えば、
図7に示すように、判定部11は、自らのインスタンスについて、ペアの数(候補APIの数)のコピーを生成してもよい。この場合、各インスタンスが、並列的にステップS203~S208を実行することができる。
【0035】
上述したように、本実施の形態によれば、2つのAPIのシグネチャ及びソースコードのそれぞれの埋め込みに基づいて、2つのAPIの類似度が計算され、当該類似度に基づいて2つのAPIが移行元・移行先の関係を有するか否かが判定される。したがって、説明文が与えられていないAPIが存在する場合でも或るAPIの移行先のAPIを推定することができる。
【0036】
なお、本実施の形態において、説明文・シグネチャ類似度計算部111は、第1の計算部の一例である。コード類似度計算部112は、第2の計算部の一例である。
【0037】
以上、本発明の実施の形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【0038】
10 移行先API推定装置
11 判定部
12 学習部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 プロセッサ
105 インタフェース装置
111 説明文・シグネチャ類似度計算部
112 コード類似度計算部
113 線形結合部
114 分類部
B バス