【问题标题】:NLP - When to lowercase text during preprocessingNLP - 在预处理期间何时小写文本
【发布时间】:2018-02-01 22:55:24
【问题描述】:

我想建立一个语言建模模型,它应该根据前一个单词和/或前一个句子预测句子中的下一个单词。

用例:我想自动编写报告。所以模型应该自动完成我正在写的句子。因此,名词和句子开头的单词大写很重要。

数据:数据为德语,包含大量技术术语。

我的文本语料库是德语,我目前正在进行预处理。因为我的模型应该预测语法正确的句子,所以我决定使用/不使用以下预处理步骤:

  • 不删除停用词
  • 没有词形还原

  • 用数字替换所有表达式

  • 同义词和缩写的规范化
  • 用 RARE 替换稀有词

但是,我不确定是否将语料库转换为小写。在网上搜索时,我发现了不同的意见。虽然小写很常见,但它会导致我的模型错误地预测名词、句子开头等的大小写。

我还发现了在下面的Stanford page 上仅将句首的单词转换为小写的想法。

此用例的最佳策略是什么?我应该将文本转换为小写并在预测后将单词更改为正确的大小写吗?我应该保持大写不变吗?我应该只在句首小写单词吗?

非常感谢您的任何建议和经验!

【问题讨论】:

  • 我认为提供有关您的实际用例的更多信息会有所帮助。您打算如何使用这些预测?
  • 另外,您可能会在data science 中获得更多有用的答案——这并不是一个真正与编程相关的问题(或者根本不是特定于 python)。
  • 你是对的,我已经更改了问题的标题并添加了用例。
  • 请投票(或接受)有帮助的答案。
  • 也可以写一些关于你的数据的东西——比如 Uri 下面提到的复合词——这在德语中通常是一个大问题,因为你可以构建无限长的词——但也许你的报告没有'不这样做,只是重复使用一小部分词汇?您的数据集中的词汇量是多少(忽略大小写,但删除数字)?还有你的语料有多大?

标签: python machine-learning nlp nltk


【解决方案1】:

我认为对于您的特定用例,最好将其转换为小写,因为最终,您需要在给定特定上下文的情况下预测单词。您可能不需要在用例中预测句子的开头。此外,如果一个名词被预测,您可以稍后将其大写。但是反过来考虑。 (假设您的语料库是英文的)您的模型可能会处理一个在句子开头的单词,其大写字母与句子后面出现但没有任何大写字母的同一个单词不同。这可能会导致准确性下降。而我认为,降低单词会是一个更好的权衡。我做了一个问答系统项目,将文本转换为小写是一个很好的权衡。

编辑:由于您的语料库是德语,最好保留大写,因为它是德语的一个重要方面。

如果有任何帮助,Spacey 支持德语。你用它来训练你的模型。

【讨论】:

  • 是的,这也是我考虑过的一点。这就是为什么我提到只将句首的单词小写,其余的保持不变。那么模型就不会遇到这个问题。您是否尝试过仅将部分单词小写?
  • 这里的复杂因素是德语将所有常用名词(代词除外)都大写,因此大小写提供了一些有用的语法信息。例如,arm 是一个形容词,意思是“可怜”,Arm 是一个名词,意思是“手臂”。保留这些信息可能会有用。
  • 是的,我尝试降低句子开头的单词,其余的保持不变。没有太大的区别,准确率较低但不是很明显的下降。在我的例子中,我使用词向量来使用句子相似度。我相信这与我的英文文本语料库有关。正如@dshockley 指出的那样,由于您的语料库是德语,因此保留该大写字母是个好主意。很抱歉,我错过了关于语料库是德语的部分。我会相应地更新我的答案。
【解决方案2】:

绝对将大部分单词转换为小写,考虑以下情况:

  1. 首字母缩略词,例如MIT 如果您将其小写为 mit 这是一个单词(德语),您将遇到麻烦
  2. 首字母,例如J. A. Snow
  3. 枚举,例如(I),(II),(III),APPENDIX A

我也建议不要使用<RARE> 令牌,您的语料库中<RARE> 的百分比是多少,未知词呢?

由于您正在处理德语,并且单词可能很长且很少见,您可能需要一种方法来进一步分解它们。 因此需要某种词形还原和标记化

我建议使用从第一天开始就支持德语的spacy,支持和文档非常有帮助(感谢 Mathew 和 Ines)

【讨论】:

  • 但是——他试图预测一个句子是否符合语法。将错误的小写名词标记为不合语法不是很有帮助吗? (了解更多关于实际应用程序可能会有所帮助——我设想这是一种语法检查器,如果我拼写错误并错过了名词的大写,这很可能是因为我不是母语人士,我会希望它为我标记。但也许应用程序不是我想象的......)
  • 我想自动编写报告。所以模型应该自动完成我正在写的句子。因此,名词和句子开头的单词大写很重要。此外,词形还原也无济于事,因为模型也应该能够预测单词的正确结尾
  • 我不会说德语,所以我会用英语举个例子。假设您的单词是“反序列化”,将其分解为“de”+“serial”+“tion”可用于预测下一个单词。无论如何,在预测下一个单词时,您正在应用beam search 对吗?但是,您将需要一些关于如何从其标记化版本重新创建复合词的逻辑。
  • 我没有打算分解复合词。有必要这样做吗?
  • 在自然语言中,大多数单词都是未知的(回想一下 Zipf 分布)。尤其是德语有很多复合词,所以如果我是你,我会考虑使用子词模型。
【解决方案3】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多