Mastodon

永井哲学と入不二哲学の関係は π/2 なのか

はじめに

X上でなぜかしばしば直接的・間接的に絡んでくださる谷口一平氏が、次のようなポストを投稿していた。

永井哲学と入不二哲学の関係は π/2 らしい。 永井哲学か入不二哲学の一方のノルムが0の場合でも、内積は0になるけどね。

本記事では、コサイン類似度とテキスト埋め込み(分散表現)を用いて、「『永井均の哲学』と『入不二基義の哲学』の関係は π/2 なのか」を、リテラル調べてみようと思う。

コサイン類似度

コサイン類似度  \cos(v, w) は、2ベクトルの類似度の表現の一である。 また、ピアソンの相関関数  r(v, w) は、コサイン類似度を中心化したものと考えることができる。 ベクトルを引数に取る演算子  f f(v) = f( (v_1, v_2, \dots, v_n) ) = (v_1, v_2, \dots, v_n) - 1/n \sum_{i=1}^n v_i (ただし、- は前置ベクトルのすべての要素に対して、後置スカラーを減算することを表す)と定義すると、等式  \cos(v - f(v), w - f(w)) = r(v, w) が成立する。

分散表現

「テキストの分散表現とは」といった説明は、自然言語処理の教科書の最初の方に書かれている事項であるため省略する。 今回は、 OpenAI 社が提供するテキスト埋め込みモデル text-embedding-3-large を用いる。 次のリンクは、API ドキュメントである。

https://platform.openai.com/docs/guides/embeddings

コード

以下の Python コードを用いて、『永井均の哲学』と『入不二基義の哲学』のコサイン類似度および度数法表現を出力する。

import openai
import numpy as np

inputs = ["永井均の哲学", "入不二基義の哲学"]
model = "text-embedding-3-large"

res1 = openai.Embedding.create(
    input=inputs[0],
    model=model
)

res2 = openai.Embedding.create(
    input=inputs[1],
    model=model
)

def calculate_cosine_similarity(v1, v2):
    """2つのベクトル間のコサイン類似度を計算"""
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))


input_embeddings = [res1.data[0].embedding, res2.data[0].embedding]

sim = calculate_cosine_similarity(input_embeddings[0], input_embeddings[1])
print(f"コサイン類似度: {sim}")

# コサイン類似度を角度に変換
sim = np.arccos(sim)
sim = np.degrees(sim)
print(f"角度: {sim}")

実行

実行!

❯ python ~/hoge.py
コサイン類似度: 0.6130158455291262
角度: 52.192110853994855

うーん、52度になってしまった。むしろ、45度に近い結果に。

原ツイートでは「永井哲学と入不二哲学の関係」となっているので、inputs = ["永井哲学", "入不二哲学"] に変えて実行。

❯ python ~/hoge2.py
コサイン類似度: 0.6680563453346285
角度: 48.082770729609514

48度になった。あまり変わりがない。

inputs を「超越論的構成」と「横方向への展開運動」へ変えてみよう。

❯ python ~/hoge3.py
コサイン類似度: 0.21494257203890757
角度: 77.58784184435343

およそ 76 度になった! 90度に近づきつつあるのかもしれない。

inputs = ["山括弧の存在", "垂直に働く現実性の力"] の場合。

python ~/hoge4.py コサイン類似度: 0.2578236956709326 角度: 75.05903295994082

これも 75 度だが、90 度に近いかというと微妙である。

まとめ

いかがでしたか? みんなも分散表現で遊んでみよう!

後記

谷口氏より以下の引用リツイートを拝受した。

私から言えることとしては、(それらの違いも研究の対象となるほど)脳科学ニューラルネットワークによる大規模言語モデルは同じものではない(ニューラルネットワークでは個々のシナプスの重みを外的に調整するが、人間の脳には外部からそれらを調整する機序はないなど)。 ぜひとも「適切な次元の解答」を期待したい!――とか言ったら怒られるだろうか。