ChatGPTに書かせたAppleScriptを微修正したものです。ベクトルの内積、外積の計算を経てコサイン類似度計算のAppleScriptを書かせました。
もともとは、ChatGPTのAPIを利用して自然言語テキストをベクトル化し、それらの類似度を計算させるための準備で用意しました。自分が試したときには、ChatGPTのREST APIは1536次元のベクトルを返してきました。残念ながら、いま試してみると(全然REST API呼び出しをしていないのに)Quota Exceedのエラーが出てしまって目的の処理はできませんでした。
このあたり、実際にChatGPTのコンソールから利用履歴を確認してみても、全然呼び出していないことが確認できたので、自分の記憶違いではありません。
もともと、日本語テキストを複数の機械翻訳APIを利用して英訳し、再度日本語訳したのちに文章をベクトル化。これらの複数の機械翻訳APIの結果を比較して、もともとの日本語の文章と類似度が高いものを「正確に英訳された文章」として採用してみるといいんじゃないかと思っていました。翻訳文の質を疑似的に評価してみようと思ったわけです。
ChatGPTに出力させたAppleScriptは、「間違ってはいないんだけど、正しくないし、微妙にムカつく(resultを使って計算したりする)」内容で、よくわかっている人間にとっては簡単に修正できるものですが、基礎がわかっていないとどこが間違っているか指摘しにくいし、そもそも間違っているかどうかも指摘しにくいので……より正確な知識が要求されます。
AppleScript名:可変次元のベクトルに対応したコサイン類似度計算.scpt |
— ベクトルの例 set vectorA to {1, 2, 3, 4} set vectorB to {4, 5, 6, 7} — コサイン類似度を計算 set similarityResult to cosineSimilarity(vectorA, vectorB) — 結果を表示 return similarityResult –> 0.975900072949 — ベクトルのノルムを計算する関数 on vectorNorm(aVec) set sumSquares to 0 repeat with i from 1 to (count of aVec) set sumSquares to sumSquares + (item i of aVec) ^ 2 end repeat return (sumSquares) ^ 0.5 end vectorNorm — ベクトルのコサイン類似度を計算する関数 on cosineSimilarity(vector1, vector2) set dimension1 to count of vector1 set dimension2 to count of vector2 if dimension1 = dimension2 then set dotProductResult to dotProduct(vector1, vector2) set norm1 to vectorNorm(vector1) set norm2 to vectorNorm(vector2) set similarity to dotProductResult / (norm1 * norm2) return similarity else error "ベクトルの次元数が一致していません。" end if end cosineSimilarity — ベクトルの内積を計算する関数 on dotProduct(vector1, vector2) set dimension1 to count of vector1 set dimension2 to count of vector2 if dimension1 = dimension2 then set sRes to 0 repeat with i from 1 to dimension1 set sRes to sRes + ((item i of vector1) * (item i of vector2)) end repeat return sRes else error "ベクトルの次元数が一致していません。" end if end dotProduct |
More from my site
(Visited 63 times, 1 visits today)