重要提示

您正在查看 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 文档系列而不是单个文档。有关更多信息,请参阅 文档过滤页面

其他资源#