这看起来很简单,但我无法让事情发挥作用。我100维向量空间,我在每个空间中有几个匹配的向量。我想找到转换矩阵(W),以便:
向量空间中的a_vector [0]在向量空间B中的x W = b_vector [0](或近似值)。
所以一篇论文提到了这个公式。
所以没有偏见术语,我们通常看不到激活。
我尝试过使用sklearns Linear Regression而没有取得多大成功。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
regression_model = LinearRegression(fit_intercept=True)
regression_model.fit(X_train, y_train)
regression_model.score(X_test, y_test)
> -1451478.4589335269 (!!???)
y_predict = regression_model.predict(X_test)
regression_model_mse = mean_squared_error(y_predict, y_test)
regression_model_mse = 524580.06
尝试张量流没有太大的成功。不要关心这个工具 - tensorflow,sklearn - 只是寻求解决方案的帮助。
感谢。
修改
所以我手动滚动下面的代码 - 最大化余弦sim(表示预测点与实际点的接近程度 - 1.00 =完美匹配) - 但它非常慢。
shape = (100,100)
W1 = np.random.randn(*shape).astype(np.float64) / np.sqrt(sum(shape))
avgs = []
for x in range(1000):
shuffle(endevec)
distance = [0]
for i,x in enumerate(endevec):
pred1 = x[0].dot(W1)
cosine = 1 - scipy.spatial.distance.cosine(pred1, x[1])
distance.append(cosine)
diff = pred1 - x[0]
gradient = W1.T.dot(diff) / W1.shape[0]
W1 += -gradient * .0001
avgs.append(np.mean(distance))
sys.stdout.write('\r')
# the exact output you're looking for:
sys.stdout.write(str(avgs[-1]))
sys.stdout.flush()
编辑2
下面的Jeanne Dark对于使用以下方法找到转换矩阵有一个很好的答案: M = np.linalg.lstsq(source_mtrx [:N],target_mtrx [:N])[0]在我匹配的vecs的数据集中,使用此方法找到的TM的预测vecs是:
minmax=(-0.09405095875263214, 0.9940633773803711)
mean=0.972490919224675 (1.0 being a perfect match)
variance=0.0011325349465895844
skewness=-18.317443753033665
kurtosis=516.5701661370497
有很多非常大的异常值。
余弦sim的情节是:
答案 0 :(得分:1)
昨天我遇到了完全相同的问题。我最终使用numpy.linalg.lstsq ,我认为它有效。
# find tranformation matrix M so that: source_matrix∙M = target_matrix based
#on top n most frequent terms in the target corpus
n=500 # the choice of n depends on the size of your vocabulary
M=np.linalg.lstsq(source_mtrx[:n],target_mtrx[:n])[0]
print M.shape # returns (100,100)
# apply this tranformation to source matrix:
new_mtrx= np.array([np.dot(i, M) for i in source_mtrx])
另请参阅本文Lexical Comparison Between Wikipedia and Twitter Corpora by Using Word Embeddings。它们基于您提到的论文,并且它们遵循相同的方法,但它们更详细地解释了实现。例如,他们建议为了找到变换矩阵M,我们只使用前n个最常用项的向量,然后,在我们将变换应用于源矩阵之后,我们计算出其余条款的相似性。
如果您找到另一种基于SGD计算M的解决方案,请告诉我。