Kodax

معالجة اللغة الطبيعية (NLP) — مقدمة في الذكاء الاصطناعي

معالجة اللغة الطبيعية (NLP)

NLP هو فرع من AI يُمكّن الآلات من فهم وتوليد اللغة البشرية.

تطبيقات NLP

- Chatbots - مساعدين افتراضيين

- الترجمة - Google Translate

- تحليل المشاعر - معرفة رأي العملاء

- تلخيص النصوص - تلخيص المقالات

- استخراج المعلومات - من الوثائق

- التعرف على الكلام - Siri, Alexa

خطوات معالجة النص

1. تنظيف النص (Text Cleaning)

import re

def clean_text(text):
    # تحويل لأحرف صغيرة
    text = text.lower()
    
    # إزالة HTML
    text = re.sub(r'<[^>]+>', '', text)
    
    # إزالة الروابط
    text = re.sub(r'http\S+', '', text)
    
    # إزالة الأرقام
    text = re.sub(r'\d+', '', text)
    
    # إزالة الرموز الخاصة
    text = re.sub(r'[^\w\s]', '', text)
    
    # إزالة المسافات الزائدة
    text = ' '.join(text.split())
    
    return text

2. Tokenization (التقسيم)

from nltk.tokenize import word_tokenize, sent_tokenize

text = "مرحباً بالعالم. هذا درس NLP."

# تقسيم لجمل
sentences = sent_tokenize(text)
# ['مرحباً بالعالم.', 'هذا درس NLP.']

# تقسيم لكلمات
words = word_tokenize(text)
# ['مرحباً', 'بالعالم', '.', 'هذا', 'درس', 'NLP', '.']

3. إزالة Stop Words

from nltk.corpus import stopwords

stop_words = set(stopwords.words('arabic'))
# {'من', 'في', 'على', 'إلى', 'هذا', ...}

filtered = [w for w in words if w not in stop_words]

4. Stemming و Lemmatization

from nltk.stem import PorterStemmer, WordNetLemmatizer

# Stemming - قطع اللواحق
stemmer = PorterStemmer()
print(stemmer.stem("running"))  # run
print(stemmer.stem("better"))   # better (خطأ!)

# Lemmatization - الجذر الصحيح (أفضل)
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("better", pos='a'))  # good
print(lemmatizer.lemmatize("running", pos='v')) # run

5. تحويل النص لأرقام (Vectorization)

from sklearn.feature_extraction.text import (
    CountVectorizer, 
    TfidfVectorizer
)

texts = ["أحب البرمجة", "البرمجة ممتعة"]

# Bag of Words
count_vec = CountVectorizer()
bow = count_vec.fit_transform(texts)

# TF-IDF (أفضل)
tfidf_vec = TfidfVectorizer()
tfidf = tfidf_vec.fit_transform(texts)

مشروع: تحليل المشاعر

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report

# البيانات
data = pd.DataFrame({
    'text': [
        'هذا المنتج رائع جداً',
        'خدمة سيئة للغاية',
        'أنصح بالشراء',
        'لن أشتري مرة أخرى',
        'جودة عالية',
        'مضيعة للمال'
    ],
    'sentiment': [1, 0, 1, 0, 1, 0]  # 1=إيجابي، 0=سلبي
})

# التقسيم
X_train, X_test, y_train, y_test = train_test_split(
    data['text'], data['sentiment'], test_size=0.2
)

# TF-IDF
vectorizer = TfidfVectorizer()
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)

# التدريب
model = MultinomialNB()
model.fit(X_train_vec, y_train)

# التقييم
predictions = model.predict(X_test_vec)
print(classification_report(y_test, predictions))

# تجربة نص جديد
new_text = ["منتج ممتاز"]
new_vec = vectorizer.transform(new_text)
print(model.predict(new_vec))  # [1] = إيجابي

Word Embeddings

Word2Vec

from gensim.models import Word2Vec

# تدريب النموذج
sentences = [["مرحباً", "بالعالم"], ["تعلم", "الآلة"]]
model = Word2Vec(sentences, vector_size=100, min_count=1)

# الحصول على vector
vector = model.wv["مرحباً"]

# الكلمات المشابهة
similar = model.wv.most_similar("تعلم")

استخدام Transformers (الأحدث)

from transformers import pipeline

# تحليل المشاعر
sentiment = pipeline("sentiment-analysis")
result = sentiment("I love this product!")
# [{'label': 'POSITIVE', 'score': 0.99}]

# الإجابة على الأسئلة
qa = pipeline("question-answering")
result = qa(
    question="What is AI?",
    context="AI is artificial intelligence..."
)

# توليد النصوص
generator = pipeline("text-generation")
result = generator("Once upon a time")
# مشروع: تصنيف الأخبار
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score

# تحميل البيانات
categories = ['sci.med', 'sci.space', 'rec.sport.hockey']
train = fetch_20newsgroups(subset='train', categories=categories)
test = fetch_20newsgroups(subset='test', categories=categories)

# بناء Pipeline
pipeline = Pipeline([
    ('tfidf', TfidfVectorizer(stop_words='english')),
    ('clf', MultinomialNB())
])

# التدريب
pipeline.fit(train.data, train.target)

# التقييم
predictions = pipeline.predict(test.data)
accuracy = accuracy_score(test.target, predictions)
print(f"الدقة: {accuracy:.2%}")

# تجربة
new_text = ["NASA launched a new rocket to Mars"]
category = pipeline.predict(new_text)
print(f"الفئة: {train.target_names[category[0]]}")
اختبر فهمك