【问题标题】:Normalize Fasttext word embedding vector generated by model归一化模型生成的 Fasttext 词嵌入向量
【发布时间】:2019-03-07 15:42:22
【问题描述】:

我目前正在使用 FastText 来获取一些输入文本数据的词嵌入,以便捕捉它们之间的相似性,并将这些嵌入作为 NER 任务的神经网络的输入。 我首先尝试使用 fastText .vec 文件,并且能够从中获得良好的相似性结果,然后我尝试使用 .bin 模型文件,以便我也可以从词汇外术语中获取嵌入但我注意到从 .vec 和 .bin 文件生成的向量是不同的。 .vec 文件包含剪辑到 [-1,1] 范围内的嵌入,而 .bin 文件中包含的嵌入则不是这样。 使用 .bin 文件我得到了非常糟糕的结果,所以我试图不明白这是否是由于这些向量 (.bin) 未标准化。

有没有使用 Python 在 [-1, 1] 范围内标准化这些向量的好方法?

提前致谢。

【问题讨论】:

    标签: python tensorflow normalization word-embedding fasttext


    【解决方案1】:

    只需将数据重新缩放到 [-1, 1] 范围内。希望对您有所帮助。

    def norm(data):
        min_v, max_v = min(data), max(data)
        mid_v = (max_v + min_v) >> 1
        len_v = float((max_v - min_v) >> 1)
        return [(v-mid_v)/len_v for v in data]
    

    【讨论】:

    • 您好,感谢您的回复。由于我正在使用浮点值并且“>>”操作数应用于整数值,因此出现错误。我现在的问题是嵌入值非常小,我认为这就是为什么我得到不好的结果,而使用 .vec 文件的值非常“正常”并且结果很好
    • @jesper 如果数据是float的,可以把代码改成mid_v = (max_v+min_v)/2.0,">>"在处理整数时效率更高。
    • @jesper 我不喜欢嵌入词的东西,但是对于你的问题,我认为如果输入数据非常小(都接近于零),它会影响神经网络的性能。正如您所提到的,需要某种规范化方法来扩展您的数据。我的建议是你可以从 tensorflow 的文档中搜索规范化,它会比你自己实现的算法好得多。还要检查输入 .bin 模型的文档,它可能有一些关于如何处理数据的参考。
    • 谢谢,我会将您的答案标记为已接受的答案,因为它可能是一个很好的解决方案。我会尽快找到一个具体的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多