重要

您正在查看 NeMo 2.0 文档。此版本对 API 和新的库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档

重复数据删除#

精确#

class nemo_curator.ExactDuplicates(
logger: logging.LoggerAdapter | str = './',
id_field: str = 'id',
text_field: str = 'text',
hash_method: str = 'md5',
perform_removal: bool = False,
profile_dir: str | None = None,
cache_dir: str | None = None,
)#

在文档语料库中查找精确重复项

call(
dataset: DocumentDataset,
) DocumentDataset#

对数据集执行任意操作

参数:

dataset (DocumentDataset) – 要操作的数据集

hash_documents(
df: cudf.Series | pd.Series,
) cudf.Series | pd.Series#

计算包含文档的 Series 的哈希值

identify_duplicates(
dataset: DocumentDataset,
) DocumentDataset#

在给定的 DocumentDataset 中查找精确重复项的文档 ID :param dataset: 要查找精确重复项的输入数据集 :type dataset: DocumentDataset

返回类型:

包含所有重复文档的 ID 和哈希值的 DocumentDataset

remove(
dataset: DocumentDataset,
duplicates_to_remove: DocumentDataset | None,
) DocumentDataset#

从给定的 DocumentDataset 中删除精确重复项 :param dataset: 要删除精确重复项的输入数据集 :type dataset: DocumentDataset

返回类型:

DocumentDataset,仅包含非重复文档

模糊#

class nemo_curator.BucketsToEdges(
cache_dir: str | None = None,
id_fields: list | str = 'id',
str_id_name: str = 'id',
bucket_field: str = '_bucket_id',
logger: LoggerAdapter | str = './',
profile_dir: str | None = None,
)#

将从 LSH 生成的存储桶映射到边缘列表,该边缘列表可以由连接组件进一步处理,以查找重复文档

class nemo_curator.ConnectedComponents(
cache_dir: str,
jaccard_pairs_path: str,
id_column='id',
jaccard_threshold: float = 0.8,
logger: LoggerAdapter | str = './',
profile_dir: str | None = None,
)#
class nemo_curator.FuzzyDuplicatesConfig(
cache_dir: str,
profile_dir: str | None = None,
id_field: str = 'id',
text_field: str = 'text',
perform_removal: bool = False,
seed: int = 42,
char_ngrams: int = 24,
num_buckets: int = 20,
hashes_per_bucket: int = 13,
use_64_bit_hash: bool = False,
buckets_per_shuffle: int = 1,
false_positive_check: bool = False,
num_anchors: int | None = None,
jaccard_threshold: float | None = None,
bucket_mapping_blocksize: int | None = None,
parts_per_worker: int | None = None,
bucket_parts_per_worker: int | None = None,
)#

基于 MinHash 的模糊重复项检测的配置。 :param seed: :type seed: minhash 排列的种子 :param char_ngrams: :type char_ngrams: minhash 计算中使用的 Char ngram shingles 的大小 :param num_buckets: :type num_buckets: 在局部敏感哈希期间使用的频段或存储桶的数量 :param hashes_per_bucket: :type hashes_per_bucket: 每个存储桶/频段的哈希数。 :param use_64_bit_hash: :type use_64_bit_hash: 是否对最小哈希使用 32 位或 64 位哈希函数。 :param buckets_per_shuffle: 更大的值通过处理多个频段来处理更大的批次

但可能会导致内存压力和相关错误。

参数:
  • id_field (数据集中的列,表示文档 ID。)

  • text_field (数据集中的列,表示文档内容。)

  • perform_removal (布尔值,用于指定调用模块是否应从以下位置删除重复项) – 原始数据集,或返回表示重复项的 ID 列表。

  • profile_dir (str默认值 None) – 如果指定,则为写入 dask 配置文件的目录

  • cache_dir (str默认值 None) – 存储重复数据删除中间文件(如最小哈希/存储桶等)的位置。

  • false_positive_check (bool,) – 是否运行检查以查找存储桶内的误报。注意:这是一个计算量很大的步骤。

  • num_anchors (int) – 每个存储桶的文档数,用作计算该存储桶内 jaccard 对以识别误报的参考。

  • jaccard_threshold (float) – Jaccard 相似度阈值,用于在误报评估期间将文档视为近似重复项。

class nemo_curator.FuzzyDuplicates(
config: FuzzyDuplicatesConfig,
logger: LoggerAdapter | str = './',
)#
call(
dataset: DocumentDataset,
perform_removal: bool = False,
) DocumentDataset#

对数据集执行任意操作

参数:

dataset (DocumentDataset) – 要操作的数据集

identify_duplicates(
dataset: DocumentDataset,
) DocumentDataset | None#
参数:

dataset (DocumentDataset) – 用于计算 FuzzyDuplicates 的输入数据集。必须包含文本和唯一 ID 字段。

返回:

  • DocumentDataset,包含所有文档的 ID 和它们所属的相应重复组

  • 。同一组中的文档是近似重复项。

remove(
dataset: DocumentDataset,
duplicates_to_remove: DocumentDataset | None,
) DocumentDataset | None#

从给定的 DocumentDataset 中删除精确重复项 :param dataset: 要删除精确重复项的输入数据集 :type dataset: DocumentDataset

返回类型:

DocumentDataset,仅包含非重复文档

class nemo_curator.JaccardSimilarity(
id_field='id',
anchor_id_fields=['anchor_0_id', 'anchor_1_id'],
text_field='text',
ngram_width=5,
)#
class nemo_curator.LSH(
cache_dir: str,
num_hashes: int,
num_buckets: int,
buckets_per_shuffle: int = 1,
false_positive_check: bool = False,
logger: LoggerAdapter | str = './',
id_fields: str | list = 'id',
minhash_field: str = '_minhash_signature',
profile_dir: str | None = None,
)#

对 MinhashSignatures 执行 LSH

bucket_id_to_int(
bucket_ddf: dask_cudf.DataFrame,
bucket_col_name: str = 'bucket_id',
start_id: int = 0,
) Tuple[dask_cudf.DataFrame, int]#

将存储桶 ID 映射到从 start_id 开始的连续整数范围。

lsh(write_path: str, df: dask_cudf.DataFrame) bool#

计算 DataFrame 的哈希存储桶,并将它们作为 parquet 文件写入到指定路径。

参数:
  • write_path (-) – 要写入 parquet 文件的目录路径。

  • df (-) – 包含要分桶的最小哈希的输入 DataFrame。

返回:

如果存储桶为空(未找到重复项),则为 True,否则为 False。

返回类型:

are_buckets_empty

class nemo_curator.MinHash(
seed: int = 42,
num_hashes: int = 260,
char_ngrams: int = 24,
use_64bit_hash: bool = False,
logger: LoggerAdapter | str = './',
id_field: str = 'id',
text_field: str = 'text',
profile_dir: str | None = None,
cache_dir: str | None = None,
)#

计算文档语料库的最小哈希签名

generate_hash_permutation_seeds(
bit_width: int,
n_permutations: int = 260,
seed: int = 0,
) numpy.ndarray#

根据给定的种子生成所有最小哈希排列的种子。

generate_seeds(
n_seeds: int = 260,
seed: int = 0,
) numpy.ndarray#

根据给定的种子生成所有最小哈希排列的种子。

minhash32(
ser: cudf.Series,
seeds: numpy.ndarray,
char_ngram: int,
) cudf.Series#

基于 MurmurHash3 算法计算 32 位 Minhash 值

minhash64(
ser: cudf.Series,
seeds: numpy.ndarray,
char_ngram: int,
) cudf.Series#

基于 MurmurHash3 算法计算 64 位 Minhash 值

语义#

class nemo_curator.SemDedup(
config: SemDedupConfig,
input_column: str = 'text',
id_column: str = 'id',
id_column_type: str = 'int',
logger: Logger | str = './',
)#
call(
dataset: DocumentDataset,
) DocumentDataset#

执行 SemDedup 过程。

参数:

dataset (DocumentDataset) – 用于去重的输入数据集。

返回:

去重后的数据集。

返回类型:

DocumentDataset

class nemo_curator.SemDedupConfig(
cache_dir: str,
profile_dir: str | None = None,
num_files: int = -1,
embeddings_save_loc: str = 'embeddings',
embedding_model_name_or_path: str = 'sentence-transformers/all-MiniLM-L6-v2',
embedding_batch_size: int = 128,
embedding_pooling_strategy: str = 'mean_pooling',
write_embeddings_to_disk: bool = True,
clustering_save_loc: str = 'clustering_results',
n_clusters: int = 1000,
seed: int = 1234,
max_iter: int = 100,
kmeans_with_cos_dist: bool = False,
which_to_keep: str = 'hard',
largest_cluster_size_to_process: int = 100000,
sim_metric: str = 'cosine',
eps_thresholds: ~typing.List[float] = <factory>,
eps_to_extract: float = 0.01,
)#

语义去重配置。

cache_dir#

用于存储缓存的目录。

类型:

str

profile_dir#

如果指定,则将 dask 配置文件写入此目录。默认为 None。

类型:

Optional[str]

cache_dir#

用于存储缓存的目录。

类型:

str

num_files#

文件数量。默认为 -1,表示所有文件。

类型:

int

embeddings_save_loc#

保存嵌入向量的位置。

类型:

str

embedding_model_name_or_path#

用于嵌入向量的模型名称或路径。

类型:

str

embedding_batch_size#

处理嵌入向量的初始批次大小。

类型:

int

embedding_pooling_strategy#

用于池化嵌入向量的策略,可以是 “mean_pooling” 或 “last_token”。默认为 “mean_pooling”。

类型:

str

write_embeddings_to_disk#

如果为 True,则将嵌入向量保存到磁盘,默认为 True。当您有延迟管道时,我们建议将其设置为 False。设置为 False 可能会导致更高的内存开销。

类型:

bool

clustering_save_loc#

保存聚类结果的位置。

类型:

str

n_clusters#

聚类数量。

类型:

int

seed#

聚类种子。

类型:

int

max_iter#

聚类的最大迭代次数。

类型:

int

kmeans_with_cos_dist#

使用带有余弦距离的 KMeans。

类型:

bool

which_to_keep#

要保留哪个重复项。

类型:

str

largest_cluster_size_to_process#

要处理的最大聚类大小。

类型:

int

sim_metric#

用于去重的相似度指标。

类型:

str

eps_thresholds#

用于计算语义是否相似的 epsilon 阈值。

类型:

List[float]

eps_to_extract#

用于提取去重数据的 epsilon 值。

类型:

float

class nemo_curator.EmbeddingCreator(
embedding_model_name_or_path: str,
embedding_batch_size: int,
embedding_output_dir: str,
embedding_max_mem_gb: int | None = None,
embedding_pooling_strategy: str = 'mean_pooling',
input_column: str = 'text',
embedding_column: str = 'embeddings',
write_embeddings_to_disk: bool = True,
write_to_filename: bool = False,
logger: Logger | str = './',
profile_dir: str | None = None,
)#
class nemo_curator.ClusteringModel(
id_column: str,
max_iter: int,
n_clusters: int,
clustering_output_dir: str,
embedding_col: str = 'embeddings',
sim_metric: str = 'cosine',
which_to_keep: str = 'hard',
sort_clusters: bool = True,
kmeans_with_cos_dist: bool = False,
partition_size: str = '2gb',
logger: Logger | str = './',
profile_dir: str | None = None,
)#
class nemo_curator.SemanticClusterLevelDedup(
n_clusters: int,
emb_by_clust_dir: str,
sorted_clusters_dir: str,
id_column: str,
id_column_type: str,
which_to_keep: str,
output_dir: str,
embedding_col: str = 'embeddings',
logger: Logger | str = './',
profile_dir: str | None = None,
)#
compute_semantic_match_dfs(
eps_list: List[float] | None = None,
) None#

计算聚类的语义匹配数据帧。

参数:

eps_list (Optional[List[float]]) – 聚类的 epsilon 值列表。

extract_dedup_data(
eps_to_extract: float,
) DocumentDataset#

基于 epsilon 值提取去重数据。

参数:

eps_to_extract (float) – 用于提取去重数据的 epsilon 阈值。

返回:

包含去重文档的数据集。

返回类型:

DocumentDataset