SemHash : Mise en œuvre rapide de la déduplication sémantique du texte pour améliorer l'efficacité du nettoyage des données
Introduction générale
SemHash est un outil léger et flexible de déduplication d'ensembles de données par similarité sémantique. Il combine la génération rapide d'embedding de Model2Vec avec la recherche efficace de similarité ANN (Approximative Nearest Neighbour). SemHash prend en charge la déduplication d'un seul ensemble de données (par exemple, en nettoyant l'ensemble d'entraînement) et la déduplication de plusieurs ensembles de données (par exemple, en s'assurant qu'il n'y a pas de chevauchement entre l'ensemble de test et l'ensemble d'entraînement). Il convient aux ensembles de données simples, tels que les listes de texte, ainsi qu'aux ensembles de données plus complexes, tels que les ensembles de données d'assurance qualité à colonnes multiples. En outre, il permet de vérifier les résultats de la déduplication, ce qui facilite la compréhension et l'optimisation du processus de nettoyage des données.
Liste des fonctions
- Génération rapide d'embedded : génère des embeddings à l'aide de Model2Vec pour un embedding rapide et précis.
- Recherche de similarité efficace : recherche de similarité ANN efficace avec la vicinité.
- Déduplication d'un seul jeu de données : nettoyer un seul jeu de données pour supprimer les données en double.
- Déduplication de plusieurs ensembles de données : s'assurer qu'il n'y a pas de chevauchement entre plusieurs ensembles de données afin d'éviter les fuites de données.
- Dédoublement de données multi-colonnes : permet le dédoublement d'ensembles de données complexes, tels que les ensembles de données d'assurance qualité.
- Vérification du résultat de la déduplication : fournit une fonction de vérification détaillée du résultat de la déduplication, ce qui permet d'optimiser le processus de nettoyage des données.
Utiliser l'aide
Processus d'installation
- Ouvrez un terminal ou un outil de ligne de commande.
- Entrez la commande suivante pour installer SemHash :
pip install semhash
Utilisation
Déduplication d'un seul jeu de données
- Charger le jeu de données :
from datasets import load_dataset
from semhash import SemHash
texts = load_dataset("ag_news", split="train")["text"]
- Initialise l'instance SemHash :
semhash = SemHash.from_records(records=texts)
- Pondérer l'ensemble des données :
deduplicated_texts = semhash.self_deduplicate().deduplicated
Déduplication d'ensembles de données multiples
- Chargez deux ensembles de données :
train_texts = load_dataset("ag_news", split="train")["text"]
test_texts = load_dataset("ag_news", split="test")["text"]
- Initialise l'instance SemHash :
semhash = SemHash.from_records(records=train_texts)
- Pondérer l'ensemble de données de test :
deduplicated_test_texts = semhash.deduplicate(records=test_texts, threshold=0.9).deduplicated
Déduplication de jeux de données multi-colonnes
- Chargement d'un jeu de données à plusieurs colonnes :
dataset = load_dataset("squad_v2", split="train")
records = [dict(row) for row in dataset]
- Initialise l'instance SemHash :
semhash = SemHash.from_records(records=records, columns=["question", "context"])
- Pondérer l'ensemble des données :
deduplicated_records = semhash.self_deduplicate().deduplicated
Contrôle des résultats de la dépondération
- Voir le texte dédupliqué :
result = semhash.self_deduplicate(records=texts, threshold=0.99)
for duplicate in result.duplicates:
print("RECORD:")
print(duplicate.record)
if duplicate.exact:
print("Exact match!")
else:
print("DUPLICATES:")
for corpus_duplicate in duplicate.duplicates:
print(corpus_duplicate)
print("-" * 25)
Avec ces étapes, vous pouvez rapidement commencer à utiliser SemHash pour la déduplication sémantique des ensembles de données et améliorer l'efficacité du nettoyage des données.
Description détaillée de semhash
Nous sommes très heureux d'annoncer la sortie de semhash, notre outil de déduplication sémantique et de polyvalence des jeux de données (d'autres fonctionnalités seront bientôt disponibles).
bref
Un domaine d'intérêt récent, en particulier dans la formation de grands modèles linguistiques (LLM), est que, bien qu'il soit agréable d'avoir beaucoup de données, le fait d'avoir une petite quantité de données peut être une source d'inquiétude pour les utilisateurs.haute qualitéLes données seraient meilleures. Un bon exemple de cette situation se trouve dans l'étude de la fineweb blog post trouvé en , les auteurs sont partis d'un très grand ensemble de données de vidage de robots d'indexation à usage général et ont effectué de nombreux contrôles de qualité sur cet ensemble de données, y compris la déduplication et une série de contrôles de qualité.
Chez Minish, nous nous intéressons aux nouvelles possibilités offertes par la construction de modèles très rapides. Comme vous le savez peut-être, nous créons les meilleurs et les plus petits modèles rapides du monde. potion-base-8m. L'un de nos domaines d'intérêt est 近似去重
Nous voulons supprimer du corpus les documents très similaires sur le plan sémantique. Les algorithmes de déduplication de texte précédents, tels que minhash ou simhash, opèrent sur des grammaires de n-uplets de caractères ou de mots, et ne peuvent donc trouver des similitudes qu'entre des séquences de caractères glyphiquement similaires, en ignorant les similitudes sémantiques.
Bien que la déduplication semble être un élément qui ne peut que profiter à la formation de grands modèles linguistiques, elle est également très utile pour vérifier les chevauchements dans les petits ensembles de données : même un chevauchement étroit entre les ensembles de formation et de test peut entraîner une surestimation des performances, et la présence de doublons proches dans l'ensemble de formation peut entraîner un gaspillage des ressources informatiques, une surestimation de l'importance des caractéristiques et, potentiellement, d'autres problèmes.
En outre, les techniques de déduplication peuvent être utilisées pour vous donner une vue d'ensemble des grands ensembles de données : utilisez la fonction semhash
La vérification des quasi-doublons ne prend que quelques (milli)secondes et vous permet de voir quels sont les éléments de votre ensemble de données qui se ressemblent. Si ces éléments ont un sens, c'est parfait ! S'il n'y a pas de doublons, ...... est également une bonne chose ! Tout vaut mieux que de s'entraîner sur des données incorrectes.
Comment utiliser la désaccentuation ?
Voici quelques cas d'utilisation intéressants qui vous donneront une idée de l'intérêt de la déduplication :
catégorisation
Comme indiqué ci-dessus, il est important qu'il n'y ait pas de chevauchement d'informations entre les ensembles d'apprentissage et de test. La présence d'un chevauchement signifie généralement que vous surestimez les performances, car le modèle n'a plus besoin de se généraliser pour être performant. Toutefois, la suppression des doublons de l'ensemble d'apprentissage peut également s'avérer très utile. La présence d'un grand nombre de doublons du même enregistrement dans l'ensemble d'apprentissage peut amener le modèle à surestimer l'importance des caractéristiques de cet enregistrement et, dans tous les cas, peut entraîner un gaspillage des ressources informatiques et une surestimation de l'adéquation du modèle.
Système RAG
RAG Les doublons dans un système semblent rares jusqu'à ce que vous considériez que la plupart des systèmes RAG sont construits à partir de blocs : s'il est rare d'avoir des doublons exacts de documents, il est beaucoup plus courant d'avoir des blocs en double entre les documents ou à l'intérieur de ceux-ci. Le fait d'avoir des blocs en double dans votre base de connaissances augmente les coûts de stockage, accroît le risque de retrouver des blocs non pertinents et vous oblige à mettre en œuvre une stratégie de diversification plus tôt que nécessaire.
Interpréter votre corpus
En courant avec un seuil bas semhash
Cela vous permet de voir rapidement quels documents sont similaires à quels documents et quels documents ne sont pas similaires. Cela vous donne une bonne idée de ce sur quoi vous devez vous concentrer, de ce qui manque dans vos données et de la manière dont vos documents sont liés les uns aux autres.
Comment cela fonctionne-t-il ?
semhash
Le cœur du modèle consiste à prendre en entrée une collection de chaînes ou de dictionnaires. Le modèle est d'abord initialisé avec un ensemble de documents de référence, puis utilisé pour dédupliquer l'ensemble de documents entrants. Tous les documents entrants qui sont similaires aux documents de l'ensemble de référence sont supprimés et stockés séparément de leurs quasi-doublons dans l'ensemble de référence.
from datasets import load_dataset
from semhash import SemHash
dataset = load_dataset("ag_news")
train = dataset["train"]
test = dataset["test"]
# 这会在您的训练集上创建一个索引。所有记录都完整存储。
semhash = SemHash.from_records(records=train, columns=["text"])
# 这会参考 `train` 对您的文本进行去重。任何在 train 中出现的项目都会
# 从 test 中删除。
result = semhash.deduplicate(test, threshold=0.9)
# 没有重复的集合
result.deduplicated
# 重复项
result.duplicates
Lors de la mise en place, tous les documents sont d'abord encodés par un encodeur. L'encodeur par défaut est potion-base-8mUn modèle2vec Les modèles. Ces documents sont ensuite stockés dans le fichier fourni par le recherche d'informations solidaire voisinage dans le magasin de vecteurs. Ensuite, pour l'ensemble des documents entrants, nous commençons par les coder à l'aide du codeur spécifié, puis nous récupérons les plus proches voisins dans la base de données vectorielles. Chaque document entrant dont le plus proche voisin a une similarité supérieure à un seuil est supprimé.
Grâce à la rapidité de tous ces composants, la déduplication de très grands ensembles de données ne prend que quelques minutes. Par exemple, la déduplication de l'ensemble de la base de données des Jeu de données Squad-2.0 La déduplication de l'ensemble de données, qui compte 130 000 échantillons, ne prend que 7 secondes. Ce temps comprend la vectorisation, l'ajustement de l'index et la déduplication proprement dite. Les petits ensembles de données ne prennent qu'une fraction du temps, et même les ensembles de données contenant des millions de documents ne prennent que quelques minutes. Pour une analyse comparative complète, voir Notre analyse comparative.
l'interprétabilité
semhash
peut également être utilisé pour étudier votre ensemble de données. Pour ce faire, il suffit d'utiliser la fonction self_deduplicate
Il est possible d'accorder moins d'importance à l'ensemble de formation lui-même, et nous l'utiliserons comme point de départ :
from datasets import load_dataset
from semhash import SemHash
dataset = load_dataset("ag_news")
train = dataset["train"]
test = dataset["test"]
# 这会在您的训练集上创建一个索引。所有记录都完整存储。
semhash = SemHash.from_records(records=train, columns=["text"])
result = semhash.self_deduplicate(threshold=0.9)
Voyons plus en détail ce que vous pouvez faire avec result
Que faire ? Tout d'abord, vous pouvez simplement récupérer tous les enregistrements dédupliqués :
result.deduplicated
Ces enregistrements sont identiques à ceux que vous avez introduits, ce qui vous permet de les utiliser dans d'autres pipelines de ML. semhash
.semhash
Il ne modifie pas vos données, il en réduit simplement la taille.
Vous pouvez facilement voir le pourcentage d'enregistrements en double :
result.duplicate_ratio
ou des doublons exacts :
result.exact_duplicate_ratio
Vous pouvez également voir quels éléments sont marqués comme étant des doublons, et l'optionraison d'être. Chaque document dupliqué est stocké avec l'exemple dans son index qui l'a fait marquer comme duplicata. Les doublons exacts sont marqués comme tels. L'exemple de code suivant illustre l'utilisation de base.
for duplicated_record in results.duplicates:
print(duplicated_record.record)
if duplicated_record.exact:
print("Exact match")
continue
for index_duplicate in duplicated_record.duplicates:
print(index_duplicate)
print("-" * 25)
Pour faciliter l'utilisation, nous fournissons également une fonction d'aide qui affiche votre ensemble d'éléments en doublele moinsEnregistrements similaires de déduplication :
result.get_least_similar_from_duplicates(1)
Si cet enregistrement est toujours considéré comme un élément dupliqué pour ses doublons, alors votre stratégie de duplication est judicieuse ! Si ce n'est pas le cas, vous avez la possibilité de réinitialiser le seuil pour l'ensemble des résultats. Ce faisant, vous créerez un nouveau seuil qui supprimera les entrées en double. Cette opération est illustrée ci-dessous :
print(result.duplicate_ratio)
result.rethreshold(0.95)
print(result.duplicate_ratio)
Ainsi, une stratégie généralisée pourrait consister à commencer par un seuil relativement bas jusqu'à ce que le result.get_least_similar_from_duplicates
Les résultats obtenus commencent à avoir du sens. Cependant, un seuil de 0,9 (qui est la valeur par défaut) a bien fonctionné dans nos expériences, mais assurez-vous de vérifier votre cas d'utilisation spécifique.
données multicolonnes
semhash
Les ensembles de données multi-colonnes sont également pris en charge, ce qui vous permet de dédupliquer les ensembles de données contenant du texte dans plusieurs colonnes. Par exemple, dans un ensemble de données de questions-réponses, vous souhaitez non seulement supprimer les questions similaires ou les contextes similaires, mais aussi ne compter comme doublons que les éléments dont les deux champs sont suffisamment similaires.
Il s'agit d'un problème difficile à résoudre, mais semhash
Il peut également traiter cette question.
L'extrait de code suivant montre comment cela fonctionne :
from datasets import load_dataset
from semhash import SemHash
dataset = load_dataset("rajpurkar/squad_v2")
train = dataset["train"]
# 这会在您的训练集上创建一个索引。所有记录都完整存储。
semhash = SemHash.from_records(records=train, columns=["context", "question"])
result = semhash.self_deduplicate(threshold=0.9)
Cette méthode calcule la similarité et ne renvoie que les enregistrements dont les deux champs sont similaires.
© déclaration de droits d'auteur
Article copyright Cercle de partage de l'IA Tous, prière de ne pas reproduire sans autorisation.
Articles connexes
Pas de commentaires...