gpt4 book ai didi

python - 如何将大型数据集加载到 gensim word2vec 模型

转载 作者:行者123 更新时间:2023-12-04 12:58:08 31 4
gpt4 key购买 nike

所以我有多个文本文件(大约 40 个)。每个文件大约有 2000 篇文章(平均每篇 500 字)。每个文档都是文本文件中的一行。
所以由于内存限制,我想使用这些文本文件的动态加载进行训练。 (也许是一个迭代器类?)
那么我该如何进行呢?

  • 训练每个文本文件 -> 保存模型 -> 加载模型并重新运行新数据?
  • 迭代器类有没有办法自动执行此操作?
  • 我应该逐句、逐条或逐个文本文件作为模型训练的输入吗?
  • 最佳答案

    40 text files * 2000 articles * 500 words each的语料库总共约 40000000 字,对于这种工作来说还是很小的。我猜这在磁盘上小于 400MB,未压缩。即使是 RAM 的 4 倍,许多台式机或云机器也可以轻松地将 1-2GB 的文本作为 Python 对象处理,作为字符串 token 列表的列表。因此,您可能仍然可以自由地在内存中工作,具体取决于您的系统。
    但如果你不这样做,那也没关系,因为 gensim Word2Vec & 相关类可以轻松地从依次提供每个项目的任何可迭代序列中获取所有训练数据,并且此类迭代实际上可以从一个或多个文件中逐行读取文本 - 每次需要数据时。
    大多数gensim介绍Word2Vec教程将演示这一点,使用示例代码(或使用库实用程序)从一个或多个文件中读取。
    例如,gensim 包含 LineSentence class 可以使用单个文本文件的路径进行实例化,其中每一行是一个文本/句子,每个单词之间有一个空格分隔。生成的对象是一个 Python 可迭代序列,可以根据需要对其进行迭代以获取这些单词列表。 (在幕后,它每次都打开和流式读取文件,因此在 RAM 中永远不会超过当前文本。)
    早期的gensim Word2Vec教程 – https://rare-technologies.com/word2vec-tutorial/ – 显示短 MySentences对单个目录中的所有文件执行相同操作的 Python 类:

    class MySentences(object):
    def __init__(self, dirname):
    self.dirname = dirname

    def __iter__(self):
    for fname in os.listdir(self.dirname):
    for line in open(os.path.join(self.dirname, fname)):
    yield line.split()

    sentences = MySentences('/some/directory') # a memory-friendly iterable
    model = gensim.models.Word2Vec(sentences)
    对于 Word2Vec ,是逐句提供文本,还是逐段提供,还是逐条提供文本并不重要。驱动结果的是附近单词的较小窗口,而不是您选择传递给算法的“块”。所以,做最简单的事情。 (但是,通过当前的 gensim-3.8.3 版本,在 gensim 版本中避免一次超过 10000 个单词的块,因为内部限制将丢弃每个文本超过 10000 个标记的单词。)
    然而, 不要自己对一批进行所有训练,然后对另一批进行所有训练,依此类推。最好将所有数据组合到一个迭代中。然后,咨询所有示例以进行初始词汇发现,并且所有示例一起训练,通过自动多次训练——这最有利于模型收敛。 (您 希望所有早期训练都在一组示例中,然后所有后期训练都在一组不同的示例中,因为这会不平衡示例的相对影响,并防止模型通过在每次优化过程中考虑各种训练数据。)

    关于python - 如何将大型数据集加载到 gensim word2vec 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63459657/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com