根据Gensim的文档、变化量g和先前的StackOverflow答案,我知道将LineSentence格式的培训数据传递给corpus_data参数可以显著加快Any2Vec培训。
关于LineSentence格式的文档如下:
迭代包含句子的文件:一行=一句。单词必须经过预处理,并由空格分隔。
我的培训数据包括使用spaCy从纯文本文件中提取的数千万句(也可能是1xx百万句)。一个示例语句通常包含一个或多个分行符(\n)。
如何使这些示例与LineSentence格式兼容?据我所知,这些示例应该在其分行符的上下文中“理解”,因为这些断点存在于目标文本中(数据没有经过训练)。这意味着我不能就这么把他们从训练数据中删除。
我是否用\\n转义换行符?有办法传递自定义分隔符吗?
我很感激你的指导。提前谢谢。
发布于 2021-12-11 06:36:36
LineSentence只是像Word2Vec这样的类的适当的可迭代类,它们期望一个语料库是一个Python,其中每个项都是一个标记列表。
在通常的字向量训练中,行间隔的确切位置不太可能产生很大的影响。如果逐行读取文件,同一行上的所有单词仍将出现在彼此的上下文中。(额外的换行符只会防止单词“流血”到前文或后续文本的上下文中-在大型训练语料库中,这可能对最终结果没有任何净影响。)
所以主要是:别担心。
如果你认为这可能是个问题,你可以试试.
<nl> (或者其他什么)。...then评估结果是否已经改善,而不是简单地不这样做。(对于基本的Word2Vec/FastText培训,我怀疑它们会有所改善。)
对于Doc2Vec,您可能需要更多地注意确保“文档”中的所有单词都作为一个文本处理。在这种情况下,您应该确保生成TaggedDocument-like对象的可迭代序列将所需的相同tag分配给所有应被视为同一文档的一部分的原始文本。
https://stackoverflow.com/questions/70312199
复制相似问题