
pip install text-dedupأو
pip install git+https://github.com/ChenghaoMou/text-dedupصفحات جيثب
يحتوي هذا المستودع على مجموعة من البرامج النصية للرسائل النصية التي تكون جاهزة للاستخدام ، أو تعديلها بناءً على احتياجاتك:
لدي أيضًا خطط كبيرة للمستقبل:
ومع ذلك ، لا أعتزم بناء مكتبة إلهية عامة للأغراض العامة ، والتي كانت هدف هذا الريبو في وقت مبكر. سوف أتقاعد تدريجيا حزمة PYPI كذلك. السبب وراء ذلك هو أن كل حالة استخدام يمكن أن تكون مختلفة بشكل كبير وتتطلب تصميمًا دقيقًا ونظرًا. أشجعك بصدق على قراءة البرنامج النصي أولاً (فهي قصيرة نسبيًا) حتى تتمكن من فهم ما هو على المحك هنا عند استخدامه. يمكنك استخدامه لتمهيد البرنامج النصي الخاص بك ، أو مجرد استخدامه كمرجع.
يستوحى هذا المستودع من المشاريع التالية ، ويتأثر بشدة بالدروس المستفادة من مشاركتي الخاصة في BigScience (Apache 2.0) و BigCode (Apache 2.0). هناك منشور مدونة حول الرحلة. ردود الفعل نرحب!
تعديل text_dedup/minhash_spark.py لمشروعك ومجموعة البيانات أولاً!
على افتراض أن لديك مجموعة بيانات تم تنزيلها (في ملفات parquet) ضمن "./temp-data" ، يمكنك معالجة ملف مع حسابك المحلي بواسطة:
export PYSPARK_PYTHON= " path to your python with scipy, xxhash, and numpy installed "
spark-submit --executor-memory 16g
--driver-memory 20g
--executor-cores 3
--num-executors 2
--packages graphframes:graphframes:0.8.2-spark3.2-s_2.12
--conf " spark.executor.extraJavaOptions=-Dlog4j.configuration=./log4j.properties "
--conf " spark.driver.extraJavaOptions=-Dlog4j.configuration=./log4j.properties "
text_dedup/minhash_spark.py
--input " ./temp-data "
--output " ./temp-output "
--column " text "
--threshold 0.7 DEBUG __main__ - ------------------------------------------------------------------------------------------------------------------------
DEBUG __main__ - Using B=25, R=10
DEBUG __main__ - Loaded documents: 88803
DEBUG __main__ - args.input='./temp-data'
DEBUG __main__ - args.output='./temp-output'
DEBUG __main__ - args.threshold=0.7
DEBUG __main__ - args.ngram_size=5
DEBUG __main__ - args.min_length=5
DEBUG __main__ - args.num_perm=250
DEBUG __main__ - args.column='text'
DEBUG __main__ - id : bigint
DEBUG __main__ - text : string
DEBUG __main__ - meta : struct<warc_headers:struct<warc-record-id:string,warc-date:string,content-type:string,content-length:int,warc-type:string,warc-identified-content-language:string,warc-refers-to:string,warc-target-uri:string,warc-block-digest:string>,identification:struct<label:string,prob:float>,annotations:array<string>,line_identifications:array<struct<label:string,prob:float>>>
DEBUG __main__ - __id__ : bigint
DEBUG __main__ - ------------------------------------------------------------------------------------------------------------------------
DEBUG __main__ - Initial edges: 52102
DEBUG __main__ - Edges DataFrame: 52102
DEBUG __main__ - Vertices DataFrame: 50206
DEBUG __main__ - Assignment DataFrame: 50206
DEBUG __main__ - Merging records: 88803
INFO __main__ - Saving with 1 partitions and 44092 rows each
DEBUG __main__ - ------------------------------------------------------------------------------------------------------------------------
DEBUG __main__ - Number of rows before: 88803
DEBUG __main__ - Number of rows after: 44092
DEBUG __main__ - Percentage of rows kept: 49.65%
DEBUG __main__ - Output: ./temp-output
DEBUG __main__ - Time: 68.80s
DEBUG __main__ - ------------------------------------------------------------------------------------------------------------------------
أو ألقِ نظرة على BigCode-V2/Run.sh حول كيفية تشغيل المهمة باستخدام GCP DataProc.
استنادًا إلى نموذج RETSIM الخاص بـ Google (GitHub ، Arxiv) ، فهو تضمين يعتمد على طريقة قريبة من الإلهاء.
بالنسبة لمجموعة بيانات كبيرة ، سيتطلب GPU (S) للاستدلال السريع.
python text_dedup/ann_unisim.py --path truthful_qa --name generation --split validation --output temp --column questionالإخراج:
INFO Load Dataset : 5.56s
INFO Index Dataset : 8.13s
INFO Clustering : 8.72s
INFO Filtering : 0.35s
INFO Saving : 0.01s
INFO Cleaning : 0.00s
INFO Total : 22.77s
INFO Before : 817
INFO After : 788
# input
python -m text_dedup.suffix_array
--path " oscar-corpus/OSCAR-2201 "
--name " gl "
--split " train "
--cache_dir " ./cache "
--output " output/suffix_array/oscar_gl_dedup "
--column " text "
--google_repo_path " /Users/chenghao/Downloads/Projects/text-dedup/deduplicate-text-datasets "
--use_auth_token true
# output
INFO Loading : 2.75 seconds
INFO Preprocessing : 4.78 seconds
INFO SuffixArray : 98.29 seconds
INFO SelfSimilar : 4.24 seconds
INFO Restore : 0.25 seconds
INFO Deduplicate : 6.23 seconds
INFO Saving : 8.91 seconds
INFO Total : 125.45 seconds
INFO Before : 180332342 bytes (88803)
INFO After : 97646271 bytes (40404) # input
python -m text_dedup.minhash
--path " oscar-corpus/OSCAR-2201 "
--name " gl "
--split " train "
--cache_dir " ./cache "
--output " output/minhash/oscar_gl_dedup "
--column " text "
--batch_size 10000
--use_auth_token true
# output
INFO Loading : 2.62 seconds
INFO MinHashing : 0.08 seconds
INFO Clustering : 2.20 seconds
INFO Filtering : 0.53 seconds
INFO Saving : 9.86 seconds
INFO Total : 15.29 seconds
INFO Data Number (before) : 88803
INFO Data Number (after) : 44124 (49.69%)
INFO Duplicate Number : 44679 (50.31%)
INFO ? Happy Deduplicating ? # input
python -m text_dedup.simhash
--path " oscar-corpus/OSCAR-2201 "
--name " gl "
--split " train "
--cache_dir " ./cache "
--output " output/simhash/oscar_gl_dedup "
--column " text "
--batch_size 10000
--use_auth_token true
# output
INFO Loading : 2.60 seconds
INFO SimHashing : 0.04 seconds
INFO Indexing : 28.88 seconds
INFO Filtering : 0.88 seconds
INFO Saving : 10.41 seconds
INFO Total : 42.80 seconds
INFO Data Number (before) : 88803
INFO Data Number (after) : 46163 (51.98%)
INFO Duplicate Number : 42640 (48.02%)
INFO ? Happy Deduplicating ? # input
python -m text_dedup.exact_hash
--path " oscar-corpus/OSCAR-2201 "
--name " gl "
--split " train "
--cache_dir " ./cache "
--output " output/exact_hash/oscar_gl_dedup "
--column " text "
--batch_size 1000
--use_auth_token true
# output
INFO Loading : 2.95s
INFO Processing : 3.79s
INFO Filtering : 0.10s
INFO Saving : 2.89s
INFO Total : 9.72s
INFO Before : 88803
INFO After : 47049 # input
python -m text_dedup.bloom_filter
--path " oscar-corpus/OSCAR-2201 "
--name " gl "
--split " train "
--cache_dir " ./cache "
--output " output/bloom_filter/oscar_gl_dedup "
--error_rate 1e-5
--column " text "
--use_auth_token true --batch_size 1000
# output
INFO Loading : 2.72s
INFO Processing : 4.84s
INFO Filtering : 0.10s
INFO Saving : 2.88s
INFO Total : 10.54s
INFO Before : 88803
INFO After : 47045ملحوظة
يحتوي تطبيق Spark على بعض النفقات العامة لمجموعات البيانات الصغيرة ، لذلك أوصي باستخدام البرنامج النصي فقط عندما يكون لديك مجموعة بيانات كبيرة وموارد حسابية كافية.
انظر tests/benchmark_core.py للتكاثر.
| خوارزمية | الدقة (التكرارات) | تذكر (التكرارات) | الدقة (غير التكرارات) | تذكر (غير التكرارات) | درجة الماكرو F1 | دقة | وقت |
|---|---|---|---|---|---|---|---|
| Unisim | 0.9307 | 0.8924 | 0.9055 | 0.9394 | 0.9181 | 0.9054 | 1305.79S |
| Minhash Spark | 0.957 | 0.9445 | 0.9471 | 0.959 | 0.952 | 0.9202 | 691.77S |
| مينهاش | 0.9594 | 0.9445 | 0.9474 | 0.9616 | 0.9534 | 0.924 | 18.88s |
| سيمهاش | 0.9042 | 0.721 | 0.792 | 0.9329 | 0.8481 | 0.8321 | 644.36s |
| العنوان الدقيق | 0.8302 | 0.5521 | 0.7098 | 0.9065 | 0.77 | 0.7456 | - |
| العنوان الدقيق مطابقة 1 | 0.830 | 0.50 | 0.709 | 0.992 | 0.757 | 0.746 | - |
| Simhash مطابقة 1 | 0.697 | 0.247 | 0.598 | 0.985 | 0.631 | 0.616 | - |
| وثيقة متجه تشابه 1 | 0.912 | 0.779 | 0.861 | 0.986 | 0.885 | 0.883 | - |
| الطريقة الهجينة 1 | 0.908 | 0.828 | 0.899 | 0.979 | 0.904 | 0.903 | - |
| لاب 2 | 0.937 | 0.923 | 0.930 | 0.943 | 0.933 | 0.919 | - |
| استخدام متعدد اللغات 2 | 0.917 | 0.907 | 0.918 | 0.927 | 0.917 | 0.909 | - |
| متعدد اللغات E5-base 2 | 0.931 | 0.908 | 0.919 | 0.939 | 0.924 | 0.920 | - |
| Minhash + LSH 2 | 0.929 | 0.902 | 0.915 | 0.938 | 0.921 | 0.918 | - |
| RETSIM الجزئي DUP 2 | 0.945 | 0.941 | 0.945 | 0.949 | 0.945 | 0.928 | - |
| Retsim بالقرب من 2 | 0.928 | 0.937 | 0.942 | 0.934 | 0.935 | 0.926 | - |
انظر tests/benchmark_news.py للتكاثر.
فهرس راند المعدل (ARI) على مجموعة بيانات نسخة الأخبار:
| نموذج/خوارزمية | آري |
|---|---|
| سيمهاش | 0.612 |
| مينهاش (سبارك) | 0.740 |
| مينهاش | 0.742 |
| RETSIM شبه دوب + آن* | 0.051 |
| N-Gram 3 | 0.440 |
| سيمهاش 2 | 0.695 |
| Minhash 3 | 0.737 |
| Minhash 2 | 0.783 |
| استخدام متعدد اللغات 2 | 0.730 |
| متعدد اللغات E5-base 2 | 0.742 |
| S-Bert 3 | 0.700 |
| RETSIM الجزئي DUP 2 | 0.831 |
| Retsim بالقرب من 2 | 0.704 |
| إعادة التصنيف 3 | 0.937 |
| ثنائي الشفر 3 | 0.915 |
*: لا يمكنني إعادة إنتاج النتائج من الورقة.
Apache 2.0
بشكل عام ، يمكنك الاستشهاد بهذا المستودع على النحو التالي:
@software { chenghao_mou_2023_8364980 ,
author = { Chenghao Mou and
Chris Ha and
Kenneth Enevoldsen and
Peiyuan Liu } ,
title = { ChenghaoMou/text-dedup: Reference Snapshot } ,
month = sep,
year = 2023 ,
publisher = { Zenodo } ,
version = { 2023.09.20 } ,
doi = { 10.5281/zenodo.8364980 } ,
url = { https://doi.org/10.5281/zenodo.8364980 }
}ولد إصدار Spark من BigCode (Apache 2.0) و BigScience (Apache 2.0) ، ويمكنك الاستشهاد بالورقة الأصلية إذا كنت تريد:
@article {
kocetkov2023the,
title = { The Stack: 3 {TB} of permissively licensed source code } ,
author = { Denis Kocetkov and Raymond Li and Loubna Ben allal and Jia LI and Chenghao Mou and Yacine Jernite and Margaret Mitchell and Carlos Mu{~n}oz Ferrandis and Sean Hughes and Thomas Wolf and Dzmitry Bahdanau and Leandro Von Werra and Harm de Vries } ,
journal = { Transactions on Machine Learning Research } ,
issn = { 2835-8856 } ,
year = { 2023 } ,
url = { https://openreview.net/forum?id=pxpbTdUEpD } ,
note = { }
}إلهيات مستندات علمية باستخدام التجزئة الحساسة للمحلية وتضمينات الكلمات ↩ ↩ 2 ↩ 3 ↩ 4
Retsim: تشابه نص مرن وفعال ↩ ↩ 2 ↩ 3 ↩ 4 ↩ 5 ↩ 6 ↩ 7 ↩ 8 ↩ 9 ↩ 10 ↩ 11 ↩ 12
de-duplication-robust الضوضاء في المقياس ↩ ↩ 2 ↩ 3 ↩ 4 ↩ 5