首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的培训数据包含换行;如何使用Gensim的LineSentence格式处理corpus_file参数?

问我的培训数据包含换行;如何使用Gensim的LineSentence格式处理corpus_file参数?
EN

Stack Overflow用户
提问于 2021-12-11 02:31:02
回答 1查看 269关注 0票数 0

根据Gensim的文档、变化量g和先前的StackOverflow答案,我知道将LineSentence格式的培训数据传递给corpus_data参数可以显著加快Any2Vec培训。

关于LineSentence格式的文档如下:

迭代包含句子的文件:一行=一句。单词必须经过预处理,并由空格分隔。

我的培训数据包括使用spaCy从纯文本文件中提取的数千万句(也可能是1xx百万句)。一个示例语句通常包含一个或多个分行符(\n)。

如何使这些示例与LineSentence格式兼容?据我所知,这些示例应该在其分行符的上下文中“理解”,因为这些断点存在于目标文本中(数据没有经过训练)。这意味着我不能就这么把他们从训练数据中删除。

我是否用\\n转义换行符?有办法传递自定义分隔符吗?

我很感激你的指导。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-12-11 06:36:36

LineSentence只是像Word2Vec这样的类的适当的可迭代类,它们期望一个语料库是一个Python,其中每个项都是一个标记列表。

在通常的字向量训练中,行间隔的确切位置不太可能产生很大的影响。如果逐行读取文件,同一行上的所有单词仍将出现在彼此的上下文中。(额外的换行符只会防止单词“流血”到前文或后续文本的上下文中-在大型训练语料库中,这可能对最终结果没有任何净影响。)

所以主要是:别担心。

如果你认为这可能是个问题,你可以试试.

  1. 删除文本之间的新行,您猜想“sn应当”是一个单一的文本,创造更长的行。(但请注意,dn不希望任何文本超过10000令牌,否则Gensim中的内部实现限制将意味着超过1 10000的令牌将被忽略。)
  2. 在你猜想“应该”的文本中,用一些合成的标记代替换行符,比如<nl> (或者其他什么)。

...then评估结果是否已经改善,而不是简单地不这样做。(对于基本的Word2Vec/FastText培训,我怀疑它们会有所改善。)

对于Doc2Vec,您可能需要更多地注意确保“文档”中的所有单词都作为一个文本处理。在这种情况下,您应该确保生成TaggedDocument-like对象的可迭代序列将所需的相同tag分配给所有应被视为同一文档的一部分的原始文本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70312199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档