【发布时间】:2020-09-21 17:55:21
【问题描述】:
我正在尝试将 fasttext 词向量规范化到另一个范围,以便它可以与其他数据组合。
我首先像这样访问预训练模型:
fasttext.util.download_model('en', if_exists='ignore') # English
ft = fasttext.load_model('cc.en.300.bin')
然后我将模型缩短为更短的向量长度
fasttext.util.reduce_model(ft, 36)
为了正常化,我正在尝试执行以下操作
((值 - current_min)/(current_max - current_min)) * (desired_max - desired_min) + desired_min
我在想我只是在需要时对向量进行归一化,所以我没有尝试一次对它们进行归一化,然后保存另一个大的 fasttext 对象,但为了做到这一点,我需要找到当前的最大值fasttext 对象中的最小值和最小值?最好的方法是遍历对象中的每个数组以找到最大值和最小值吗?我对 fasttext 对象到底是什么感到困惑,而普通的 min() max() 函数对它不起作用。
编辑:忘了包括我目前寻找最大值和最小值的最佳想法
fasttext_words = ft.get_words()
max_num = 0
min_num = 0
for word in fasttext_words:
temp_max = max(ft.get_word_vector(word))
temp_min = min(ft.get_word_vector(word))
if temp_max > max_num:
max_num = temp_max
if temp_min < min_num:
min_num = temp_min
【问题讨论】:
-
“标准化”似乎意味着以某种方式重新缩放它们,但不清楚原因。这通常不是必需的。而且,在这种情况下,“规范化”通常意味着“将所有向量重新缩放为等效单位 (
1.0) 大小”——但您的代码没有做任何类似的事情。那么,您的最终目标到底是什么? 为什么您要尝试以不典型的方式更改所有向量?为什么这种变化会使其与其他数据更容易结合?其他数据是什么?您出于什么目的尝试了什么样的组合? -
(连接而不是加法对于机器学习来说更典型,在这种情况下,这种重新缩放和截断到更少的维度是没有必要或明智的。)跨度>
-
我正在尝试做与本文类似的事情:artelab.dista.uninsubria.it/res/research/papers/2018/… 他们将词向量转换为像素表示,因此我尝试重新缩放到 0,255。你是说这个公式:((value - current_min)/(current_max - current_min)) * (desired_max - desired_min) + desired_min" 不能做到这一点?
-
感谢具体的论文链接!这很有趣,但令我惊讶的是,将字向量字面意思转换为图像上的颜色是一种有效的方法……我没想到有必要将东西输入 CNN,而不是作为一种使用方式一个现成的仅图像 CNN。 (而且,与将每个维度都设为灰度像素相比,将多个维度组合成特定大小的颜色方块似乎是一种额外的间接性。)
-
也就是说,我怀疑您希望对每个维度单独执行重新缩放 - 您现有的代码片段将在所有维度上查找最大值/最小值。首先,对所有向量进行单位归一化可能会简化一些事情,以便它们都在“单位球体”上。然后你可以假设每个维度的范围必然是 -1.0 到 1.0,这可以很容易地缩放到 0-255。但是,从论文中不清楚他们使用了什么流程 - 他们是否发布了任何代码,或者您认为作者会回应澄清请求?