【问题标题】:significance of periods in sentences while training documents with Doc2Vec使用 Doc2Vec 训练文档时句子中句点的意义
【发布时间】:2020-07-17 08:18:36
【问题描述】:

怀疑 - 1

我正在用 150000 个文档训练 Doc2Vec。由于这些文件来自合法领域,因此很难清理并为进一步培训做好准备。因此,我决定从文档中删除所有句点。话虽如此,我现在对doc2vec中Window_size的参数如何识别句子感到困惑。问题中有两种观点:Doc2Vec: Differentiate Sentence and Document

  1. 该算法仅适用于文本块,不知道句子/段落/文档等可能是什么。
  2. 标记化保留标点符号(例如句子之间的句点)作为独立标记甚至很常见。

因此,如果我采用的消除标点符号(句号)的方法是否正确,我会感到困惑。请给我一些支持性的答案。

疑点二

抓取的文档范围从 500 到 5500 个标记,因此我使用相当大小的文档来训练 doc2vec 甚至减少词汇量的方法是: 考虑一个大小大于 1500 个标记的文档,在这种情况下,我使用前 50 到 400 个标记 + 600 到 1000 个标记 + 最后 250 个标记。这种方法的动机来自一篇与使用 BERT 对文档进行分类相关的论文,其中 512 个标记的序列是这样生成的。

所以我想知道这个想法是不是有点好,还是不建议这样做?

更新 - 我刚刚在教程链接https://radimrehurek.com/gensim/models/doc2vec.html 中看到了 gensim 使用的 common_text 语料库,发现该语料库中的文档只是单词的标记,不包含任何标点符号。 例如:

from gensim.test.utils import common_texts, common_dictionary, common_corpus

print(common_texts[0:10])

输出:

[['human', 'interface', 'computer'], ['survey', 'user', 'computer', 'system', 'response', 'time'], ['eps', 'user', 'interface', 'system'], ['system', 'human', 'system', 'eps'], ['user', 'response', 'time'], ['trees'], ['graph', 'trees'], ['graph', 'minors', 'trees'], ['graph', 'minors', 'survey']]

教程https://radimrehurek.com/gensim/auto_examples/tutorials/run_doc2vec_lee.html 也采用了同样的方法。 我在文档中删除句点的方法也是有效的,如果是,那么 window 参数将如何工作,因为在文档中它定义如下: window (int, optional) -- 句子中当前单词和预测单词之间的最大距离。

【问题讨论】:

    标签: python gensim word2vec doc2vec


    【解决方案1】:

    有些人将句号和其他标点符号保留为独立的标记,有些人将它们删除。

    没有绝对“正确”的方法,根据您的最终目标,其中一种方法可能会对 doc-vector 质量产生轻微影响。所以现在只做对你来说最简单的事情,然后如果你有时间,你可以评估替代方法,看看它是否有帮助。

    尽管在文档中提到了“句子”,gensim 中的 Word2Vec/Doc2Vec/etc 类对句子没有任何理解,或者对标点符号特别敏感。他们只是将您传入的令牌列表视为语料库中的单个项目。因此,如果您要留下句号,就像在短文本中一样...

    ['the', 'cat', 'was', 'orange', '.', 'it', 'meowed', '.']
    

    ...那么'.' 字符串只是另一个伪词,它将获得一个向量,训练窗口将像任何其他词一样通过它。 (而且,'meowed' 将与'cat' 相距 5 个令牌,因此如果 window=5 会产生一些影响。)

    我不太明白您所说的“使用前 50 到 400 个令牌 + 600 到 1000 个令牌 + 最后 250 个令牌”是什么意思。 Doc2Vec 适用于最多 10000 个令牌的文本。 (由于gensim 的内部实现限制,更多的标记将被静默忽略。)没有必要或典型地将文档分成更小的块,除非您有其他需要对更小的文本块进行建模。

    很小的common_texts 单词列表集是一个人为的、玩具大小的数据,用于演示一些基本的代码用法——它不是推荐做法的示例。基于“Lee”语料库的演示同样是对一种微小而简单的方法的快速介绍,该方法仅足以显示基本用法和结果。它的文本标记化——通过simple_preprocess() 实用程序方法——是可以尝试的,但与所有其他可能性相比,它不是“正确”或“最佳”。

    【讨论】:

    • 非常感谢您提供如此详细的解释。我想加入文档的某些片段只是为了减小每个文档的大小,因为大小从 500 到 5500 个令牌。但是在您建议使用整个文档之后,我会实施。
    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2018-12-22
    • 2015-12-24
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多