유희정
(Heejeong Yoo)
1iD
이은수
(Eunsu Lee)
1iD
유훈
(Hoon Yoo)
†iD
-
(Dept. of Computer Science, Sangmyung University, Republic of Korea.
E-mail : yhjj2000@naver.com, dldmstn0510@naver.com)
Copyright © The Korea Institute for Structural Maintenance and Inspection
Key words
Programming Language Identification, Source Code Classification, Machine Learning, Unknown Category, Target Category
1. 서 론
오늘날 소프트웨어 개발의 규모와 복잡성이 증가함에 따라 소스 코드의 양과 다양성도 상당히 증가하고 있다. 대규모 소프트웨어 시스템은 수백만 줄의
코드로 이루어져 있으며, 이로 인해 코드의 이해와 관리가 더욱 복잡해지고 있다. 이러한 맥락에서 연구자들은 소프트웨어 개발 효율성을 개선하기 위한
소스 코드 분류 기술에 인공지능 기술을 활용하고자 하는 동기를 부여받고 있다. 소스 코드 분류는 프로그램 내 알고리즘 식별, 의사 코드 생성, 소스
코드 취약점 분석, 소스 코드 제안 및 리뷰 등 소스 코드를 분류하고 분석하는 데 중점을 둔 연구 분야이다[1-5]. 최근에는 많은 개발자들이 ChatGPT와 같은 인공지능 기술을 활용하여 이러한 작업들을 수행하고 개발 효율성을 향상시키는 추세이다. 그러나 이러한
작업을 수행하기 위해서는 먼저 주어진 코드가 어떤 프로그래밍 언어로 작성되었는지를 정확하게 식별하는 프로그래밍 언어 식별 과정이 필수적이다. 따라서
프로그래밍 언어 식별은 소스 코드 분류의 핵심 요소로서 우선시되어야 한다.
프로그래밍 언어 식별 연구는 최근 몇 년 동안 인공지능 기술을 활용하여 큰 발전을 이루었다[6-10]. SVM, Bayesian, RFC 등과 같은 전통적인 기계 학습 기술을 사용한 연구를 시작으로, N-gram과 같은 자연어 처리 알고리즘을 사용한
연구도 진행되었다[6-8]. 최근에는 CNN과 같은 딥러닝 모델을 사용한 연구가 많이 이루어지고 있다[9,10]. 기계 학습을 활용한 프로그래밍 언어 식별 연구에서는 일반적으로 관심 있는 목표 언어를 선정하여 모델을 학습한다. 그러나 기존 연구들은 이러한 목표
언어를 선정하는 기준에 대한 근거가 미약하다. 또한, 대부분의 이전 연구들에서 미지정 범주를 별도로 도입해서 분류하지 않는다.
본 논문에서는 이러한 문제를 해결하기 위해 기계 학습을 통한 프로그래밍 언어 식별 기술에서 목표 범주를 선택하는 방법론과 미지정 범주를 효과적으로
분류하는 방법을 제안한다. 목표 범주는 프로그래밍 언어를 다루는 플랫폼에서 제공하는 데이터 통계를 기반으로 실제로 많이 사용되고 있는 프로그래밍 언어로
선정한다. 미지정 범주를 분류하기 위한 제안된 방법은 다음과 같다. 첫 번째 방법은 모델의 예측 확률에 임계값을 설정하여 이 임계값보다 낮은 확률을
가진 프로그래밍 언어를 미지정 범주로 분류한다. 두 번째 방법은 모델 앞에 이진 분류를 사용하여 파일이 지정 혹은 미지정 범주인지를 결정한다. 마지막
방법은 모델 학습에 미지정 범주를 포함한다. 본 연구는 제안된 방법의 성능을 객관적으로 입증하기 위해 IBM의 Project CodeNet의 공식
github에서 공개한 프로그래밍 언어 식별 모델을 활용하여 실험을 수행한다[11]. 기존 연구가 선정한 10개 범주를 제안하는 목표 범주 선정 방법을 통해 20개로 확장하였으며, 실험 결과 제안하는 방법이 기존 방법에 비해 성능이
개선됨을 확인하였다.
본 논문의 구성은 다음과 같다. 2장에서는 실험에 활용된 기존 연구에 대해 설명한다. 3장에서는 제안하는 방법인 목표 범주 선정 방법론과 미지정 범주
분류 기술에 대해 기술한다. 4장에서는 실험 방법을 설명하고 결과를 분석한다. 마지막으로, 5장에서는 연구 결과를 요약하고 결론을 도출한다.
2. 기존 연구
인공지능 기술을 활용한 소스 코드 분류 연구가 중요해짐에 따라 IBM은 이를 위한 대규모 데이터 세트인 CodeNet을 공개 하였다[11]. CodeNet은 다양한 프로그래밍 언어로 작성된 약 1,400만 개의 코드 샘플을 포함하고 있으며, 이는 인공지능 모델의 학습과 평가에 중요한
리소스를 제공한다.
그림 1. 프로그래밍 언어 식별 모델의 전처리 과정
Fig. 1. Preprocessing the programming language identification model
그림 2. 프로그래밍 언어 식별 모델의 구조도
Fig. 2. Architecture diagram of programming language identification model
Project CodeNet[11]은 CodeNet 데이터 세트의 활용성을 입증하기 위해 해당 데이터 세트를 사용한 프로그래밍 언어 분류 실험을 수행하였다. 그림 1은 Project CodeNet[11]이 공개한 프로그래밍 언어 식별 모델의 전처리 과정을 나타낸다. 우선 입력된 소스코드에 있는 모든 대문자 영어를 소문자로 변환한다. 이후 소스코드
파일의 줄 수가 50줄이 넘으면 파일을 3개로 분할한다. 소스코드에서 연속된 공백, 탭, 줄 바꿈, 캐리지 리턴을 하나의 공백으로 치환하고 소스 코드에
있는 ASCII 문자를 one-hot 인코딩한다. One-hot 인코딩에 사용되는 ASCII 문자는 26개의 소문자 알파벳, 0에서 9까지의 숫자
10개, 기타 특수문자 32개(!"#$%&\'()*+,-./:;<=>?@[]^_`\{|\}~)로 총 68개이다. 이후 1024개의 문자 단위로 벡터화
하는데, 문자가 1024개 보다 작은 경우 나머지를 0으로 패딩하여 프로그래밍 언어 식별 모델의 입력으로 취한다.
그림 2는 Project CodeNet[11]이 공개한 프로그래밍 언어 식별 코드를 토대로 모델 구조를 타나낸 그림이다. 이 모델은 10개의 언어(C, C#, C++, D, Haskell, Java,
JavaScript, PHP, Python, Rust)를 분류하는 모델이다. 우선 전처리된 1024 길이의 벡터 데이터를 입력으로 하며, 각기 다른
커널 사이즈(3, 9, 19)로 convolution 연산을 수행한다. convolution 연산 후 커널 사이즈 만큼 Max-Pool을 진행하여
출력을 다운샘플링 한다. 이후 Flatten 과정을 통해 벡터는 1차원으로 변환된다. 이렇게 변환된 3개의 벡터는 Concatenate과정을 통해
하나의 큰 벡터로 연결되며, 총 64512크기의 벡터를 형성한다. 첫 번째 Dense Layer에서 64512개의 입력을 받아 128개의 출력을 제공하며,
과적합 방지를 위해 Drop out을 진행한다. 마지막으로 두 번째 Dense Layer에서 10개의 프로그래밍 언어 중 하나로 분류한다.
Project CodeNet[11]이 공개한 프로그래밍 언어 식별 모델은 10개의 프로그래밍 언어를 분류하는 모델이다. 그러나 이 모델은 목표 범주 외의 다른 프로그래밍이 언어가 입력될
경우 임의의 목표 범주로 잘못 분류하는 문제를 가진다. 10개의 범주는 일반적으로 사용되는 프로그래밍 언어의 종류에 비해 매우 한정적이다. 이러한
한정된 범주 내에서의 분류는 모델의 활용성을 제한하며, 미지정 범주를 분류하는 기술이 없어 모델의 신뢰성이 부족하다.
3. 제안하는 방법
본 논문에서는 통계를 기반으로 하여 목표 범주로 선정하는 과정을 설명하고, 사용 빈도와 중요도가 높은 프로그래밍 언어 20종을 제시한다. 또한, 기계학습을
활용한 프로그래밍 언어 식별 모델이 미지정 범주의 언어를 효과적으로 분류하는 방법을 제안한다.
3.1 목표 범주 선정 방법
표 1은 Stack Overflow와 Github, Tiobe에서 최근 몇 년간 많이 사용되는 프로그래밍 언어를 조사한 결과를 나타낸다. 세 개의 웹 사이트에서
가장 많이 사용되는 프로그래밍 언어 상위 40개를 비교하였을 때 공통으로 나타난 16가지 언어인 Assembly, C, C#, C++, Go, Java,
JavaScript, Kotlin, Matlab, Perl, PHP, Python, R, Ruby, Swift, TypeScript를 선정하였다.
여기에 데이터베이스를 관리하고 조작하기 위해 사용되는 언어인 SQL, 웹 페이지를 만들기 위한 마크업 언어인 Html, 마이크로소프트에 의해 개발된
프로그래밍 언어로 쉽고 간편하게 windows 프로그램을 만들 수 있는 VisualBasic, 고성능 수치 계산과 과학적 계산을 위한 프로그래밍 언어인
Fortran을 추가하였다.
이를 토대로 본 논문에서 최종적으로 선정한 프로그래밍 언어 20종은 Assembly, C, C#, C++, Fortran, Go, Html, Java,
JavaScript, Kotlin, Matlab, Perl, PHP, Python, R, Ruby, SQL, Swift, TypeScript, VisualBasic이다.
지정한 20개의 언어는 표 1에서 회색 칸으로 나타내었다.
표 1 사이트 별 프로그래밍 언어 사용 빈도 상위 40개
Table 1 Top 40 most frequently used programming languages by site.
|
Stackoverflow*
|
Github**
|
Tiobe***
|
1
|
JavaScript
|
JavaScript
|
Python
|
2
|
HTML/CSS
|
Python
|
C
|
3
|
Python
|
Shell
|
C++
|
4
|
SQL
|
TypeScript
|
Java
|
5
|
TypeScript
|
Java
|
C#
|
6
|
Bash & all shells
|
Dockerfile
|
JavaScript
|
7
|
Java
|
C++
|
SQL
|
8
|
C#
|
C
|
Go
|
9
|
C++
|
Makefile
|
Scratch
|
10
|
C
|
PHP
|
Visual Basic
|
11
|
PHP
|
C#
|
Assembly
|
12
|
PowerShell
|
Ruby
|
PHP
|
13
|
Go
|
CMake
|
MATLAB
|
14
|
Rust
|
Batchfile
|
Fortran
|
15
|
Kotlin
|
Kotlin
|
Delphi/Object Pascal
|
16
|
Ruby
|
Go
|
Swift
|
17
|
Lua
|
Objective-C
|
Rust
|
18
|
Dart
|
Swift
|
Ruby
|
19
|
Assembly
|
PowerShell
|
Kotlin
|
20
|
Swift
|
Rust
|
COBOL
|
21
|
R
|
Dart
|
R
|
22
|
Visual Basic (.Net)
|
Lua
|
SAS
|
23
|
MATLAB
|
Assembly
|
D
|
24
|
VBA
|
Hack
|
Ada
|
25
|
Groovy
|
Perl
|
F#
|
26
|
Delphi
|
R
|
Classic Visual Basic
|
27
|
Scala
|
Procfile
|
Lua
|
28
|
Perl
|
HCL
|
Prolog
|
29
|
Elixir
|
Smarty
|
Perl
|
30
|
Objective-C
|
HLSL
|
Haskell
|
31
|
Haskell
|
ShaderLab
|
(Visual) FoxPro
|
32
|
GDScript
|
Nix
|
Dart
|
33
|
Lisp
|
Objective-C++
|
VBScript
|
34
|
Solidity
|
Vim Script
|
Scala
|
35
|
Clojure
|
GLSL
|
Objective-C
|
36
|
Julia
|
MATLAB
|
Lisp
|
37
|
Erlang
|
XSLT
|
Julia
|
38
|
F#
|
M4
|
TypeScript
|
39
|
Fortran
|
Solidity
|
Logo
|
40
|
Prolog
|
PLpgSQL
|
ML
|
*https://survey.stackoverflow.co/2023/#section-most-popular-technologies-programming-scripting-and-markup-languages
**https://innovationgraph.github.com/global-metrics/programming-languages
***https://www.tiobe.com/tiobe-index/
그림 3. 제안하는 세 가지 미지정 범주 분류 방법
Fig. 3. Three proposed methods for unknown category classification
3.2 미지정 범주 분류 기술
본 논문에서는 기존의 10개 범주를 갖는 모델을 앞서 선정한 20개 범주로 확장하여 학습한 방식을 Method 0으로 명명한다. Method 0은
모델이 출력한 가장 높은 확률값의 범주를 채택하고, 미지정 범주에 대해서는 별도로 고려하지 않는다. 따라서, 미지정 범주의 프로그래밍 언어가 입력되면
무조건 오류가 발생한다.
그림 3은 본 논문이 제안하는 미지정 범주를 분류하기 위한 세 가지 방식을 보여준다. 미지정 범주를 분류하기 위한 첫 번째 방식은 임계(threshold)
도입이다. 이 방법은 그림 3(a)와 같이 기존 모델을 그대로 사용하여 확률값이 가장 높은 범주를 채택하되, 모든 확률값이 임계를 넘지 않으면 미지정 범주로 분류한다. 우리는 이 방법을
Method 1이라 한다. Method 1은 미리 학습된 기존 모델에 간단한 후처리 기술을 도입함으로써 미지정 범주 분류가 가능하다. 두 번째 방식은
이진 분류기 도입이다. 이 방법은 그림 3(b)와 같이 known/unknown 범주를 먼저 분류하고, known 범주에 대해서 기존 모델을 사용한다. 이 방법을 Method 2라 한다. Method
2는 known/unknown을 분류하는 모델을 별도로 구축해야 하나, 미리 학습된 기존 모델에 전처리 모델을 도입함으로써 미지정 범주 분류가 가능하다는
장점이 있다. 마지막 방식인 Method 3은 그림 3(c)와 같이 범주에 미지정 범주가 포함된다. Method 3은 미지정 범주를 포함하여 모델을 새로 학습해야 하기 때문에 모델 학습에 별도로 시간과 노력이
필요하다.
4. 실험 방법 및 결과
4.1 데이터 수집
표 2는 학습 및 테스트에 사용하기 위해 수집한 소스 코드 정보이다. 20개의 목표 범주를 갖는 프로그래밍 언어 식별 모델은 각 범주당 2,000개의 파일을
사용하여 총 40,000개의 파일로 학습되었으며, 이 모델은 Method 0, Method 1, Method 2에 사용되었다. Method 2에서
전처리 기술로 사용된 이진 분류기는 목표 범주에 해당하는 40,000개 파일과 미지정 범주에 해당하는 4,918개의 파일을 학습에 이용하였다. Method
3은 20개의 목표 범주에 미지정 범주를 추가하여 총 21개의 범주를 갖는 모델을 학습시키기 위해 목표 범주당 2,000개 파일로 구성된 총 40,000개
파일과 미지정 범주에 해당하는 2,619개의 파일을 이용하였다. 방법 별 성능 분석 및 비교를 위한 테스트에는 목표 범주 당 300개의 파일, 총
6,000개 파일과 미지정 범주에 해당하는 300개의 파일을 이용하였다.
표 2 실험에 사용한 데이터
Table 2 Data Used in the Experiment
|
Train data
|
Test data
|
Method 0
|
Target
|
40,000
|
6,000
|
Unknown
|
0
|
300
|
Method 1
|
Target
|
40,000
|
6,000
|
Unknown
|
0
|
300
|
Method 2
|
Target
|
40,000
|
6,000
|
Unknown
|
4,918
|
300
|
Method 3
|
Target
|
40,000
|
6,000
|
Unknown
|
2,619
|
300
|
앞서 선정한 20개의 목표 범주 중 Assembly, Html, Matlab, R, SQL의 소스코드는 Hugging Face의 the-stack
데이터 셋(https://huggingface.co/datasets/bigcode/the-stack)에서 수집하였으며, 나머지 15개 범주의 소스코드는
CodeNet의 데이터 셋[11]에서 수집하였다. 미지정 범주의 데이터로는 Rust, Haskell, D, Scala, Nim 외 34개로 작성된 소스코드 파일을 이용하였다.
4.2 미지정 범주 분류 기술 실험 방법 및 결과
Method 0은 기존 Project CodeNet[11]의 10개 범주에서 앞서 제시한 20개의 컴퓨터 언어로 범주를 확장시키고 IBM이 공개한 프로그래밍 언어 식별 모델[11]을 활용하여 모델을 생성하였다. 20개의 컴퓨터 언어를 분류할 수 있도록 원본 코드에서 마지막 layer의 출력 수를 10에서 20으로 변경하였다.
만들어진 모델을 바탕으로 제시한 20개의 범주와 미지정 범주를 테스트 하였다.
Method 1은 Method 0에서 학습한 모델을 그대로 사용하였으며, 미지정 범주를 분류하기 위한 방법으로 모델의 예측 확률에 임계값 0.5를
주었다. Method 0 모델의 예측 확률이 0.5 이하인 경우 미지정 범주로 분류하였다. Method 2는 앞에서 제시한 20개의 프로그래밍 언어를
Known이라 하고, 그 외 언어로 작성된 데이터를 Unknown이라 했을 때, Known과 Unknown을 먼저 분류한 후 Known으로 나온 파일을
Method 0에서 생성한 미리 학습된 모델을 통해 20개의 목표 범주로 구분하는 실험을 진행하였다. Known과 Unknown을 구분하는 이진 분류기를
만들기 위해 IBM의 언어 식별 모델[11]을 활용하였다. 이진 분류기는 기존 Project CodeNet[11]과 동일한 구조를 가지지만, 마지막 layer의 출력수를 2로 변경하여 훈련된 모델이다.
그림 4는 Known/Unknown 분류기를 테스트한 혼동행렬이다.
혼동행렬의 세로축은 실제 범주를 나타내고, 가로축은 예측된 범주를 나타낸다. Unknown 파일이지만 이진 분류기가 Known 으로 예측한 4개의
파일은 각각 Bf, Scala, Objective-C, Shell 언어로 작성된 파일이다. 이진 분류기가 Unknown으로 판별한 300개 파일은
미지정 범주로 분류하고, Known으로 판별한 5849개의 파일은 Method 0에서 생성한 미리 학습된 모델을 통해 20개의 목표 범주로 구분하는
실험을 진행하였다. Method 3은 미지정 범주를 구분하기 위해 제시한 20개의 목표 범주와 그 외 언어로 작성된 미지정 범주까지 총 21개의 범주로
모델을 새로 훈련하여 실험하였다. 21개의 범주를 분류하는 모델을 생성하기 위해 Project CodeNet[11]에서 마지막 layer의 출력 수를 21로 변경하였다.
그림 5. 실험 결과 혼동행렬
Fig. 5. Confusion Matrix for Experimental Results
그림 4. Method 2에서 이진 분류 결과 혼동행렬
Fig. 4. Confusion Matrix for binary Classification Results in Method 2
그림 5는 Method 0부터 Method 3까지 실험결과의 혼동행렬이다. 혼동행렬의 세로축은 실제 범주를 나타내고, 가로축은 예측된 범주를 나타낸다. 기존
방법인 Method 0은 미지정 범주를 고려하지 않았으므로, 모든 입력을 기존의 20개 목표 범주 중 하나로 분류한다. 결과적으로, 미지정 범주에
해당하는 모든 입력이 각기 다른 목표 범주에 분산되어 잘못 분류된다. Method 1에서는 미지정 범주 언어 중 60개의 입력이 미지정 범주로 올바르게
분류되었다. 나머지 240개의 입력은 여전히 기존 목표 범주로 잘못 분류되었지만, Method 0에 비해 미지정 범주로 분류된 입력의 비율이 높아졌다.
이는 임계값을 이용한 후처리 기술 도입이 일부 미지정 범주를 올바르게 식별할 수 있음을 보여준다. Method 2에서는 미지정 범주 언어 중 296개의
입력이 올바르게 미지정 범주로 분류되었고, 단 4개의 입력만이 잘못 분류되었다. 이는 이진 분류기를 이용한 전처리 기술 도입을 통해 미지정 범주를
효과적으로 식별할 수 있음을 보여준다. Method 3에서는 291개의 입력이 미지정 범주로 올바르게 분류되었고, 9개의 입력만이 목표 범주로 잘못
분류되었다.
표 3 정확도와 F1score 테이블
Table 3 Accuracy and F1 Score Table
|
Accuracy(%)
|
F1 score
|
Method 0
|
85.75
|
0.835
|
Method 1
|
85.47
|
0.880
|
Method 2
|
88.68
|
0.882
|
Method 3
|
91.00
|
0.910
|
표 3은 미지정 범주를 포함한 21개의 범주를 분류한 실험에 대한 정확도와 F1 스코어를 보여준다. Method 1의 정확도는 85.47%로 Method
0의 정확도 85.75%와 비슷하지만, F1 스코어는 Method 1이 0.880으로 Method 0의 0.835보다 더 높다. 이는 Method
1이 미지정 범주를 일부 식별할 수 있어 나타난 결과이다. Method 3의 정확도는 91.00%로 가장 높으며, F1 스코어도 0.910으로 가장
높다. 그다음으로 높은 성능을 보이는 것은 Method 2로, 정확도는 88.68%이고 F1 스코어는 0.882이다. 각각의 모델을 GPU RTX
2070 super를 2개 사용하여 훈련했을 때 Method 0, 1번 모델 생성에는 441초, Method 2의 이진 분류 모델 생성에는 477초,
Method 3번의 모델 생성에는 443초가 소요되었다.
5. 결 론
현대 소프트웨어 환경에서 수많은 소스 코드가 오가는 가운데, 올바른 프로그래밍 언어 식별은 혼란을 최소화하고 작업 효율성을 극대화하는 핵심 기술로
부각되고 있다. 본 논문에서는 기계 학습을 통한 프로그래밍 언어 식별 기술에서 목표 범주 선택 방법과 미지정 범주 분류 방법을 제안하였다.
목표 범주는 프로그래밍 언어 식별 모델의 정확도와 효율성, 일반화 능력 등에 영향을 미치기 때문에 목표 범주의 개수 및 종류를 신중히 선택해야 한다.
본 논문은 프로그래밍 언어를 다루는 여러 플랫폼 및 지표가 제공하는 데이터 통계를 기반으로 20개의 목표 범주를 선택하였다.
본 연구에서는 실험을 통해 기존 방식이 미지정 범주의 입력 파일에 대한 판별 능력이 없는 것을 확인하였다. 따라서 미지정 범주 분류를 위한 세 가지
방법을 제안하였다. 각 방법의 성능을 종합적으로 평가할 때, 미지정 범주를 포함하여 모델을 학습하는 방법이 가장 높은 성능을 보였다. 이 방법은 추가적인
학습 비용이 발생하나 분류 정확도 91.00%와 F1 스코어 0.910을 기록하였다. 그다음으로는 모델 앞단에 이진 분류기를 도입하는 방법이 분류
정확도 88.68%와 F1 스코어 0.882로 높은 성능을 보였다. 또한, 미리 학습된 모델에 전처리 기술만 추가하는 방법은 상대적으로 효율적인 구현이
가능하다.
Acknowledgements
This research was funded by a 2023 research grant from Sangmyung University
References
Y. Watanobe, M. M. Rahman, M. F. I. Amin and R. Kabir, “Identifying algorithm in program
code based on structural features using CNN classification model,” Applied Intelligence,
vol. 53, no. 10, pp. 12210-12236, 2023. DOI:10.1007/s10489-022-04078-y

Y. Oda et al., “Learning to generate pseudo-code from source code using statistical
machine translation,” 2015 30th IEEE/ACM International Conference on Automated Software
Engineering (ASE), pp. 574-584, 2015. DOI:10.1109/ASE.2015.36

R. Russell et al., “Automated vulnerability detection in source code using deep representation
learning,” 2018 17th IEEE international conference on machine learning and applications
(ICMLA), pp. 757-762, 2018. DOI:10.1109/ICMLA.2018.00120

A. T. Nguyen and T. N. Nguyen, “Graph-based statistical language model for code,”
2015 IEEE/ACM 37th IEEE International Conference on Software Engineering, vol. 1,
pp. 858-868, 2015. DOI:10.1109/ICSE.2015.336

S. T. Shi, et al., “Automatic code review by learning the revision of source code,”
Proceedings of the AAAI Conference on Artificial Intelligence, vol. 33, no. 01, pp.
4910-4917, 2019. DOI:10.1609/aaai.v33i01.33014910

K. Alrashedy, et al., “Scc++: Predicting the programming language of questions and
snippets of stack overflow,” Journal of Systems and Software, vol. 162, pp. 110505,
2020. DOI:10.1016/j.jss.2019.110505

J. F. Baquero, et al., “Predicting the programming language: Extracting knowledge
from stack overflow posts,” In: Advances in Computing: 12th Colombian Conference,
CCC2017, Springer International Pulishing, vol. 735, pp. 199-210, 2017. DIO:10.1007/978-3-319-66562-7_15

J. N. Khasnabish, M. Sodhi, J. Deshmukh and H. Srinivasaraghavan, “Detecting programming
language from source code using bayesian learning techniques,” Machine Learning and
Data Mining in Pattern Recognition: 10th International Conference, Springer International
Publishing, vol. 8556, pp. 513-522, 2014. DOI:10.1007/978-3-319-08979-9_39

E. O. Kiyak, A. B. Cengiz, K. U. Birant and D. birant, “Comparison of image-based
and text-based source code classification using deep learning,” SN Computer Science,
vol. 1, no. 5, pp. 266, 2020. DOI:10.1007/s42979-020-00281-1

S. Gilda, “Source code classification using Neural Networks,” 2017 14th international
joint conference on computer science and software engineering (JCSSE), IEEE, pp. 1-6,
2017. DOI:10.1109/JCSSE.2017.8025917

R. Puri, et al., “Codenet: A large-scale ai for code dataset for learning a diversity
of coding tasks,” arXiv preprint arXiv:2105.12655, 2021.

저자소개
Heejeong Yoo graduated from Sangmyung University in 2024. She is currently pursuing
a master's degree in the Department of Computer Science at Sangmyung University. Her
research interests include machine learning, deep learning, image processing, and
3D computer vision.
Eunsu Lee graduated from Eulji University in 2020. She is currently pursuing an integrated
master’s and Ph.D. program in the Department of Computer Science at Sangmyung University.
Her research interests include image processing, 3D integral imaging, computer vision,
and machine learning.
Hoon Yoo received Ph.D. degree from Hanyang University in 2003. He worked at Samsung
until 2005. In 2008, he joined Sangmyung University as a professor. His research interest
include image processing, 3D integral imaging, computer vision, and neural networks.