【发布时间】:2022-08-23 20:44:47
【问题描述】:
我训练了一个机器学习句子分类模型,除其他特征外,该模型还使用从 7Gb 的预训练 fastText 模型(如these)获得的向量。我使用预训练的 fastText Italian 模型:我使用这个词嵌入只是为了获取一些语义特征来输入有效的 ML 模型。
我基于 fastText 构建了一个简单的 API,它在预测时计算有效 ML 模型所需的向量。在后台,此 API 接收一个字符串作为输入并调用 get_sentence_vector。当 API 启动时,它会将 fastText 模型加载到内存中。
如何减少加载到 RAM 中的 fastText 的内存占用?
约束:
- 我的模型运行良好,训练既费时又昂贵,所以我不想使用更小的向量重新训练它
- 我需要 fastText 能力来处理词汇外的单词,所以我不能只使用向量,但我需要完整的模型
- 我应该减少 RAM 的使用,即使是以降低速度为代价。
目前,我开始尝试compress-fasttext...
请分享您的建议和想法,即使它们不代表完整的解决方案。
-
您在训练 FastText 时使用了哪些参数,以及哪个 FastText 实现?为 OOV 词生成向量的能力对您来说有多重要?此外,为什么 RAM 大小最小化很重要——因为具有更多 RAM 的系统是不可能的或太昂贵,或者其他速度/性能考虑因素?
-
谢谢@gojomo!我试图将此信息添加到更新的问题中。一个小补充:根据系统管理员施加的限制,我应该减少 RAM 的使用。
-
谢谢!因为您需要子词信息,所以一种快速的可能性 - 只使用全词向量,甚至可能将它们缩小到最常用的词子集 - 不可用。 (它可能仍然可以通过丢弃来节省一些空间一些不太常见的词,这可能对整个系统的性能没有太大影响,特别是因为它们仍然会得到 OOV 合成的向量。但它可能需要一些自定义的模型修剪和重新保存代码,并且您希望在一些可重复的评估中检查效果。)
-
有时人们对 RAM 的关注实际上与加载时间有关,尤其是在某些可能会定期重新加载模型的系统中(在每个请求中,或跨许多服务进程) - 但如果你真的遇到了基于一些固定/共享部署系统,您将不得不缩减使用量——或升级系统。 (考虑到 +8GB RAM 在硬件或云租赁方面都不太贵,在某些时候你可能想为此游说。交叉点,在寻找解决方法上浪费时间比更多硬件成本更高\ 've,可能比第一个假设更接近。)
-
话虽如此,我不确定我是否能超越
compress-fasttext项目所取得的成就——我没有使用过,但在评估中看起来很有效且很彻底。 (其他可能起作用的临时性事情——丢弃现有模型的一些任意维度,其他矩阵重构为更少维度——该项目可能做得更好。)
标签: python machine-learning optimization nlp fasttext