基本情報技術者試験の科目Bの公開問題を題材に,コサイン類似度を求める処理について学習します。この問題では,二つのベクトルの内積と大きさを利用して,コサイン類似度を計算する処理を確認します。
令和5年度 基本情報技術者試験 公開問題 科目B 問5
問 次のプログラム中の a と b に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
コサイン類似度は,二つのベクトルの向きの類似性を測る尺度である。関数 calcCosineSimilarity は,いずれも要素数が n(n≧1)である実数型の配列 vector1 と vector2 を受け取り,二つの配列のコサイン類似度を返す。配列 vector1 が {a1,a2,…,an} ,配列 vector2 が {b1,b2,…,bn} のとき,コサイン類似度は次の数式で計算される。ここで,配列 vector1 と配列 vector2 のいずれも,全ての要素に0が格納されていることはないものとする。
〔プログラム〕
○実数型: 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
解答群
a | b | |
| ア | (vector1[i] × vector2[i])の正の平方根 | denominator × (tempの正の平方根) |
| イ | (vector1[i] × vector2[i])の正の平方根 | denominator + (tempの正の平方根) |
| ウ | (vector1[i] × vector2[i])の正の平方根 | tempの正の平方根 |
| エ | vector1[i] × vector2[i] | denominator × (tempの正の平方根) |
| オ | vector1[i] × vector2[i] | denominator + (tempの正の平方根) |
| カ | vector1[i] × vector2[i] | tempの正の平方根 |
| キ | vector1[i]の2乗 | denominator × (tempの正の平方根) |
| ク | vector1[i]の2乗 | denominator + (tempの正の平方根) |
| ケ | vector1[i]の2乗 | tempの正の平方根 |
【解答】エ
【解説】
このプログラムは,2つのベクトルのコサイン類似度を計算する。コサイン類似度は,「2つのベクトルの内積 ÷ 2つのベクトルの大きさの積」で求める。まず,分子は各要素の積の合計で求めるため,numerator には vector1[i] × vector2[i] を加算する。そのため,a には vector1[i] × vector2[i] が入る。次に,vector1の各要素を2乗して合計し,その正の平方根をdenominatorに格納する。その後,vector2についても同様に各要素の2乗の合計の正の平方根を求め,denominatorに掛け合わせる。そのため,bには denominator × (tempの正の平方根) が入る。
【参考】
この問題のポイント
この問題から学べることは,
- コサイン類似度の基本的な計算方法
- 2つのベクトルの内積を求める方法
- ベクトルの大きさを求める方法
- for文で配列の各要素を順番に計算する方法
です。特に,コサイン類似度が「2つのベクトルの内積 ÷ 2つのベクトルの大きさの積」で求められることと,その計算をプログラムでどのように分けて処理しているかを理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


