重要提示
您正在查看 NeMo 2.0 文档。此版本引入了 API 的重大更改和一个新的库,NeMo Run。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档。
文本清理#
概述#
使用 NeMo Curator 的文本清理模块来删除不良文本,例如不正确解码的 Unicode 字符、不一致的行距或文档中过多的 URL,这些文档正在为数据集进行预处理。
例如,给定文档中的输入句子 “The Mona Lisa doesn’t have eyebrows.” 可能未包含正确编码的撇号 (’),导致句子解码为 “The Mona Lisa doesn’t have eyebrows.” NeMo Curator 使您能够轻松地通过默认的 UnicodeReformatter() 模块运行此文档,以检测和删除不需要的文本,或者您可以定义自己的自定义 Unicode 文本清理器以满足您的需求。
用例#
修复网页中不正确解码的 Unicode 字符。
通过删除过多的换行符来标准化文档布局。
删除文档中的 URL。
模块#
NeMo Curator 提供了以下模块用于清理文本
UnicodeReformatter()
:使用 [ftfy](https://ftfy.readthedocs.io/en/latest/) 修复损坏的 Unicode 字符。默认情况下修改数据集的“text”字段。NewlineNormalizer()
:使用正则表达式将每个文档中 3 个或更多连续的换行符替换为仅 2 个换行符。UrlRemover()
:使用正则表达式删除每个文档中的所有 URL。
您可以单独或按顺序在清理管道中使用这些模块。
考虑以下示例,该示例加载数据集 (books.jsonl),逐步执行清理管道中的每个模块,并将处理后的数据集输出为 cleaned_books.jsonl
from nemo_curator import Sequential, Modify, get_client
from nemo_curator.datasets import DocumentDataset
from nemo_curator.modifiers import UnicodeReformatter, UrlRemover, NewlineNormalizer
def main():
client = get_client(cluster_type="cpu")
dataset = DocumentDataset.read_json("books.jsonl")
cleaning_pipeline = Sequential([
Modify(UnicodeReformatter()),
Modify(NewlineNormalizer()),
Modify(UrlRemover()),
])
cleaned_dataset = cleaning_pipeline(dataset)
cleaned_dataset.to_json("cleaned_books.jsonl")
if __name__ == "__main__":
main()
您还可以通过运行 text_cleaning 命令,使用 CLI 执行文本清理操作
text_cleaning \
--input-data-dir=/path/to/input/ \
--output-clean-dir=/path/to/output/ \
--normalize-newlines \
--remove-urls
默认情况下,CLI 将仅执行 unicode 重新格式化。添加 --normalize-newlines
和 --remove-urls
选项会添加其他文本清理选项。
自定义文本清理器#
编写您自己的自定义文本清理器很容易。UnicodeReformatter
的实现可以用作示例。
只需定义一个继承自 DocumentModifier
的新类,并定义构造函数和 modify_text
方法。此外,与 DocumentFilter
类一样,modify_document
可以使用 batched
注释,以接收 pandas 文档系列而不是单个文档。有关更多信息,请参阅 文档过滤页面。