KR101933953B1 - 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템 - Google Patents
페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템 Download PDFInfo
- Publication number
- KR101933953B1 KR101933953B1 KR1020170035925A KR20170035925A KR101933953B1 KR 101933953 B1 KR101933953 B1 KR 101933953B1 KR 1020170035925 A KR1020170035925 A KR 1020170035925A KR 20170035925 A KR20170035925 A KR 20170035925A KR 101933953 B1 KR101933953 B1 KR 101933953B1
- Authority
- KR
- South Korea
- Prior art keywords
- word
- class
- topic
- page
- words
- Prior art date
Links
Images
Classifications
-
- G06F17/30864—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2457—Query processing with adaptation to user needs
- G06F16/24578—Query processing with adaptation to user needs using ranking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9558—Details of hyperlinks; Management of linked annotations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/18—Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
-
- G06F17/2235—
-
- G06F17/3053—
-
- G06F17/30882—
-
- G06F17/30958—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Operations Research (AREA)
- Probability & Statistics with Applications (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Algebra (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computational Linguistics (AREA)
- Stored Programmes (AREA)
Abstract
본 발명은 자바 소스 파일에서 소스 코드가 가지고 있는 단어 집합 중 의미있는 단어 집합을 추출하고, 자바 소스 파일에서 식별자 간 동적 호출 관계를 추출한 호출 그래프를 생성하고, 페이지랭크(PageRank) 알고리즘을 통해 각 식별자에 따른 중요도 값(즉, 페이지랭크 값)를 할당하고, 상기 단어 집합에 페이지랭크 값를 활용하여 최종 분석 대상 문서를 생성하고, 생성된 문서에 LDA 기반 토픽 모델링을 적용하여 토픽별 단어 집합을 출력하게 함으로써, 프로젝트의 도메인 토픽을 얻을 수 있도록 하는, 소프트웨어 도메인 토픽 추출 시스템에 관한 것이다.
본 발명의 소프트웨어 도메인 토픽 추출 시스템은, 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드가 가지고 있는 단어 집합에서, 기 설정된 불용어와, 기 설정된 불중요 단어를 제거한 단어 집합인, 의미 있는 단어의 집합을 추출하는, 전처리기; 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드를 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하여, 각 클래스와, 각 클래스 내에 포함된 메서드 호출 정보를 나타내는 호출그래프를 생성하는, 호출 그래프 생성기; 호출 그래프 생성기로부터 수신된 호출그래프의 각 클래스 및 각 클래스 내에 포함된 메서드 호출 정보를, 페이지랭크(PageRank) 알고리즘에 적용하여, 각 클래스별 페이지랭크 값을 생성하는, 페이지 랭커; 전처리기에서 수신된 단어 집합들을 저장한 코퍼스(Copus)를 생성하고, 페이지 랭커로부터 수신된 각 클래스별 페이지랭크 값을 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값만큼 각 클래스 식별자를 생성하여, 코퍼스에 추가하는, 코퍼스 생성기; 코퍼스 생성기에서 수신된 코퍼스를 대상으로, 잠재적인 디리클레 할당 (Latent Dirichlet Allocation, LDA) 알고리즘을 적용하여, 코퍼스의 각 문서에 대해, 토픽들에 대한 분포 값을 검출하고, 각 토픽에 대한 단어 집합을 검출하는, 토픽 모델러;를 포함하여 이루어진 것을 특징으로 한다.
본 발명의 소프트웨어 도메인 토픽 추출 시스템은, 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드가 가지고 있는 단어 집합에서, 기 설정된 불용어와, 기 설정된 불중요 단어를 제거한 단어 집합인, 의미 있는 단어의 집합을 추출하는, 전처리기; 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드를 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하여, 각 클래스와, 각 클래스 내에 포함된 메서드 호출 정보를 나타내는 호출그래프를 생성하는, 호출 그래프 생성기; 호출 그래프 생성기로부터 수신된 호출그래프의 각 클래스 및 각 클래스 내에 포함된 메서드 호출 정보를, 페이지랭크(PageRank) 알고리즘에 적용하여, 각 클래스별 페이지랭크 값을 생성하는, 페이지 랭커; 전처리기에서 수신된 단어 집합들을 저장한 코퍼스(Copus)를 생성하고, 페이지 랭커로부터 수신된 각 클래스별 페이지랭크 값을 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값만큼 각 클래스 식별자를 생성하여, 코퍼스에 추가하는, 코퍼스 생성기; 코퍼스 생성기에서 수신된 코퍼스를 대상으로, 잠재적인 디리클레 할당 (Latent Dirichlet Allocation, LDA) 알고리즘을 적용하여, 코퍼스의 각 문서에 대해, 토픽들에 대한 분포 값을 검출하고, 각 토픽에 대한 단어 집합을 검출하는, 토픽 모델러;를 포함하여 이루어진 것을 특징으로 한다.
Description
본 발명은 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템에 관한 것으로, 보다 상세히는, 자바 소스 파일에서 소스 코드가 가지고 있는 단어 집합 중 의미있는 단어 집합을 추출하고, 자바 소스 파일에서 식별자 간 동적 호출 관계를 추출한 호출 그래프를 생성하고, 페이지랭크(PageRank) 알고리즘을 통해 각 식별자에 따른 중요도 값(즉, 페이지랭크 값)를 할당하고, 상기 단어 집합에 페이지랭크 값를 활용하여 최종 분석 대상 문서를 생성하고, 생성된 문서에 LDA 기반 토픽 모델링을 적용하여 토픽별 단어 집합을 출력하게 함으로써, 프로젝트의 도메인 토픽을 얻을 수 있도록 하는, 소프트웨어 도메인 토픽 추출 시스템에 관한 것이다.
JAR(Java Archive, 자바 아카이브)는 소프트웨어에서 수많은 자바 클래스 파일과 연관 메타데이터, 리소스(텍스트, 그림 등)을 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 패키지 파일 포맷이다.
JAR 파일은 실제로 ZIP 파일 포맷으로 이루어진 압축 파일로서, 파일 확장자는 .jar이다. 컴퓨터 사용자들은 JDK에 포함된 jar 명령어를 이용하여 JAR 파일을 만들거나 압축을 풀 수 있으며, 또한, zip 도구를 사용할 수도 있으나 압축 시에는 매니페스트 파일이 처음이어야 하는 경우가 있어서 zip 파일 헤더의 엔트리 순서가 중요하다. JAR 안에서 파일 이름들은 유니코드 텍스트로 되어 있다.
페이지랭크(PageRank)는 월드 와이드 웹과 같은 하이퍼링크 구조를 가지는 문서에 상대적 중요도에 따라 가중치를 부여하는 방법이다. 이 알고리즘은 서로 간에 인용과 참조로 연결된 임의의 묶음에 적용할 수 있다.
토픽 모델(topic)은 텍스트 기반의 문서를 활용하기 위해 개발된 확률 모델로,문서를 표현하기 위해 단어들에 대한 벡터 또는 용어 집합(bag-of-words)을 이용한다. 토픽 모델 중 잘 알려진 LDA(Latent Dirichlet Allocation)는 많은 문서들 안에서 잠재적으로 의미 있는 토픽을 발견하기 위한 확률적인 생성모델이다. LDA는 Dirichlet 분포를 이용하여 텍스트 문서 내의 단어들이 어떤 특정 토픽에 포함될 확률을 계산한다. 여기서 각 문서들은 하나의 토픽이 아니라 여러 개의 토픽에 의해 확률적으로 표현되고, 각 토픽들은 단어들에 대한 특정 분포에 의해 표현되어진다.
소프트웨어의 유지보수와 재사용에 있어서 소프트웨어의 도메인 토픽을 이해하는 것은 매우 중요하다. 소프트웨어가 발전함에 따라 소프트웨어의 크기는 더 방대해지고 있으며 이러한 소프트웨어의 도메인 토픽을 이해하는 것은 매우 어렵다.
프로젝트의 도메인 토픽을 추출하기 위한 방법 중 한 가지는 개발자가 프로젝트가 포함하고 있는 모든 소스 코드를 직접 확인하는 방법이다. 작은 규모의 프로젝트의 경우에는 이와 같은 방법을 통해 도메인 토픽을 파악하고 프로젝트를 이해할 수 있는 반면 중간 규모, 큰 규모의 프로젝트의 경우에는 매우 많은 시간이 소요되며 도메인 토픽을 파악하는 것이 쉽지 않다. 일반적으로 중간 크기 이상의 프로젝트의 도메인 토픽을 파악할 때는 호출 그래프(Call Graph), 제어 흐름도(Control Flow), 데이터 흐름도(Data Flow)와 같은 프로그램 분석 기술을 활용하는 방법이 존재하지만 이러한 방법들은 구조적 정보(Structural Information)를 이해하는데 도움이 될 뿐 프로젝트의 도메인 토픽을 이해하는데 크게 도움이 되지 않는다.
반면, 소스코드의 주석과 식별자 등의 비구조적인 데이터의 분석은 구조적 데이터를 분석하는 방법보다 프로젝트를 이해하는데 훨씬 더 정확하고 효율적인 방법이다. 최근에는 소스 코드의 비구조적인 데이터에 LSI 또는 LDA 알고리즘을 적용하여 프로젝트에 대한 여러 가지 토픽을 추출하는 기술들이 연구되고 있다. 일반적으로 LDA를 이용한 연구에서는 소스 코드의 구조적 정보를 제외한 식별자 및 주석과 같은 비구조적 정보만을 활용한다. 이 방법들은 주로 프로젝트에 대한 여러 개의 단어 집합(하나의 단어 집합은 하나의 토픽을 의미)과 각 단어 집합에 프로젝트가 포함될 가능성(또는 토픽 분포)를 출력해줌으로써 사용자가 각 토픽들을 명명 하여 도메인 토픽을 추측 또는 추출하도록 한다. 하지만, 토픽 분포 값은 매우 작고 각 토픽들의 연관성이 크지 않기 때문에 사용자가 프로젝트의 도메인 토픽을 추측하는 것이 어렵다.
소프트웨어 내의 각 소스 코드는 하나의 문서라고 할 수 있고 소스 코드들로 구성된 하나의 소프트웨어는 문서 집합이라고 할 수 있으며, 문서 집합에는 토픽 모델링(Topic Modeling)을 적용함으로써 개발자가 소프트웨어의 도메인 토픽을 파악하는데 도움이 되는 결과를 내어줄 수 있다. 한편, 소스 코드의 클래스로부터 추출되는 단어는 다른 단어들에 비해 토픽으로써의 의미가 더 크다.
이러한 사실에 기초하여, 본 발명은 PageRank 알고리즘을 통해 각 식별자에 중요도 값을 할당하고 이를 분석 대상 문서를 생성하는데 활용하고, 이렇게 생성된 문서에 LDA 기반 토픽 모델링을 적용하여 시스템의 결과가 도메인 토픽을 추출하기에 용이하도록 하고 실제 대상 프로젝트의 도메인 토픽을 대표할 수 있는 도메인 토픽이 구성되도록 하는 JTopic(Java Topic) 시스템을 제안한다.
즉, 본 발명에서는 구조적, 비구조적 정보 모두를 활용하며 자바로 작성된 소프트웨어를 대상으로 한다. 소스 코드의 구조적 정보와 비구조적 정보를 활용하여 소프트웨어로부터 문서 집합을 생성하고, 문서 집합에서 토픽을 추출하기 위해 LDA 알고리즘에 기초한 토픽 모델링을 사용함으로써 소프트웨어의 도메인 토픽을 추출하는 JTopic(Java Topic) 시스템을 제안한다. JTopic 시스템은 문서 집합 생성 시 소스 코드 내의 식별자간의 호출 관계를 통해 그래프를 생성하고 PageRank 알고리즘을 적용하여 식별자에 더 큰 중요도 값을 가지게 한다.
종래에는, LDA 기반 토픽 모델링 적용을 위하여 맬릿 토픽 모델링 툴키트(MALLET Topic Modeling Toolkit)을 사용하였으며, 일반 프로젝트 문서를 입력으로 받아 결과를 도출하는 맬릿(MALLET)은 결과를 제대로 도출하지 못하는 경우가 많았다. 이에 비해 페이지랭크(PageRank)를 적용한 단어들의 집합으로 구성된 문서를 입력으로 받아 결과를 도출하는 경우, 보다 더 확실한 결과를 도출할 수 있다.
따라서, 본 발명은 페이지랭크(PageRank)를 적용한 단어들의 집합으로 구성된 문서를 입력으로 받아 결과를 도출하는, 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템을 제안한다.
선행기술로, 국내 등록특허 제10-1266504호 '리치니스를 이용한 문서 집합의 토픽 단어 추출 방법'이 있다. 이 발명은 리치니스를 이용한 문서 집합의 토픽 단어 추출 방법에 관한 것으로, 보다 구체적으로는, 문서의 집합(예컨대 블로그 포스트의 집합) 상에서 후보 토픽 워드에 대한 커버리지 비교를 통해 토픽들 중 상대적으로 중요하고 비중있게 언급된 것을 찾아 가중치 및 랭킹을 부여하기 위한 리치니스를 이용한 문서 집합의 토픽 단어 추출 방법에 관한 것이다.
국내 등록특허 제10-1266504호는 가중치 및 랭킹을 부여하여 문서 집합의 토픽 단어를 추출하나, 본 발명과 같이, 페이지랭크 값를 활용하여 최종 분석 대상 문서를 생성하고, 생성된 문서에 LDA 기반 토픽 모델링을 적용해 사용자에게 토픽별 단어 집합을 보여주고 토픽을 구성하도록 이루어져 있지 않아, 정확한 토픽들을 제시에 있어서, 이 발명은 본 발명에 비해 상대적으로 떨어진다.
본 발명이 해결하고자 하는 과제는, 자바 소스 파일에서 소스 코드가 가지고 있는 단어 집합 중 의미있는 단어 집합을 추출하고, 자바 소스 파일에서 식별자 간 동적 호출 관계를 추출한 호출 그래프를 생성하고, 페이지랭크(PageRank) 알고리즘을 통해 각 식별자에 따른 중요도 값(즉, 페이지랭크 값)를 할당하고, 상기 단어 집합에 페이지랭크 값를 활용하여 최종 분석 대상 문서를 생성하고, 생성된 문서에 LDA 기반 토픽 모델링을 적용하여 토픽별 단어 집합을 출력하게 함으로써, 프로젝트의 도메인 토픽을 얻을 수 있도록 하는, 소프트웨어 도메인 토픽 추출 시스템을 제공하는 것이다.
본 발명이 해결하고자 하는 다른 과제는, 단어구분 단계에서 소스 코드에서 사용되는 합성어를, 상기 합성어에서 분리된 단어들 뿐만 아니라, 상기 합성어 자체를 포함하여 구분하며, 코퍼스 생성 단계에서는, 각 페이지랭크 값에 보정계수를 곱하여, 보정된 페이지랭크 값이 0 이상의 정수가 되게 하며, 보정된 페이지랭크 값만큼의 식별자를 각 문서에 추가하여 코퍼스를 생성하도록 하여, 보다 정확한 도메인 토픽을 추출하게 하는, 소프트웨어 도메인 토픽 추출 시스템을 제공하는 것이다.
상기 과제를 해결하기 위해, 본 발명의 소프트웨어 도메인 토픽 추출 시스템은 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드가 가지고 있는 단어 집합에서, 기 설정된 불용어와, 기 설정된 불중요 단어를 제거한 단어 집합인, 의미 있는 단어의 집합을 추출하는, 전처리기; 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드를 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하여, 각 클래스와, 각 클래스 내에 포함된 메서드 호출 정보를 나타내는 호출그래프를 생성하는, 호출 그래프 생성기; 호출 그래프 생성기로부터 수신된 호출그래프의 각 클래스 및 각 클래스 내에 포함된 메서드 호출 정보를, 페이지랭크(PageRank) 알고리즘에 적용하여, 각 클래스별 페이지랭크 값을 생성하는, 페이지 랭커; 전처리기에서 수신된 단어 집합들을 저장한 코퍼스(Copus)를 생성하고, 페이지 랭커로부터 수신된 각 클래스별 페이지랭크 값을 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값만큼 각 클래스 식별자를 생성하여, 코퍼스에 추가하는, 코퍼스 생성기; 코퍼스 생성기에서 수신된 코퍼스를 대상으로, 잠재적인 디리클레 할당 (Latent Dirichlet Allocation, LDA) 알고리즘을 적용하여, 코퍼스의 각 문서에 대해, 토픽들에 대한 분포 값을 검출하고, 각 토픽에 대한 단어 집합을 검출하는, 토픽 모델러;를 포함하여 이루어진 것을 특징으로 한다.
전처리기는, 자바 소스 파일에서 소스 코드를 파싱(parsing)하여, 프로그램 동작과 관련 있는 코드와 프로그램을 설명하는 주석에서 단어를 분류하여, 단어 집합으로 출력하는, 식별자 분석부; 식별자 분석부에서 출력된 단어 집합에서 소스 코드에서 사용되는 합성어를, 상기 합성어에서 분리된 단어들과, 상기 합성어 자체로 구분하여 출력하는, 식별자 토큰화부; 식별자 토큰화부에서 출력된 단어 집합에서, 어간을 추출하여 어간으로 이루어진 단어 집합을 출력하며, 어간과 원본단어를 대응시킨 어간 단어 사전을 생성하는, 스템머(stemmer); 스템머로부터 수신된 단어 집합과 어간 단어 사전에서, 기설정된 불용어와 기 설정된 불중요 단어를 제거하는 필터링을 행하는, 필터;를 포함하여 이루어진다.
불용어는 관사, 조사, 전치사를 포함하며, 불중요 단어는 소스 코드의 식별자에서 사용되는 ‘get’, ‘set'를 포함한다.
프로젝트 인스펙터는 프로젝트 아카이브를 읽어들여서, 해당 프로젝트가 가지고 있는 소스파일, 클래스 파일을 포함하는 설정 파일들을 추출하고, 자바 소스파일을 전처리기 및 호출 그래프 생성기로 전달하며, 호출 그래프는 각 클래스를 노드(node)로 하고, 각 클래스 내에 포함된 메서드 호출 정보를 간선(edge)으로 나타내되, 간선은 방향과 호출 횟수를 속성으로 갖는다.
페이지 랭커에서, 클래스는 웹페이지이며, 메서드의 호출정보는 웹페이지의 링크로서 나타내어 진다.
페이지 랭커에서 페이지랭크 값은
PR(A)=(1-d)/N+d(PR(T1)/C(T1)+ PR(T2)/C(T2)+…PR(Tn)/C(Tn))
(단, PR(A)는 웹 페이지 ‘A’의 페이지랭크 값를 의미하며, d는 댐핑팩터(Damping Factor)로 0과 1의 사이의 값이며, N은 전체 페이지 수이며, Tn은 웹 페이지 ‘A’를 가리키는 페이지이며, C(Tn)은 Tn이 가지고 있는 링크의 수 임) 에 의해 구하여 진다.
댐핑팩터(Damping Factor)인 d는 0.85이며, 보정계수는, 보정된 페이지랭크 값이 0 이상의 정수가 되게 하는 값으로, 보정계수는 200일 수 있다.
토픽 모델러는 LDA 알고리즘에서 LDA의 매개변수를 추정하기 위해 깁스 샘플링(Gibbs Sampling)방법을 사용하며, 스템머는 포터 스테밍 알고리즘(Porter’s Stemming Algorithm)을 사용한다.
또한, 본 발명의 소프트웨어 도메인 토픽 추출 시스템의 제어방법은, 전처리기는, 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드가 가지고 있는 단어 집합에서, 기 설정된 불용어와, 기 설정된 불중요 단어를 제거한 단어 집합인, 의미 있는 단어의 집합을 추출하는, 전처리 단계; 호출 그래프 생성기는, 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드를 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하여, 각 클래스와, 각 클래스 내에 포함된 메서드 호출 정보를 나타내는 호출그래프를 생성하는, 호출 그래프 생성 단계; 페이지 랭커는, 호출 그래프 생성 단계로부터 출력된 호출그래프의 각 클래스 및 각 클래스 내에 포함된 메서드 호출 정보를, 페이지랭크(PageRank) 알고리즘에 적용하여, 각 클래스별 페이지랭크 값을 생성하는, 페이지 랭크 단계; 코퍼스 생성기는, 전처리 단계에서 출력된 단어 집합들을 저장한 코퍼스(Copus)를 생성하고, 페이지 랭크 단계로부터 출력된 각 클래스별 페이지랭크 값을 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값만큼 각 클래스 식별자를 생성하여, 코퍼스에 추가하여 저장하는, 코퍼스 생성단계; 토픽 모델러는, 코퍼스 생성단계에서 출력된 코퍼스를 대상으로, 잠재적인 디리클레 할당 (Latent Dirichlet Allocation, LDA) 알고리즘을 적용하여, 코퍼스의 각 문서에 대해, 토픽들에 대한 분포 값을 검출하고, 각 토픽에 대한 단어 집합을 검출하는, 토픽 모델링 단계;를 포함하여 이루어진다.
전처리 단계는, 식별자 분석부가, 자바 소스 파일에서 소스 코드를 파싱(parsing)하여, 프로그램 동작과 관련 있는 코드와 프로그램을 설명하는 주석에서 단어를 분류하여, 단어 집합으로 출력하는, 기본단어 추출단계; 식별자 토큰화부가, 기본단어 추출단계에서 출력된 단어 집합에서 소스 코드에서 사용되는 합성어를, 상기 합성어에서 분리된 단어들과, 상기 합성어 자체로 구분하여 출력하는, 단어구분 단계; 스템머(stemmer)가, 식별자 토큰화부에서 출력된 단어 집합에서, 어간을 추출하여 어간으로 이루어진 단어 집합을 출력하며, 어간과 원본단어를 대응시킨 어간 단어 사전을 생성하는, 스테밍 단계; 필터는, 스테밍 단계에서 출력된 단어 집합과 어간 단어 사전에서, 기설정된 불용어와 기 설정된 불중요 단어를 제거하는 필터링을 행하는, 필터링 단계;를 포함하여 이루어진다.
또한, 본 발명은 소프트웨어 도메인 토픽 추출 시스템의 제어방법에 대한 컴퓨터 프로그램 소스를 저장한 기록매체를 특징으로 한다.
본 발명의 소프트웨어 도메인 토픽 추출 시스템은 자바 소스 파일에서 소스 코드가 가지고 있는 단어 집합 중 의미있는 단어 집합을 추출하고, 자바 소스 파일에서 식별자 간 동적 호출 관계를 추출한 호출 그래프를 생성하고, 페이지랭크(PageRank) 알고리즘을 통해 각 식별자에 따른 중요도 값(즉, 페이지랭크 값)를 할당하고, 상기 단어 집합에 페이지랭크 값를 활용하여 최종 분석 대상 문서를 생성하고, 생성된 문서에 LDA 기반 토픽 모델링을 적용하여 토픽별 단어 집합을 출력하게 함으로써, 프로젝트의 도메인 토픽을 얻을 수 있다..
본 발명은, 단어구분 단계에서 소스 코드에서 사용되는 합성어를, 상기 합성어에서 분리된 단어들 뿐만 아니라, 상기 합성어 자체를 포함하여 구분하며, 코퍼스 생성 단계에서는, 각 페이지랭크 값에 보정계수를 곱하여, 보정된 페이지랭크 값이 0 이상의 정수가 되게 하며, 보정된 페이지랭크 값만큼의 식별자를 각 문서에 추가하여 코퍼스를 생성하도록 하여, 보다 정확한 도메인 토픽을 추출하게 한다.
다시말해, 소프트웨어 내의 각 소스 코드는 하나의 문서라고 할 수 있고 소스 코드들로 구성된 하나의 소프트웨어는 문서 집합이라고 할 수 있으며, 문서 집합에는 토픽 모델링(Topic Modeling)을 적용함으로써 개발자가 소프트웨어의 도메인 토픽을 파악하는데 도움이 되는 결과를 내어줄 수 있으며, 한편, 소스 코드의 클래스로부터 추출되는 단어는 다른 단어들에 비해 토픽으로써의 의미가 더 크다. 이러한 사실에 기초하여, 본 발명의 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템(JTopic 시스템)은 PageRank 알고리즘을 통해 각 식별자에 중요도 값을 할당하고 이를 분석 대상 문서를 생성하는데 활용한다. 그리고 생성된 문서에 LDA 기반 토픽 모델링을 적용하여 시스템의 결과가 도메인 토픽을 추출하기에 용이하도록 하고 실제 대상 프로젝트의 도메인 토픽을 대표할 수 있는 도메인 토픽이 구성되도록 한다.
본 발명의 소프트웨어 특징 추출은 소프트웨어 재사용 관점에서 상당한 중요성을 가진다. 특징 추출 시스템은 기존 오픈소스 저장소에 저장되는 수많은 프로젝트들의 특징을 추출하여 사용자가 그와 비슷한 소프트웨어를 개발할 때 참고하거나 재사용할 수 있도록 도와주는 역할을 하며 이는 소프트웨어 개발의 속도를 늘리고 비용을 줄여주는 효과가 있어, 프로토타입 개발을 수월하게 하여 회사로 하여금 아이디어 구현에 큰 비용을 들이지 않도록 도와주는 역할을 한다. 따라서 정확한 토픽 추출은 개발자로 하여금 참고 혹은 재사용 가능한 소스코드를 빠르게 검색해 회사의 아이디어 구현 비용 절감에 큰 영향을 미칠 수 있다.
본 발명은 기존 특징 추출 시스템에 비해 PageRank, LDA 등의 알고리즘을 적절히 사용하여 좀 더 정확한 토픽을 추출하게 해주어 사용자로 하여금 참고하거나 재사용할 수 있는 오픈소스 코드를 보다 더 정확하게 추천해 줌으로써 소프트웨어 개발 비용을 절감할 수 있다.
도 1a는 본 발명의 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템의 개략적인 전체 구조를 설명하는 블럭도이다.
도 1b는 도 1a의 소프트웨어 도메인 토픽 추출 시스템의 전처리기를 개략적으로 설명하는 블럭도이다
도 2는 본 발명의 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템의 구동방법을 개략적으로 설명하는 흐름도이다
도 3는 본 발명의 소프트웨어 도메인 토픽 추출 시스템에서 처리가 필요한 각 매개변수의 값을 설정하는 설정부의 일예를 나타낸다.
도 4은 소스코드에서 기본 단어 추출 단계를 적용한 일예를 나타낸다.
도 5는 도 4의 기본단어 추출단계의 결과에 단어 구분 단계를 적용한 결과를 나타낸다.
도 6는 도 5의 단어 구분 단계의 결과에 스테밍 단계를 적용한 결과를 나타낸다.
도 7은 도 6의 스테밍 단계의 결과에 필터링 단계를 적용한 결과를 나타낸다.
도 8은 본 발명에서 JHotDraw 프로젝트를 대상으로 그래프를 생성한 결과의 예를 나타낸다.
도 9은 도 8의 호출 그래프에 페이지랭크 알고리즘을 적용한 결과를 나타낸다.
도 10은 LDA 알고리즘을 적용한 결과의 일예이다.
도 1b는 도 1a의 소프트웨어 도메인 토픽 추출 시스템의 전처리기를 개략적으로 설명하는 블럭도이다
도 2는 본 발명의 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템의 구동방법을 개략적으로 설명하는 흐름도이다
도 3는 본 발명의 소프트웨어 도메인 토픽 추출 시스템에서 처리가 필요한 각 매개변수의 값을 설정하는 설정부의 일예를 나타낸다.
도 4은 소스코드에서 기본 단어 추출 단계를 적용한 일예를 나타낸다.
도 5는 도 4의 기본단어 추출단계의 결과에 단어 구분 단계를 적용한 결과를 나타낸다.
도 6는 도 5의 단어 구분 단계의 결과에 스테밍 단계를 적용한 결과를 나타낸다.
도 7은 도 6의 스테밍 단계의 결과에 필터링 단계를 적용한 결과를 나타낸다.
도 8은 본 발명에서 JHotDraw 프로젝트를 대상으로 그래프를 생성한 결과의 예를 나타낸다.
도 9은 도 8의 호출 그래프에 페이지랭크 알고리즘을 적용한 결과를 나타낸다.
도 10은 LDA 알고리즘을 적용한 결과의 일예이다.
이하, 본 발명의 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템을 첨부한 도면을 참조하여 상세히 설명한다.
도 1a는 본 발명의 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템(즉, JTopic 시스템)의 개략적인 전체 구조를 설명하는 블럭도이고, 도 1b는 도 1a의 소프트웨어 도메인 토픽 추출 시스템의 전처리기를 개략적으로 설명하는 블럭도이다.
소프트웨어 도메인 토픽 추출 시스템(10)은, 도 1a에서와 같이, 프로젝트 인스펙터(Project Inspector)(70), 전처리기(100), 코퍼스 생성기(Copus Generator)(230), 호출 그래프 생성기(Call Graph Generator)(240), 페이지 랭커(Page Ranker)(250), 토픽 모델러(Topic Modeler)(260)를 포함하여 이루어진다.
프로젝트 인스펙터(70)는 프로그래밍 언어 Java 기반의 프로젝트 아카이브(확장자 jar)를 읽어서, 해당 프로젝트가 가지고 있는 소스 코드를 추출하게 하는 수단이다. 사용자가 특정 자바 프로젝트를 선택하면 프로젝트 인스펙터(70)가 프로젝트 아카이브(jar)의 압축을 해제하고, 그 프로젝트가 가지고 있는 소스(확장자 java) 파일, 클래스(확장자 class) 파일 및 다양한 설정 파일을 추출한다. 추출된 파일들 가운데서 소스 코드 분석을 위하여 자바 소스 파일(확장자: java)만을 전처리기(100)와 호출 그래프 생성기(240)로 전달한다.
전처리기(100)는 프로젝트 인스펙터(70)로부터 수신된 해당 프로젝트의 자바 소스 파일(확장자: java)에서 소스 코드를 분석하여 소스 코드가 가지고 있는 단어 집합 중 의미 있는 단어의 집합만을 추출한다. 전처리기(100)는 식별자 분석부(identfier analyzer)(110), 식별자 토큰화부(identfier tokenizer) (120), 스템머(stemmer)(130), 필터(filter)(140)를 포함하여 이루어진다.
식별자 분석부(110)는, 토픽과 관련 없는 프로그래밍 언어 식별자들을 제거하기 위해, 자바 소스 파일(확장자: java)에서 소스 코드를 파싱(parsing)하여, 프로그램 동작과 관련 있는 코드와 프로그램을 설명하는 주석에서 단어를 분류하고 추출하여, 단어 집합으로 출력한다.
식별자 토큰화부(120)는 식별자 분석부(110)에서 출력된 단어 집합에서 소스 코드에서 사용되는 합성어를, 상기 합성어에서 분리된 단어들과, 상기 합성어 자체로 구분하여, 단어 집합으로 출력한다.
스템머(130)는 식별자 토큰화부(120)에서 출력된 단어 집합에서, 단어의 어간(語幹)(또는 어근)을 추출하여 어간(또는 어근)으로 이루어진 단어 집합을 출력하며, 어간(어근)과 원본단어를 대응시킨 어간(또는 어근) 단어 사전을 생성한다. 스템머(130)는 후술되는 스테밍 알고리즘에 의해 수행된다.
필터(140)는 스템머(130)에서 출력된 단어 집합과 어간 단어 사전에서, 관사, 조사, 전치사를 포함하는 의미가 없는 불용어와 소스 코드의 식별자에서 사용되는 ‘get’, ‘set’을 포함하는 불중요 단어(즉, 중요성이 적은 단어)를 제거하는, 필터링을 행한다. 필터(140)에서 출력된 단어 집합은 코퍼스 생성기(230)로 전송된다. 경우에 따라서, 불중요 단어는 상품 출하시 제조사 등에 의해, 또는 사용 초기에 사용자에 의해 설정될 수 있다.
호출 그래프 생성기(240)는, 프로젝트 인스펙터(70)로부터 수신된 자바 소스 파일(확장자: java)로 이루어진 프로젝트(자바 프로젝트)에서, 프로젝트의 각 클래스를 노드(node)로 하고, 각 클래스 내에 포함된 메서드 호출 관계(즉, 메서드 호출 정보)를 간선(edge)으로 나타내되, 간선은 방향(호출바향)과 호출 횟수를 속성으로 갖는 호출 그래프를 생성한다. 이때, 호출 그래프 생성기(240)와 각 프로젝트의 링크는, 인증 등의 절차를 거치기 위한 프로젝트 인스펙터(70)을 통해, 이루어진다.
즉, 호출 그래프 생성기(240)는, 프로젝트 인스펙터(70)에서 추출한 소스 코드를 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하고, 각 클래스와 메서드의 연계 관계를 분석하여 호출 관계를 파악한다. 각 클래스는 웹페이지로 간주하고, 메서드의 호출 관계를 웹페이지의 링크로 간주하면 특정 클래스가 가진 메서드의 호출 관계는 페이지 랭크(250)에서 사용하는 호출 관계로 대응 가능하다.
페이지 랭커(250)는 호출 그래프 생성기에서 출력된 호출 그래프에, 각 클래스별로 페이지랭크(PageRank) 알고리즘을 적용하여 얻어진, 페이지랭크 값(가중치)을, 각 클래스의 속성으로 추가하며, 각 클래스별 페이지랭크 값을 코퍼스 생성기(Copus Generator)(230)로 전송한다.
즉, 각 클래스는 웹페이지로 간주하고, 메서드의 호출 관계를 웹페이지의 링크로 간주하며, 페이지 랭커(250)는 각 클래스가 가지고 있는 가중치와 메서드의 호출 관계를 활용하여 페이지 랭크를 적용하면 해당 프로젝트가 포함하는 모든 클래스에 대해 가중치, 즉, 페이지랭크 값(페이지 랭크 점수)를 생성할 수 있다. 다시말해, 각 노드(Nodes)는 하나의 웹 페이지에 대응되고 간선(Edges)은 하나의 웹페이지가 다른 웹페이지에 대한 링크를 포함한다는 것을 의미한다.
코퍼스 생성기(Copus Generator)(230)는, 전처리기(100)에서 수신된 단어 집합들을 저장한 코퍼스(corpus)를 생성하고, 페이지 랭커(PageRanker)(250)로부터 수신된 각 클래스별 페이지랭크 값(가중치)을 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값만큼 각 클래스 식별자를 생성하여, 코퍼스(corpus)에 추가하며, 이렇게 생성된 코퍼스(corpus)를 출력한다. 여기서, 코퍼스(corpus)는 각 문서별(각 클래스 혹은 파일)로 생성된 단어집의 집합이라고 할 수 있다. 또는 코퍼스(corpus)는 각 클래스의 문서별로 단어 집합이 저장된 단어집의 집합(문서 집합)이라 할 수 있다. 코퍼스(corpus)는 문서-단어 매트릭스 이라고도 할 수 있다.
즉, 페이지 랭커(250)에서 추출되는 페이지랭크 값은 1보다 많이 작은 수치여서, 코퍼스 생성기(230)는, 상기 페이지랭크 값에 보정계수(예로, 200)을 곱하여 1 이상의 수치가 나오도록 조정한다. 보정계수는 실험을 통하여 결정된다.
일반적으로, 코퍼스(corpus)에 단어집(wordset)이 포함되며, 단어집(wordset)에는 단어(word)가 포함된다. 자바 소스 파일을 보면 클래스 단위로 파일이 만들어져 있고 그 안에 함수(메서드)들이 들어 있는데, 클래스 안에 있는 함수나 변수 등의 이름을 구성하는 의미 있는 식별자(identifier; public void test() 라고 하는 메서드에서는 test를 지칭)를 추출하면, 각각 하나의 단어가 된다. 그리고 이 단어들을 모아서 단어집(wordset)을 구성한다. 단어집은 각 단어별로 고유 인덱스를 가지고 있다. 개별 문서(d)는 각 소스 파일(= 클래스)을 대상으로 전처리가 끝난 단어들로 구성되고, 코퍼스(D)는 이러한 단어집을 기반으로 구성된 문서(d)들의 집합이라고 볼 수 있다.
그리고, 여기서‘최종 분석 대상 문서’는 코퍼스이다. 이 발명은 코퍼스를 분석하는 기술로, ‘최종 분석 대상 문서’는, 소스 코드가 전처리 단계부터 페이지랭커 등을 거치면 단어 구성이 많이 변하기 때문에 최종적으로, 이 시스템에서 처리해야 할 문서라는 의미로 지정한 명칭이다.
다시말해, 코퍼스는 단어들로 구성된 각각의 문서(클래스 혹은 파일)의 집합으로 구성된다. 결국 코퍼스 자체는 하나의 프로젝트에 나오는 모든 단어들이 들어 있다고 보면 되는 것으로, 세부적으로 코퍼스는 문서들을 포함하고, 각 문서는 단어들을 포함하는 것이다. 코퍼스에 저장될 때는 파일을 읽어오는 순서대로 뒤쪽에 추가된다. 따라서 알파벳 순으로 파일을 읽었으면 해당 순서에 따라 단어들을 코퍼스에 추가한다.
토픽 모델러(260)는 코퍼스 생성기에서 생성된 코퍼스(corpus)를, 잠재적인 디리클레 할당(LDA) 분석을 위한 문서 집합으로 설정하고, 상기 코퍼스에서, 잠재적인 디리클레 할당(배분) (Latent Dirichlet Allocation)(이하 LDA라 함) 알고리즘을 이용하여, 토픽 모델링 과정을 거쳐 토픽을 추출한다. 즉, 토픽 모델러(260)는 코퍼스 생성기에서 생성된 문서 집합(즉, 코퍼스(corpus))을 대상으로 잠재적인 디리클레 할당(LDA) 알고리즘을 적용하여, 문서 집합의 각 문서(즉, 코퍼스(corpus)의 각 단어)에 대해, 임의의 토픽들에 대한 분포 값을 검출하고, 각 토픽에 대한 단어 집합을 검출한다. 그리고 사용자는 출력된 결과를 확인하여 각 단어 집합 즉, 토픽에 대해서 직접 식별자를 부여하거나 토픽의 단어 목록 전체를 토픽 이름으로 명명할 수 있다.
LDA 기반 토픽 모델링은 기본적으로 각 문서가 k 개의 토픽 중에 하나 이상을 다룬다고 가정하고 있으며, 모델링의 결과물인 토픽이란 임의의 토픽에 대한 단어 집합이다
본 발명에서 LDA 기반 토픽 모델링 적용하기 위하여 MALLET Topic Modeling Toolkit을 사용할 수 있다.
다음은, 본 발명에서 사용되는 스테밍(Stemming) 알고리즘, 페이지랭크(PageRank) 알고리즘, 잠재적인 디리클레 할당(LDA) 알고리즘을 설명한다. 이들 알고리즘은 공지된 것으로, 여기서 간략히 설명한다.
스테밍(Stemming) 알고리즘은 단어의 어간(語幹)을 추출하는 알고리즘으로, 본 발명에서는 포터 스테밍 (Porter’s Stemming) 알고리즘을 사용한다. 포터 스테밍 알고리즘은 어형이 변형된 단어로부터 접사 등을 제거하여 해당 단어의 어간을 분리한다. 어형이 변형된 단어라 함은, 'drawing', 'deleted' 등과 같이 단어 'draw', 'delete'로부터 파생된 단어를 말한다. 어간과 어근은 반드시 같아야 할 필요는 없으며, 어근과 차이가 있어도 연관된 단어들이 일정하게 동일한 어간으로 맵핑되게 하는 것이 스테밍 알고리즘의 목적이다. 예를 들어 ‘deleting’, ‘deletion’, ‘deleted’의 어간을 추출하면 ‘delet’ 가 추출이 되고, ‘argue’, ‘argued’, ‘arguing’ 은 ‘argu’가 추출이 된다. 그러나 ‘argument’, ‘arguments’는 ‘argument’가 추출된다.
페이지랭크(PageRank) 알고리즘은 웹 페이지의 상대적 중요성을 측정하기 위해 웹 그래프 기반으로 웹 페이지의 순위(rank)를 정하는 방법이다. 모든 웹페이지들은 forward link(현재 페이지에서 다른 페이지를 연결)와 backlink(다른 페이지에서 현재 페이지를 연결)를 가지고 있고, 여기서 페이지랭크 알고리즘은, 중요한 페이지들이 많은 다른 웹 페이지로부터 연결되어 진다는 점을 착안하여 구성된다. 즉, 다른 페이지들로부터 링크(link)가 많이 걸려 있는 페이지(incoming link)는 순위가 높고, 높은 순위를 가진 페이지에게 링크된 페이지들은 또한 순위가 높으며, 다른 페이지를 많이 연결한(outgoing link) 페이지는 순위를 결정하는데 거의 영향을 미치지 않는다는 것을 전제로 한다. 이와 같은 아이디어의 연장으로 페이지랭크(PageRank)는 다른 페이지에서 오는 링크를 같은 비중으로 세는 대신에, 그 페이지에 걸린 링크 숫자를 정규화(normalize)하는 방식을 사용하며, 다음과 같은 수식으로 나타낼 수 있다.
PR(A)=(1-d)/N+d(PR(T1)/C(T1)+ PR(T2)/C(T2)+…PR(Tn)/C(Tn))
여기서, PR은 페이지랭크(PageRank) 점수를 의미하고, PR(A)는 웹 페이지 ‘A’의 PageRank 값(점수)를 의미한다. T1, T2, ... Tn은 해당 페이지를 가리키는 다른 페이지들을 의미한다. PR(T1) 이라고 하면 T1페이지의 페이지 랭크값을 나타낸다. d는 0과 1 사이의 값을 가지는 댐핑팩터(Damping Factor, 감쇠지수, 감쇠요소) 라고 하며, 사용자가 해당 페이지가 가진 링크를 통해 다른 페이지로 이동할 확률을 의미한다. d의 값은 실험을 통해 정해지는데 일반적으로 0.85로 설정한다. N은 전체 페이지 수를 의미한다. Tn은 은 웹 페이지 ‘A’를 가리키는 페이지를 의미하며 C(Tn)은 Tn이 가지고 있는 링크의 수를 의미한다. d=1 이라고 가정하고 수식을 정리하면, ‘어떤 페이지 A의 페이지 랭크는 그 페이지를 인용하고 있는 다른 페이지 T1, T2, T2, .. 가 가진 페이지 랭크를 정규화시킨 값의 합’이 된다. 즉, 특정 페이지의 페이지랭크(PageRank) 점수는 해당 페이지를 인용 또는 참조하고 있는 다른 페이지들의 페이지랭크(PageRank) 점수를 정규화한 값의 합이 되며, 각 페이지는 페이지랭크(PageRank) 점수를 할당 받게 된다. A의 페이지 랭크는 A라는 페이지를 가리키고 있는 다른 페이지의 페이지 랭크 값이 높을수록(중요할수록) 더 높아진다. 예를 들어, A의 웹페이지를 가리키는 페이지가 T1, T2, ..., T5의 다섯 개가 있고, 이들을 정규화한 값이 0.34일 경우, A의 페이지 랭크는 0.34가 된다. 그리고 이 페이지 랭크 값은 A가 가리키는 또 다른 페이지의 페이지 랭크를 계산하는데 쓰인다. T1의 페이지 랭크는 마찬가지로 T1을 가리키는 다른 페이지들의 페이지 랭크 값으로부터 구하며, 재귀적으로 반복되어 계산된다. 재귀 계산을 종료하기 위해 ‘제한 조건’을 설정할 수 있다.
즉, 페이지랭크는 월드 와이드 웹(World Wide Web)과 같은 링크 구조를 가진 문서 집합에 대하여, 각각의 문서에 가중치를 부여하여 중요도에 따라 문서들의 순위를 매기는 알고리즘으로, 널리 공지된 방법으로 보다 상세한 설명은 생략한다.
본 발명에서는 페이지 랭크 알고리즘은 다음과 같이 사용된다.
프로젝트 인스펙터에서 추출한 소스 코드를 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하고, 각 클래스와 메서드의 연계 관계를 분석하여 호출 관계를 파악한다. 각 클래스는 웹페이지로 간주하고, 메서드의 호출 관계를 웹페이지의 링크로 간주하면 특정 클래스가 가진 메서드의 호출 관계는 페이지 랭크에서 사용하는 호출 관계로 대응 가능하다. 각 클래스가 가지고 있는 가중치와 메서드의 호출 관계를 활용하여 페이지 랭크를 적용하면 해당 프로젝트가 포함하는 모든 클래스에 대해 가중치(페이지 랭크 값)를 생성할 수 있다. 이렇게 추출되는 랭크 값은 1보다 많이 작은 수치이고, 해당 수치에 보정계수 200을 곱하여 1 이상의 수치가 나오도록 조정한다. 보정계수는 실험을 통하여 결정된다.
페이지 랭커(PageRanker)(250)는 이와 같은 페이지 랭크 알고리즘을 활용해 각 클래스에 가중치를 부여하는 일련의 작업을 수행하고, 각 클래스 식별자를 가중치만큼 생성하여, 전처리기(100)에서 전처리를 거친 단어들이 기 저장된, 코퍼스(corpus)(미도시)에 추가한다. 즉, 해당 코퍼스에 등장하는 단어가 많을수록 토픽 모델러(260)에서 토픽 모델링을 수행할 때 의미 있는 주제로 선정될 확률이 높다는 것을 기반으로 제작된 기능이다. 코퍼스 생성기(Copus Generator)(230)는, 전처리기(100)에서 전처리를 거친 단어들로부터 코퍼스(corpus)를 생성하고, 페이지 랭커(PageRanker)(250)로부터 수신된 가중치만큼 생성된 각 클래스 식별자를 상기 코퍼스(corpus)에 추가할 수 있다.
페이지 랭커(PageRanker)(250)과 토픽 모델러(TopicModeler)(260)의 연결에 있어서, 우선, 앞에서 설명한 것과 같이 페이지 랭커(250)와 전처리기(100)를 활용하여 소스 코드로부터 코퍼스(corpus)를 생성한다. 페이지 랭커(250)로 부여된 가중치 수치에 따라 클래스 식별자를 추가적으로 생성하고, 전처리를 거쳐서 생성된 초기 코퍼스에 해당 식별자들을 추가한다. 이와 같은 과정을 거치면, 예를 들어 가중치 3을 가진 'DrawCircle'이라고 하는 클래스 식별자는 'DrawCircle, DrawCircle, DrawCircle'과 같이 3개의 단어를 코퍼스에 추가한다. 결과적으로 코퍼스에는 4개의 'DrawCircle' 이라고 하는 단어가 존재하게 된다. 이렇게 구성된 코퍼스을 토픽 모델링을 위해 사용한다.
잠재적인 디리클레 할당(LDA) 알고리즘은 자연어 혹은 단어들의 집합으로 구성된 텍스트 문서 집합에서 각 문서에 존재하는 토픽(주제)들을 추출하는 알고리즘이다. 즉, LDA는 자연어로 구성된 텍스트 문서 집합으로부터 생성 확률 모델(Generative Probabilistic Model)을 통해 확률 토픽 모델을 유도하는 알고리즘으로 각 문서에 어떤 토픽들이 존재하는지에 대한 확률 모델이다.
모든 문서는 토픽을 가지고 있고, 문서들은 여러 개의 토픽들과 연관되어 있으며, 문서에 등장하는 단어들은 그 토픽들을 이루기 위한 요소로 간주된다. 즉, LDA는 문서에 사용된 단어들이 토픽을 구성하고, 토픽이 합쳐져서 문서를 구성하는 형태로 모델링한다. 그리고 문서 내에서 단어들 간의 동시등장(co-occurrence) 빈도를 확률화 하여 이로부터 숨겨진 토픽들을 도출한다. 다시말해, LDA에서의 문서는 여러 개의 토픽을 포함하고 있으며, 문서 내에 등장하는 단어의 순서에 상관하지 않고 단어의 출현 횟수만을 고려한다. 토픽별 단어 수의 분포를 기반으로 각 문서에서 출현하는 단어 수의 분포를 분석하여 해당 문서가 어떤 토픽들을 다루고 있을지를 예측하는 것이다.
본 발명에서는 자바 프로젝트로부터 원시의 소스코드를 추출하여 해당 코드를 전처리 과정과 가중치설정 과정을 거쳐 생성된 코퍼스을 LDA 분석을 위한 문서로 설정하고, 이 코퍼스에서 토픽 모델링 과정을 거쳐 토픽을 추출한다. 예를 들어, JHotDraw 프로젝트가 초기 분석 단계를 거치면 "file, draw, point, view, imag, figur, packag, drop, .." 등의 단어로 구성된 코퍼스이 생성된다. 여기에 LDA를 활용하여 토픽 모델링을 수행하면, 'draw', 'select', 'tool', 'connect' 등의 단어들이 각각의 분산 값 ‘0.154', '0.74', '0.065', '0.058' 등과 함께 추출된다. 이 수치는 각 단어가 전체 문서(코퍼스)에서 차지하는 중요도로 판단할 수 있으며, 일정 수치 이상의 값을 가진 단어들을 활용하여 해당 프로젝트의 주요 기능 혹은 특징(feature) 목록으로 설정한다.
본 발명에서 활용한 LDA 알고리즘은 깁스 샘플링 기반으로 구성된다. 깁스 샘플링은 먼저 각 문서에 K개의 토픽들 중 하나를 임의로 할당한다. 이후 각 문서들은 토픽을 갖게 되고, 모든 토픽은 단어 분포를 갖게 된다. 초기의 이 분포 값은 잘못된 값이므로 이를 개선하기 위해서 다음과 같은 작업을 수행한다.
각 문서를 d, d에 포함된 각 단어를 w, w 중에 존재하는 토픽 t에 대해서, 다음 두 가지 계산을 수행한다. 첫째, 문서 d의 단어들 중 토픽 t에 해당하는 단어들의 비율 p(t|d)를 계산한다. 둘째, 단어 w를 갖고 있는 모든 문서 중 토픽 t가 할당된 비율 p(w|t)를 계산한다. 이후 p(t|d) * p(w|t)(즉, p(t|d)와 p(w|t)를 곱함)에 따라 토픽 t를 새로 고른다. 이 생성모델(generative model)에 따라, 이것은 토픽 t가 단어 w를 생성할 확률이고, 따라서 현재 단어들(문서들)의 토픽을 해당 확률에 따라 다시 설정한다. 즉, 해당 단계에서는, 현재 측정하고 있는 단어 w 외에 다른 단어들이 전부 알맞게 할당되었다고 가정하고, 확률을 계산하여 현재 단어 w를 갱신한다. 이와 같은 일련의 과정들을 충분히 반복하여 안정적인 상태를 만들면 문서에 존재하는 토픽과 그 분포를 확인할 수 있다. 이 과정을 본 발명에 적용하면, 소스코드를 문서 d, 문서를 구성하는 자바의 클래스, 메서드 식별자를 단어 w, 해당 단어 중 중요 식별자를 토픽 t로 설정할 수 있고, 확률 생성 모델을 통하여 프로젝트 전체의 토픽들을 추출할 수 있다.
잠재적인 디리클레 할당(LDA) 알고리즘은 토픽 추출에 일반적으로 사용되는 방법으로, 널리 공지된 것으로 보다 상세한 설명은 생략한다.
도 2는 본 발명의 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템의 구동방법을 개략적으로 설명하는 흐름도이고, 도 3은 본 발명의 소프트웨어 도메인 토픽 추출 시스템에서 처리가 필요한 각 매개변수의 값을 설정하는 설정부의 일예를 나타낸다.
초기화단계(미도시)로, 도 3에서와 같이, 소프트웨어 도메인 토픽 추출 시스템의 구동에 필요한 입력정보를 입력한다. 도 3에서 본 발명의 소프트웨어 도메인 토픽 추출 시스템의 입력 정보는 모델링 대상 소프트웨어의 자바 소스 코드 및 자바 아카이브 파일(jar)파일과 사용자가 확인해야 할 토픽의 수, 각 토픽에 대해 출력해야 할 단어의 수, 그리고 깁스 샘플링(Gibbs sampling) 반복 횟수가 있다.
프로젝트 인스펙터의 처리단계(S70)로, 사용자가 특정 자바 프로젝트를 선택하면 프로젝트 인스펙터(70)가 프로젝트 아카이브(jar)의 압축을 해제하고, 그 프로젝트가 가지고 있는 소스(확장자 java) 파일, 클래스(확장자 class) 파일 및 다양한 설정 파일을 추출하고, 추출된 파일들 가운데서 소스 코드 분석을 위하여 자바 소스 파일(확장자: java)만을 전처리기(100)와 호출 그래프 생성기(240)로 전달한다.
전처리단계(S100)로, 전처리기(100)에서 이루어지며, 프로젝트 인스펙터(70)로부터 수신된 자바 소스 파일(확장자: java)로 이루어진 프로젝트에서 소스 코드를 분석하여 소스 코드가 가지고 있는 단어 집합 중 의미 있는 단어의 집합만을 추출한다. 전처리단계(100)는 기본단어 추출단계(S110), 단어구분 단계(S120), 스테밍 단계(S130), 필터링 단계(S140)를 포함한다.
LDA 기반 토픽 모델링을 적용하기 위해서는 분석 대상 문서 집합이 요구된다. 프로젝트 내의 소스 코드 파일들은 각각이 하나의 문서로 대응될 수 있으며 프로젝트는 문서 집합으로 대응될 수 있다. 하지만 소스 코드 파일은 일반적인 문서와는 다르게 구조적으로 구성된 문서이기 때문에 그 자체를 토픽 모델링의 대상으로 사용하기에 적합하지 않다.
소스 코드가 자체적으로 분석 대상 문서로써 사용되기에 부적합한 이유는 다음과 같은 특징 때문이다. 첫째, 프로그래밍 언어의 키워드 및 예약어에 있어서, 토픽과 관련 없는 프로그래밍 언어의 예약어 및 키워드 public, private, for, if, else 등의 단어가 존재한다. 둘째, 주석 내 예약어에 있어서, 소스 코드의 주석 중에 자바 API 문서를 생성하기 위한 문법인 JavaDoc과 관련된 예약어는 토픽과 연관성이 거의 없는 param, return, author, exception, see, serial 등의 단어가 존재한다. 셋째, 합성어에 있어서, 주석 및 식별자의 getDrawingView, getConnectedTextTool과 같은 합성어에는 get, set과 같이 토픽으로써 상대적인 중요도가 낮은 단어와 Drawing, View, ConnectedTextTool 등과 같이 중요도가 높은 단어의 합성어가 존재한다. 넷째, 불용어에 있어서, 관사, 전치사, 조사 등 단어 및 토픽으로써 의미가 없는 단어가 존재한다.
따라서, 소스 코드를 토픽 모델링의 대상으로 사용하기 위해서는 위와 같은 특징을 처리하여 단어 집합을 생성하며, 코퍼스 생성기는 생성된 단어 집합을 활용하여 문서를 생성한다.
우선, 기본 단어 추출단계(S110)에 관하여 설명한다.
기본 단어 추출 단계(S110)는, 식별자 분석부(110)에서, 토픽과 관련 없는 프로그래밍 언어 식별자들을 제거하기 위해, 자바 소스 파일(확장자: java)에서 소스 코드를 파싱(parsing)하여, 프로그램 동작과 관련 있는 코드와 프로그램을 설명하는 주석에서 단어를 분류하고 추출하여, 단어 집합으로 출력한다.
도 4는 소스코드에서 기본 단어 추출 단계를 적용한 일예를 나타낸다.
즉, 도 4는, 프로젝트 JHotDraw의 소스 코드 중 하나인 PertFigureCreationTool.java 파일에 기본 단어 추출 단계를 적용한 결과로서, 도 4의 (a)는 프로그램 소스 코드로서, PertFigureCreationTool.java 파일의 예를 나타내며, 도 4의 (b)는 도 4의 (a)의 프로그램 소스 코드에서 프로그래밍 예약어 및 프로그래밍 시에만 사용되는 불용어의 처리가 완료된 후(즉, 삭제된 후)에 추출된 기본 단어의 결과이다.
다음은 단어 구분(Word Splitting) 단계(S120)에 대해서 설명한다.
단어 구분 단계(S120)는, 식별자 토큰화부(120)에서 행하여 지며, 기본 단어 추출 단계(S110)의 결과, 즉, 식별자 분석부(110)에서 출력된 단어 집합에서, 소스 코드에서 사용되는 합성어를, 그 합성어에서 분리된 단어들과, 그 합성어 자체로 구분하여, 단어 집합으로 출력한다.
소스 코드에서 사용되는 식별자 및 주석 내 단어는 카멜 케이스(Camel-Case, 카멜 표기법), 언더스코어(Underscore) 등의 프로그래밍 언어의 명명 규칙에 따라 작성되기 때문에 많은 합성어가 존재한다. 이러한 합성어는 한 가지 이상의 의미 있는 단어들로 이루어지므로 단어별로 분리될 필요가 있으며, 합성어 자체로도 중요한 의미를 가질 수 있으므로 원본 단어 역시 존재하도록 한다. 명명 규칙에 따른 단어 구분 예로서, 카멜케이스(Camel Case)는 클래스 명이 DrawApplication일 경우, 이를 세 개의 단어 ‘Draw’, ‘Application’, ‘DrawApplication’으로 구분한다. 또한, 언더스코아(Underscore)는 메서드 명이 draw_sample_application일 경우, 이를 ‘_’ 문자를 기준으로 분리하여 ‘draw’, ‘sample’, ‘application’, ‘draw_sample_application’으로 구분한다.
도 5는 도 4의 기본단어 추출단계(S110)의 결과에 단어 구분 단계(S120)를 적용한 결과를 나타낸다.
도 5의 (a)는 도 4의 (b)와 같은 것으로, 즉, 도 4의 기본단어 추출단계의 결과이고, 도 5의 (b)는 도 5의 (a)의 소스 코드에서 사용되는 합성어를, 그 합성어에서 분리된 단어들과, 그 합성어 자체로 구분한 결과이다.
다음은 스테밍(Stemming) 단계(S130)에 대하여 설명한다.
스테밍 단계(S130)는 스템머(130)에서 행하여 지며, 단어 구분 단계(S120)의 결과, 즉, 식별자 토큰화부(120)에서 출력된 단어 집합에서, 단어의 어간(어근)을 추출하여 어간(또는 어근)으로 이루어진 단어 집합을 출력하며, 어간(어근) 단어 사전(즉, 어간과 원본단어를 대응시킨 사전)을 생성한다. 스테밍 단계(S130)는 스테밍 알고리즘에 의해 수행된다.
스테밍(Stemming)은 어간을 추출하는 것을 말한다. 일반적인 문서뿐만 아니라 소스 코드 내의 단어들은 다양한 형태로 사용되는데 이를 스테밍하여 하나의 어간으로 표현한다. 예를 들면, ‘Draw’, ‘Draws’, ‘Drawing’란 단어는‘Draw’라는 하나의 어간으로 표현된다. 본 발명의 스테밍 단계에서는 포터 스테밍 알고리즘(Porter’s Stemming Algorithm)을 사용하여 원본 단어를 포함하는 어근-단어 사전을 생성하여 어근과 원본 단어 모두가 출력이 가능하다.
도 6는 도 5의 단어 구분 단계의 결과에 스테밍 단계를 적용한 결과를 나타낸다.
도 6이 (a)는 도 5의 (b)와 같은 것으로, 즉, 도 5의 단어 구분 단계의 결과이고, 도 6의 (b)는 도 6의 (a)에 스테밍을 적용한 결과를 나타낸다. 이때 생성된 어근-단어 사전을 표 1에 나타낸다.
다음은 필터링(Filtering)단계(S140)를 설명한다.
필터링 단계(S140)는 필터(140)에서 행하여 지며, 스테밍 단계(S130)의 결과, 스템머(130)에서 출력된 단어 집합과 어근 단어 사전에서, 관사, 조사, 전치사를 포함하는 의미가 없는 불용어와 소스 코드의 식별자에서 사용되는 ‘get’, ‘set’을 포함하는 불중요 단어(즉, 중요성이 작은 단어)를 제거 한다. 필터(140)에서 행하여진 필터링 단계(S140)의 결과는 코퍼스 생성기(230)로 전송된다.
다시말해, 스테밍(Stemming) 단계(S140)까지 거침에 의해 얻어진 모든 단어가 토픽으로 추천될 가능성이 있는 것이 아니다. 필터링 단계에서는 텍스트 문서와 주석 내에서 흔히 사용되는 관사, 조사, 전치사 등 단어로써 의미가 없는 불용어와 소스 코드의 식별자에서 흔히 사용되는 ‘get’, ‘set’ 등의 상대적 중요성이 매우 작은 단어를 단어 집합과 어근-단어 사전에서 제거 한다. 맬릿(MALLET)에서 사용하는 불용어 목록에, 본 발명의 소프트웨어 도메인 토픽 추출 시스템에서 정의한 불용어 단어들을 추가하여 필터링을 적용한다.
도 7은 도 6의 스테밍 단계의 결과에 필터링 단계를 적용한 결과를 나타낸다.
도 7이 (a)는 필터링 단계를 적용하기 전으로, 도 6의 (b)와 같은 것으로, 즉, 도 6의 스테밍 단계의 결과이다. 도 7의 (b)는 도 7의 (a)에 필터링 단계를 적용한 결과를 나타낸다. 표 2는 필터링 단계에 의해 표 1의 어근-단어 사전의 변화를 나타낸다.
호출 그래프 생성단계(S210)는 호출 그래프 생성기(240)에서 행하여 지며, 프로젝트 인스펙터(70)로부터 수신된 자바 소스 파일(확장자: java)로 이루어진 프로젝트에서, 프로젝트의 각 클래스를 노드(node)로 하고, 프로젝트의 각 클래스 내에 포함된 메서드 호출 관계를 간선(edge)으로 나타내되, 간선은 방향과 호출 횟수를 속성으로 갖는 호출 그래프를 생성한다. 이때, 호출 그래프 생성기(240)와 각 프로젝트의 링크는, 인증 등의 절차를 거치기 위한 프로젝트 인스펙터(70)를 통해, 이루어질 수 있다.
다시말해, 호출 그래프 생성단계(S210)에서, 호출 그래프 생성기(240)는, 프로젝트 인스펙터의 처리단계(S70)의 결과인, 프로젝트 인스펙터(70)에서 추출한 소스 코드를, 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하고, 각 클래스와 메서드의 연계 관계를 분석하여 호출 관계를 파악한다.
이때, 각 클래스는 웹페이지로 간주하고, 메서드의 호출 관계를 웹페이지의 링크로 간주하면 특정 클래스가 가진 메서드의 호출 관계는 페이지 랭크(250)에서 사용하는 호출 관계로 대응 가능하다. 일반적으로, 자바 프로젝트는 많은 수의 클래스로 구성되어있으며 클래스는 생성자 또는 클래스가 포함하고 있는 메서드를 통해 다른 클래스들과 연결된다. 하나의 프로젝트를 WWW(World Wide Web)에 대응시킨다면 클래스는 웹 페이지로, 메서드 호출 관계는 웹 페이지의 링크로 대응시킬 수 있다. 이렇게 대응된 페이지들은 페이지랭크(PageRank) 알고리즘 적용이 가능한데, 호출 그래프 생성기는 해당 프로젝트에 페이지랭크 알고리즘을 적용하기 위해서 프로젝트의 클래스 및 메서드 간 호출 그래프를 생성한다.
호출 그래프 생성기에서는 먼저, 프로젝트로부터 호출, 피호출 관계에 있는 클래스 및 호출 횟수를 추출한다. 표 3은 추출된 호출, 피호출 클래스 및 호출 횟수의 일예를 나타낸다.
그리고, 클래스를 노드(node)로 하고 클래스 내에 포함된 메서드 호출 관계를 간선(edge)으로 하는 그래프를 생성한다. 간선은 방향과 호출 횟수를 속성으로 갖는다.
도 8은 본 발명에서 JHotDraw 프로젝트를 대상으로 그래프를 생성한 결과의 예를 나타낸다.
도 8의 그래프에서, 클래스 PertFigureCreationTool은 세 개의 클래스 PertApplet, PertApplication, PertFigureCreation으로부터 각각 2, 2, 1회 호출되고 있다는 사실을 확인할 수 있다.
호출 그래프 생성기를 통해 만들어진 그래프는 페이지랭크 단계, 즉, 페이지랭크(PageRank) 알고리즘의 입력으로 사용된다.
페이지 랭크단계(S220)는 페이지 랭커(PageRanker)(250)에서 행하여 지며, 호출 그래프 생성단계(S210)의 결과인 호출 그래프에, 각 클래스별로 페이지랭크(PageRank) 알고리즘을 적용하여 얻어진, 페이지랭크 값(가중치)을, 각 클래스의 속성으로 추가하며, 각 클래스별 페이지랭크 값을 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값을 코퍼스 생성기(Copus Generator)(230)로 전송한다.
즉, 페이지 랭크단계(S220)에서, 각 클래스는 웹페이지로 간주하고, 메서드의 호출 관계를 웹페이지의 링크로 간주하며, 페이지 랭커(250)는 각 클래스가 가지고 있는 가중치와 메서드의 호출 관계를 활용하여 페이지 랭크를 적용하면 해당 프로젝트가 포함하는 모든 클래스에 대해 가중치, 즉, 페이지랭크 값(페이지 랭크 점수)를 생성할 수 있다. 이렇게 추출되는 페이지랭크 값은 1보다 많이 작은 수치이고, 해당 수치에 기 설정된 보정계수(예로, 200)을 곱하여 1 이상의 수치가 나오도록 조정한다.
도 9는 도 8의 호출 그래프에 페이지랭크 알고리즘을 적용한 결과를 나타낸다.
도 9에서, 각 노드는 페이지랭크 값를 속성으로 가지며 점수가 높을수록 상대적 중요성이 크다는 것을 의미하며, 여기서, 페이지랭크의 댐핑팩터 d의 값은 0.85로 사용하였다.
코퍼스 생성 단계(S230)는 코퍼스 생성기(230)에서 행하여지며, 코퍼스 생성기(230)는, 전처리단계(S100)의 결과인, 전처리기(100)에서 출력된 단어 집합들을 저장하는 코퍼스(corpus)를 생성하고, 페이지 랭크단계(S220)의 결과인, 페이지 랭커(PageRanker)(250)로부터 출력된 페이지랭크 값(가중치)을 수신하며, 각 페이지랭크 값에, 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값만큼의 식별자를 상기 코퍼스(corpus)에 추가한다.
즉, 코퍼스 생성 단계(S230)는 필터링 단계(S140)의 결과인 단어 집합을 수신하여 코퍼스(corpus), 즉, 문서를 생성하고, 또한 페이지 랭커(250)로부터 페이지 랭크단계(S220)의 결과인 페이지랭크 값를 수신하며, 각 페이지랭크 값에 보정계수를 곱하여, 보정된 페이지랭크 값가 0 이상의 정수가 되게 하며, 보정된 페이지랭크 값만큼의 식별자를 각 문서에 추가하여 문서 집합을 생성한다. 다시말해, 모든 클래스 식별자의 페이지랭크 값는 1보다 작은 값을 가지는데, 본 발명에서는 의미 있는 수치를 만들기 위해 각 페이지랭크 값에 특정값, 즉 보정계수를 곱하여, 보정된 페이지랭크 값가 0 이상의 정수가 되게 하였다. 보정된 페이지랭크 값만큼의 식별자를 각 문서에 추가하여 토픽 모델링 시 활용되도록 한다.
토픽 모델링 단계(S240)은 토픽 모델러(260)에서 행하여 지며, 코퍼스 생성 단계(S230)에서 생성된 코퍼스(corpus)(즉, 문서 집합)에 LDA 알고리즘을 적용하여 문서 집합의 각 문서에 대해, 임의의 토픽들에 대한 분포 값(또는 분산)과 단어 집합(단어 목록)을 검출하고, 출력한다.
토픽 모델링 단계(S240)에서 출력된 결과를 사용자가 확인하고, 각 단어 집합 즉, 토픽에 대해서 직접 식별자를 부여하거나 토픽의 단어 목록 전체를 토픽 이름으로 명명할 수 있다.
도 10은 LDA 알고리즘을 적용한 결과의 일예이다.
소정 분석대상문서를 대상으로 LDA 알고리즘을 적용하면, 분석대상문서에서 토픽들에 대한 단어 집합을 추출하여 출력하고, 사용자는 소정 토픽의 단어집합에 대해, 토픽 식별자(토픽 이름)을 정하여 입력한다.
본 발명의 LDA 기반 토픽 모델링은 기본적으로 각 문서가 k개의 토픽 중에 하나 이상을 다룬다고 가정하고 있으며, 모델링의 결과물인 토픽이란 k개의 임의의 토픽에 대한 단어 집합이다. 현재로서 출력되는 단어 집합들을 명명 하는 기술은 존재하지 않는다. 결국, 사용자가 토픽 모델링의 결과를 확인하여 토픽 이름을 수동적으로 구성해야 한다. 사용자는 구성된 토픽을 통해 프로젝트의 도메인 토픽을 파악할 수 있다.
토픽의 수(k)는 모델링이 수행되기 전에 사용자로부터 요구되는 매개변수이다. 토픽의 수를 자동으로 결정하는 알고리즘 역시 현재에는 존재하지 않는다. 따라서 여러 개의 k 값을 사용하여 가장 큰 우도(likelihood)를 갖는 경우의 k 값을 선택한다. 본 발명의 JTopic 시스템에서는 프로젝트를 대상으로 하는 실험을 통해 k의 값을 10 내지 30 으로 하였다.
본 발명의 소프트웨어 도메인 토픽 추출 시스템의 주요내용을 정리하면, 다음과 같다.
본 발명은, 소프트웨어의 특징을 추출하여 해당 소프트웨어의 도메인 토픽을 작성하는 시스템으로, 다음과 같은 알고리즘을 통해 작동한다.
먼저, java 언어로 작성된 프로젝트의 소스 코드를 분석하여 소스 코드가 가지고 있는 단어 집합 중 의미있는 단어의 집합을 추출하고 입력된 소스 및 jar 파일에서 식별자(클래스 및 메소드) 간 동적 호출 관계를 추출한 호출 그래프를 생성한다. 호출 그래프가 생성되면 PageRank 알고리즘을 적용해 각 식별자에 PageRank 값(점수)를 할당한다.
다음으로, 단어 집합에 PageRank 값(점수)를 활용하여 최종 분석 대상 문서집합인 코퍼스를 생성한다.
마지막으로, 생성된 문서에 LDA 기반 토픽 모델링을 적용해 사용자에게 토픽별 단어 집합을 보여주고 토픽을 구성함으로써 프로젝트의 도메인 토픽을 얻을 수 있도록한다.
도 11은 LDA 알고리즘을 적용한 결과의 다른 일예이다.
도 11에서 토픽 집합들(Topic set)에는 개별 토픽명 "Topic 1", "Topic 2", "Topic 3" 이 있다.
이들 토픽 명의 토픽에는 토픽을 이루는 단어집합이 있으며, 각 토픽들의 분포 값이 표시되어 있다. 즉, "Topic 1"에는 bsh, edit, ..., provide와 같은 단어들이 "Topic 1"을 구성하고 있다. Topic 1의 경우, 경우에 따라서, "Topic 1" 이라는 명칭대신에 "Text handler", "text editor, "file manager"와 같은 이름을 부여할 수도 있다.
본 발명에서, 의미 있는 단어 집합을 추출하기 위하여 전처리기를 사용하는데, 이 전처리기는 다음과 같은 네 가지 과정을 통해 의미 있는 단어 집합을 추출한다.
첫째, 기본 단어 추출단계에서는, 소스코드를 파싱하여 토픽과 관련없는 프로그래밍 언어 식별자들을 제거하고 동작과 관련있는 코드 및 주석에서 단어를 분류한다.
둘째, 단어 구분 (Word Splitting)단계에서는, Camel-Case, Underscore 등의 프로그래밍 명명 규칙에 따라 존재하는 많은 합성어를 단어 별로 분류한다. 이 단계에서 원본 언어 또한 의미를 가지므로 그대로 사용한다.
셋째, 스테밍 (Stemming)단계에서는, 다양한 형태로 사용하는 단어의 어근을 추출한다. 여기서, Porter 스테밍 알고리즘을 사용하여 원본 단어를 포함하는 어근-단어 사전을 생성해 어근과 원본 단어 모두 출력한다..
넷째, 필터링 (Filtering)에서는 텍스트 문서 혹은 주석에서 주로 사용하는 관사, 조사, 전치사 등 단어로써 의미가 없는 불용어를 소스 코드의 식별자에서 제거하는 단계로. MALLET에서 사용하는 불용어 목록에 본 시스템에서 사용하는 불용어 목록을 추가하여 필터링하였다.
클래스 간의 호출 관계를 나타내는 호출 그래프는 호출, 피호출 관계에 있는 클래스 및 호출 횟수를 추출하여 클래스를 노드(node)로 하고 메서드 호출 관계를 간선(edge)로 하는 그래프로, JCallGraph를 통하여 추출한다. 이 그래프는 PageRank 알고리즘의 입력으로 사용되며 Page Rank의 'Damping Factor' 값을 0.85로 사용해 rank 점수를 할당한다.
최종 분석 대상 문서는 해당 기술에 사용할 수 있는 의미 있는 수치를 만들기 위해 모든 클래스 식별자의 PageRank 점수에 200을 곱하여 0 이상의 정수가 출력되도록 한다. 식 별자를 이 점수 만큼 각 문서에 추가하여 토픽 모델링 시 활용되도록 한다.
최종 분석 대상 문서가 생성되면 LDA 기반 토픽 모델링을 적용하여 문서 집합의 각 문서에 대해 임의의 토픽들에 대한 분포 값과 단어 집합을 찾아낸다. 이때, 사용자는 출력된 결과를 확인하여 각 단어 집합에서 직접 식별자를 부여하거나 토픽의 단어 목록 전체를 토픽 이름으로 명명할 수 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이의 균등 또는 등가적 변형 모두는 본 발명 사상의 범주에 속한다고 할 것이다.
10: 소프트웨어 도메인 토픽 추출 시스템 70: 프로젝크 인스펙터
100: 전처리기 110: 식별자 분석부
120: 식별자 토큰화부 130: 스템머
140: 필터 230: 코퍼스 생성기
240: 호출 그래프 생성기 250: 페이지 랭커
260: 토픽 모델러
100: 전처리기 110: 식별자 분석부
120: 식별자 토큰화부 130: 스템머
140: 필터 230: 코퍼스 생성기
240: 호출 그래프 생성기 250: 페이지 랭커
260: 토픽 모델러
Claims (18)
- 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드가 가지고 있는 단어 집합에서, 기 설정된 불용어와, 기 설정된 불중요 단어를 제거한 단어 집합인, 의미 있는 단어의 집합을 추출하는, 전처리기;
프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드를 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하여, 각 클래스와, 각 클래스 내에 포함된 메서드 호출 정보를 나타내는 호출그래프를 생성하는, 호출 그래프 생성기;
호출 그래프 생성기로부터 수신된 호출그래프의 각 클래스 및 각 클래스 내에 포함된 메서드 호출 정보를, 페이지랭크(PageRank) 알고리즘에 적용하여, 각 클래스별 페이지랭크 값을 생성하는, 페이지 랭커;
전처리기에서 수신된 단어 집합들을 저장한 코퍼스(Copus)를 생성하고, 페이지 랭커로부터 수신된 각 클래스별 페이지랭크 값을 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값만큼 각 클래스 식별자를 생성하여, 코퍼스에 추가하는, 코퍼스 생성기;
코퍼스 생성기에서 수신된 코퍼스를 대상으로, 잠재적인 디리클레 할당 (Latent Dirichlet Allocation, LDA) 알고리즘을 적용하여, 코퍼스의 각 문서에 대해, 토픽들에 대한 분포 값을 검출하고, 각 토픽에 대한 단어 집합을 검출하는, 토픽 모델러;
를 포함하여 이루어진 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제1항에 있어서, 전처리기는,
자바 소스 파일에서 소스 코드를 파싱(parsing)하여, 프로그램 동작과 관련 있는 코드와 프로그램을 설명하는 주석에서 단어를 분류하여, 단어 집합으로 출력하는, 식별자 분석부;
식별자 분석부에서 출력된 단어 집합에서 소스 코드에서 사용되는 합성어를, 상기 합성어에서 분리된 단어들과, 상기 합성어 자체로 구분하여 출력하는, 식별자 토큰화부;
식별자 토큰화부에서 출력된 단어 집합에서, 어간을 추출하여 어간으로 이루어진 단어 집합을 출력하며, 어간과 원본단어를 대응시킨 어간 단어 사전을 생성하는, 스템머(stemmer);
스템머로부터 수신된 단어 집합과 어간 단어 사전에서, 기설정된 불용어와 기 설정된 불중요 단어를 제거하는 필터링을 행하는, 필터;
를 포함하여 이루어진 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제2항에 있어서,
불용어는 관사, 조사, 전치사를 포함하며,
불중요 단어는 소스 코드의 식별자에서 사용되는 ‘get’, ‘set'를 포함하는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제1항에 있어서,
프로젝트 인스펙터는 프로젝트 아카이브를 읽어들여서, 해당 프로젝트가 가지고 있는 소스파일, 클래스 파일을 포함하는 설정 파일들을 추출하고, 자바 소스파일을 전처리기 및 호출 그래프 생성기로 전달하며,
호출 그래프는 각 클래스를 노드(node)로 하고, 각 클래스 내에 포함된 메서드 호출 정보를 간선(edge)으로 나타내되, 간선은 방향과 호출 횟수를 속성으로 갖는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제3항에 있어서
페이지 랭커에서, 클래스는 웹페이지이며, 메서드의 호출정보는 웹페이지의 링크로서 나타내어 지는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제5항에 있어서
페이지 랭커에서 페이지랭크 값은
PR(A)=(1-d)/N+d(PR(T1)/C(T1)+ PR(T2)/C(T2)+…PR(Tn)/C(Tn))
(단, PR(A)는 웹 페이지 ‘A’의 페이지랭크 값를 의미하며, d는 댐핑팩터(Damping Factor)로 0과 1의 사이의 값이며, N은 전체 페이지 수이며, Tn은 웹 페이지 ‘A’를 가리키는 페이지이며, C(Tn)은 Tn이 가지고 있는 링크의 수 임)
에 의해 구하여 지는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제6항에 있어서,
댐핑팩터(Damping Factor)인 d는 0.85인 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제1항에 있어서
보정계수는, 보정된 페이지랭크 값이 0 이상의 정수가 되게 하는 값인 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제8항에 있어서,
보정계수는 200인 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제3항에 있어서,
토픽 모델러는 LDA 알고리즘에서 LDA의 매개변수를 추정하기 위해 깁스 샘플링(Gibbs Sampling)방법을 사용하는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 제2항에 있어서,
스템머는 포터 스테밍 알고리즘(Porter’s Stemming Algorithm)을 사용하는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템. - 전처리기는, 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드가 가지고 있는 단어 집합에서, 기 설정된 불용어와, 기 설정된 불중요 단어를 제거한 단어 집합인, 의미 있는 단어의 집합을 추출하는, 전처리 단계;
호출 그래프 생성기는, 프로젝트 인스펙터로부터 수신된 자바 소스파일에서, 소스 코드를 파싱(parsing)하여 클래스(class)와 메서드(method)를 추출하여, 각 클래스와, 각 클래스 내에 포함된 메서드 호출 정보를 나타내는 호출그래프를 생성하는, 호출 그래프 생성 단계;
페이지 랭커는, 호출 그래프 생성 단계로부터 출력된 호출그래프의 각 클래스 및 각 클래스 내에 포함된 메서드 호출 정보를, 페이지랭크(PageRank) 알고리즘에 적용하여, 각 클래스별 페이지랭크 값을 생성하는, 페이지 랭크 단계;
코퍼스 생성기는, 전처리 단계에서 출력된 단어 집합들을 저장한 코퍼스(Copus)를 생성하고, 페이지 랭크 단계로부터 출력된 각 클래스별 페이지랭크 값을 기설정된 보정계수를 곱하여 보정하고, 보정된 페이지랭크 값만큼 각 클래스 식별자를 생성하여, 코퍼스에 추가하여 저장하는, 코퍼스 생성단계;
토픽 모델러는, 코퍼스 생성단계에서 출력된 코퍼스를 대상으로, 잠재적인 디리클레 할당 (Latent Dirichlet Allocation, LDA) 알고리즘을 적용하여, 코퍼스의 각 문서에 대해, 토픽들에 대한 분포 값을 검출하고, 각 토픽에 대한 단어 집합을 검출하는, 토픽 모델링 단계;
를 포함하여 이루어진 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템의 제어방법. - 제12항에 있어서, 전처리 단계는,
식별자 분석부가, 자바 소스 파일에서 소스 코드를 파싱(parsing)하여, 프로그램 동작과 관련 있는 코드와 프로그램을 설명하는 주석에서 단어를 분류하여, 단어 집합으로 출력하는, 기본단어 추출단계;
식별자 토큰화부가, 기본단어 추출단계에서 출력된 단어 집합에서 소스 코드에서 사용되는 합성어를, 상기 합성어에서 분리된 단어들과, 상기 합성어 자체로 구분하여 출력하는, 단어구분 단계;
스템머(stemmer)가, 식별자 토큰화부에서 출력된 단어 집합에서, 어간을 추출하여 어간으로 이루어진 단어 집합을 출력하며, 어간과 원본단어를 대응시킨 어간 단어 사전을 생성하는, 스테밍 단계;
필터는, 스테밍 단계에서 출력된 단어 집합과 어간 단어 사전에서, 기설정된 불용어와 기 설정된 불중요 단어를 제거하는 필터링을 행하는, 필터링 단계;
를 포함하여 이루어진 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템의 제어방법. - 제13항에 있어서,
불용어는 관사, 조사, 전치사를 포함하며,
불중요 단어는 소스 코드의 식별자에서 사용되는 ‘get’, ‘set'를 포함하며,
호출 그래프는 각 클래스를 노드(node)로 하고, 각 클래스 내에 포함된 메서드 호출 정보를 간선(edge)으로 나타내되, 간선은 방향과 호출 횟수를 속성으로 갖는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템의 제어방법 - 제13항에 있어서
페이지 랭크 단계에서, 클래스는 웹페이지이며, 메서드의 호출정보는 웹페이지의 링크로서 나타내어 지는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템의 제어방법 - 제15항에 있어서
페이지 랭커에서 페이지랭크 값은
PR(A)=(1-d)/N+d(PR(T1)/C(T1)+ PR(T2)/C(T2)+…PR(Tn)/C(Tn))
(단, PR(A)는 웹 페이지 ‘A’의 페이지랭크 값를 의미하며, d는 댐핑팩터(Damping Factor)로 0과 1의 사이의 값이며, N은 전체 페이지 수이며, Tn은 웹 페이지 ‘A’를 가리키는 페이지이며, C(Tn)은 Tn이 가지고 있는 링크의 수 임)
에 의해 구하여 지는 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템의 제어방법 - 제16항에 있어서,
댐핑팩터(Damping Factor)인 d는 0.85이며,
보정계수는 200인 것을 특징으로 하는 소프트웨어 도메인 토픽 추출 시스템의 제어방법. - 제12항 내지 제17항 중 어느 한 항의 소프트웨어 도메인 토픽 추출 시스템의 제어방법에 대한 컴퓨터 프로그램 소스를 저장한 기록매체.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20160064521 | 2016-05-26 | ||
KR1020160064521 | 2016-05-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170134191A KR20170134191A (ko) | 2017-12-06 |
KR101933953B1 true KR101933953B1 (ko) | 2019-01-04 |
Family
ID=60922212
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170035925A KR101933953B1 (ko) | 2016-05-26 | 2017-03-22 | 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101933953B1 (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108763362B (zh) * | 2018-05-17 | 2020-10-09 | 浙江工业大学 | 基于随机锚点对选择的局部模型加权融合Top-N电影推荐方法 |
CN108717467B (zh) * | 2018-06-07 | 2021-09-28 | 南京大学 | 一种基于主题关联关系分析的开源软件推荐方法 |
KR102184772B1 (ko) * | 2018-11-28 | 2020-12-01 | 주식회사 파이랩테크놀로지 | 태그 추천 모델을 이용한 자동화된 스마트 컨트랙트 태그 생성 및 추천 시스템 |
CN112051986B (zh) * | 2020-08-26 | 2021-07-27 | 西安电子科技大学 | 基于开源知识的代码搜索推荐装置及方法 |
CN113641588B (zh) * | 2021-08-31 | 2024-05-24 | 北京航空航天大学 | 一种基于lda主题建模的软件可理解性确定方法及系统 |
KR102600752B1 (ko) * | 2021-09-16 | 2023-11-13 | 주식회사 랭코드 | 소스코드 분석을 이용한 텍스트 의미 분석 장치, 시스템 및 방법, 그리고, 이를 이용한 챗봇 질의응답 서비스 제공 방법 |
-
2017
- 2017-03-22 KR KR1020170035925A patent/KR101933953B1/ko active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
KR20170134191A (ko) | 2017-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101933953B1 (ko) | 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템 | |
RU2610241C2 (ru) | Способ и система синтеза текста на основе извлеченной информации в виде rdf-графа с использованием шаблонов | |
US8484238B2 (en) | Automatically generating regular expressions for relaxed matching of text patterns | |
US8458198B1 (en) | Document analysis and multi-word term detector | |
US8117177B2 (en) | Apparatus and method for searching information based on character strings in documents | |
US7805288B2 (en) | Corpus expansion system and method thereof | |
US8244769B2 (en) | System and method for judging properties of an ontology and updating same | |
US10296584B2 (en) | Semantic textual analysis | |
Sintoris et al. | Extracting business process models using natural language processing (NLP) techniques | |
JP5370159B2 (ja) | 情報抽出装置及び情報抽出システム | |
CN110929038A (zh) | 基于知识图谱的实体链接方法、装置、设备和存储介质 | |
US20210065045A1 (en) | Artificial intelligence (ai) based innovation data processing system | |
JP2004110161A (ja) | テキスト文比較装置 | |
Ponzanelli et al. | Summarizing complex development artifacts by mining heterogeneous data | |
CN111831802A (zh) | 一种基于lda主题模型的城市领域知识检测系统及方法 | |
JP4534666B2 (ja) | テキスト文検索装置及びテキスト文検索プログラム | |
CN107357777A (zh) | 提取标签信息的方法和装置 | |
JP2020098596A (ja) | ウェブページから情報を抽出する方法、装置及び記憶媒体 | |
JP4143085B2 (ja) | 同義語獲得方法及び装置及びプログラム及びコンピュータ読み取り可能な記録媒体 | |
KR101476225B1 (ko) | 자연어 및 수식 색인화 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 | |
Lecoeuche | Finding comparatively important concepts between texts | |
JP3743204B2 (ja) | データ分析支援方法および装置 | |
JPH04156663A (ja) | 文章圧縮装置 | |
JP4148247B2 (ja) | 語彙獲得方法及び装置及びプログラム及びコンピュータ読み取り可能な記録媒体 | |
JP2012079160A (ja) | 情報検索装置及びコンピュータプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |