machine-learning - NLP 预训练模型(例如 ELMo、Bert)的数据预处理
问题描述
我计划根据手头的数据(人们输入的笔记)从头开始训练 ELMo 或 Bert 模型。我现在拥有的数据都是由不同的人输入的。句子中存在拼写、格式和不一致的问题。在阅读了 ELMo 和 Bert 论文后,我知道这两个模型都使用了很多类似 Wikipedia 的句子。我找不到任何已处理的训练样本或任何用于 Emlo 或 Bert 模型的预处理教程。我的问题是:
- Bert 和 ELMo 模型是否具有标准数据预处理步骤或标准处理数据格式?
- 根据我现有的脏数据,有什么方法可以预处理这些数据,使生成的单词表示更准确?
解决方案
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/pytext https://keras.io/preprocessing/text/)
您也可以尝试试验并向输入提供 bpe 编码或字符 n-gram。
它还取决于您拥有的数据量;您拥有的数据越多,预处理的好处就越少(在我看来)。鉴于您想从头开始训练 Elmo 或 Bert,您应该拥有大量数据。
推荐阅读
- python-3.x - 如何使用 SQLAlchemy 配置只读关系?
- javascript - inputValue null ,但值存在
- php - 使用 paystack 支付网关使用 webhook
- go - 如何处理请求、返回和成功然后处理数据
- c# - 信号 R 持久连接内存泄漏
- pivot-table - excel - 是否可以在数据透视表的列中对日期进行分组?
- amazon-quicksight - 如何在 Amazon QuickSight 中进行周期比较?
- python - 巨大的 HTML 表格 - 过滤包含字符串的行
- ibm-watson - Watson Discovery:通过 API 处理数据的问题
- python - 在间隔日期中添加行