潜在的意味解析法LSA を利用した ソフトウェア分類システムの試作

Slides:



Advertisements
Similar presentations
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
ソースプログラム・アーカイブ・サイト -関数依存グラフと検索への応用-
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
ソフトウェアの類似性の分析とその応用に関する研究
ソフトウェア変更間の関連抽出の ための差分集合構築手法
情報爆発A01支援班 マイサーチエンジン開発環境支援グループ 中村聡史, 大島裕明, 田中克己, 喜連川優
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
リンク構造を考慮したベクトル空間法によるWebグラフ分割手法に関する研究
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
プログラム実行履歴を用いたトランザクションファンクション抽出手法
オントロジーを使用した プログラム開発支援システムの提案
プログラム実行時情報を用いたトランザクションファンクション抽出手法
大阪大学 大学院情報科学研究科 博士前期課程2年 宮原研究室 土居 聡
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
潜在的意味解析法LSAに基づく ソフトウェアシステム分類法の提案
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
重複コードと非重複コードにおける 修正頻度の比較
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
コンポーネントランク法を用いたJavaクラス分類手法の提案
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
2018/9/10 ACL読み会 名古屋大学大学院 M2 佐藤・松崎研 土居裕典.
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
バイトコードを単位とするJavaスライスシステムの試作
多様なプログラミング言語に対応可能な コードクローン検出ツール CCFinderSW
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
Q3 On the value of user preferences in search-based software engineering: a case study in software product lines Abdel Salam Sayyad (West Virginia University,
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
構造的類似性を持つ半構造化文書における頻度分析
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
コーパス コーパス(Corpus)はコンピュータの発達とともに、計算機可読なデータを容易に作成・収集することができるようになったことがその背景にある。現在ではコーパス言語学などの学問もある。
メソッドの同時更新履歴を用いたクラスの機能別分類法
A-17 検索履歴のプライバシーを秘匿した ユーザクラスタリング
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
Webページタイプによるクラスタ リングを用いた検索支援システム
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
コンパイラ 2012年10月11日
コードクローン解析に基づく デザインパターン適用候補の検出手法
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
Detecting Software Modularity Violations
Presentation transcript:

潜在的意味解析法LSA を利用した ソフトウェア分類システムの試作 大阪大学大学院基礎工学研究科 博士前期課程二年 川口 真司

発表の流れ 背景・研究の目的 潜在的意味解析法 LSA について LSAの単純な応用とその問題点 提案手法 適用実験 考察・まとめ 2003/03/06

ソフトウェアリポジトリ ソフトウェア開発資源(ソースコード、ドキュメントなど)の保管場所を提供 リポジトリには大量のソフトウェアが存在 SourceForge(http://sourceforge.net/) Corporate Source* リポジトリには大量のソフトウェアが存在 SourceForgeには55000以上ものソフトウェアが存在(2003/03現在) *Jamie Dinkelacker and Pankaj K. Garg Corporate Source: Applying Open Source Concepts to a Corporate Environment (Position Paper) 1st ICSE International Workshop on Open Source Software Engineering, May 15, 2001, Toronto, Canada. 2003/03/06

背景 ソフトウェアリポジトリをソフトウェアの検索に利用 分類・整理が不可欠 リポジトリ内にあるソフトウェアは手動で分類 機能要求を満たすソフトウェアを検索 現在作成中のソフトウェアに似ているソフトウェアを検索 分類・整理が不可欠 リポジトリ内にあるソフトウェアは手動で分類 リポジトリ管理者が, 階層構造を作成 分類者が, 定義された階層から, そのソフトウェアにふさわしい分類を選択 2003/03/06

問題点 画一的で排他的な分類 ソフトウェアには様々な側面 階層構造の作成には多大なコストがかかる リポジトリ管理者の負担:大 一般にはソフトウェアの用途によって分類 しかし、利用しているライブラリや依存アーキテクチャによる分類もまた有用 ソフトウェアには様々な側面 階層構造の作成には多大なコストがかかる 階層構造の作成には、さまざまなライブラリ・アーキテクチャに関する深い知識が必要 リポジトリ管理者の負担:大 単一のビューのみを提供 断定的すぎる ソフトウェアの持つ多様性を無視している ソフトウェアの特性を歪めている 2003/03/06

非排他的分類 これらライブラリや アーキテクチャに対する 知識がなければ、 このような分類を準備 できない regexp エディタ 表計算 MFC GTK ソフトウェア1 ソフトウェア3 これらライブラリや アーキテクチャに対する 知識がなければ、 このような分類を準備 できない エディタ 表計算 GUI (MFC) GUI (MFC) 正規表現サポート (regexp) 正規表現サポート (regexp) ソフトウェア2 ソフトウェア4 エディタ 表計算 GUI (GTK) GUI (GTK) 正規表現サポート (regexp) 2003/03/06

目的 ソフトウェアの自動分類 ソフトウェアが持つさまざまな側面を考慮した非排他的分類 依存ライブラリや前提とするアーキテクチャを自動的に判別し分類する 分類対象となるソフトウェアに対する 深い知識を必要としない 2003/03/06

発表の流れ 背景・研究の目的 潜在的意味解析法 LSA について LSAの単純な応用とその問題点 提案手法 適用実験 考察・まとめ 2003/03/06

潜在的意味解析法 LSA Latent Semantic Analysis* 自然言語で書かれた文書、単語の類似度を計測する ベクトル空間モデルに従った手法の一つ ベクトル空間モデルでは検出できない間接的な関連の抽出を可能にしている * Landauer, T. K., Foltz, P. W., & Laham, D. (1998). Introduction to Latent Semantic Analysis.  Discourse Processes, 25, 259-284. 2003/03/06

LSA の例 単語ベクトル 文書ベクトル 文書間、単語間の類似度は ベクトル間の角度の cos に よって表す 文書1 文書4 文書2 3 4 5 6 A B C D E F G H A B B F G G 文書2 文書5 A B C D E F G H H 単語頻度行列を 作成 文書3 文書6 B C C C D E G H LSA 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 A B C D E F G H 2003/03/06

LSA の効果 間接的に関連している文書間の類似度も高い 文書間の類似度がより鮮明になる 文書間の類似度行列 LSA適用前 LSA適用後 1 2 3 4 5 6 1.0 0.2 -0.1 -0.3 -0.5 0.5 -0.9 -0.2 -0.4 0.3 1 2 3 4 5 6 1.0 0.9 -0.6 -0.5 -0.8 -0.7 LSA適用前 LSA適用後 2003/03/06

発表の流れ 背景・研究の目的 潜在的意味解析法 LSA について LSAの単純な応用とその問題点 提案手法 適用実験 考察・まとめ 2003/03/06

LSAによるソフトウェア類似度測定 ソフトウェアに対して LSA を適用 LSAを適用した結果からソフトウェアの類似度を測定 文書 ⇒ ソフトウェア 単語 ⇒ 識別子(変数名、関数名、型名) LSAを適用した結果からソフトウェアの類似度を測定 測定した類似度からクラスタ分析ができるのでは クラスタ分析・・・類似度の高いもの同士をグループ化する手法 2003/03/06

ソフトウェア類似度の傾向 類似度を手がかりに分類を行っても適正な分類が得られない 類似度が高い理由がソフトウェアによって異なる ソフトウェア1 ソフトウェア3 エディタ 表計算 GUI (MFC) GUI (MFC) 正規表現サポート (regexp) 正規表現サポート (regexp) ソフトウェア2 ソフトウェア4 エディタ 表計算 GUI (GTK) GUI (GTK) 正規表現サポート (regexp) 2003/03/06

発表の流れ 背景・研究の目的 潜在的意味解析法 LSA について LSAの単純な応用とその問題点 提案手法 適用実験 考察・まとめ 2003/03/06

識別子による分類 ソースコード中の識別子は、その動作を表している window という識別子があるプログラム文の周辺は、なんらかの GUI に関する操作を行っている 識別子のうち特に類似しているものを結びつけて、それらをひとつのグループとみなして分類を行う ソフトウェア1 ソフトウェア3 エディタ 表計算 GUI (MFC) GUI (MFC) window menuBar cmdButton window MFC 2003/03/06

提案手法(1/2) Sof1 Soft4 Soft1 Soft4 Soft2 Soft5 Soft2 Soft5 Soft3 Soft6 A B B F J G G I J Soft2 Soft5 Soft2 Soft5 1.トークン 抽出 A B C D E F G H H J Soft3 Soft6 Soft3 Soft6 B C C C D E G H J 2.共起行列の作成 1 2 3 4 5 6 A B C D E F G H I J 1 2 3 4 5 6 A B C D E F G H 3.孤立トークン, 普遍トークンの 削除 2003/03/06

提案手法(2/2) 4.LSA 5.トークン間の類似度計測、 クラスタ分析 ClusterName1 7.クラスタ 6.ソフトウェア 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 A B C D E F G H 4.LSA 5.トークン間の類似度計測、 クラスタ分析 1 2 3 1 2 3 A B C D ClusterName1 F G H 7.クラスタ タイトルの 作成 6.ソフトウェア クラスタの 作成 1 4 5 6 1 4 5 6 ClusterName2 2003/03/06

1.トークン抽出 トークン 各ソフトウェアから識別子を抽出し、これをトークンとする 各ソフトウェアを特徴づける単語の集合 Sof1 Soft4 Soft1 Soft4 A B B F J G G I J Soft2 Soft5 Soft2 Soft5 1.トークン 抽出 A B C D E F G H H J Soft3 Soft6 Soft3 Soft6 B C C C D E G H J 2003/03/06

2.共起行列の作成 共起行列 行にソフトウェア、列にトークンをとり、行列の値に各ソフトウェアでのトークン出現数が入った行列 Sof1 Soft4 1 2 3 4 5 6 A B C D E F G H I J A B B F J G G I J Soft2 Soft5 A B C D E F G H H J 2.共起行列の 作成 Soft3 Soft6 B C C C D E G H J 2003/03/06

3.孤立トークン、普遍トークンの削除 孤立トークン 普遍トークン これらのトークンは分類に役立たないため削除 ある単一のソフトウェアのみに現れるトークン 普遍トークン 半数以上のソフトウェアに現れるトークン これらのトークンは分類に役立たないため削除 1 2 3 4 5 6 A B C D E F G H I J 1 2 3 4 5 6 A B C D E F G H 3.孤立トークン, 普遍トークンの 削除 2003/03/06

4.LSA 孤立トークン、普遍トークンを除いた共起行列に対して LSA を適用 1 2 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 A B C D E F G H 4.LSA 2003/03/06

5.識別子をクラスタリング LSA の結果を元に識別子間の類似度計測 類似度を利用してクラスタ分析 得られたクラスタを「トークンクラスタ」と呼ぶ 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 A B C D E F G H 5.識別子を クラスタリング A B C D F G H 2003/03/06

6.ソフトウェアクラスタの作成 各トークンクラスタごとに対応するソフトウェアクラスタを作成 トークンクラスタ内のクラスタを持っているソフトウェアの集合 Sof1 Soft4 A B B F J G G I J A B C D F G H Soft2 Soft5 6.ソフトウェアクラスタの 作成 A B C D E F G H H J Soft3 Soft6 1 2 3 1 4 5 6 B C C C D E G H J 2003/03/06

7.クラスタタイトルの作成 クラスタを短く表現するタイトルを作成する LSA を行った後の行列からソフトウェアベクトルを取得 クラスタに含まれるソフトウェアベクトルを合計する そのベクトルの中で値の大きい部分に対応するトークンを数個選び出し、これをタイトルとする 7.クラスタタイトルの作成 1 2 3 1 4 5 6 1 2 3 1 4 5 6 ClusterName1 ClusterName2 2003/03/06

自動分類システム 対象: C言語で記述されたプログラム群 各ステップごとに、対応するプログラムを作成 実装言語 Perl 全部で約4000行 LSA の計算部には SVDPACKC を利用 全部で約4000行 2003/03/06

発表の流れ 背景・研究の目的 潜在的意味解析法 LSA について LSAの単純な応用とその問題点 提案手法 適用実験 考察・まとめ 2003/03/06

実験 提案手法でどのような分類が抽出できるのかを実験 分類対象 SourceForge から無作為に 6 つのジャンルを選択  boardgames, compilers, database, editor, videoconversion, xterm その中から C 言語で書かれたプログラムをテストデータとして選択 全部で 41 個のソフトウェア 合計 164102個の識別子が存在 そのうち単一のソフトウェアにのみ現れるトークンを除いた残り 22048 個を利用 2003/03/06

分類システム出力結果(一部) 新しい分類 構文解析ライブラリyaccを利用しているソフトウェアの集合 タイトル ソフトウェア クラスタ数 AOP, emitcode, IC_RESULT, IC_LEFT, aop, aopGet, IC_RIGHT, pic14_emitcode, iCode, etype compilers/gbdk, compilers/sdcc 8597 CASE_IGNORE, CASE_GROUND_STATE, screen, CASE_PRINT, CASE_BYP_STATE, Widget, TScreen, CASE_IGNORE_STATE, CASE_PLT_VEC, CASE_PT_POINT xterm/R6.3, xterm/R6.4 2160 YY_BREAK, yyvsp, yyval, DATA, yy_current_buffer, tuple, yy_current_state, yy_c_buf_p, yy_cp, uint32 compilers/gbdk, database/mysql-3.23.49, database/postgresql-7.2.1 223 AVI, cinfo, OUTLONG, avi_t, AVI_errno, hdrl_data, OUT4CC, nhb, ERR_EXIT, str2ulong videoconversion/dv2jpg-1.1, videoconversion/libcu30-1.0, videoconversion/mjpgTools 177 board, num_moves, ply, pawn_file, npiece, pawns, moves, white_to_move, move_s, promoted boardgame/Sjeng-10.0, boardgame/cinag-1.1.4, boardgame/faile_1_4_4 154 GtkWidget, gchar, gpointer, gint, widget, gtk_widget_show, N_, g_free, dialog, g_return_if_fail boardgame/gbatnav-1.0.4, editor/gedit-1.120.0, editor/gmas-1.1.0, editor/gnotepad+-1.3.3, editor/peacock-0.4 104 既存の(SourceForgeの)分類と同じ分類 GTK ライブラリを利用しているソフトウェアの集合 構文解析ライブラリyaccを利用しているソフトウェアの集合 新しい分類 2003/03/06

実験結果 合計40個のクラスタ 新しい分類によるクラスタの内訳 新しいクラスタ 8 既存の分類と同一のクラスタ 18 GTK(2クラスタ) GUI ライブラリ yacc(2クラスタ) 構文解析ライブラリ regexp 正規表現解釈ライブラリ getopt 引数解釈用ライブラリ JNI Java のネイティブメソッドを実現するアーキテクチャ Python/C Python インタプリタ拡張アーキテクチャ 新しいクラスタ 8 既存の分類と同一のクラスタ 18 2003/03/06

考察 ライブラリやアーキテクチャによる分類を前提知識なしで発見 クラスタタイトル ソフトウェアのさまざまな側面に対応した分類 前提知識がなくとも分類が可能 クラスタタイトル 分かりやすいものもあれば、分かりにくいものもある 同じライブラリを利用しているクラスタは、比較的分かりやすいタイトルがつく傾向がある 2003/03/06

まとめと今後の課題 ソフトウェアを自動分類する手法を提案した 本手法により、ソフトウェア集合やそこに含まれるライブラリについての知識がなくとも、新たな分類を発見できることを示した 今後の課題 クラスタタイトルのよりよい作成方法の考案 大規模な実験 2003/03/06

終 2003/03/06

考察 従来の分類では注目してない観点では 従来の分類という観点からは クラスタタイトル ライブラリによる新しい分類を発見 前提知識なしで発見することができた 従来の分類という観点からは 適合率は高い 再現率は低い クラスタタイトル 適切についているものもあるが、そうでないものもある ライブラリを抽出したクラスタはわかりやすい名前がつく傾向がある 2003/03/06

実験結果 40個のクラスタ トークン数上位 20 個のクラスタ 既存の分類に従うクラスタ 18 既存の分類とは異なる、新しいクラスタ 8 (GTK(2クラスタ), yacc(2クラスタ), regexp, JNI, getopt, Python/C) 8 その他 14 既存の分類に従うクラスタ 14 既存の分類とは異なる、新しいクラスタ (GTK(2クラスタ), yacc) 3 その他 2003/03/06

適合率・再現率 適合率(precision) 再現率(recall) 全クラスタ 上位20クラスタ 適合率 0.65 0.85 再現率 得られたクラスタのうち、正しい分類となっているクラスタの割合 再現率(recall) 想定される正しい分類が、得られたクラスタにどれだけ含まれているか ここでは、既存の分類のみを想定される正しい分類とする 全クラスタ 上位20クラスタ 適合率 0.65 0.85 再現率 0.16 0.13 2003/03/06

関連研究 ある単一のソフトウェアを分割し, それらを意味のあるまとまりに再構成する試みがなされている ソフトウェアをある種の単位に分割 ファイル, 関数 それらの単位間での類似度を算出し, 類似度を元に再構成する ファイル名* 関数間の呼び出し関係(コールグラフ)** 利用している識別子*** *N. Anquetil and T. Lethbridge. Extracting concepts from file names; a new file clustering criterion. In Proc. 20th Intl. Conf. Software Engineering, May 1998. **G. A.  Di Lucca, A. R.  Fasolino, F.  Pace, P.  Tramontana, U.  De Carlini, Comprehending Web Applications by a Clustering Based Approach 10th International Workshop on Program Comprehension (IWPC'02) ***Jonathan I. Maletic and Andrian Marcus, Supporting Program Comprehension Using Semantic and Structural Information in Proceedings of the 23rd IEEE International Conference on Software Engineering (ICSE 2001) 2003/03/06

既存の手法の問題点 単一のソフトウェアが対象 複数のソフトウェアを対象にした場合, これらの仮定が当てはまらない 区分の単位であるファイルや関数は、単一の機能のみ果たしていると仮定できる 呼び出し関係などの構造的情報が利用できる 複数のソフトウェアを対象にした場合, これらの仮定が当てはまらない ソフトウェアは単一の機能のみでは構成されていない 構造的情報を利用している手法は利用できない 2003/03/06

LSA (Latent Semantic Analysis)* 潜在的意味解析 自然言語で記述された文書・単語の類似度を計測する手法 ドキュメントを単語頻度表のベクトルであらわす 単語間の間接的関係を抽出できる * Landauer, T. K., Foltz, P. W., & Laham, D. (1998). Introduction to Latent Semantic Analysis.  Discourse Processes, 25, 259-284. 2003/03/06