科目B
令和5年度 基本情報技術者試験 科目B 公開問題 問5
次のプログラム中のaとbに入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。
コサイン類似度は,二つのベクトルの向きの類似性を測る尺度である。関数 calcCosineSimilarity は,いずれも要素数が n(n≧1) である実数型の配列 vector1 と vector2 を受け取り,二つの配列のコサイン類似度を返す。配列 vector1 が {a1, a2, …, an},配列 vector2 が {b1, b2, …, bn} のとき,コサイン類似度は次の数式で計算される。ここで,配列 vector1 と配列 vector2 のいずれも,全ての要素に 0 が格納されていることはないものとする。
〔図〕数式(分数)
分子: a1b1 + a2b2 + … + anbn
分母: √(a1^2 + a2^2 + … + an^2) √(b1^2 + b2^2 + … + bn^2)
〔プログラム〕
○実数型: calcCosineSimilarity(実数型の配列: vector1,
実数型の配列: vector2)
実数型: similarity, numerator, denominator, temp ← 0
整数型: i
numerator ← 0
for (i を 1 から vector1の要素数 まで 1 ずつ増やす)
numerator ← numerator + a
endfor
for (i を 1 から vector1の要素数 まで 1 ずつ増やす)
temp ← temp + vector1[i]の2乗
endfor
denominator ← tempの正の平方根
temp ← 0
for (i を 1 から vector2の要素数 まで 1 ずつ増やす)
temp ← temp + vector2[i]の2乗
endfor
denominator ← b
similarity ← numerator ÷ denominator
return similarity
答えを選ぶ
出典:令和5年度 基本情報技術者試験 科目B 公開問題 問5(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:エ
覚える知識
コサイン類似度の計算(内積とノルム)
コサイン類似度は、2 つのベクトルの内積を、それぞれの大きさ(ノルム)の積で割った値で、ベクトルの向きがどれだけ似ているかを表します。
この問題で必要なこと
分子は内積なので、a には要素どうしの積 vector1[i] × vector2[i] をそのまま足していきます。分母は 2 つのベクトルの大きさの積です。最初のループのあと denominator には vector1 側の √ が入っているので、b では vector2 側の √temp を掛けて denominator × (tempの正の平方根) とします。正解はエです。
ひっかけ
ア〜ウは、分母の平方根を分子の積にも付けてしまう思い違いを誘います。オ(足し算)は、分母が「積」であることを取り違えさせます。カ(tempの正の平方根 だけ)は、先に計算した vector1 側の値を上書きして捨ててしまう誤りです。キ〜ケは、分子を vector1 の 2 乗にしており、内積の式を取り違えています。