使用深度学习模型处理语言数据通常涉及查找预训练的嵌入模型。在模型开发阶段,每次加载整个嵌入时都非常烦人,因为嵌入可能非常大(例如,Glove)并且会消耗大量时间加载它。
有没有办法为调试而构建/找到一个更小且可行的嵌入?
现在我所做的是缩小 的维度Glove,例如,通过采用前 30 个维度将嵌入的维度从 减少300d到30d,但这可能会导致某些单词共享相同嵌入的风险。
使用深度学习模型处理语言数据通常涉及查找预训练的嵌入模型。在模型开发阶段,每次加载整个嵌入时都非常烦人,因为嵌入可能非常大(例如,Glove)并且会消耗大量时间加载它。
有没有办法为调试而构建/找到一个更小且可行的嵌入?
现在我所做的是缩小 的维度Glove,例如,通过采用前 30 个维度将嵌入的维度从 减少300d到30d,但这可能会导致某些单词共享相同嵌入的风险。
嵌入是浮点向量,它们不太可能完全相同。即使是这样,它也只会对模型的性能产生很小的影响,这无论如何都不是您所追求的,因为您正在调试。也就是说,如果你想用它来选择模型,你有几个选择。最简单的方法是将 PCA 一次应用于整个嵌入空间并取第一个n方面。通过这种方式,您可以在不丢弃太多信息的情况下降低维度。更好但更困难的方法是在公共语料库或私人语料库上训练自己的 Glove 向量,并在训练过程中设置低维。可能很难将您在这些嵌入上的发现用于模型选择,因为更具表现力可能会导致更深模型的更好性能或可能导致更多过度拟合。
GloVe 有多种预训练矢量化器可供选择。您可以简单地选择一个较小的数据集,例如来自https://github.com/stanfordnlp/GloVe/blob/master/README.md的 Wikipedia 训练模型。对我来说,加载具有 400K 词汇大小的 50 维文件只需一两秒钟。