Vol.2023-SE-213 No.7
2023/3/9

情報処理学会研究報告
IPSJ SIG Technical Report

機械学習を用いて模範コードを提示する
初学者向けプログラミング学習システムの構築
北庄司 亮1,a)

松下 誠1,b)

肥後 芳樹1,c)

概要：プログラミングの学習において，単純に回答して結果を採点するだけではなく，学習者が自身の回答に対してフィードバックを受けることは重要である．しかし，プログラミングを始めたばかりの初学者は知識や経験が不足しているために，自分自身でコードをフィードバックすることが困難である．また，あるプログラムの問題に対する解答は複数考えられるため，他者が初心者の解答に合わせて適切にフィードバックすることも容易ではない．本研究では，既存研究を利用して入力したコードを改善すべきか判定した上で，改善が必要な場合は入力したソースコードに構造が類似した模範解答となるソースコードと，その要約を推薦するシステムを構築した．また被験者にシステムを利用してもらい，定量的な評価ならびに被験者へのアンケートを実施することによってシステムの評価を行った．
キーワード：プログラミング，機械学習，学習システム

1. はじめに解答コード，入力したソースコードの要約，模範解答コードの要約を提示するシステムである．

コンピュータはスマートフォンやパソコンなどの身近なこのシステムの評価を実験とアンケートにより行った．

ものに内蔵されており，生活を豊かにするために重要な要

まず Project CodeNet のデータセットを基に問題とそれに素である．そのためコンピュータを効果的に利用すること対する模範解答コード群を用意し，被験者が問題を解いたを目的としてプログラミング学習に対する需要が高まってあと，提案するシステムを用いて改善した場合と改善しないる [12]．これらの内容を受け，文部科学省は小学校からい場合での改善状況を計測する．この計測結果によりシス

プログラミング教育を必修化しており [13]，プログラミン

テムの有無による改善度の違いを評価した．その後被験者グ学習者は増加している．また，プログラミング学習者のには改善しやすさに関するアンケート調査を行った．

増加にともなって学習を支援する機会も増加する．

以下，2 節では本研究の背景として，プログラミングコン

一般に，何かを学習する際には，インプット，アウトプッ

テストとソフトウェアの評価指標，そしてシステムに用いト，フィードバックを受けることが重要である [9]．しかた既存研究であるソースコードを自動評価する手法，ソーし，プログラムはアルゴリズムや設計の問題などが理由で，スコードをベクトル化するための code2vec, ソースコード

模範解答をひとつに絞れるとは限らないため，フィードを要約するための code2seq について説明する．3 節では提バック先のソースコードが複数存在することもありうる．

案するシステムの設計について説明し，4 節ではその実装そのため適切にフィードバックすることは容易でない．

について説明する．5 節では提案するシステムを実験とア

本研究では学習モデルを用いて入力したソースコードの構造に類似した模範解答コードを提示し，プログラミングの学習支援を行うシステムを構築する．このシステムは入力をソースコードとし，そのソースコードに改善の余地がンケートによって評価を行った内容について説明し．最後に 6 節ではまとめについて述べる．

2. 背景

ある場合には入力したソースコードの構造と類似する模範
1a)
b)
c)

大阪大学大学院情報科学研究科
Graduate School of Information Science and Technology,
Suita, Toyonaka 565–0871, Japanryo-kita@ist.osaka-u.ac.jp
matusita@ist.osaka-u.ac.jp
higo@ist.osaka-u.ac.jp

c 2023 Information Processing Society of Japan⃝

本節では研究の背景として，プログラミングコンテストとその採点に利用するオンラインジャッジシステム，データセットとして利用した Project CodeNet*1 ，ソフトウェ
アの品質指標，システムに用いた既存研究について説明*1

https://github.com/IBM/Project_CodeNet

1Vol.2023-SE-213 No.7
2023/3/9

情報処理学会研究報告
IPSJ SIG Technical Reportする．

り，このデータセットはソースコードに関連する機械学習の訓練に対して使用されている [8]．データセットのメタ

2.1 オンラインジャッジシステム

データは以下のようなものがある．

オンラインジャッジシステムとは，オンラインで演習問• 問題番号題に関するソースコードを自動採点するシステムである．

• 参加者の id

プログラマが書いたプログラムをテストすることで自動的• 解答日時に評価し，正誤に関して判定できる．これによりプログラ• プログラミング言語

ミングの能力を評価するためのオンラインテストやコンテ• コンパイル情報ストを開催することができる．採点基準は以下のようなも• 実行時間のがある．

• 使用メモリ量• コンパイルできるか• 出力が適切か• コードのサイズ• プログラムの正誤• メモリ使用量

本研究では，プログラム言語，実行時間，プログラムの正• 実行時間

誤に関する情報を利用し，模範解答コード群を作成する．

このような基準に対して満たさない場合はその箇所を，すべて満たす場合は正解であることを示す．具体的なオンラインジャッジシステムとしては AIZU Online Judge[1]，AtCoder[2]，Topcoder[3] などがある．

2.4 ソフトウェアの品質指標
ソフトウェアの品質を高く保つことは重要な要素である．
品質には可読性，一貫性，拡張性，再利用性などの様々な要素があり，高品質なコードを作成することは高品質なソ

2.2 プログラミングコンテスト
プログラミングコンテストは，プログラミングの能力を競うコンテストのことである. 参加者は，与えられた問題

フトウェアの開発に役立つ．以下では評価に利用した指標について述べる．

2.4.1 Cyclomatic Complexityを解決するためのプログラムを記述し，その結果を評価す

Cyclomatic Complexity[16]（以下，CC）はプログラムるためにオンラインジャッジシステムに提出する．そのの構造の複雑さに関する指標であり，この指標が高いほど後，正解した問題数などの様々な基準で参加者の順位を決プログラムは複雑で，バグが発生しやすくなることから保定する．大学，プログラマ，企業など，様々な団体によっ守性が低くなりやすい．制御フローグラフを解析し，そのて開催されており，参加者も個人で参加するものからチー

グラフの辺の数に基づいて計算され,CC はグラフのエッジムで参加するものなど様々である．コンテストはオンライ

数 E, グラフのノード数 N , 連結成分の個数 P を用いて次ンで開催されることが多く，世界中の人々が参加できる．

式で表される．

競技内容にも様々な種類があり，例えば以下のようなものがある．

• アルゴリズム，コンピュータサイエンス，数学に関する問題を解く早さを競う• ソフトウェア，ネットワークのセキュリティ上の問題点の発見を競う• ある処理を実行するソースコードの小ささを競う
本研究では，個人で参加し，アルゴリズム，コンピュータサイエンス，数学に関する問題を解く早さを競うコンテストを扱う．

CC = E − N + 2P
制御フローグラフは図 1 のように，プログラムの中のすべてのフロー制御構造を表したグラフで，ノードは逐次コード，辺は制御フロー（if 文，for 文，while 文など）を用いる．
public class Main {public static void main(String[] args) {if(args.length > 0) System.out.print(args[0]);}}2.3 Project CodeNet
Project CodeNet[14] は，ImageNet[7] が Computer Vision の分野に与えた影響を，AI for Code の分野にも与えることを目的としており，オンラインジャッジシステムである AIZU Online Judge と AtCoder[2] から収集された4000 を超える問題とそれに対応して様々な言語で解答されたソースコードやメタデータがまとめられている．対象となる言語には Java，Python3，C, C++, Ruby などがあc 2023 Information Processing Society of Japan⃝

図 1

制御フローグラフの例

2Vol.2023-SE-213 No.7
2023/3/9

情報処理学会研究報告
IPSJ SIG Technical Report

2.4.2 Lines of CodeLines of Code（以下，LOC）はソフトウェア開発の規模や複雑度を評価するために使用される指標であり，プロ

表 2
メトリクス

特徴量に使用したメトリクス
説明avg complexity

各関数の CC の平均値

max complexity

各関数の CC の最大値

る．LOC はプログラミング言語や開発環境に依存するた

avg depth

各関数のネスト深さの平均値

め，この指標だけでソフトウェアの質を決定することがで

max depth

各関数のネスト深さの最大値

きない．そのため，他の指標と組み合わせて使用する．

methods per class

クラス当たりのメソッド数

n classes

クラス数n func

関数の数

n lines

物理行数n statements

セミコロンで区切られた論理行

グラムの行数をコメントや空行も含めて数えたものであ

2.5 システムに利用した既存研究
2.5.1 品質の自動評価
松井ら [11] は堤ら [17] によって作成されたプログラミ
ングコンテストのデータセット*2 を用いて，3 値分類によ数

percent branch statementsの割合

るソースコードの良さを判定するモデルを作成している．
判定するまでの流れ（図 2）で示すように，大きく分けて3 段階になっている．

全体の論理行数に占める分岐文
全体の物理行数に占めるコメン

percent comments

トの割合

avg statements per method

各メソッドの論理行数の平均値

statements at block level 0

深さ 0 の論理行数

statements at block level 1

深さ 1 の論理行数

準として 4 つに分割し，最もレーティングが高いソース

statements at block level 2..
.

深さ 2 の論理行数..
.

コード群を上級者，最もレーティングが低いソースコード

statements at block level 8

深さ 8 の論理行数

群を初級者，残りの 2 つを中級者コード群とする．

statements at block level 9

深さ 9 以上の論理行数

まずデータセットとなるソースコード群を上級者コード群・中級者コード群・初級者コード群で分割する．このとき，上級者・中級者・初級者の定義は解答者のレートを基次に分割したソースコードに対して表 1 に示した予約語の利用頻度やメトリクスの値などのソースコード特徴量（表 2）を取得し，機械学習の説明変数とする．目的語はソースコードの良さであり，上級者，中級者，初級者それぞれのコード群をコード群を学習する．
最後に，学習したモデルにソースコードを入力することで，ソースコードの品質を評価することができる．

asm

表 1 特徴量に使用した予約語
breakcasecatchclasscontinue

decltype

elseenum

externdoforfriendgoto

ifnamespace

operator

privatepublicreturn

structswitchtemplate

try

typedeftypeidtypenameusingwhile

図 2

品質の自動評価手法

このモデルの学習までの手順を説明する．まず図 3 のよ
うにソースコードのメソッドを抽象構文木（以下，AST）に変換する．AST はソースコードをコンパイル際にできる構文情報を表現した中間表現であるため，AST を利用することでソースコードの構造に着目した分散表現を作成

2.5.2 code2vecする．

code2vec[6] はソースコードのメソッドに対する分散表現

次に AST から Bag of Path-Contexts という分散表現を作るニューラルモデルであり，Uri らは Allamanis ら [4]を作成する過程を図 4 に示す．AST の葉から葉までのパが作成した Java のデータセットを基に作成した訓練済み

スを表現したものを AST-Path とし，（始点, AST パス,モデル*3 や，モデルを利用するためのソースコード*4 をオ終点）を Path-Context とする．Path-Context は一つのンライン上に公開している．

AST に対して複数存在するため，それらをまとめて Bag*2of Path-Contexts という．

*3
*4

https://sites.google.com/site/miningprogcodeforces/
https://code2vec.s3.amazonaws.com/model/
java-large-released-model.tar.gz
https://github.com/tech-srl/code2vec

c 2023 Information Processing Society of Japan⃝

最後に Bag of Path-Contexts をベクトルに変換する．まず Path-Context の始点，終点，AST パスを図 5 のように

3

Vol.2023-SE-213 No.7
2023/3/9

情報処理学会研究報告
IPSJ SIG Technical Reportpublic class Main {public static void main(String[] args) {if(args.length > 0) System.out.print(args[0]);
}
}

図 5

Path-Context のベクトル化

2.5.3 code2seq
図 3

AST の例

code2seq[5] は code2vec を改良し，メソッド名の提案に特化させるために設計されたニューラルモデルであり，Uri
らは code2vec のモデルを作成したときと同様のデータセッ
トを用いて作成したモデル*5 と，モデルを利用するためのソースコード*6 をオンライン上に公開している．code2seq
でも 2.5.2 項と同様に AST から AST-path を作成するが，code2vec とは異なり code2seq では学習の精度を上げるた
めに葉をサブトークンに分割する．
具体例としては linear search を linear, search のように変化させることで固有の言葉を減少させる．また AST-Path をベクトル化する際に bi-directional LSTM[15] という入力の時系列に依存した学習に有効な学習方法を利用している．これはメソッド名を単語の羅列として出力できるように前後の関係を学習させるためである．さらにAttention 機構 [10] を用いることにより，入力のどの単語が重要かを重み付けしている．これらの工夫により code2seq
図 4

Bag of Path-Contexts までの流れ

はメソッド名を連続した単語の羅列で提案できる．この手法を利用して研究ではソースコードの要約を行った．

One-Hot ベクトルに変換した後，埋め込みを行うことで次元を固定長に変換する．さらに作成した Path-Context の埋め込みベクトルを活性化関数 tanh と線形変換する行列を用いて一つのベクトルに結合する．

このようにして作成したモデルも 2.5.2 項で説明した

code2vec と同様に bag of Path-Contexts を基にベクトル化しており，ソースコードの構造に依存した要約となる．

3. システムの設計

モデルは Bag of Path-Contexts を基に学習するため，ソースコードの構造に着目したベクトルとなる．著者のAlon らは code2vec を用いて以下のようなことができると述べている．

• メソッド名の提案• 機能の類似性を基にしたコード検索• プログラムが I/O を実行するか予測• プログラムの依存関係を予測• マルウェアの検知研究ではソースコードをベクトル化し，類似したコードの探索を行うことに利用している．

c 2023 Information Processing Society of Japan⃝

本節では，提案するシステムの設計について説明する．
システムの全体像を図 6 に示す．
このシステムでは，入力するソースコードと，改善の基となる模範解答コード群が事前に準備されていることを前提とする．まずソースコードが入力されると，そのソースコードに改善の余地があるかを判定する．これは改善の余地が特段必要ない場合に終了させることを目的としており，この部分には 2.5.1 節で述べた既存研究を用いる．仮*5*6

https://s3.amazonaws.com/code2seq/model/java-large/
java-large-model.tar.gz
https://github.com/tech-srl/code2seq

4Vol.2023-SE-213 No.7
2023/3/9

情報処理学会研究報告
IPSJ SIG Technical Reportを要約することで，ソースコードをどのように変更するのか，といった模範解答コードに対する理解を促すことを目的としており，要約する手法は 2.5.2 節で述べた既存研究を用いる．
最後に，上記の結果として，以下 4 種類の情報を出力する．

• 入力したソースコードの要約情報• 模範解答コードのファイル名• 模範解答コードの要約情報• 入力コードと模範解答コードの類似度

4. システムの実装
本節では，3 節で述べた内容の実装方法について説明する．

4.1 模範解答コード群と付随する情報の作成手順
模範解答コードは入力と独立しているため，あらかじめソースコードの構造に基づいたベクトル化やコードスニペットの予測によって要約することができる．模範解答
コード群は 2.3 節で述べた Project CodeNet のデータセッ
トを用いて作成した．ここでは模範解答コードとする条件とその要約方法，ベクトル化の実装について述べる．

4.1.1 模範解答コード群
Project CodeNet に含まれている解答コードとメタデー
タを基に，模範解答コード群を作成する．ここで模範解答コードは，Project CodeNet に含まれていた解答コードのうち，問題に正解しており，ソースコードのメトリクスや実行時間が表 3 をすべて満たすものとした．この指標を用
図 6

プログラミング学習システム

いた理由は，LOC と CC が低いものを指標にすることで，模範解答コードのソフトウェア品質を高く保ち，実行時間が短いソースコードを選択することで，模範解答コードをに良いソースコードであれば改善の余地がないとして終了より良いソースコードとするためである．

し，それ以外の判定が出力された場合は改善の余地があるとして改善に適切な模範解答コードを探索する．
次に，入力したソースコードの情報を基に適切な模範解

表 3 模範解答コードの条件メトリクス
閾値答コードを決定するため，入力と模範解答コード群に含まLOC

全体の 50%以下れるソースコードをそれぞれ分散表現にした上で，その類CC全体の 50%以下似度を計算する．これはソースコードを分散表現にするこ実行時間

全体の 50%以下とで適切な模範解答コードを計算により求めることを目的としており，分散表現を作成する手法として 2.5.2 節で述
べた既存研究を用いる．また類似度としてコサイン類似度を用いた．

4.1.2 模範解答コードの要約とベクトル化
模範解答コードのベクトル化と要約の様子を図 7 に示す．2.5.2 節で述べた，オンラインで公開されている類似コード検索の結果，与えられた入力コードに類似しcode2vec の訓練済みモデルを用いて模範解答コードを分散ている模範解答コードに含まれるソースコードを得た後，表現に変換し，得られたベクトルをファイルに出力した．

入力コードと模範解答コードとの差分をわかりやすく示す

ここで用いるベクトルの次元は 100 次元であり，main 関ために，ソースコードの要約を行う．この要約は，単に模数の分散表現をソースコードの分散表現としている．

範解答コード群に含まれているソースコードそれ自体を提同様に 2.5.3 節で述べた，オンラインで公開されている示するだけでなく，入力コードならびにそのソースコードcode2seq の訓練済みモデルを用いて模範解答コードを要約

c 2023 Information Processing Society of Japan⃝

5Vol.2023-SE-213 No.7
2023/3/9

情報処理学会研究報告
IPSJ SIG Technical Report

し，模範解答コードの要約情報をまとめるファイルに出力Input.java

した．このとき，ソースコードの要約として main 関数を

public class Main {要約したものを利用する．

public static void main(String[] args) {if(args.length > 0) System.out.print(args[0]);
}}
...


図 8

入力コード



Input.java
predict: main

図 7s000127.java

ソースコードのベクトル化と要約

predict: main
similarity: 0.16

4.2 入力コードの判定s000182.java

入力コードの判定は 2.5.1 節で述べた既存手法を用いた．

predict: echo

具体的には，Project CodeNet の解答コードを用いてモデ

similarity: 0.12

ルを作成した上で，ソースコードの評価を図 2 と同様に
s000102.java行った．その結果，仮に入力したソースコードが’ 良’ と判

predict: main, echo

定された場合はシステムを終了させ，それ以外の場合は改善が必要であると判断して，以降の手続きを行う．

similarity: 0.08




図 9

システムの出力

4.3 入力コードの要約とベクトル化改善が必要と判断された入力コードを対象として，要約やベクトル化を行う．この時，code2vec, code2seq のモデ

5. 評価実験

ルはそれぞれ 4.1.2 節と同様のものを用いて，入力したソー

本節では，提案システムの評価について説明する．シス

スコードのベクトル化と要約情報を得る．このときのベクテムを被験者に利用してもらう実験を行い，定量的評価とトルも 100 次元であり，要約情報はソースコードの main

アンケート評価の 2 種類で評価を行った．

関数を要約したものである．

5.1 概要
4.4 入力コードと類似する模範解答コードの選択

実験は図 10 のように行った．まず最初に，Project Co-入力したソースコードのベクトルと各模範解答コードとdeNet に含まれている表 4 で示した 2 種類の問題を用意し，のコサイン類似度を計算し，類似度の高いもの 3 つを模範被験者に実験の概要と注意事項を説明する．被験者は表 4解答コードとして出力する．このときコサイン類似度はベの問題に対して Java を用いて各問題について 1 つづつ，クトルの大きさ |V | を用いて以下のように定義した．この合計 2 つの解答を作成する．その後，片方の解答は正解と類似度は 1 から-1 までの値を取り，ベクトル間の角度に依された解答群を基に自身で模範解答を決定して改善し，も存するという特徴があり，機械学習の分野でよく用いられう片方の解答はシステムによって提示された模範解答コーている．

ドを基に改善する．その後，システムに関するアンケート∑|V |⃗q · d⃗⃗qd⃗
i=1 qi di⃗√cos(⃗q, d) ==·= √∑∑|V | 2⃗⃗|⃗q||V||⃗q| · |d||d|2i=1 qi ·i=1 diへ回答する．アンケート調査には Google が運営している

Google Forms*7 を用いた．
5.1.1 定量的評価
システム利用の有無により，以下の指標がどのように変4.5 出力
実際の入力と出力結果を図 8，図 9 にそれぞれ示す．図

化したか確認することでシステムを評価する．

• CC

9 より入力された Input.java の要約が main, 最も類似した• LOC

ソースコードが s000127.java であり．類似度が 0.16 であることなどがわかる．

c 2023 Information Processing Society of Japan⃝*7

https://docs.google.com/forms/

6Vol.2023-SE-213 No.72023/3/9

情報処理学会研究報告
IPSJ SIG Technical Report

表 5 理解度の指標
level 内容

表 6 難易度の指標
level 内容

1

理解していない

1

簡単だった

2

あまり理解していない

2

やや簡単だった

3

どちらともいえない

3

普通

4

理解している4

やや難しかった

5

普段から使用している

5

難しかった

調査を行った結果を表 7 に示す．

表 7
図 10

実験の流れ

システム
表 4
問題番号

問題名

1

玉利用した問題
問題内容

2 つの箱があり，1 10 までの数字がランダムに書かれた玉を先頭から順

実験結果
1

問題番号

2なし

ありなし

CC

6

4.5

7あり

16LOC

34366053

改善時間 (min)13101413

改善の難易度123

2にすべて 2 つの箱のどちらかに入れたとき，数字が箱の中で降順となる
場合は存在するか．

2

平面上の図形

8 × 8 マスにある数字列を読み込んで，置かれている図形の種類を出力
しろ．

表 7 から問題番号 1 ではシステムを用いた方の CC が低くなっているが，問題番号 2 ではシステムを用いた場合 CCが高くなっていることがわかる．これはシステムが類似度による模範解答コードを出力するため，入力されたソースコードの構造が影響されたと考えられる．

• 改善時間
5.1.2 アンケート評価
アンケートによって，被験者の妥当性とシステムの利便性について確認する．被験者は以下の内容に対する理解度を，表 5 を基準に 5 段階で回答する．

次に，改善時間の変化からシステムを用いてることで改善時間の短縮ができていることがわかる．これは模範解答を提示することで被験者が確認したソースコードの量が少なくなったためであると考えられる．
最後に，アンケート結果ではシステムを利用することで• Java

改善の難易度が下がったと感じる場合と，改善の難易度が• プログラミングコンテスト上がったと感じる場合があることが分かった．これはシス• Visual Studio Code

テムの評価基準がソースコードの構造のみに着目していこれは被験者に関する妥当性を確認するものであり，Javaるため，コーディングルールのようなその他の要因によるは解答する言語が Java のため，プログラミングコンテストものであると考えられる．またこの結果は CC の改善とトは問題がプログラミングコンテストのため，Visual Studioレードオフになっていると考えられ，CC を小さくするこ

Code は解答する環境が Visual Studio Code のためである．とで改善の難易度が上がると予想される．

この理解度を 1 と回答した被験者はシステム以外の要因で今回の内容から，ソースコードの構造に関する類似度を結果が変わることを考慮し，今回の実験の対象外とする．

用いて模範解答を推薦すると，より品質の高い構造に気づまた，問題それ自身と手動で改善を行った場合，ならびにかず，根本的な修正ができない場合がありえる．そのため，本システムを用いて改善を行った場合の 3 点について，表類似度の高さ以外にも新たな指標を用いて模範解答を推薦

6 に示す 5 段階の難易度の指標を回答する．これにより問し，その際 CC を下げつつ改善の難易度が上がらないよう題の妥当性とシステムの利便性について確認する．

な工夫を行った方が良いと考えられる．

5.2 結果と考察
この節では被験者 2 名によって行った実験の結果と．結果に対する考察に関して説明する．

6. まとめ本研究では，増加するプログラミング初学者の学習を支

被験者が解答したソースコードを，システムを用いずに援するために，入力したソースコードを基に，入力と構造正解した解答群のみで改善した場合とシステムを用いて改が類似している模範解答コードを提示するプログラミン

善した場合，それぞれに対して，定量的評価とアンケートグ学習支援システムを構築した．このシステムの主な機能

c 2023 Information Processing Society of Japan⃝

7Vol.2023-SE-213 No.7
2023/3/9

情報処理学会研究報告
IPSJ SIG Technical Report

はソースコードの自動評価，ソースコードの要約，ソースコードのベクトル化と類似コードの選定である．

[15]

提案したシステムを Project CodeNet のデータセットを利用して定量的評価とアンケート評価を行った．その結[16]

果，システムを用いたほうが改善時間を短縮できることがわかった．またアンケートの結果から，システムを用いて改善する方が改善自体を難しく感じる場合があり，ソースコードの類似度が高いだけでは必ずしも理解しやすいとは[17]

dataset for learning a diversity of coding tasks. 2021.
Mike Schuster and Kuldip Paliwal. Bidirectional recurrent neural networks. IEEE Transactions on Signal Processing, Vol. 45, No. 11, pp. 2673–2681, 1997.
Martin Shepperd. A critique of cyclomatic complexity asa software metric. Software Engineering Journal, Vol. 3,
pp. 30 – 36, 04 1988.
堤祥吾, 吉田則裕, 崔恩瀞, 井上克郎. プログラミングコン
テスト参加者を対象とした編集作業の特徴調査. 情報処理学会研究報告, Vol. 2017-SE-197, No. 6, pp. 1 – 8, 2017.

限らないことがわかった．この結果から，プログラミング学習者にとって理解しやすい模範解答を推薦するために，プログラムの構造以外の指標も含めたシステムの改良を行いたい．
参考文献
[1]

[2]
[3]
[4]

[5]

[6]

[7]

[8]

[9]

[10]

[11]

[12]

[13]

[14]

Aizu online judge: Programming challenge. https://judge.u-aizu.ac.jp/onlinejudge/. (Accessed on02/07/2023).
Atcoder.
https://atcoder.jp.
(Accessedon
02/07/2023).
Topcoder. https://www.topcoder.com/. (Accessed on
02/07/2023).
Miltiadis Allamanis, Hao Peng, and Charles Sutton. A
convolutional attention network for extreme summarization of source code. In International Conference on Machine Learning (ICML), 2016.
Uri Alon, Omer Levy, and Eran Yahav. code2seq: Generating sequences from structured representations of code.
2019.
Uri Alon, Meital Zilberstein, Omer Levy, and Eran Yahav. Code2vec: Learning distributed representations ofcode. Proc. ACM Program. Lang., Vol. 3, No. POPL,
pp. 40:1–40:29, January 2019.
Jia Deng, Wei Dong, Richard Socher, Li-Jia Li, Kai Li,and Li Fei-Fei. Imagenet: A large-scale hierarchical image database. pp. 248–255, 2009.
福家範浩, 藤原裕士, 吉田則裕, 崔恩瀞, 井上克郎. 深層学
習を用いたコードクローン検出器の汎化性能に関する調査. 情報処理学会研究報告, Vol. 2021-SE-207, No. 12, pp.
1 – 7, 2021.
David Kolb. Experiential Learning: Experience as theSource of Learning and Development. Prentice Hall,1984.
Thang Luong, Hieu Pham, and Christopher D. Manning.
Eﬀective approaches to attention-based neural machinetranslation. Vol. Proceedings of the 2015 Conference on
Empirical Methods in Natural Language Processing, pp.
1412–1421, 09 2015.
松井智寛, 松下誠, 井上克郎. ソースコードのグラフ表現を利用した深層学習によるコーディングの専門性の判定手法. 情報処理学会研究報告, Vol. 2022-SE-210, No. 12,pp. 1 – 8, 2022.
文 部 科 学 省. 教 育 の 情 報 化 の 手 引 き-追 補 版-(令 和2 年 6 月). 2020. https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/mext_00117.html. (Accessedon 02/07/2023).
文 部 科 学 省. 小 学 校 プ ロ グ ラ ミ ン グ 教 育 の 手引 (第 3 版). 2020. https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1403162.htm. (Accessed on02/07/2023).
Ruchir et al. Puri. Codenet: A large-scale ai for codec 2023 Information Processing Society of Japan⃝8