
اشتعلت فيه النيران السريعة والخفيفة الوزن والقابلة للتخصيص في النص الدلالي في بيثون.
Neofuzz هي مكتبة بحث غامضة تعتمد على تقنيات المتجهين وأقرب تقنيات البحث الجار.
الآن يمكنك إعادة ترتيب نتائج البحث الخاصة بك باستخدام مسافة Levenshtein! في بعض الأحيان ، لا تطلب عمليات N-Gram أو العمليات المتجهة النتائج بشكل صحيح. في هذه الحالات ، يمكنك استرداد عدد أكبر من الأمثلة من المجموعة المفهرسة ، ثم صقل هذه النتائج بمسافة Levenshtein.
from neofuzz import char_ngram_process
process = char_ngram_process ()
process . index ( corpus )
process . extract ( "your query" , limit = 30 , refine_levenshtein = True )تعتمد معظم مكتبات البحث الغامضة على تحسين الجحيم من نفس خوارزميات البحث الغامضة (مسافة Hamming ، مسافة Levenshtein). في بعض الأحيان لسوء الحظ بسبب تعقيد هذه الخوارزميات ، لن يحصل لك أي قدر من التحسين على السرعة التي تريدها.
يقوم Neofuzz بإدراك ، أنه لا يمكنك تجاوز حد معين للسرعة من خلال الاعتماد على الخوارزميات التقليدية ، ويستخدم تخصيص النص وأقرب جار تقريبًا في مساحة المتجه لتسريع هذه العملية.
عندما يتعلق الأمر بمعضلة السرعة مقابل الدقة ، فإن Neofuzz تسير السرعة الكاملة.
يمكنك تثبيت Neofuzz من Pypi:
pip install neofuzz إذا كنت تريد تجربة توصيل وتشغيل ، فيمكنك إنشاء عملية جيدة وقذرة جيدة بشكل عام مع عملية char_ngram_process() .
from neofuzz import char_ngram_process
# We create a process that takes character 1 to 5-grams as features for
# vectorization and uses a tf-idf weighting scheme.
# We will use cosine distance for the nearest neighbour search.
process = char_ngram_process ( ngram_range = ( 1 , 5 ), metric = "cosine" , tf_idf = True )
# We index the options that we are going to search in
process . index ( options )
# Then we can extract the ten most similar items the same way as in
# thefuzz
process . extract ( "fuzz" , limit = 10 )
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[( 'fuzzer' , 67 ),
( 'Januzzi' , 30 ),
( 'Figliuzzi' , 25 ),
( 'Fun' , 20 ),
( 'Erika_Petruzzi' , 20 ),
( 'zu' , 20 ),
( 'Zo' , 18 ),
( 'blog_BuzzMachine' , 18 ),
( 'LW_Todd_Bertuzzi' , 18 ),
( 'OFU' , 17 )]يمكنك تخصيص سلوك Neofuzz من خلال إجراء عملية مخصصة. تحت الغطاء تعتمد كل عملية neofuzz على نفس المكونين:
إذا كنت مهتمًا أكثر بالكلمات/المحتوى الدلالي للنص ، فيمكنك أيضًا استخدامها كميزات. يمكن أن يكون هذا مفيدًا للغاية خاصة مع النصوص الأطول ، مثل الأعمال الأدبية.
from neofuzz import Process
from sklearn . feature_extraction . text import TfidfVectorizer
# Vectorization with words is the default in sklearn.
vectorizer = TfidfVectorizer ()
# We use cosine distance because it's waay better for high-dimentional spaces.
process = Process ( vectorizer , metric = "cosine" )قد تجد أن سرعة عملية البحث الغامضة الخاصة بك ليست كافية. في هذه الحالة ، قد يكون من المرغوب فيه تقليل عقلانية المتجهات المنتجة مع بعض طريقة تحلل المصفوفة أو نموذج الموضوع.
هنا على سبيل المثال ، أستخدم NMF (نموذج موضوع ممتاز وسرعة لا يصدق أيضًا) أيضًا تسريع خط أنابيب البحث الغامض.
from neofuzz import Process
from sklearn . feature_extraction . text import TfidfVectorizer
from sklearn . decomposition import NMF
from sklearn . pipeline import make_pipeline
# Vectorization with tokens again
vectorizer = TfidfVectorizer ()
# Dimensionality reduction method to 20 dimensions
nmf = NMF ( n_components = 20 )
# Create a pipeline of the two
pipeline = make_pipeline ( vectorizer , nmf )
process = Process ( pipeline , metric = "cosine" )مع Neofuzz ، يمكنك بسهولة استخدام التضمينات الدلالية لصالحك ، ويمكنك استخدام كل من نماذج اللغة المستندة إلى الاهتمام (BERT) ، فقط كلمة عصبية بسيطة أو تضمينات مستندات (Word2VEC ، DOC2VEC ، FastText ، إلخ) أو حتى LLMs Openai.
نوصيك بتجربة Embetter ، التي تحتوي على الكثير من الحوادث المدمجة المدمجة في Sklearn.
pip install embetter from embetter . text import SentenceEncoder
from neofuzz import Process
# Here we will use a pretrained Bert sentence encoder as vectorizer
vectorizer = SentenceEncoder ( "all-distilroberta-v1" )
# Then we make a process with the language model
process = Process ( vectorizer , metric = "cosine" )
# Remember that the options STILL have to be indexed even though you have a pretrained vectorizer
process . index ( options )