diff --git a/cm-code/biaffine.py b/cm-code/biaffine.py new file mode 100755 index 0000000000000000000000000000000000000000..15fb2ddc91fd0b1a93bb6bac690ea7cc9342f694 --- /dev/null +++ b/cm-code/biaffine.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +import numpy as np + +n = 4 +d = 10 + +Hhead = np.random.rand(n,d) # head vectors as rows +Hdep = np.random.rand(n,d) # dep vectors as rows +Uarc = np.random.rand(d,d) # biaffine intermediate matrix +uarc = np.random.rand(d,1) # biaffine bias + +Sarc_original = Hhead @ Uarc @ Hdep.T + Hhead @ uarc +#print(Sarc_original) + +ubias = np.vstack((Uarc.T, uarc.T)) # Uarc transposition not in paper, but not important since learned +Hdepext = np.hstack((Hdep,np.ones((n, 1)))) +Sarc_simple = ((Hdepext @ ubias) @ Hhead.T).T # final transpose: dependents as columns +#print(Sarc_simple) + +print(f"Original and simplified versions identical: {np.allclose(Sarc_original, Sarc_simple)}") # quality up to tolerance