Phase 05: NLP: Foundations to Advanced

معالجة النص التكنولوجيا، التأثير، التنظيم

اللغة مستمرة، النماذج منفصلة، المعالجة المسبقة هي الجسر.

Type: Build

Languages: Python

Prerequisites: Phase 2 · 14 (Naive Bayes)

Time: ~45 minutes

المشكلة

لا يمكن أن يقرأ نموذج " القطط كانت تهرب"

كل نظام من النظم النفسية يبدأ بنفس الأسئلة الثلاثة. أين تبدأ كلمة. ما هو جذور الكلمة. كيف نعتبر "الركض" و "الركض" و "الركض" نفس الشيء عندما يساعد، وكأشياء مختلفة عندما لا.

إذا أخطأت في إضفاء الرمز، فستتعلم النموذج من القمامة.don'tكرمز واحد ولكنdo n'tإذا سقطت صوتكorganizationوorganإذا كان الممثل يحتاج إلى سياق جزء من الكلام ولكنك لا تمر به، فالأفعال تصبح تعامل كالنص.

هذا الدروس يبني الخطوات الثلاثة المسبقة للمعالجة من الصفر، ثم يظهر كيف أن NLTK و spaCy يفعلون نفس العمل حتى تتمكن من رؤية التداولات.

المفهوم

ثلاث عمليات لكل منها وظيفة ووضع فشل

Tokenizationيفرق سلسلة إلى رموز. "التكون" غامض عمدا لأن الحجم الصحيح يعتمد على المهمة. مستوى الكلمة لـ NLP الكلاسيكية. كلمة فرعية لتحولات. حرف لغات بدون مساحة بيضاء.

Stemmingيقطع الإضافات مع القواعد سريعة، عدوانية، غبيةrunning -> run. .organization -> organهذا الثاني هو وضع الفشل

Lemmatizationيقلل الكلمة إلى شكل قاموسها باستخدام معرفة اللغة. بطيئة، دقيقة، تحتاج إلى جدول بحث أو محلل مورفولوجي. ran -> run(يجب أن تعرف "الرحيل" هو الماضي من "الرحيل").better -> good(يجب أن يعرف أشكال مقارنة).

قاعدة الإبهام: استنقط عندما يكون السرعة مهمة ويمكنك تحمل الضجيج (مؤشر البحث ، التصنيف القاسية). قم بتحديد معنى عندما يكون الأمر مهمًا (إجابة الأسئلة ، البحث التعريفي ، أي شيء يقرأه المستخدم).

بناءها

الخطوة الأولى: إشارة كلمة regex

ينفصل أسهل رمز مفيد على حروف غير ألفانومرية مع الحفاظ على التخطيط كرمز خاص به. ليس مثالياً، وليس نهائياً، لكنه يعمل في سطر واحد.

pythonimport re

def tokenize(text):
    return re.findall(r"[A-Za-z]+(?:'[A-Za-z]+)?|[0-9]+|[^\sA-Za-z0-9]", text)

ثلاثة أنماط في الترتيب الأولوي. الكلمات مع اختياري الصفحة الداخلية (don't،it's) أرقام نقية. أي شخصية واحدة غير صفرية غير صفرية غير فضاء بيضاء كرمز مستقل (بقع).

python>>> tokenize("The cats weren't running at 3pm.")
['The', 'cats', "weren't", 'running', 'at', '3', 'pm', '.']

أساليب الفشل للاحظة3pmتقسيم إلى ['3', 'pm']لأننا قمنا بالتبديل بين خطوط الرسائل والرقم. جيد بما فيه الكفاية لمعظم المهام. عناوين URL، رسائل البريد الإلكتروني، الهاتشاتغ كل شيء ينفصل.

الخطوة الثانية: مراسلة (خطوة 1 أ فقط)

خوارزمية بورتر الكاملة لديها خمس مراحل من القواعد. الخطوة 1a وحدها تغطي الأكثر شيوعا الإنجليزية الإستثناءات وتعلم النمط.

pythondef stem_step_1a(word):
    if word.endswith("sses"):
        return word[:-2]
    if word.endswith("ies"):
        return word[:-2]
    if word.endswith("ss"):
        return word
    if word.endswith("s") and len(word) > 1:
        return word[:-1]
    return word
python>>> [stem_step_1a(w) for w in ["caresses", "ponies", "caress", "cats"]]
['caress', 'poni', 'caress', 'cat']

اقرأ القواعد من أعلى إلى أسفلies -> iالقاعدة هي السببponies -> poniلا ، لاpony(بورتر) الحقيقي لديه خطوة (ب) الأولى التي ستصلح الأمر القواعد تتنافس القواعد السابقة تفوز النظام مهم أكثر من أي قاعدة واحدة

الخطوة الثالثة: المُحَرِّر القائم على البحث

يتطلب التجميع الصحيح المورفولوجيا. إصدار تعليمية قابلة للتدريب يستخدم جدول ليم صغير وقلة.

pythonLEMMA_TABLE = {
    ("running", "VERB"): "run",
    ("ran", "VERB"): "run",
    ("runs", "VERB"): "run",
    ("better", "ADJ"): "good",
    ("best", "ADJ"): "good",
    ("cats", "NOUN"): "cat",
    ("cat", "NOUN"): "cat",
    ("were", "VERB"): "be",
    ("was", "VERB"): "be",
    ("is", "VERB"): "be",
}

def lemmatize(word, pos):
    key = (word.lower(), pos)
    if key in LEMMA_TABLE:
        return LEMMA_TABLE[key]
    if pos == "VERB" and word.endswith("ing"):
        return word[:-3]
    if pos == "NOUN" and word.endswith("s"):
        return word[:-1]
    return word.lower()
python>>> lemmatize("running", "VERB")
'run'
>>> lemmatize("cats", "NOUN")
'cat'
>>> lemmatize("better", "ADJ")
'good'
>>> lemmatize("watched", "VERB")
'watched'

الحالة الأخيرة هي لحظة تعليمية رئيسيةwatchedليس على طاولتنا و تراجعنا فقط يُمسّكing. تغطية ليميتيزة حقيقيةed، الفعال غير المنتظمة، الصفات المقارنة، الكثائف مع تغييرات الصوت (children -> childهذا هو السبب في أن أنظمة الإنتاج تستخدم WordNet، المورفولوجيزر spaCy، أو تحليل المورفولوجية الكاملة.

الخطوة الرابعة: قم بتجميعها

pythondef preprocess(text, pos_tagger=None):
    tokens = tokenize(text)
    stems = [stem_step_1a(t.lower()) for t in tokens]
    tags = pos_tagger(tokens) if pos_tagger else [(t, "NOUN") for t in tokens]
    lemmas = [lemmatize(word, pos) for word, pos in tags]
    return {"tokens": tokens, "stems": stems, "lemmas": lemmas}

الجزء المفقود هو علامة POS. المرحلة 5 · 07 (POS Tagging) يخلق واحدة.NOUNواعتراف بالقيود

استخدمها

نلتك و سباي سيبعثان نسخة الإنتاج، بضع خطوط لكل واحد

الـ " نيلتيك "

pythonimport nltk
nltk.download("punkt_tab")
nltk.download("wordnet")
nltk.download("averaged_perceptron_tagger_eng")

from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmer, WordNetLemmatizer
from nltk import pos_tag

text = "The cats were running."
tokens = word_tokenize(text)
stems = [PorterStemmer().stem(t) for t in tokens]
lemmatizer = WordNetLemmatizer()
tagged = pos_tag(tokens)


def nltk_pos_to_wordnet(tag):
    if tag.startswith("V"):
        return "v"
    if tag.startswith("J"):
        return "a"
    if tag.startswith("R"):
        return "r"
    return "n"


lemmas = [lemmatizer.lemmatize(t, nltk_pos_to_wordnet(tag)) for t, tag in tagged]

word_tokenizeيتعامل مع الإختناقات، و (يونيكود) ، و الحافة التي تفوتها (ريجكس)PorterStemmerيمر كل الخمس مراحلWordNetLemmatizerتحتاج إلى علامة POS التي تم ترجمتها من نظام Penn Treebank من NLTK إلى مجموعة اختصار WordNet.

السباق

pythonimport spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("The cats were running.")

for token in doc:
    print(token.text, token.lemma_, token.pos_)
The      the     DET
cats     cat     NOUN
were     be      AUX
running  run     VERB
.        .       PUNCT

سيباساي يخفي خط الأنابيب كله خلفهnlp(text). التكنولوجيا، التسمية التجارية، والتميز الكاملة. أسرع من NLTK في المقياس. أكثر دقة خارج الصندوق. التنازل هو أنه لا يمكنك بسهولة تبادل المكونات الفردية.

متى لا تختار أي

SituationPick
Teaching, research, swapping componentsNLTK
Production, multi-language, speed mattersspaCy
Transformer pipeline (you'll tokenize with the model's tokenizer anyway)Use tokenizers / transformers and skip classical preprocessing

الوضعين الفاشلين لا أحد يحذرك عنهم

معظم الدروس تدريس الخوارزميات ووقف. شيئين سوف يضربون خط الأنابيب الحقيقية قبل المعالجة، و أنها تقريبا أبدا تغطية.

Reproducibility drift.NLTK و spaCy تغيير التكنولوجيا والسلوكية lemmatizer بين الإصدارات. ما الذي أدى ['do', "n't"]في spaCy 2.x قد تنتج ["don't"]في 3.x تم تدريب نموذجك على توزيع واحد. التأثير الآن يعمل على توزيع آخر. الدقة تتدهور بهدوء ولا أحد يعرف لماذا.requirements.txt. اكتب اختبار رجعة قبل المعالجة الذي يتجمد التشريع المتوقع من 20 جملة عينات.

Training / inference mismatch.تدريب مع عملية التحضير المسبق العدوانية (أقل حرفًا ، إزالة كلمة وقف ، التأثير) ، نشر على مدخل المستخدم الخام ، ومرقبة أداء المراقبة. هذه هي الفشل الوحيد الأكثر شيوعا في الإنتاج من أجهزة النمط النووية. إذا قمت بتعديل أثناء التدريب ، يجب عليك تشغيل الوظيفة المماثلة أثناء الاستنتاج. أرسل عملية التحضير المسبق كعمل داخل حزمة النمط ، وليس كخلية لوح الملاحظة تقوم فريق الخدمة بإعادة كتابتها.

أرسله

طلب قابل للاستخدام مرة أخرى يساعد المهندسين على اختيار استراتيجية التحضير المسبق دون قراءة ثلاثة كتب دراسية.

إبقواoutputs/prompt-preprocessing-advisor.md:

markdown---
name: preprocessing-advisor
description: Recommends a tokenization, stemming, and lemmatization setup for an NLP task.
phase: 5
lesson: 01
---

You advise on classical NLP preprocessing. Given a task description, you output:

1. Tokenization choice (regex, NLTK word_tokenize, spaCy, or transformer tokenizer). Explain why.
2. Whether to stem, lemmatize, both, or neither. Explain why.
3. Specific library calls. Name the functions. Quote the POS-tag translation if NLTK is involved.
4. One failure mode the user should test for.

Refuse to recommend stemming for user-visible text. Refuse to recommend lemmatization without POS tags. Flag non-English input as needing a different pipeline.

التمارين

  1. Easy.التمديدtokenizeللحفاظ على عناوين URL كرموز واحد. اختبار: tokenize("Visit https://example.com today.")يجب أن تنتج رمز URL واحد.
  2. Medium.تنفيذ خطوة بورتر 1ب إذا كان الكلمة تحتوي على صوتية وتنتهي فيedأوingإزالتها. إمساك قاعدة المزدوج المتصادم (hopping -> hopلا ، لاhopp)
  3. Hard.قم ببناء lematizer يستخدم WordNet كجدول بحث ولكن يعود إلى مؤشر Porter عندما لا يكون WordNet مدخل. قياس دقة على جسم معلّم مقابل WordNet و Porter بسيط.

الشروط الرئيسية

TermWhat people sayWhat it actually means
TokenA wordWhatever unit the model consumes. Can be word, subword, character, or byte.
StemRoot of a wordResult of rule-based suffix stripping. Not always a real word.
LemmaDictionary formThe form you'd look up. Requires grammatical context to compute correctly.
POS tagPart of speechCategory like NOUN, VERB, ADJ. Needed to lemmatize accurately.
MorphologyWord shape rulesHow a word changes form based on tense, number, case. Lemmatization depends on it.

المزيد من القراءة

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.