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

解答ソースコードを用いたプログラミング演習問題に対するタグ付け手法の提案
川渕 皓太1,a)

松下 誠1

吉田 則裕2

井上 克朗3

概要：IT 産業の発展に伴いプログラミング学習サイトの数が増加しており，タグ付けされた問題を解くことでユーザのプログラミング能力の判定を行うものも存在する．既存のプログラミング演習問題をこの能力の判定に用いる場合，問題のタグ付けに労力がかかることが問題となる．そこで本研究では，タグ付与
済みのプログラミング演習問題を Doc2Vec で学習し，タグが付与されていない演習問題に対してタグを自動で付与する手法を提案する．提案手法を用いて実験を行った結果，タグによって推測精度の差があることがわかった．また，推測するタグをアルゴリズム情報に関するタグのみに絞ることで，精度が向上する
ことを確認した．
キーワード：プログラミングコンテスト，Doc2Vec，抽象構文木，タグ

1. まえがきしている．
そこで本研究では，問題の解答から自動的に問題のタグ

IT 産業の発展に伴って，プログラミング学習サイトの数を付与する手法を提案し，ツールを作成した．このツールが増加している [1]．あるプログラミング学習サイトでは，が自動的に問題のタグ付けを行うことで，タグ付けの基準

タグ付けされた問題を解くことでプログラミングの能力判は統一されたものとなる．またツールを用いることで，教定を行うことができる．例えば，文字列操作のタグが付与

員が作成した問題に自動でタグ付けが行え，その問題を能された問題を解くことができるが，動的計画法のタグが付力判定に使用することができるようになり，社員が作成し与された問題を解けないユーザは，文字列操作が得意で動た問題においてもタグを付与する労力が軽減される．

的計画法が不得意であると判定できる．このような能力判提案手法の手順は次の通りである．まず，あらかじめタ

定により，ユーザは自身の苦手な分野を把握することがでグが付与されている問題とその解答の集合をデータセット

き，その分野を重点的に練習することで能力を向上させるとする．データセットの各問題の解答から抽象構文木 (以ことが期待できる．

下，AST) を作成し，それを後行順探索し，到達したノー

また，このサイトの別のサービスとして，教員が作成しドを順にリスト化する．次に，作成したリストを Doc2Vec

た問題とテストケースを学生向けに公開し，学生が解くこで学習し，分散表現を獲得する．タグ付けを行いたい問題とができるものがある．プログラミング学習サイトの運営の解答に対しても同様に AST を作成，リスト化して，学会社としては，教員が作成した問題も能力判定に利用する

習済みモデルから分散表現を獲得する．その分散表現と，ことで，能力判定に利用する問題数を増やしたい．しかし，

データセットから作成した分散表現を比較してコサイン類

教員が作った問題に社員が 1 つ 1 つタグを付与すると，労似度を算出し，コサイン類似度が高いデータセット内の解力がかかりすぎる．また，問題を作成した教員が自身の尺答を特定する．最後に，特定した解答が提出された問題に度でタグ付けすると，タグを付与する基準にばらつきが出付与されているタグから，タグ付けを行いたい問題に対すてしまい，そのような問題を能力判定に使用した場合に能るタグを決定する．

力判定の精度が落ちてしまうことが考えられる．そのため現在は能力判定に関する問題は社員が作成し，タグを付与
1
2
3
a)

大阪大学
立命館大学
南山大学
k-kawabt@ist.osaka-u.ac.jp

c 1959 Information Processing Society of Japan⃝

以下，2 節では本研究の背景として，プログラミングコ
ンテストサイト，関連研究と課題について説明する．3 節
では提案手法について説明する．4 節では評価実験の手法と結果，用いたデータセットを説明し，実験の結果についての考察を行う．最後に，5 節ではまとめと今後の課題に

1

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

ついて述べる．

表 1

AtCoder Tags での大分類タグとその説明 [4]

タグ名

2. 背景

Ad-Hoc

本節ではプログラミングコンテスト，関連研究とその課題について説明する．

2.1 プログラミングコンテスト
プログラミングコンテストとはプログラミングの能力や技術を競い合うコンテストのことである [2]．オンライ

April-Fool

説明
どのカテゴリにも属さない特有の性質を用いる問題
エイプリルフールコンテストなどの特殊なコンテストの問題

Construct

条件を満たすものを実装する問題

Data-Structure

データ構造に関する問題

Dynamic-Programming

動的計画法に関する問題

Easy

ンジャッジシステム [3] が採用されており，参加者はオン

カテゴリ分類できないほど簡単な問題

Flow-Algorithms

ネットワークフローに関する問題

Game

ゲームに関する問題

Graph

グラフ理論に関する問題

Greedy-Methods

貪欲法に関する問題について説明する．

Interactive

出力の後に入力が与えられる問題

2.1.1 AtCoder で定期的に行われるコンテスト

Marathon

中長期に渡って得点を競い合う問題

Mathematics

数学に関する問題

種類あり，易しい方から順に AtCoder Beginner Contest

Other

問題以外のページに付与されるタグ(ABC)，AtCoder Regular Contest (ARC)，AtCoder Grand

Searching

探索アルゴリズムに関する問題

String

文字列に関する問題

ラインで参加する．例えば，AtCoder*1 ，AIZU ONLINEJUDGE*2 (以下，AOJ)，Codeforces*3 などがある．
本研究では AtCoder を対象とするため，以下 AtCoder

AtCoder では，定期的に行われるコンテストが主に 3Contest (AGC) と名付けられている．
2.1.2 AtCoder Tags

Technique

累積和などのテクニックに関する問題

AtCoder Tags*4 とは，ユーザの投票によって AtCoderの問題にタグ付けをする Web アプリである．タグとは，問2.3 課題題に関する情報や解くために必要な知識などに関するキー

新濱らは実験結果から，同じアルゴリズム情報に関するワードであり，例えば AtCoder Tags での大分類タグは表タグが付与されている問題同士の類似度は高くなる可能性

1 に示す通りである．

があるとしたが，タグが不明な問題に対してタグを付与す

ユーザは投票画面で AtCoder の問題 ID と大分類，小分る実験は行っていない．また，問題文よりも問題に対する類のタグを入力して投票することができ，これまで投票

解答の方が問題を解くために使われるアルゴリズムの情されたタグの割合を確認することができる．例えば，あ報などが顕著に出ると考えられるが，問題の解答のソースる問題に対して 3 人が “Mathematics” に投票し，1 人がコードの類似度と問題に付与されているタグの類似度に関“String” に投票した場合，その問題は “Mathematics” がする研究は行われていない．

75%，“String” が 25%という結果となる．
2.2 関連研究

3. 提案手法
新濱らは問題同士の類似度を問題文により算出していた

新濱らの研究 [5] では，Codeforces の問題文同士の類似が，我々は問題よりも解答の方が問題の特徴が顕著に出る度を，問題文から算出する手法を提案し，その手法を評価と考えた．そこで本研究では，問題の類似度を解答のソーする実験を行っている．

スコードから算出し，その結果からタグ付けを行う．

新濱らは Word2Vec[6] を用いる手法と Doc2Vec[7] を用提案手法によるソースコードへのタグ付け方法を図 1 にいる 2 つの手法を提案し，その手法を評価する実験を行っ示す．タグ付けの流れは大きく 5 つのステップに分けるこた．Doc2Vec とは任意の文書の分散表現を獲得する手法でとができる．まず STEP1 として，あらかじめタグが付与

あり，学習済みのモデルから未知の文書の分散表現を獲得された問題の解答のソースコードから AST を作成し，そすることができるものである．その結果，Doc2Vec を用いの AST を後行順に探索し，到達したノードを順にリスト

た手法の方が精度が高いことを確認した．また，アルゴリ

化する．STEP2 として，リスト化したものを Doc2Vec でズム情報を基に付与されたタグ同士の問題文は類似度が高学習を行い，分散表現を獲得する．STEP3 として，タグ付

いことを推測した．

けを行いたい問題の解答において同様に AST を作成，リスト化し，学習モデルから分散表現を獲得する．STEP4

*1
*2
*3
*4

https://atcoder.jp/
https://judge.u-aizu.ac.jp/onlinejudge/
https://codeforces.com/
https://atcoder-tags.herokuapp.com/

c 1959 Information Processing Society of Japan⃝として，STEP2 で獲得した分散表現と STEP3 で獲得した分散表現のコサイン類似度を算出し，コサイン類似度上位

20 位のソースコードを特定する．STEP5 として，STEP42

情報処理学会研究報告
IPSJ SIG Technical Report
STEP1: ASTの作成，リスト化

STEP2: 学習…

タグ付与済みの問題の解答例のソースコード

AST

リスト

STEP5:
付与するタグの提案

STEP4:
コサイン類似度の算出

…
…

学
習
モ
デ
ル

分散表現
コサイン類似度の
計算

順位

ID

類似度

1

hoge1

0.70

…

…

…

20

hoge2

0.50

タグは〇〇

…

分散表現
タグを付与したい問題の解答例のソースコード

リスト

AST

STEP3: 学習済みモデルから分散表現を獲得

図 1

タグ付けの流れで特定したソースコードが提出された問題に付与している

5タグから，問題に付与するタグを推測する．5 つのステッ
プそれぞれの詳細を以下で述べる．

4

STEP1: AST の作成，リスト化

3

あらかじめタグが付与されている問題の解答から ASTを作成する．AST の作成には Python ライブラリ Clang2

１python bindings*5 を使用した．
次に，作成した AST を後行順に探索し，到達したノード

変数参照部(int)を順にリスト化した．この時，以下のルールを適用した．

( 1 ) ライブラリなどの外部ファイル内での処理はリストか

変数宣言部

ら除外する．

( 2 ) 呼び出されていない関数を特定しリストから除外する．
( 3 ) ノード名が “UNEXPOSED EXPR” であるノード*6 を除外する．

( 4 ) 変数宣言部を除外する．

int
INTEGER_LITERALCOMPOUND_ASSIGNMENT_OPERATORCOMPOUND_STMT
FUNCTION_DECL( 5 ) 外部ライブラリの関数を呼び出しているノードを具体的な関数名に変更する．

図 2

AST のリスト化の例( 6 ) 変数参照部は参照されている変数の型名に変更する．
ここでルール 1〜4 を適用した理由は，問題に直接関係なと報告されているため [8]，ここでは PV-DM を採用した．

い冗長な箇所を除外するためである．また，ルール 5 の適作成したモデルは次元数 300 とし，ウィンドウサイズ 5，

用により，「外部ライブラリからある関数を参照している」

出現回数が 5 回以下の単語は棄却，エポック数は 600 としという情報だけでなく，「どの関数を参照しているか」の情て学習を行った．

報を与えた．また，ルール 6 の適用により，「ある変数の操作を行っている」という情報だけでなく，「どの型の変数の操作を行っているか」の情報を与えた．

AST のリスト化の例を図 2 に示す．図 2 の上部に示す
AST を先述したルールを適用してリスト化を行うと，図 2

STEP3: 学習済みモデルから分散表現を獲得
タグ付けを行いたい問題の解答のソースコードを STEP1と同様の処理を行ってリスト化する．そして，STEP2 で学習済みのモデルを用いて分散表現を獲得する．

下部のようになる．

STEP4: コサイン類似度の算出
STEP2: 学習

STEP2 で獲得した全ての分散表現と STEP3 で獲得したリスト化したノードを Doc2Vec で学習させ，分散表現を分散表現とを比較し，コサイン類似度を算出する．そして，獲得する．Doc2Vec は PV-DM，PV-DBoW の 2 つのアルコサイン類似度上位 20 位までのソースコードが提出されゴリズムがあるが，PV-DM の方が精度面では優れている

た問題を特定する．

*5*6

https://pypi.org/project/clang/
その時点では何のノードか確定できないリテラルが出現したときのノード

c 1959 Information Processing Society of Japan⃝STEP5: 付与するタグの提案付与するタグの提案を以下の手順で行う．

3

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

Algorithm 1 タグの付与処理
1: result ← dict()▷ result を辞書型配列で初期化
2: for all tag ← 全てのタグ do3:
result[tag] ← 0
4: end for
5: for all code ← コサイン類似度上位 20 位までのソースコード
do6:
sim ← code のコサイン類似度
7:
problem ← code が提出されている問題
8:
for all tag ← problem に付与されているタグ do
9:ratio ← 付与されているタグのうち tag が占める割合
10:
result[tag] ← result[tag] + sim × ratio
11:
end for
12: end for

各データセットにおいて各タグが全体に占める割合

タグ

学習用

Ad-Hoc

13.5%

評価用

7.0%

Construct

7.1%

4.7%

Data-Structure

6.8%

4.7%

Dynamic-Programming

14.9%

14.6%

Easy

26.9%

19.2%

Flow-Algorithms

1.6%

1.0%

Game

2.7%

1.9%

Geometry

1.1%

1.4%

Graph

9.0%

4.7%

Greedy-Methods

11.2%

8.0%

Mathematics

19.1%

28.6%

( 1 ) STEP4 で特定した問題のタグを取得する．

Searching

17.5%

10.8%

( 2 ) Algorithm1 に示す処理を行う．

String

6.0%

2.8%( 3 ) 辞書型配列 result の要素の数値により降順にソートTechnique

10.5%

11.7%

し，順位が上のタグから順に付与することを提案する．

4. 評価実験
提案手法が推測したタグの精度を確認するために，評価実験を行った．また，問題文を用いた学習と比べて解答のソースコードを用いた学習の方が精度が高いかどうかを確かめる実験を行った．
まず，あらかじめタグが付与されている問題のタグを，うか，どのコンテストのどの問題 ID の問題に提出されたかなどの情報が含まれる．問題 ID が取得できることから，

AtCoder Tags から収集したデータと組み合わせて問題に付与されているタグも取得することができる．
学習用データセットの作成方法について説明する．まず，CodeNet に含まれるソースコードのうち以下の条件に合う問題を選んだ．

その問題の解答を用いて提案手法で推測する．次に，推測• AtCoder に出題された問題

したタグと事前に付与されているタグを比較することに• ABC，ARC または AGC に分類されるコンテストによって提案手法の精度を調べる．また，タグ毎に推測精度を調べ，推測精度の高いタグと低いタグを特定した．この実験を問題文から学習したモデルでも行い，ソースコードを用いた場合との比較を行った．

出題された問題• 特殊なタグ (“Interactive”，“April-Fool”，“Marathon”，“Other”) が付与されていない問題• タグが 1 つ以上付与されている問題本研究では，AtCoder に提出されたソースコードと At-

次に，Clang ではインクルードできないヘッダファイルをCoder Tags で付与されている大分類タグを使用して，提同等の機能をもつ複数のヘッダファイルに置き換えた．

案手法の評価実験を行った．
本節では，実験に用いたデータセットの作成方法，実験の詳しい手法，結果と考察について説明する．

最後に，以下の条件に合うソースコードを各問題から最大 200 個ランダムに選出した．

• 問題に正解しているソースコード• C++で書かれたソースコード

4.1 データセット
4.1.1 AtCoder Tags 上で付与されているタグの収集• Clang Python Bindings に読み込ませた場合にエラーが発生しないソースコード

AtCoder の全問題に対して 2021 年 10 月 29 日時点での言語として C++を選んだ理由としては，C++のソース

AtCoder Tags で投票されている大分類タグとその割合をコードが CodeNet に含まれるソースコードの中で一番割収集して，問題 ID と大分類タグの割合との対応を表すテー合が高かったためである．

ブルを作成した．

4.1.2 学習用データセット
学習用データセットは，AtCoder と AOJ に提出されて選出した問題数は 566，付与されているタグの個数は平均で 1.47，ソースコードの数は 112,442 となった．また，各タグが付与されている問題のソースコード数がソースいるソースコードから構成された IBM の CodeNet[9] のう

コード数全体に占める割合を表 2 に示す．

ち，AtCoder に提出されたソースコードの一部を加工して4.1.3 評価用データセット

作成した．CodeNet には CodeNet 内の全てのソースコー

評価用データセットの作成方法について説明する．

ドに関するメタデータが含まれており，このメタデータにまず，2021 年 6 月 28 日時点までに出題された AtCoderはソースコードを記述している言語，問題に正解したかど

c 1959 Information Processing Society of Japan
⃝の全問題のうち，以下の条件に合う問題を選出する．

4

情報処理学会研究報告
IPSJ SIG Technical Report• CodeNet に含まれない問題• ABC，ARC または AGC に分類されるコンテストに出題された問題• 特殊なタグ (“Interactive”，“April-Fool”，“Marathon”，“Other”) が付与されていない問題• タグが 1 つ以上付与されている問題
次に，選出した各問題に 2021 年 6 月 28 日時点までに提出されたソースコードのうち，以下の条件に合うソースコー
ドを 10 個ずつランダムに収集した．

• 正解のソースコード• C++で書かれたソースコード• Clang Python Bindings に読み込ませた場合にエラーが発生しないソースコード
最後に，学習用データセットと同様に，Clang ではインクルードできないヘッダファイルを同等の機能をもつ複数のヘッダファイルに置き換えた．

図 3

評価実験 1 で算出した正解率，網羅率，Random

網羅率
推測タグの上位 n 番目までのタグのうち，正解タグに含選出した問題数は 213，付与されているタグの個数は平まれるものをカウントしたものを countn ，正解タグの個数

均で 1.21 であり，ソースコードの数は 2130 となった．まを sumn とする．この時の網羅率を 網羅率n と呼び，以下

た，各タグが付与されている問題のソースコード数がソーのように定義する．

スコード数全体に占める割合を表 2 に示す．

4.2 評価実験 1: タグ全体に対する推測精度
評価実験 1 として学習用データセット，評価用データセットのすべての問題で学習，評価を行った．

4.2.1 実験方法

網羅率n =

countnsumn

これを n を変化させて算出した．

Random
ランダムに n 個タグを選び，1 つでも正解タグに含まれている確率を Random と定義し，n を変化させて算出した．

まず，学習用データセットで学習を行う．次に，評価用

タグ毎の macro-precision

データセットのソースコードに対して，先述した手法で付

この指標の算出においては，推測タグの 1 位のものだけ与するタグを推測し，これを推測タグと呼ぶ．また，各問に注目し，このタグを 1 位タグと呼ぶ．あるタグを 1 位タ

題において AtCoder Tags で 1 票でも投票された全てのタグと予測した場合に，実際にそのタグが 1 位タグである割グを正解タグと呼ぶ．

合を macro-precision とし，これをタグ毎に算出した．

そして，すべてのソースコードにおいて Mean Reciprocal

タグ毎の macro-recall

Rank(MRR)，正解率，網羅率，Random，タグ毎の macro-

この指標の算出においては，macro-precision の算出時とprecision，タグ毎の macro-recall，タグ毎の macro-F1 を同様に 1 位タグに注目する．あるタグが正解タグに含まれ算出する．以下，これらの評価値について説明する．

る予測のうち，そのタグが 1 位タグとして予測された割合

Mean Reciprocal Rank

を macro-recall とし，これをタグ毎に算出した．

Mean Reciprocal Rank[10](以下，MRR) の算出方法を説明する．まず，推測タグを上位から順番に見て，そのタ

タグ毎の macro-F1
あるタグにおける macro-precision と macro-recall の調グが最初に正解タグに含まれていた場合の順位を rank と和平均をそのタグの macro-F1 とする．

する．この時，MRR は以下のようになる．

4.2.2 結果

M RR =

1rank

ただし，推測タグが正解タグに含まれていない場合，MRR
は 0 とする．
正解率

MRR の平均が 0.52 となり，n を 1〜10 まで変化させた
場合の正解率，網羅率，Random は図 3 のようになった．
また，タグ毎の macro-precision，macro-recall，macro-F1とその平均を macro-F1 の降順に表 3 に示す．
図 3 における正解率と Random の比較から，提案手法の方が精度が高いことがわかる．このことから，同じタグが推測タグの上位 n 番目までのタグのうち，1 つでも正解

ついた問題の解答には共通する特徴が少なからずあることタグに含まれていれば推測は正解，含まれていなければ不がわかる．また，表 3 から，推測精度が高いタグと低いタ正解とする．この時の正解率を，n を変化させて算出した．

グがあることがわかる．

c 1959 Information Processing Society of Japan⃝5

情報処理学会研究報告
IPSJ SIG Technical Reportなどの，アルゴリズム情報に関係のない抽象的なタグが含

表 3 評価実験 1 で算出した

macro-precision，macro-recall，macro-F1 とその平均まれているためと考えられる．そのため，そのようなタグ

macro-

macro-

macro-

precision

recallF1

Flow-Algorithms

0.85

0.85

0.85

Geometry

1.00

0.50

0.67

Mathematics

0.53

0.46

0.49

評価実験 2 として評価実験 1 で使用した学習用デー

Dynamic-Programming

0.40

0.33

0.36

タセット，評価用データセットの問題のうち，アルゴリ

Easy

0.40

0.33

0.36

ズム情報に関するタグが付与されている問題のみで学Technique

0.27

0.25

0.25

習，評価を行った．具体的には “Dynamic-Programming”，

Graph

0.27

0.23

0.25

Data-Structure

0.23

0.19

0.21

“Flow-Algorithms”，“Greedy-Methods”，“Mathematics”，

Greedy-Methods

0.18

0.14

0.16

Searching

0.16

0.13

0.15

Construct

0.16

0.13

0.14

評価実験 1 で使用した学習用データセットのうち，付与

String

0.15

0.10

0.12

されているタグがアルゴリズム情報に関するタグのみで構

Ad-Hoc

0.06

0.05

0.06

成されている問題を用いる．問題数は 172，付与されてい

Game

0.04

0.03

0.04

平均

0.33

0.27

0.29

るタグの個数は平均で 1.22，ソースコードの数は 33,910 とタグを除くことで推測精度が上がると考えられる．

4.3 評価実験 2: タグを絞った場合の推測精度“Searching” の 5 つのタグが付与されている問題を用いた．
4.3.1 学習用データセット

なった．また，各タグが付与されている問題のソースコー
ド数がソースコード数全体に占める割合を表 5 に示す．

4.2.3 考察4.3.2 評価用データセット

表 3 から，“Geometry”，“Flow-Algorithms” の macro-

学習用データセットと同様に，評価実験 1 で使用した評F1 が 0.6 以上と高く，“Game”，“Ad-Hoc” の macro-F1

価用データセットのうち，付与されているタグがアルゴリ

が 0.1 以下と低いことがわかる．このことから，“Geome-

ズム情報に関するタグのみで構成されている問題を用いtry”，“Flow-Algorithms” のタグが付与されている問題はる．問題の数は 96 問，付与されているタグの個数は平均で解答のソースコードに特徴が出やすく，反対に “Game”，

1.17 であり，ソースコードの数は 960 となった．また，各“Ad-Hoc” のタグが付与されている問題は解答のソースタグが付与されている問題のソースコード数がソースコー

コードに特徴が出にくいことが考えられる．また，全体的ド数全体に占める割合を表 5 に示す．

に，macro-precision の方が macro-recall よりも高くなって

4.3.3 実験方法

いる理由としては，タグが複数付与されている問題があるためであると考えられる．
詳しく考察するために，あるタグが推測されている時にどのタグが正解に出現しやすいか，また，あるタグが正解

評価実験 1 と同様に，まず学習用データセットで学習を行う．次に，評価用データセットのソースコードに対して，評価実験 1 で述べた評価値をすべて算出する．

4.3.4 結果

タグに含まれる場合にどのタグが推測されやすいかを調べ

MRR の平均が 0.69 となり，n を 1〜5 まで変化させた

る．あるタグが n=1 の時の推測タグに含まれる時，一番正場合の正解率，網羅率，Random は図 4 のようになった．

解タグに出現しやすいタグを頻出正解タグと呼ぶ．また，また，タグ毎の macro-precision，macro-recall，macro-F1

あるタグが正解タグに含まれるとき，n=1 の時の推測タグとその平均を macro-F1 の降順に表 6 に示す．

に一番含まれるタグを頻出推測タグと呼ぶ．あるタグに注結果から，評価実験 1 の結果と比較して全体的に精度が目した時の頻出正解タグと頻出推測タグ，また，それぞれ上がったことがわかる．また，表 6 から，タグを絞った場の出現確率を調べた結果を表 4 に示す．

合でも，推測精度の高いタグと低いタグがあることが確認結果から，多数のタグにおいて頻出正解タグとして“Mathematics” が挙げられていることがわかる．また，多できる．

4.3.5 考察数のタグにおいて頻出推測タグとして “Easy” が挙げられ評価実験 1 の結果と比較して精度が上がった理由としていることがわかる．また，表 2 に示す評価用データセッて，アルゴリズム情報に関するタグが付与された問題の解トにおける各タグが占める割合 1 位が “Mathematics”，学答を使うことで，解答の特徴が顕著になりタグを付与する

習用データセットにおける各タグが占める割合の 1 位が精度が上がったと考えられるが，単にタグの種類が減った“Easy” であることから，データセットにおける各タグがためであるとも考えられるため，以下，詳しく考察を行う．

占める割合に依存していると考えられる．これは，学習モ

表 6 から，“Flow-Algorithms” の macro-F1 が 0.80 と高デルがタグごとの特徴を精度良く学習していないためと考く，“Greedy-Methods” の macro-F1 が 0.23 と低いことがえられる．理由として，“Easy”，“Ad-Hoc”，“Technique”

分かる．評価実験 1 と同様に，頻出正解タグ，頻出推測タ

c 1959 Information Processing Society of Japan⃝6

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

表 4
頻出正解タグ

評価実験 1 における出現しやすいタグとその確率
頻出正解タグの出現確率
頻出推測タグ

Ad-HocMathematics

17.5%

Easy

40.1%

Construct

Greedy-Methods

17.6%

Easy

39.0%

Data-Structure

Technique

20.8%

Easy

22.0%

Dynamic-Programming

Dynamic-Programming

32.7%

Mathematics

23.2%

Easy

Easy

32.6%

Easy

72.9%

Flow-Algorithms

Flow-Algorithms

84.6%

Flow-Algorithms

55.0%

Game

Mathematics

41.9%

Easy

30.0%

Geometry

Mathematics

50.0%

Easy

63.3%

Graph

Graph

23.4%

Graph

26.0%

Greedy-Methods

Technique

22.0%

Easy

25.9%

Mathematics

Mathematics

45.7%

Mathematics

35.7%

Searching

Mathematics

16.1%

Easy

30.4%

StringGreedy-Methods

18.6%

Easy

65.0%

Technique

Mathematics

34.0%

Easy

22.8%

頻出推測タグの出現確率

グを定義し，あるタグに注目したときの頻出正解タグ，頻表 5 評価実験 2 の各データセットにおいて各タグが全体に占める割合

出推測タグの出現確率を調べた．結果を表 7 に示す．

タグ

学習用

評価用

Dynamic-Programming

37.6%

22.9%

Flow-Algorithms

3.5%

2.1%

Greedy-Methods

17.1%

11.5%

かつ “Greedy-Methods” が正解タグに含まれる場合に一

Mathematics

35.7%

56.2%

番推測タグに出現しやすいタグが “Searching” であること

Searching

28.5%

24.0%

から，“Greedy-Methods” が付与されている問題のソース

結果から，“Greedy-Methods” が推測タグに含まれる場
合に一番正解タグに出現しやすいタグが “Searching” で，コードと，“Searching” が付与されている問題のソースコー
ドは共通する特徴を持つために分類が難しく，このことから “Greedy-Methods” の macro-F1 が低くなったと考えられる．また，評価実験 1 と比較して，表 5 に示すデータ
セットにおける各タグが占める割合に依存している度合いが低いことから，アルゴリズム情報に関するタグが付与された問題の解答を使うことで学習の精度が上がったと考えられる．

4.4 評価実験 3: 問題文から学習したモデルとの比較
3 節で我々が仮定した，問題よりも解答を用いて学習を行った方が精度の高い予測を行えることを確認するために，問題文から学習したモデルと解答のソースコードから学習したモデルの精度を比較した．
図 4

評価実験 2 で算出した正解率，網羅率，Random

4.4.1 実験方法
評価実験 1 で用いたデータセットをデータセット 1，評

表 6 評価実験 2 で算出した

macro-precision，macro-recall，macro-F1 とその平均価実験 2 で用いたデータセットをデータセット 2 と呼ぶ．

macro-

macro-

macro-

まず各データセットに含まれる問題の英語で書かれた問タグ

precision

recallF1

題文を Python ライブラリ nltk を用いて単語で分割し，Flow-Algorithms

0.80

0.80

0.80

ストップワード，記号を除去したリストを作成した．そMathematics

0.73

0.63

0.68

して，それらを先述した実験方法と同様の方法で実験し，Dynamic-Programming

0.36

0.30

0.33

Searching

0.34

0.29

0.31

macro-Recall の平均，macro-Precision の平均，macro-F1

Greedy-Methods

0.25

0.21

0.23

平均

0.50

0.45

0.47

の平均をそれぞれ算出した．評価実験 3 では AST を作成
せず，作成したリストをそのまま学習に利用した．

4.4.2 結果
実験結果を表 8 に示す．結果と表 3，表 6 を比較すると，

c 1959 Information Processing Society of Japan⃝7

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

表 7
頻出正解タグ

Dynamic-Programming

Mathematics

45.5%

Dynamic-Programming

43.2%

Flow-Algorithms

Flow-Algorithms

80.0%

Flow-Algorithms

60.0%

Greedy-Methods

Searching

39.3%

Searching

30.9%

Mathematics

Mathematics

63.2%

Mathematics

48.9%

Searching

Mathematics

37.3%

Searching

29.6%

表 8

評価実験 2 における出現しやすいタグとその確率
頻出正解タグの出現確率
頻出推測タグ

頻出推測タグの出現確率に関するタグが付与されている問題文は類似度が高くなる

評価実験 3 の結果
データセット 1

データセット 2

ことが確認されているため，解答のソースコードと問題文

macro-Recall の平均

0.22

0.26

macro-Precision の平均

0.31

0.30

を学習に使用することで，付与するタグの精度が上がるとmacro-F1 の平均

0.32

0.37

評価指標

考えられる．2 つ目は，Doc2Vec 以外の学習方法でも同様の実験を行い，より精度の良い学習方法を模索することである．

データセット 1 における macro-F1 以外はソースコードを学習に使用したモデルの方が高いことが確認できる．

謝辞 本研究は JSPS 科研費 18H04094 の助成を受けた
ものです．

4.4.3 考察
データセット 1 においてソースコードを学習に使用したモデルの方が macro-F1 が低かった理由として，ソース

参考文献
[1]

コードを学習に使用したモデルにおいてもタグごとの特徴を精度よく学習しておらず，大きな差が出なかったと考えられる．また，データセット 2 においてはソースコードを[2]使用したモデルの方が全ての指標において明らかに高いことが確認できるため，アルゴリズム情報に関するタグを付[3]

与する精度はソースコードを用いたモデルの方が精度が良[4]

いことがわかる．
[5]

5. まとめ本研究では，Doc2Vec とプログラミング演習問題の解答を用いて，プログラミング演習問題にタグを付与する手[6]法を提案した．この手法の精度を評価するための実験として，あらかじめタグが付与されている問題に対して，提案手法を用いて付与したタグと，あらかじめ付与されているタグを比較する実験を行った．また，問題文を用いた学習よりもソースコードを用いた学習の方が精度が高いことを[7]

確かめる実験を行った．
評価実験の結果として，高い精度で付与できるタグと，付与の精度が低くなってしまうタグが存在することが確認でき，高い精度で付与できるタグにおいては，14 個のタグ

[8]のうち 1 つのタグを付与する時，macro-F1 の値が 0.85 の精度で付与できることが確認できた．また，付与するタグ[9]をアルゴリズム情報に関するタグに絞ることで，タグを付与する精度を高めることができた．また，アルゴリズム情報に関するタグを付与する精度は問題文を学習したモデル
よりもソースコードを学習したモデルの方が精度がいいことが確認できた．
今後の課題として，問題文や問題の入力例・出力例などの，解答のソースコード以外の情報を学習に使用すること[10]【2021 年 版 】お す す め の プ ロ グ ラ ミ ン グ 学 習 サ イ ト
20 選！各サイトを徹底比較 - テックキャンプブログ.
https://tech-camp.in/note/technology/87876/
Ebtekar and Paul Liu. An elo-like system for
massive multiplayer competitions, arXiv preprint
arXiv:2101.00400, 2021.
渡部有隆. オンラインジャッジの開発と運用-aizu online
judge. 情報処理, Vol.56, No.10, pp.998–1005, 2015.
CATEGORY - AtCoder Tags https://atcoder-tags.
herokuapp.com/explain
新濱遼大, 槇原絵里奈, 小野景子, 幾島直哉, 山川蒼平. オ
ンラインジャッジシステムにおける問題文の類似度調査.
情報処理学会研究報告, Vol.2021-SE-209, No.9, pp.1–7,
2021 年 11 月.
Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeﬀrey Dean. Distributed representations ofwords and phrases and their compositionality. In Proceedings of the 26th International Conference on Neural Information Processing Systems-Volume2, NIPS 13,
pp.3111–3119, Red Hook, NY, USA, 2013. Curran Associates Inc.
Quoc Le and Tomas Mikolov. Distributed representations of sentences and documents. In Eric P. Xing andTony Jebara, editors, Proceedings of the 31st International Conference on Machine Learning, Vol.32 of Proceedings of Machine Learning Research, pp.1188–1196,
Bejing, China, 22–24 Jun 2014. PMLR.
Andrew M. Dai, Christopher Olah, and Quoc V. Le.
Document embedding with paragraph vectors. arXiv
preprint arXiv:1507.07998, 2015.
Ruchir Puri, David Kung, Geert Janssen, Wei Zhang,
Giacomo Domeniconi, Vladmir Zolotov, Julian Dolby,
Jie Chen, Mihir Choudhury, Lindsey Decker, Veronika
Thost, Luca Buratti, Saurabh Pujar, Shyam Ramji,
Ulrich Finkler, Susan Malaika, and Frederick Reiss.
Codenet:A large-scale ai for code dataset forlearning a diversity of coding tasks. arXiv preprint
arXiv:2105.12655, 2021.
Nick Craswell. Mean Reciprocal Rank, pp.1703–1703.
Springer US, Boston, MA, 2009.

である．新濱らの研究 [5] から，同一のアルゴリズム情報

c 1959 Information Processing Society of Japan⃝

8