基本情報技術者試験の公開問題を解こう!(令和5年度・科目B)(5)「コサイン類似度」

スポンサーリンク
コンピューター IT系

基本情報技術者試験の令和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の正の平方根)

コメント

タイトルとURLをコピーしました