NLP 预训练模型(例如 ELMo、Bert)的数据预处理

Posted

技术标签:

【中文标题】NLP 预训练模型(例如 ELMo、Bert)的数据预处理【英文标题】:Data Preprocessing for NLP Pre-training Models (e.g. ELMo, Bert) 【发布时间】:2019-07-23 03:26:04 【问题描述】:

我计划根据手头的数据(人们输入的笔记)从头开始训练 ELMo 或 Bert 模型。我现在拥有的数据都是由不同的人输入的。句子中存在拼写、格式和不一致的问题。在阅读了 ELMo 和 Bert 论文后,我知道这两个模型都使用了很多类似 Wikipedia 的句子。我找不到任何已处理的训练样本或任何用于 Emlo 或 Bert 模型的预处理教程。我的问题是:

Bert 和 ELMo 模型是否具有标准数据预处理步骤或标准处理数据格式? 基于我现有的脏数据,有没有什么方法可以预处理这些数据,从而使生成的单词表示更准确?

【问题讨论】:

【参考方案1】:

Bert 使用 WordPiece 嵌入,这在一定程度上有助于处理脏数据。 https://github.com/google/sentencepiece

Google-Research 还在其代码中提供数据预处理。 https://github.com/google-research/bert/blob/master/tokenization.py

默认 Elmo 实现将标记作为输出(如果您提供未标记的字符串,它会将其拆分为空格)。因此,拼写更正、去重、词形还原(例如 spacy https://spacy.io/api/lemmatizer)、将标记与标点符号分开以及其他标准预处理方法可能会有所帮助。

您可以查看 NLTK 包中预处理文本的标准方法。 https://www.nltk.org/api/nltk.tokenize.html(例如 Twitter 标记器)。 (请注意,NLTK 本身很慢)。许多机器学习库都提供了它们的基本预处理 (https://github.com/facebookresearch/pytexthttps://keras.io/preprocessing/text/)

您也可以尝试为输入提供 bpe 编码或字符 n-gram。

这还取决于您拥有的数据量;您拥有的数据越多,预处理的好处就越少(在我看来)。鉴于您想从头开始训练 Elmo 或 Bert,您应该拥有大量数据。

【讨论】:

我能问一下为什么更大的数据集从预处理中受益更少吗?是因为计算成本吗?我还想知道每个训练序列是否有任何典型长度。我想我可能需要削减我的每个训练示例,因为它们每个都有 2000 长。 抱歉,措辞不好。我的意思正好相反。您拥有的数据越多,拼写错误的负面影响就越少,因为您有更多的拼写错误、拼写错误等示例。序列长度取决于数据集。如果2000足够了,那就去吧。 Bert 很贵,所以他们使用 512 seq。长度。你可以在这里查看他们的建议github.com/google-research/bert#pre-training-tips-and-caveats

以上是关于NLP 预训练模型(例如 ELMo、Bert)的数据预处理的主要内容,如果未能解决你的问题,请参考以下文章

NLP预训练发展小结二(Bert之后)

预训练语言模型整理(ELMo/GPT/BERT...)

自用预训练语言模型->ELMo 模型

自然语言处理中的语言模型预训练方法

NLP方向 ---- 面试笔试题集:预训练模型 BERT

NLP方向 ---- 面试笔试题集:预训练模型 BERT