使用已清除数据中的代理语句

时间:2018-07-10 15:26:21

标签: python nlp gensim word2vec word-embedding

Gensim的Word2Vec模型将列表列表作为输入,而内部列表则包含句子的各个标记/单词。据我了解,Word2Vec用于使用矢量“量化”文本中单词的上下文。 我目前正在处理一个已被拆分为单个标记的文本语料库,并且不再包含明显的句子格式(标点符号已删除)。我想知道如何将其输入到Word2Vec模型中?

说,如果我只是将语料库拆分成统一长度的“句子”(例如,每个句子10个标记),这是将数据输入模型的好方法吗?

基本上,我想知道输入句子(列表列表)的格式如何影响Word2Vec的输出?

2 个答案:

答案 0 :(得分:1)

这听起来像是一个合理的解决方案。如果您有权访问与清理后的数据相似的数据,则可以从该数据集中获得平均句子长度。否则,您可以用您正在使用的语言(从维基百科或其他来源)找到其他数据,并从那里获取平均句子长度。

当然,您的输出向量将不会像您具有正确的句子边界那样可靠,但是听起来好像保留了单词顺序,所以不应该从不正确的句子边界中听到太多的噪音。

答案 1 :(得分:1)

通常,文本以逻辑单位(例如句子或段落)传递到Word2Vec。另外,已发表的论文和早期的演示代码也倾向于将标点符号转换为令牌。

但是没有标点符号的文本以及文本之间的任意中断是一种合理的解决方法,并且仍然可以提供很好的结果。

例如,演示中经常使用的text8 / text9语料库(包括word2vec intro Jupyter notebook bundled in gensim)只是大量的单词,缺少标点符号和换行符。因此,gensim中使用的实用程序LineSentence类会将它们分解为10,000个单独的令牌文本。

出于某些原因,最好在任意休息时间(例如10,000个)大一些,而不是较小的(例如10个)大一些:

  • 原文通常超过10个字
  • 通常,在一起运行的源材料在其原始边界上仍然与语义相关
  • 优化的算法在较大的数据块上效果更好
  • “虚假上下文窗口”(由串联创建)的危害可能只是杂音而没有净偏见效果,而更多的“真实窗口”(通过创建尽可能少的虚假拆分)可能会保留更多原始语料库'可学习的词对词关系信号
  • 您始终可以使用较小的window参数来模拟更保守的上下文(如果原始来源确实包含与顺序无关的微小句子)

但是,gensim的经过cython优化的培训路径每个文本的实施限制为10,000个令牌-默默地忽略了更多令牌-因此您无缘无故出于任何原因都希望提供更长的文本。