规范化Fasttext预训练的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-所需的最小值)+所需的最小值

我当时想我只需要对向量进行归一化处理,所以我不想立即对所有向量进行归一化处理,然后保存另一个大型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

解决方法

我用这个方法来标准化词向量:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
num_instances,num_maxlen = X_train.shape
X_train = scaler.fit_transform(X_train)
X_train = np.reshape(X_train,newshape=(num_instances,num_maxlen))

num_instances,num_maxlen = X_test.shape
X_test = scaler.transform(X_test)
X_test = np.reshape(X_test,num_maxlen))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...