基本情報技術者試験の令和5年度の公開問題(科目B)を解いてみよう。


正解:エ
✅ 問題の概要
この問題は、「コサイン類似度(cosine similarity)」を求めるプログラムの空欄を埋める問題である。
コサイン類似度は、2つのベクトルの方向の似ている度合いを表す数値である。例えば文章の類似性や画像の特徴比較など、AIでもよく使われる。
1. コサイン類似度の公式
2つのベクトル
$$
\vec{A} = (a_1, a_2, \ldots, a_n), \quad \vec{B} = (b_1, b_2, \ldots, b_n)
$$
のコサイン類似度は、以下の式で表される。
$$
\text{cos類似度} = \frac{a_1b_1 + a_2b_2 + \cdots + a_n b_n}{\sqrt{a_1^2 + a_2^2 + \cdots + a_n^2} \cdot \sqrt{b_1^2 + b_2^2 + \cdots + b_n^2}}
$$
この式は、
- 分子:2つのベクトルの内積(積の和)
- 分母:各ベクトルの長さ(ノルム)の積
という意味である。
2. プログラムの目的
問題にあるプログラムは、このコサイン類似度を計算する関数である。
function calcCosSimilarity(vector1, vector2)
中では、
numerator
:分子の計算denominator
:分母の計算
を行い、
similarity = numerator ÷ denominator
でコサイン類似度を返す。
3. 空欄aと空欄bの検討
numerator ← numerator + ( a )
...
denominator ← ( b )
🔹 空欄a
これは分子の計算である。
$$
a_1b_1 + a_2b_2 + \cdots + a_n b_n
$$
→ 各要素の積を足し合わせる。つまり、
vector1[i] × vector2[i]
✅ よって、aは(vector1[i] × vector2[i])となる。
🔹 空欄b
これは分母の計算である。
コサイン類似度の分母は、
$$
\sqrt{a_1^2 + \cdots + a_n^2} \times \sqrt{b_1^2 + \cdots + b_n^2}
$$
プログラム内では、
- temp = vector1の2乗和
- temp = vector2の2乗和
をそれぞれ別に計算し、
denominator = √(vector1の2乗和) × √(vector2の2乗和)
としている。
すでに denominator
には、vector1の長さ(ノルム)が掛けられている状態である。
次にやるべきことは、vector2の長さ(ノルム)を掛けることになる。
つまり、既にある分母に、vector2のノルムを掛ける。
✅ 正解
- a は、
vector1[i] × vector2[i]
- bは、 denominator ×(tempの正の平方根)
コメント