import torch
import torch.nn.functional as F
D = 1024
# Векторы концепций
a, b, c, d = F.normalize(torch.randn(4, D))
# Исходные суперпозиции
S1 = a + b
S2 = c + d
# Произведение суперпозиций
S = S1 * S2
S = F.normalize(S.unsqueeze(0)).squeeze(0)
# Пары концепций
ac = a * c
ad = a * d
bc = b * c
bd = b * d
z = torch.vstack([ac, ad, bc, bd])
z = F.normalize(z)
# Находим пары концепций в результирующей суперпозиции
r = S @ z.T
print(r)
# [0.52, 0.54, 0.53, 0.52]
import torch.nn.functional as F
D = 1024
# Векторы концепций
a, b, c, d = F.normalize(torch.randn(4, D))
# Исходные суперпозиции
S1 = a + b
S2 = c + d
# Произведение суперпозиций
S = S1 * S2
S = F.normalize(S.unsqueeze(0)).squeeze(0)
# Пары концепций
ac = a * c
ad = a * d
bc = b * c
bd = b * d
z = torch.vstack([ac, ad, bc, bd])
z = F.normalize(z)
# Находим пары концепций в результирующей суперпозиции
r = S @ z.T
print(r)
# [0.52, 0.54, 0.53, 0.52]