識別子の命名支援を目的とした動詞-目的語関係の辞書構築 井上研究室 鹿島 悠
プログラム中の識別子 いくつかの単語を組み合わせて複合語として意味を表現 識別子の組み合わせで意味を表現 expandTree 識別子の組み合わせで意味を表現 Socketクラスの bind(SocketAddress) 適切な命名のためには,単語や識別子の適切な組み合わせを知る必要がある 単語間の関係を収録した辞書を用いて支援 Expand tree --- GUI で TreeView を広げる Bind socket --- ネットワークで Socket にアドレスを結び付ける
動詞-目的語関係 プログラムの動作を表わす重要な関係 オブジェクト指向プログラムのメソッドに着目 Ex. JMenuクラスの void addMenuListener(MenuListener) MenuListener を JMenu に 追加(add)する 直接目的語 間接目的語 動詞 単語間の関係は様々なものがありますが... Jmenu に MenuLister を追加する
問題点 プログラム中で用いられる関係は既存の自然言語の辞書にあまり含まれていない プログラムは多様なドメインを扱うためドメイン固有の関係も多く出現 既存の辞書では十分な命名支援を行うことができない 既存の辞書では情報を網羅しきれない
提案手法 ドメインごとに分類された動詞-目的語の関係を収録した辞書の構築 入力 出力 オブジェクト指向プログラミング言語で記述された特定のドメインを扱う複数のソフトウェアのソースコード集合 実装ではJavaで記述されたソースコードを対象とした 出力 特定のドメインに出現する動詞-目的語関係を収録した辞書 動詞 直接目的語 間接目的語 Add Product Stock Close Connection
提案手法の概要 Add Product Stock 3 Build Data 1 Set Password User 4 Describe 特定のドメインに所属する ソフトウェアのソースコード 抽出パターン 事前に人手で定義 void 動詞1 名詞2 (名詞2) in 名詞3 動詞 : 動詞1 直接目的語 : 名詞2 間接目的語 : 名詞3 メソッド情報 void add Product(Product) in Stock 動詞1 名詞2 名詞2 名詞3 パターンマッチ 動詞-直接目的語-間接目的語 辞書 動詞 直接目的語 間接目的語 出現したソフトウェアの数 Add Product Stock 3 Build Data BooleanMatrex 1 Set Password User 4 Describe Alias Xml 動詞 直接目的語 間接目的語 出現したソフトウェアの数 Add Product Stock 3 Build Data BooleanMatrex 1 Set Password User 4 Describe Alias Xml 一定数以上の組を辞書に収録 [スライド変える前に] メソッド情報, 抽出パターン, パターンマッチ
メソッド情報 品詞情報のついた単語の列4組 戻り値 メソッド名 引数 クラス名 名詞一つ or void 複合語を分解し 単語の列にして 品詞解析を行う (OpenNLPを利用) 名詞の列 名詞一つ 各品詞に同じ単語を識別する番号を付与 メソッド情報の例 メソッド情報は品詞情報の付いた単語の列4組で,メソッド中の識別子に品詞情報を付加したものです. void createTicketForUser User Server void 動詞1 名詞2 前置詞3 名詞4 名詞4 名詞5
抽出パターン 品詞情報のついた単語の列またはワイルドカード4組 と 動詞,直接目的語,間接目的語として抽出する単語の指定 戻り値 メソッド名 引数 クラス名 void 名詞一つ ワイルドカード 名詞の列 ワイルドカード 名詞一つ ワイルドカード 品詞の列 各品詞に同じ単語を識別する番号を付与 動詞,直接目的語,間接目的語として抽出する単語の指定 抽出パターンの例 メソッドの各要素に対応して,品詞情報を付けた単語の列またはワイルドカード4組と動詞,直接目的語,間接目的語として抽出する単語の指定で構成されます.戻り値,….メソッド,...引数,...クラス名,... Voidとワイルドカード以外に同じ番号を付与 戻り値 メソッド名 引数 クラス名 void 動詞1 名詞2 前置詞3 名詞4 ワイルドカード ワイルドカード 動詞 直接目的語 間接目的語 動詞1 名詞2 名詞4
パターンマッチ ワイルドカード以外で抽出パターンの品詞とメソッド情報の品詞が一致するか,抽出パターン中で同じ番号の単語の出現位置とメソッド情報中の同じ番号の単語の出現位置が一致するか検査 一致していた場合抽出パターンの指定に従い動詞,直接目的語,間接目的語を抽出 メソッド情報 動詞 直接目的語 間接目的語 create Ticket User void Create Ticket For User User Server void 動詞1 名詞2 前置詞3 名詞4 名詞4 名詞5 抽出パターン 戻り値 メソッド名 引数 クラス名 抽出パターン中のワイルドカード以外の部分で,.... この抽出パターンのワイルドカード以外の品詞情報と,これに対応するメソッド情報の品詞情報が一致しますので,指定に従い,動詞1,名詞2,名詞4の単語を抽出し,三つ組を抽出します. void 動詞1 名詞2 前置詞3 名詞4 ワイルドカード ワイルドカード 動詞 直接目的語 間接目的語 動詞1 名詞2 名詞4
評価実験 実験目的 実験対象 抽出パターンを31個定義 4つのドメインの辞書を作成 提案手法により作成した辞書に含まれる動詞-目的語関係の評価 特定のドメインを対象とした命名支援のための辞書に含まれるのに適当かどうか 実験対象 抽出パターンを31個定義 4つのドメインの辞書を作成 2つ以上のソフトウェアに出現した三つ組を収録 ドメイン 入力したソフトウェア数 収録した三つ組の数 GUI 7 407 Database 9 672 Web Application 10 282 XML 11 547
実験方法 被験者は井上研究室の学生6人 辞書に収録された三つ組に対するアンケート調査 各三つ組が命名支援のための辞書に収録するのに適当かどうかを評価 各辞書から90個の組をランダムに抽出 被験者は井上研究室の学生6人 全員Javaを用いた開発経験あり 被験者が開発経験のあるドメインを対象とした辞書に対して回答 1人あたり2つの辞書に対して回答 1つの辞書につき3人の被験者に30組づつ評価してもらう
実験結果 対象ドメインの辞書に収録するのに適当と判断された三つ組 GUI :全体の64% Database :全体の71% XML :全体の52% Web Application : 全体の56%
被験者に適当と判断された例 ドメイン 動詞 直接目的語 間接目的語 GUI Click Mouse MouseEvent Database Add Constraint Table Web Application Destroy Session HttpSessionEvent XML Declare Prefix NamespaceSupport
被験者に収録すべきでないと判断された例 判断の理由 対象ドメインとは異なるドメインに所属している ドメイン 動詞 直接目的語 間接目的語 Database Release Mouse MouseEvent 判断の理由 対象ドメインとは異なるドメインに所属している
考察 辞書作成のために入力したソフトウェアの数が7~11と少なかった 入力したソフトウェアが複数のドメインを扱っていた 対象ドメイン以外に所属する関係をフィルタリングしきれなかった 入力したソフトウェアが複数のドメインを扱っていた プログラムで一般的に見られる関係や他のドメインで見られる関係を取り除くことで解決
まとめと今後の課題 まとめ 今後の課題 プログラム中の動詞-目的語関係を収録した辞書の構築手法を提案 ドメイン固有の関係を抽出する方法の開発 辞書を利用した命名支援環境の構築