为 word2vec 实现处理语料库
Processing a Corpus For a word2vec Implementation
作为 class 项目的一部分,我正在尝试在 Python 中编写一个 word2vec 实现,并在 ~6GB 的语料库上对其进行训练。我正在尝试编写一个合理优化的解决方案,这样我就不必让我的 PC 闲置几天。
通过 C word2vec 源代码,我注意到每个线程都从文件中读取单词,并花时间查找每个单词的索引。最后,它存储了 "sentence" 个单词索引。
将整个语料库翻译成包含适当单词的整数索引的语料库不是合乎逻辑的吗?这样,在哈希-table 查找训练期间不会浪费时间,而翻译过程是一次性费用。
我知道对于非常大的语料库,您实际上是在将磁盘占用的数量加倍,您可能希望避免这种情况。
但是,如果您有内存,这不会显着提高效率吗?还是我只是高估了 table 查找的影响?
哈希表查找可以非常快,重复查找可能不会对整体运行时间产生太大影响。
但真正了解您提议的优化的潜在加速的唯一方法是实施它,并将其与之前的行为进行比较分析。
此外,正如您所注意到的,为了能够重复使用单次令牌查找,您需要将这些结果存储在某个地方。 Google 的 word2vec.c
代码,与许多其他实现一样,寻求与远大于可寻址内存的输入语料库一起工作。与重复查找的基线相比,将临时标记化写入磁盘需要额外的代码复杂性和额外的磁盘工作 space。所以:即使它确实加快了一点速度,实现者可能会认为额外的复杂性是不可取的。
作为 class 项目的一部分,我正在尝试在 Python 中编写一个 word2vec 实现,并在 ~6GB 的语料库上对其进行训练。我正在尝试编写一个合理优化的解决方案,这样我就不必让我的 PC 闲置几天。
通过 C word2vec 源代码,我注意到每个线程都从文件中读取单词,并花时间查找每个单词的索引。最后,它存储了 "sentence" 个单词索引。
将整个语料库翻译成包含适当单词的整数索引的语料库不是合乎逻辑的吗?这样,在哈希-table 查找训练期间不会浪费时间,而翻译过程是一次性费用。
我知道对于非常大的语料库,您实际上是在将磁盘占用的数量加倍,您可能希望避免这种情况。
但是,如果您有内存,这不会显着提高效率吗?还是我只是高估了 table 查找的影响?
哈希表查找可以非常快,重复查找可能不会对整体运行时间产生太大影响。
但真正了解您提议的优化的潜在加速的唯一方法是实施它,并将其与之前的行为进行比较分析。
此外,正如您所注意到的,为了能够重复使用单次令牌查找,您需要将这些结果存储在某个地方。 Google 的 word2vec.c
代码,与许多其他实现一样,寻求与远大于可寻址内存的输入语料库一起工作。与重复查找的基线相比,将临时标记化写入磁盘需要额外的代码复杂性和额外的磁盘工作 space。所以:即使它确实加快了一点速度,实现者可能会认为额外的复杂性是不可取的。