Presentation is loading. Please wait.

Presentation is loading. Please wait.

ソースコード中の識別子に基づく カテゴリ階層構築手法

Similar presentations


Presentation on theme: "ソースコード中の識別子に基づく カテゴリ階層構築手法"— Presentation transcript:

1 ソースコード中の識別子に基づく カテゴリ階層構築手法
大阪大学 大学院情報科学研究科 ○宮崎 宏海,早瀬 康裕,市井 誠, 松下 誠,井上 克郎 大阪大学の宮崎です. Javaクラスの利用関係に着目し,ソフトウェア部品のカテゴリ階層を自動で 構築する手法を考案しましたので,発表させていただきます. #メモ

2 背景(1/2) ソフトウェアの大規模化・複雑化 品質要求の高まり 開発に掛かるコストの削減 ソフトウェアの高品質化 ソフトウェア部品の再利用
まず,背景ですが, 近年,ソフトウェアの大規模化・複雑化やソフトウェアに対する品質要求の高まりに よって,ソフトウェア部品の再利用が行われるようになってきました. ソフトウェア部品の再利用を行うことで利点があります. まず,同一機能を持つソフトウェア部品があれば,新たに目的の機能を持つ部品を開発する 必要がなくなり,開発に掛かるコストを削減することができます. また,信頼性が高いソフトウェア部品を利用することで,高品質なソフトウェアを開発する ことが出来ます 目的の機能を持つ部品を利用 信頼性の高い部品を利用

3 背景(2/2) ソフトウェア部品の量は膨大 ソフトウェア部品検索・管理の必要性 様々なソフトウェア部品検索システムの開発
オープンソースソフトウェアの増加 社内ソフトウェア部品の蓄積 ソフトウェア部品検索・管理の必要性 ソフトウェア部品取得にかかるコストの削減 しかし,ソフトウェア部品の再利用が盛んになってきたことで,インターネットを利用して 膨大な数の部品が取得できるようになっています. そのため,取得したソフトウェア部品の中から目的の部品を選別できるように,ソフトウェア部品の 管理および検索を行うシステムが必要になっており,様々な ソフトウェア部品検索システムが開発されています. 様々なソフトウェア部品検索システムの開発

4 ソフトウェア部品検索システム キーワード検索システム カテゴリ検索システム 入力したキーワードに適合する部品を出力する
利点:Web検索で馴染みがあり,自由度の高い検索ができる 既存のソフトウェア部品検索システム 例:SPARS-J,Google Code Search カテゴリ検索システム あらかじめ用意された階層状のカテゴリから目的の部品を探す 利点:適当なキーワードが思いつかない場合でも,漠然とした目的から検索ができる 例:ソースコードの特徴語を用いたJavaソフトウェア部品の分類システム[11] ソフトウェア部品検索システムの検索方式について考えた場合,その検索方式には キーワード検索とカテゴリ検索の2つがあります. キーワード検索は,検索者が入力したキーワードに適合する部品を出力する検索 システムです.キーワード検索システムの利点は,Web検索で馴染みがあり, また入力するキーワードを検索者が決めるため自由度の高い検索が 可能であることです. このキーワード検索は既存のソフトウェア部品検索システムであるSPARS-Jや Google Code Searchに採用されています. また,カテゴリ検索とはシステム側にあらかじめ用意されている階層状のカテゴリから 目的の部品を探すシステムです.カテゴリには名前であるカテゴリ名があり, 内部にそのカテゴリ名に関連する部品を含んでいます. (カテゴリは階層状になっていることが多く,目的の部品を段階的に 絞り込むことが出来ます.)カテゴリ検索の利点は,検索者が目標に適合する キーワードを思いつかない場合でも,漠然とした目的から検索を行うことが できる点です. カテゴリ検索を採用した既存のソフトウェア部品検索システムとしては,仁井谷の ソースコードの特徴語を用いたJavaソフトウェア部品の分類システムがあります. このシステムについては後のスライドで触れます. 本手法ではこちらのカテゴリ検索に注目しています. [11]:仁井谷,松下,井上, “ソースコードの特徴語を用いたJavaソフトウェア部品の自動分類手法の提案 ” 情報処理学会研究報告, Vol.2005, No.75, 2005-SE-149, pp.49-56, 2005

5 一般的なカテゴリ検索 カテゴリ検索の特徴 … … … … … … … カテゴリにはカテゴリ名に関連する文書が含まれる
カテゴリには上位のカテゴリ,下位のカテゴリが存在する この親子関係により階層構造ができている 人手で維持されることが多い 文書の内容を把握する必要があるため 例:Yahoo, Open Directory スポーツ ソフトウェア部品のカテゴリ検索システムについて考えた場合,カテゴリにはカテゴリ名に 関連する部品が含まれる必要があります. しかし,カテゴリを作成するには部品の内容を知りどのカテゴリに属するかを判断が必要が あり,また対象とする部品の量が多いため,カテゴリを自動で作成する必要があります. プロ野球 ニュース コラム プロ野球 Jリーグ リーグ ドラフト

6 ソフトウェア部品のカテゴリ検索システムの問題点
部品がどのカテゴリに属するかの判断には部品に関する専門的な知識が必要 部品の量が膨大 カテゴリは人手による維持が困難 ソフトウェア部品のカテゴリ検索システムについて考えた場合,カテゴリにはカテゴリ名に 関連する部品が含まれる必要があります. しかし,カテゴリを作成するには部品の内容を知りどのカテゴリに属するかを判断が必要が あり,また対象とする部品の量が多いため,カテゴリを自動で作成する必要があります. カテゴリを自動で作成することで 維持にかかるコストを削減できる

7 既存のカテゴリ階層の自動構築手法 Javaのソースコードから特徴語を抽出,カテゴリ名とする
特徴語:クラス名,メソッド名など カテゴリに,そのカテゴリ名を特徴語に持つJavaのソースコードを割り当てる カテゴリに含まれる部品の包含関係からカテゴリの階層構造を作成 カテゴリ input read file write 1 input read file write read file input 1 カテゴリを自動で作成した手法として,先ほど紹介した既存のカテゴリ検索システムについて 説明します. この手法では,まず部品であるJavaのソースコードから特徴語を抽出します.特徴語とは部品の 特徴を表した単語で,具体例としてはクラス名やメソッド名があります.例では部品1から 「input」「read」「file」,部品2から「write」「file」を抽出しています. 次に,各特徴語をカテゴリ名とするカテゴリを作成します.カテゴリには,カテゴリ名を 特徴語に持つJavaソースコードが含まれています. 最後に,カテゴリに含まれる部品の包含関係からカテゴリの階層構造を作成します.ここでは, カテゴリ「file」には部品1,2が含まれており,他のカテゴリには部品1か部品2の一方しか 含んでいないため,「file」は他のカテゴリの上位に位置しています. 2 write file 2 部品(Javaソースコード)

8 対象:Robocode*のロボットのソースコード カテゴリ名による段階的な絞り込みが出来ない
既存手法の問題点 カテゴリ間の親子関係でカテゴリ名の意味的な繫がりを考慮していない 対象:Robocode*のロボットのソースコード *Javaを使ってプログラミングしたロボット同士を戦わせるフリーソフト Mirror Mirrorはロボットの Approachの一種 Author Approach カテゴリ名に意味的な繫がりがない 次に,既存手法の問題点を挙げます.既存手法の問題点としては,カテゴリ名の 意味的な繋がりを考慮していないことがあります. こちらの図はロボコードのシステムに対して,既存の手法を適用したものですが, カテゴリ「Mirror」の子カテゴリに「Author」と「Approach」があります. 「Mirror」と「Author」には意味的なつながりはありません.また,「Mirror」と 「Approach」の間にはロボットの動き方の点で繫がりがあると言えますが, 「Approach」の一種としての「Mirror」であるため,意味的には関係が逆です. このように,既存の手法ではカテゴリ名による段階的な絞り込みが行えない,という 問題点があります. カテゴリ名による段階的な絞り込みが出来ない

9 ある単語(上位語)が別の単語(下位語)を抽象的に表す
研究の目的 目的 カテゴリ名による段階的な絞り込みに適したカテゴリ階層の自動構築 カテゴリ名の意味を考慮する必要がある →シソーラスに着目 単語間の関係を記した辞書 同義(類義)関係 反義関係 上位下位関係 単語の概念による包含関係 ある単語(上位語)が別の単語(下位語)を抽象的に表す そこで,本研究ではカテゴリ名による段階的な絞り込みに適したカテゴリ階層を自動で 構築します. この階層を自動で構築するためにシソーラスに着目しました.シソーラスとは単語間の 関係を記した辞書です.記述してある関係には同義関係や反義関係,上位下位関係が あります. 本手法では,これらの関係の中でも概念の包含関係を表した上位下位関係に 注目し,上位下位関係をシソーラスを用いることでカテゴリ名の意味的な 関係に基づくカテゴリ階層を構築します. 上位下位関係のシソーラスを用いることでカテゴリ名の 意味的な関係にもとづいたカテゴリ階層を構築する

10 既存のシソーラス 単語間の関係を記している 例:WordNet [1]:日常的に用いられる単語について記述されている
特定の分野について記述している 例:WordNet [1]:日常的に用いられる単語について記述されている WordNetで「list」に関係する単語 listの上位語 : database listの下位語 : bibliography 既存のシソーラスについて考えます. 既存のシソーラスは自然言語に基づく単語間の関係を表しています.例えば,既存の シソーラスであるWordNetで単語「file」について調べると,fileを上位とする上位下位関係と なる単語として「binary faile」や「vertical file」が得られます.また,fileを下位とする 上位下位関係となる単語としては「record」や「office furniture」が得られます. [1]:A.Miller,R.Beckwith,C.Fellbaum, D.Gros, R.Tengi,“Five Papers on WordNet” Technical Report CSL Report 43, 2005

11 既存のシソーラスを ソフトウェア部品のカテゴリ階層作成に利用
問題点 ソフトウェア部品には日常語とは用途が異なる単語や複合語が多い 例1:「Collection」と「List」 日常語:上位下位関係は存在しない プログラミングの分野:上位下位関係が存在する 例2:「LinkedList」 WordNetに記述がない 次に,既存のシソーラスをソフトウェア部品に適用する場合について考えます.ソフトウェア部品に 適用する場合,ソフトウェア部品には自然言語とは用途が異なる単語や複合語が多い,という 問題点があります.例えば,CollectionとListは自然言語では上位下位関係は存在しません.しかし, プログラミングの分野では,ListはCollectionの一種であるため上位をCollection,下位をListとする 上位下位関係が存在します.また,他の例として,LinkedListという単語は自然言語には存在 しません. 以上のことから,既存のシソーラスをソフトウェア部品のカテゴリ階層に用いることは適当では ありません. →既存のシソーラスをソフトウェア部品のカテゴリ階層に 用いるのは適当ではない

12 ソフトウェア部品に適したシソーラスを自動で作成
ベーシックアイデア ソースコード上にはソフトウェア部品に適した単語・複合語である識別子がある Javaクラスの利用関係を上位下位関係に利用 そのため,ソフトウェア部品に適したシソーラスを作成する しかし,既存のシソーラスを適用することはできません.その理由は,既存の シソーラスは自然言語の意味に基づいて作成されているためです. 一方,ソフトウェア部品には自然言語とは用途が異なる単語や複合語が 多く含まれています. そのため,既存のシソーラスはソフトウェア部品のカテゴリ階層の構築には 適当とは言えません. そのため,新たにソフトウェア部品に適したシソーラスを作成する必要が あります. #質問へのメモ たとえば,CollectionとSetという2つの単語は自然言語では共に集合の意味があり 類似した単語であるといえますが,プログラミング言語のJavaではCollectionは オブジェクトの集合のためのインターフェースであり,Setは重複を許さない オブジェクトの集合のためのインターフェースであるため,類似ではなく 上位下位の関係が成り立っているといえます. 既存のシソーラスをソフトウェア部品のカテゴリ階層の構築に適用することが 出来ないため新たにシソーラスを作成します. Javaソースコードの集合から ソフトウェア部品に適したシソーラスを自動で作成

13 提案手法の概要 Javaクラスの利用関係を用いてシソーラスを作成 Javaクラスの集合からJavaクラスのクラスタと特徴語の集合を作成
ソフトウェア部品のカテゴリ階層を構築 シソーラス カテゴリ階層 A 1 2 B 4 C 3 1.シソーラス 作成 1 2 3.シソーラスと クラスタから カテゴリ階層を構築 目的を達成するために,Javaクラスの利用関係からカテゴリ階層を構築する手法を 提案します. まず,ソフトウェア部品であるJavaクラスの利用関係からシソーラスを作成します. 次に,Javaクラスのクラスタリングと作成したクラスタの特徴語を決定します. 最後に,作成したシソーラスとクラスタを用いてカテゴリ階層を構築します. 3 4 1 3 4 2 特徴語1,    特徴語2,... 特徴語3,    特徴語4,... クラスタ 2.部品の クラスタ作成 部品 (Javaクラス)

14 1.Javaクラスの利用関係を用いたシソーラスの作成(1/2)
上位下位関係が期待できる利用関係を選択 オブジェクト指向の観点から上位下位が存在すると考えられる関係 以下の関係にある識別子の組を取得 上位 下位 継承関係 親クラス名 子クラス名 親インタフェース名 子インタフェース名 実装関係 インタフェース名 クラス名 フィールド変数の型と変数名 型名(クラス名) 変数名 最初に行う,シソーラスの作成部分の説明を行います. シソーラスの作成はJavaクラスの利用関係とその識別子を用いることで 作成します.この時,用いる利用関係は上位下位の関係が期待できるものを 選びます.そして,利用関係ごとに設定した閾値以上の出現回数のもののみ 取得します. 利用関係には,この表にあるように継承関係・実装関係・フィールド変数の型と 変数名の3つを用います.継承関係では継承されるクラスのクラス名を上位,継承 するクラス名を下位として取得します.たとえば,FileReaderが InputStreamReaderを継承する場合はInputStreamReaderを上位,FileReaderを下位と します. 同様に,実装関係では実装するクラスを下位,実装されるクラスを上位として 取得し,フィールド変数の型と変数名では型を指すクラスを上位,変数名を 下位として取得します. 例: java.util.List が java.util.Collection を継承しているので Collectionを上位,Listを下位とする

15 1.Javaクラスの利用関係を用いたシソーラスの作成(2/2)
利用関係ごとに設定した閾値以上の出現回数のもののみ取得 例:継承→1回,実装→1回,変数の型と変数名→5回 作成するシソーラス 取得した識別子と上位下位関係の有向グラフ 頂点:識別子 有向辺:上位の識別子から下位の識別子に引いた辺 Object Serializable 上位 下位 利用関係 取得回数 Object EventObject 継承 1 Serializable 実装 AWTEvent ActionEvent ItemEvent 変数 6 Event 3 EventObject AWTEvent そして,取得した識別子と上位下位関係からシソーラスを表す有向グラフを 作成します.この有向グラフの頂点は識別子で,上位の識別子から下位の 識別子に有向辺を引いています. たとえば,この例では上位が識別子Aで下位が識別子Cであるため,頂点Aから 頂点Cに有向辺を引いています.このようにして有向グラフを作成します. ActionEvent ItemEvent Event ソースコードから取得した 識別子と上位下位関係 有向グラフ(シソーラス)

16 2.Javaクラスのクラスタと特徴語の作成(1/2)
Javaクラスの集合から部品のクラスタと特徴語の集合を作成 出現する単語に基づく部品のクラスタを作成 クラスタに定数個の特徴語を付ける 部品のクラスタ 特徴語1,特徴語2 特徴語3 … 1 2 1 2 次に,Javaクラスの集合から部品のクラスタと特徴語を作成する手法について説明します. クラスタと特徴語の作成には研究室で開発されたツールを用いました.このツールでは 出現する単語に基づく部品のクラスタをします.部品の集合の中で類似した部品を排他的に クラスタリングし,作成したクラスタに定数個の特徴語を付けています. #メモ 出現する単語に基づく → 出現する単語の類似度によって? 3 4 3 4 特徴語4,特徴語5 特徴語6 … 部品(Javaクラス) クラスタリング結果

17 2.Javaクラスのクラスタと特徴語の作成(2/2)
具体的なクラスタリング手法 手順1.部品×単語の行列を作成 要素(i , j)の値:単語jが部品iに出現する回数 手順2.手順1で作成した行列にLSAを適用する LSA(潜在的意味解析法):類似した単語が出現する部品同士を類似したものとみなすことが出来る 手順3.手順2で作成した行列から部品のクラスタとクラスタの特徴語を決定 部品1 部品2 部品3 A B C D E F G H 部品1 部品4 部品2 部品5 部品3 部品6 A B C D E 次に,Javaクラスの集合から部品のクラスタと特徴語を作成する手法について説明します. クラスタと特徴語の作成には研究室で開発されたツールを用いました.このツールでは 出現する単語に基づく部品のクラスタをします.部品の集合の中で類似した部品を排他的に クラスタリングし,作成したクラスタに定数個の特徴語を付けています. #メモ 出現する単語に基づく → 出現する単語の類似度によって? 部品4 部品5 部品6 E F G H

18 3.カテゴリ階層の構築(1/5) クラスタリング結果を用いてカテゴリを作成する クラスタの特徴語がシソーラス内にあればカテゴリを作成
作成したカテゴリにクラスタに含まれる部品を割り当てる シソーラス内で下位に2個以上カテゴリ名に対応する頂点を持つ頂点のカテゴリを作成 A B 単語 特徴語 1 2 1 2 A B 部品 A B クラスタ 1 2 3 4 最後に,作成したシソーラスと部品のクラスタおよび特徴語からカテゴリ階層を 構築する手法について説明します. まず,クラスタリング結果を用いてカテゴリを作成します.クラスタの特徴語が シソーラス内にあれば,そのカテゴリを作成します.そして作成したカテゴリに クラスタに含まれる部品を割り当てます. A E C D 3 4 D E E F 3 4 F 5 6 E F G 5 6 5 6 クラスタリング結果 シソーラス

19 3.カテゴリ階層の構築(2/5) カテゴリ間の親子関係の作成 以下の条件を満たすカテゴリ間に親子関係を作成
シソーラス内で,カテゴリ名に対応する頂点間に経路がある 上記の経路に,他にカテゴリ名に対応する頂点がない 親子関係にあるカテゴリ間には「(親)→(子)」の有向辺を引く A B 単語 特徴語 クラスタ 部品 クラスタリング結果 3 4 A E 6 5 F 2 1 B 1 2 1 2 A B 3 4 C 最後に,作成したシソーラスと部品のクラスタおよび特徴語からカテゴリ階層を 構築する手法について説明します. まず,クラスタリング結果を用いてカテゴリを作成します.クラスタの特徴語が シソーラス内にあれば,そのカテゴリを作成します.そして作成したカテゴリに クラスタに含まれる部品を割り当てます. D D E 3 4 F E F G 5 6 5 6 シソーラス

20 3.カテゴリ階層の構築(3/5) … … … … … … … … … … 部品を含まないカテゴリを作成する理由
選択肢が多すぎる状況を回避するため 選択肢が多すぎるとどれを選んでいいか分からない A B C A B C D E 最後に,作成したシソーラスと部品のクラスタおよび特徴語からカテゴリ階層を 構築する手法について説明します. まず,クラスタリング結果を用いてカテゴリを作成します.クラスタの特徴語が シソーラス内にあれば,そのカテゴリを作成します.そして作成したカテゴリに クラスタに含まれる部品を割り当てます. F G H I J K L M N O I J K L M N O

21 3.カテゴリ階層の構築(4/5) 部品を含まないカテゴリを作成する理由 例:カテゴリ「Closeable」の子カテゴリ
シソーラスには「Closeable」の下位には「Writer」「Reader」「InputStream」「OutputStream」があるが,クラスタの特徴語にはない Closeable BufferedWriter BufferedReader BufferedOutputStream BufferedInputStream DataInputStream DigestOutputStream DigestInputStream DeflaterOutputStream DataOutputStream PipedInputStream PrintStream PipedReader PipedOutputStream ProgressMonitorInputStream PrintWriter ZipInputStream PushbackReader PushbackInputStream SequenceInputStream ZipOutputStream StringWriter StringReader StringBufferInputStream FileWriter FileReader FileOutputStream FileInputStream FilterInputStream GZIPInputStream FilterWriter JarInputStream FilterOutputStream GZIPOutputStream JarOutputStream FilterReader InputStreamReader InflaterInputStream ObjectOutputStream ObjectInputStream LineNumberReader CharArrayReader ByteArrayOutputStream ByteArrayInputStream CharArrayWriter CipherOutputStream CipherInputStream CheckedOutputStream CheckedInputStream AudioInputStream カテゴリ階層 Closeable InputStream Writer OutputStream Reader 最後に,作成したシソーラスと部品のクラスタおよび特徴語からカテゴリ階層を 構築する手法について説明します. まず,クラスタリング結果を用いてカテゴリを作成します.クラスタの特徴語が シソーラス内にあれば,そのカテゴリを作成します.そして作成したカテゴリに クラスタに含まれる部品を割り当てます. シソーラス

22 3.カテゴリ階層の構築(5/5) 部品を含まないカテゴリを作成する理由
「Writer」「Reader」「InputStream」「OutputStream」のカテゴリを作成,「Closeable」の子カテゴリにする Closeable InputStream OutputStream Reader AudioInputStream DataInputStream CheckedInputStream FilterInputStream PipedInputStream FileInputStream JarInputStream FilterOutputStream ZipInputStream SequenceInputStream StringBufferInputStream ProgressMonitorInputStream PushbackInputStream GZIPInputStream InflaterInputStream ObjectInputStream DigestInputStream CipherInputStream BufferedInputStream ByteArrayInputStream BufferedOutputStream DeflaterOutputStream DataOutputStream DigestOutputStream CheckedOutputStream PipedOutputStream ZipOutputStream JarOutputStream FileOutputStream ByteArrayOutputStream CipherOutputStream GZIPOutputStream ObjectOutputStream BufferedReader FileReader CharArrayReader PipedReader PushbackReader StringReader LineNumberReader FilterReader InputStreamReader 最後に,作成したシソーラスと部品のクラスタおよび特徴語からカテゴリ階層を 構築する手法について説明します. まず,クラスタリング結果を用いてカテゴリを作成します.クラスタの特徴語が シソーラス内にあれば,そのカテゴリを作成します.そして作成したカテゴリに クラスタに含まれる部品を割り当てます. Writer CharArrayWriter PrintWriter FilterWriter PrintStream FileWriter BufferedWriter PipedWriter StringWriter

23 適用実験 実験の目的 実験内容 カテゴリ名による段階的な絞り込みを行うことが出来るカテゴリ階層が作成できているかを調べる
入力:JDK1.4の全クラス(約11000クラス) シソーラスへの登録の閾値 継承関係,実装関係:1回 フィールド変数の型と変数名:10回 出力結果 総カテゴリ数 1109個 カテゴリ間の親子関係 2501組 カテゴリに割り当てられた部品数 6000個 カテゴリに割り当てられた延べ部品数 18583個 カテゴリに含まれる部品(平均) 16.75個 提案した手法を実装し,実際に部品集合に対して適用実験を行いました. この実験は,カテゴリ名による段階的な絞り込みを行うためのカテゴリが作成できて いるかを調べることを目的としています. 入力はJDK1.4の全クラスとしました.シソーラスに上位下位関係として登録するか どうかの閾値は継承関係と実装関係がそれぞれ1回,フィールド変数と変数名は10回としました. 出力結果としては,カテゴリ数が1109個,親子関係が2501組得られました.他に 得られた情報は表の通りになっています.

24 評価方法 評価項目 カテゴリ名と含まれる部品の評価 カテゴリ間の親子関係の評価 評価方法としては,カテゴリ間の親子関係の適合率と
カテゴリとカテゴリに含まれる部品との適合率の2つを行いましたが この発表ではカテゴリ間の親子関係についてのみ説明します.

25 カテゴリ名と含まれる部品の評価 評価 結果 1109個のカテゴリから無作為に50個選出 カテゴリ名と含まれる部品の適合率を求める
カテゴリと部品324組 カテゴリ名と含まれる部品の適合率を求める 適合条件1:カテゴリ名と部品名が同じ 適合条件2:カテゴリ名が部品名の{複数形,省略語,部分語,類似語}である 適合条件3:カテゴリ名が部品の特徴の一部を表す 結果 83.6%(271組/324組) カテゴリ名 部品名 適合例 JarFile JarException 不適合例 Reader Source

26 カテゴリ間の親子関係の評価 評価 結果 2501組の親子関係から無作為に200組を選出 親子関係の適合率を求める
適合条件:子カテゴリが親カテゴリの一種 結果 64.0%(128組 / 200組) 親カテゴリ 子カテゴリ 適合例 JComponent JLabel 不適合例 ClassFile ClassReader 評価は,出力した親子関係2501組の内,ランダムに200組を選出して行いました. そしてその200組に対して親子関係の適合率を求めましたが,その適合条件は 「子カテゴリ名が表すものが親カテゴリ名の一種である」こととしました. 適合例としては親カテゴリ名が「JComponent」で子カテゴリ名が「JLabel」の ものがあります.子カテゴリである「JLabel」はテキスト文字列や(イメージの) 表示領域のことであり,GUI部品を表す「JComponent」の一種であるといえます. 一方,不適合例としては親カテゴリが「ClassFile」で子カテゴリ名が「ClassReader」の ものがあります.子カテゴリである「ClassReader」はクラスファイルを読み込むもので あり,「ClassFile」の一種であるとは言えません. このように親子関係の適合・不適合を判断した結果,101組の適合が得られました.

27 考察(1/2) カテゴリ名とカテゴリに含まれる部品 有効な分類が得られた カテゴリ名と部品が1つも適合しないものも存在
カテゴリ名として有用でない識別子がカテゴリ名になっている クラスタに付ける特徴語を定数個にしたため クラスタ内の部品の特徴を表していないものも特徴語に含まれる 結果の考察です. 手法を用いることで意味的な絞り込みを行えるカテゴリを構築することが できました. また,適合率を上げる余地があります.継承関係には機能を利用する ために行われているものがあり,その場合は子クラスが親クラスの一種には なりませんでした.この問題はprivateクラスの継承関係は取得する際の閾値を 大きくすることで解決できるのでは,と考えられます.

28 考察(2/2) カテゴリ間の親子関係 あまり高い値が得られなかった 変数の型と変数名の組はシソーラスに登録されなかった
継承関係として機能を利用するためのものがみられた アクセス制御子による重みの設定 他のクラスからの利用頻度による重みの設定 変数の型と変数名の組はシソーラスに登録されなかった 閾値を下げればいくつか得られたが,省略語が多く有用なものではなかった 省略語の辞書を用いる より柔軟な登録条件を用いる 結果の考察です. 手法を用いることで意味的な絞り込みを行えるカテゴリを構築することが できました. また,適合率を上げる余地があります.継承関係には機能を利用する ために行われているものがあり,その場合は子クラスが親クラスの一種には なりませんでした.この問題はprivateクラスの継承関係は取得する際の閾値を 大きくすることで解決できるのでは,と考えられます. より柔軟な登録条件を用いる 省略語をシソーラスに登録しないようにする

29 まとめと今後の課題 まとめ 今後の課題 Javaの利用関係を用いたシソーラスの作成 作成したシソーラスを用いたカテゴリ階層の構築
実際のソースコードを用いた実験 今後の課題 カテゴリ間の親子関係の精度向上 より柔軟な閾値の設定 新たな方法による単語の組の抽出 共通する接頭語・接尾語の除去 例:JComponent(上位) JLabel(下位)        → Component(上位) Label(下位) カテゴリ検索を行うユーザーインターフェースの開発 本研究では,Javaの利用関係を用いたシソーラスを作成し,そのシソーラスを 用いたカテゴリ階層の構築を行いました.そして実際のソースコードを 用いた実験を行いました. 今後の課題としましては,カテゴリ間の親子関係の精度向上があります.また,他にも カテゴリ階層に親子関係以外のカテゴリ間の関係を加えることでカテゴリ検索と しての有用性を向上させたり,カテゴリ検索のインターフェースの開発などが 挙げられます.

30 以降,ゴミです

31 3.カテゴリ階層の構築(5/5) 部品を含まないカテゴリを作成する理由
「Writer」「Reader」「InputStream」「OutputStream」のカテゴリを作成,「Closeable」の子カテゴリにする 「Closeable」:DatagramChannel, FileChannel, Formatter, InputStream, LogStream, OutputStream, Pipe.SinkChannel, Pipe.SourceChannel, RandomAccessFile, Reader, SelectableChannel, ServerSocketChannel, SocketChannel, Writer 「InputStream」: AudioInputStream, BufferedInputStream, ByteArrayInputStream, CipherInputStream, CheckedInputStream, DataInputStream, DigestInputStream, FileInputStream, FilterInputStream, GZIPInputStream, JarInputStream, InflaterInputStream, ObjectInputStream, PipedInputStream, ProgressMonitorInputStream, PushbackInputStream, SequenceInputStream, StringBufferInputStream, ZipInputStream 「OutputStream」: BufferedOutputStream, ByteArrayOutputStream, CheckedOutputStream, CipherOutputStream, DataOutputStream, DeflaterOutputStream, DigestOutputStream, FileOutputStream, FilterOutputStream, GZIPOutputStream, JarOutputStream, ObjectOutputStream, PipedOutputStream, ZipOutputStream 「Reader」: BufferedReader, CharArrayReader, FileReader, FilterReader, InputStreamReader, LineNumberReader, PipedReader, PushbackReader, StringReader 「Writer」: BufferedWriter, CharArrayWriter, FilterWriter, FileWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter 最後に,作成したシソーラスと部品のクラスタおよび特徴語からカテゴリ階層を 構築する手法について説明します. まず,クラスタリング結果を用いてカテゴリを作成します.クラスタの特徴語が シソーラス内にあれば,そのカテゴリを作成します.そして作成したカテゴリに クラスタに含まれる部品を割り当てます.

32 カテゴリの階層構造はカテゴリに含まれる部品の包含関係
既存研究のカテゴリ階層 A 部品1 部品2 部品3 部品4 B C 部品1 部品2 部品3 部品3 部品4 D E 部品1 部品2 部品2 部品3 カテゴリの階層構造はカテゴリに含まれる部品の包含関係

33 親カテゴリと子カテゴリを複数持つ場合,総当りになってしまう
A B C A B C D E F G E F G 親カテゴリと子カテゴリを複数持つ場合,総当りになってしまう

34 Javaクラスのクラスタと特徴語の作成 A B C D E F G H 部品1 部品2 部品3 部品4 部品5 部品6 1.単語×部品
A B C D E F G H 部品1 部品2 部品3 部品4 部品5 部品6 1.単語×部品 の行列作成 2.LSA 部品1 部品2 部品3 部品4 部品5 部品6 A B C D E F G H 2 3 4 5 6 1 A B C D E F G H 0.9 2.3 0.3 0.6 1.4 1.0 0.4 0.2 1.5 0.7 0.1 -0.1 -0.2 0.0 3.部品のクラスタと 特徴語の作成

35 構築した階層の一例 ○ ○ × ○ ○ ○ ○ ○ ○ 部品のカテゴリへの割り当て 例:AWTEvent 部品
適合 理由 Java.awt.KeyEventDispatcher キーイベントのターゲット指定と ディスパッチに関するインターフェース Java.awt.KeyEventPostProcessor キーイベントの最終変換に関するインターフェース Java.awt.Toolkit × Java,awt.event.AWTEventListner AWTイベントの監視をするクラス Java.awt.event.HierarchyBoundsAdopter 上位クラスのイベントを受け取る抽象クラス Java.awt.event.HierarchyBoundsListner 上位クラスのイベントを受け取るインターフェース Java.awt.event.HierarchyListner 階層変更イベントを受け取るインターフェース Java.awt.event.KeyAdopter キーボードイベントを受け取る抽象クラス Java.awt.event.KeyListner キーボードイベントを受け取るインターフェース 適合率:89%(8/9)

36 構築した階層の一例 ○ × ItemEvent Serializable Object ComponentEvent
InternalEvent ActionEvent AncestorEvent AdjustmentEvent EventObject AWTEvent カテゴリ間の上位下位関係 上位 下位 Object Serializable EventObject AWTEvent 適合 理由 × 具象化 特性のため 上位下位ではない Adjustment Event Ancestor Component ActionEvent InternalEvent ItemEvent AWTに関するEvent 適合率:89%(8/9)

37 既存手法によるカテゴリ階層 A B C D E 部品1 A C E 部品4 部品3 部品2 B D :部品名 :特徴語 :カテゴリ名 部品3

38 既存手法によるカテゴリ階層 A 部品1 A C E 部品4 部品3 部品2 B D C B D E :部品名 :特徴語 :カテゴリ名
:親子関係(親→子)

39 2.Javaクラスのクラスタと特徴語の作成(2/2)
B C D E F G H 部品1 部品2 部品3 部品4 部品5 部品6 A B C D E F G H 部品1 1 2 部品2 部品3 3 部品4 部品5 部品6 1.単語×部品 の行列作成 2.LSA 部品1 部品2 部品3 部品4 部品5 部品6 A B C D E F G H A B C D E F G H 部品1 0.3 0.7 0.9 0.4 0.2 部品2 1.0 1.4 0.6 0.1 部品3 1.5 2.3 -0.2 部品4 0.0 部品5 部品6 -0.1 3.部品のクラスタと 特徴語の作成

40 2.Javaクラスのクラスタと特徴語の作成(2/4)
ソフトウェア部品のクラスタリング手法 手順1.部品×単語の行列を作成 要素(i , j)の値:単語jが部品iに出現する回数 A B C D E F G H 部品1 部品2 部品3 部品4 部品5 部品6 A B C D E F G H 部品1 1 2 部品2 部品3 3 部品4 部品5 部品6 1.単語×部品 の行列作成 次に,Javaクラスの集合から部品のクラスタと特徴語を作成する手法について説明します. クラスタと特徴語の作成には研究室で開発されたツールを用いました.このツールでは 出現する単語に基づく部品のクラスタをします.部品の集合の中で類似した部品を排他的に クラスタリングし,作成したクラスタに定数個の特徴語を付けています. #メモ 出現する単語に基づく → 出現する単語の類似度によって?

41 2.Javaクラスのクラスタと特徴語の作成(3/4)
ソフトウェア部品のクラスタリング手法 手順2.手順1で作成した行列にLSA*を適用する LSA(潜在的意味解析法):重みが類似するものに大きい重みを与える手法 A B C D E F G H 部品1 1 2 部品2 部品3 3 部品4 部品5 部品6 A B C D E F G H 部品1 0.3 0.7 0.9 0.4 0.2 部品2 1.0 1.4 0.6 0.1 部品3 1.5 2.3 -0.2 部品4 0.0 部品5 部品6 -0.1 2.LSA 次に,Javaクラスの集合から部品のクラスタと特徴語を作成する手法について説明します. クラスタと特徴語の作成には研究室で開発されたツールを用いました.このツールでは 出現する単語に基づく部品のクラスタをします.部品の集合の中で類似した部品を排他的に クラスタリングし,作成したクラスタに定数個の特徴語を付けています. #メモ 出現する単語に基づく → 出現する単語の類似度によって? * Landauer, T. K., Foltz, P. W., & Laham, D. (1998). Introduction to Latent Semantic Analysis.  Discourse Processes, 25,

42 2.Javaクラスのクラスタと特徴語の作成(4/4)
ソフトウェア部品のクラスタリング手法 手順3.手順2で作成した行列から部品のクラスタとクラスタの特徴語を決定 部品のクラスタリング:行列の行ベクトルの類似度を計測し,類似度の高い部品をクラスタリングする 特徴語の決定:同一クラスタに含まれる部品の中で,共通して値の大きいものをそのクラスタの特徴語とする 部品1 部品2 部品3 部品4 部品5 部品6 A B C D E F G H A B C D E F G H 部品1 0.3 0.7 0.9 0.4 0.2 部品2 1.0 1.4 0.6 0.1 部品3 1.5 2.3 -0.2 部品4 0.0 部品5 部品6 -0.1 次に,Javaクラスの集合から部品のクラスタと特徴語を作成する手法について説明します. クラスタと特徴語の作成には研究室で開発されたツールを用いました.このツールでは 出現する単語に基づく部品のクラスタをします.部品の集合の中で類似した部品を排他的に クラスタリングし,作成したクラスタに定数個の特徴語を付けています. #メモ 出現する単語に基づく → 出現する単語の類似度によって? 3.部品のクラスタと 特徴語の作成

43 3.カテゴリ階層の構築(4/5) 部品を含まないカテゴリを作成する理由 例:カテゴリ「Closeable」の子カテゴリ
シソーラスには「Closeable」の下位には「Writer」「Reader」「InputStream」「OutputStream」があるが,クラスタの特徴語にはない Closeable AbstractInterruptibleChannel AbstractSelectableChannel AbstractSelectableChannel AudioInputStream BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter CheckedInputStream CheckedOutputStream CipherInputStream CipherOutputStream DatagramChannel DataInputStream DataOutputStream ZipOutputStream DeflaterOutputStream 最後に,作成したシソーラスと部品のクラスタおよび特徴語からカテゴリ階層を 構築する手法について説明します. まず,クラスタリング結果を用いてカテゴリを作成します.クラスタの特徴語が シソーラス内にあれば,そのカテゴリを作成します.そして作成したカテゴリに クラスタに含まれる部品を割り当てます. DigestInputStream DigestOutputStream DigestOutputStream FileChannel ZipInputStream FileInputStream FileOutputStream FileReader FileWriter FilterInputStream FilterOutputStream JarInputStream FilterWriter Formatter GZIPInputStream GZIPOutputStream InflaterInputStream InputStreamReader FilterReader JarOutputStream LineNumberInputStream LineNumberReader LogStream ObjectInputStream ObjectOutputStream OutputStreamWriter PipedInputStream PipedOutputStream PipedReader PipedWriter PrintStream PrintWriter ProgressMonitorInputStream PushbackInputStream PushbackReader RandomAccessFile SelectableChannel SequenceInputStream ServerSocketChannel SocketChannel StringBufferInputStream StringReader StringWriter


Download ppt "ソースコード中の識別子に基づく カテゴリ階層構築手法"

Similar presentations


Ads by Google