Search⌘ K
AI Features

تجزئة النص إلى رموز

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

للبدء في استخدام المحولات لتطوير روبوتات الدردشة، من الضروري فهم كيفية تفسير الآلات للنصوص. بما أن الآلات تعتمد في الأساس على الأرقام، نبدأ بتحويل النص إلى نموذج يمكن للآلات فهمها من خلال عملية تُسمى "الترميز". الترميز هو حلقة الوصل بين النص الخام والبيانات القابلة للقراءة آليًا، حيث يُقسّم النص إلى وحدات أصغر أو رموز. تُعد هذه الخطوة أساسية لتطوير روبوتات الدردشة، إذ تتيح لنا معالجة مُدخلات المستخدم مُسبقًا.

التجزئة: تحليل النص

نبدأ بتقسيم النص أو إدخال إلى رموز.

Tokens passed into the transformers
Tokens passed into the transformers

دعونا نلقي نظرة على مثال بسيط لكيفية تقسيم النص إلى رموز.

Tokenizing text
Tokenizing text

في الأساس، يُقسّم النص إلى كلمات، بما في ذلك الفواصل والنقاط والفواصل، وما إلى ذلك. ويمكن تطوير عملية الترميز بتطبيق أساليب دقيقة.

  1. الخطوة الأولى هي تحويل جميع الكلمات إلى أحرف صغيرة. تساعد هذه العملية على توحيد المدخلات في سياقات مختلفة، وهي ضرورية لتحسين أداء النموذج، إذ تُقلل حجم المفردات التي يحتاجها. ويعني حجم المفردات الأصغر تعقيدًا حسابيًا أقل وقدرات تعميم أفضل، مما يجعل روبوت المحادثة أكثر كفاءة واستجابة.

  2. الآن نقسم النص إلى كلمات. يمكن تقسيم النص وفقًا لقواعد محددة. على سبيل المثال، يمكن تقسيمه إلى مسافات، أو نقطتين، أو علامات ترقيم، أو أحرف خاصة مثل سطر جديد (\n)، أو حتى وسوم HTML، وذلك حسب بنية النص ومتطلبات المهمة.

  3. التفريع أو التقسيم إلى أجزاء لفظية مصطلحان شائعان في مجال معالجة اللغات الطبيعية. يُزيل التفريع الأجزاء النهائية (اللاحقة) أو الأجزاء الأولية (البادئة). على سبيل المثال، تصبح الجملة "إنه من النوع الذي يحب القراءة أثناء السفر" بعد التفريع "إنه من النوع الذي يحب القراءة أثناء السفر". أما التقسيم إلى أجزاء لفظية (من كلمة "ليما")، فيحدد ما إذا كانت لكلمتين جذور أو أصول متشابهة. على سبيل المثال، كلمتا "فئران" و"فأر" متماثلتان. الهدف من هذين المصطلحين هو تبسيط النص وإزالة الكلمات غير الضرورية من السياق.

  4. تُسهم إزالة الكلمات غير المرغوبة في تبسيط النص إدخال من خلال إزالة الكلمات المُزعجة مثل "the" و"a" و"are". على سبيل المثال، تصبح الجملة "يا أوليفر، سائق رائع!" "يا أوليفر، سائق رائع". تُوفر مكتبات متعددة في Python وظائف لإزالة الكلمات غير المرغوبة.

مقدمة إلى NLTK لمعالجة النصوص

مجموعة أدوات اللغة الطبيعية (NLTK) هي مكتبة توفر واجهات سهلة الاستخدام لأكثر من 50 موردًا لغويًا ومعجميًا، مثل WordNet. كما تتضمن مجموعة من مكتبات معالجة النصوص للتصنيف، والترميز، والتقسيم إلى أجزاء، والوسم، والتحليل، والاستدلال الدلالي، بالإضافة إلى أغلفة لمكتبات معالجة اللغة الطبيعية عالية الكفاءة، ومنتدى نقاش فعّال.

ترميز النص باستخدام تقنيات معالجة اللغة الطبيعية

لنحاول ترميز جملة باستخدام NLTK. شغّل الكود التالي لترميز الجملة المُعطاة:

Python
# Import libraries
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt')
# User input text
text = """Artificial intelligence will change the way we think, \
operate, and communicate. We believe that Artificial General \
Intelligence, refered to as AGI, would be reached in the \
next 5 to 7 years."""
# Start by converting the text to a lower case
text = text.lower()
print('Lowercase text:')
print('-'*80)
print(text)
# Tokenize text
tokens = word_tokenize(text)
# Output the tokens
print('-'*80)
print('Tokenized text:')
print('-'*80)
print(tokens)

في هذا الكود نقوم بالخطوات التالية:

  • الأسطر 1-4 : نقوم باستيراد مكتبة NLTK ووظيفتهاword_tokenize .
  • الأسطر 6-10 : نقدم النص المراد تقسيمه إلى رموز.
  • الأسطر 12-16 : نقوم بتحويل النص إلى أحرف صغيرة، ثم نقوم بطباعته.
  • الأسطر 18-24 : نقوم بتقسيم النص إلى رموز باستخدام الكلمة الوظيفية tokenized، ثم نقوم بطباعته.

بمجرد تشغيل إخراج، نرى أن كل كلمة مُنفصلة ومُوضوعة بين علامتي اقتباس لتُعَرَّف كسلسلة نصية مُنفصلة. هذا بالضبط ما هو مُتوقع من عملية التجزئة.

ممارسة التجزئة باستخدام NLTK

في التمرين التالي، حاول تغيير النص وشاهد كيف يختلف إخراج .

Python
# Import libraries
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt')
# Enter new text here:
text = """
"""
# Do not change the below code
text = text.lower()
tokens = word_tokenize(text)
print('Tokenized text:')
print(tokens)

حاول استخدام أحرف وعلامات ترقيم وحتى رموز مختلفة لمعرفة كيفية تعامل الوظيفة المميزة معها.

تعزيز التجزئة باستخدام نماذج المحولات

بينما توفر تقنية معالجة اللغة الطبيعية (NLTK) أساسًا متينًا، توفر نماذج المحولات قدرات ترميز متقدمة تُعزز فهم روبوت الدردشة لدينا لتفاصيل اللغة. يستضيف Hugging Face مجموعة واسعة من نماذج المحولات المُدربة مسبقًا، مُقدمًا مجموعة من وحدات الترميز المُصممة لمهام معالجة اللغة الطبيعية (NLP) المُتنوعة. تستخدم نماذج، مثل BERT أو GPT، أساليب ترميز تُراعي السياق وتفاصيل الكلمات الفرعية، مُوفرةً مستوى أعمق من تحليل النصوص مُقارنةً بالطرق الأساسية.

دعونا نفهم الاختلافات والقدرات لكل طريقة:

Feature

NLTK

Transformers

Approach

Rule-based

Contextual

Handling Subwords

Not directly supported

Handles subwords efficiently

Context Sensitivity

Operates on individual tokens

considers sentence context

Performance on New Words

Struggles with out-of-vocabulary (OOV) words

Handles OOV words through subword tokenization

Computational Efficiency

Generally fast and lightweight

Can be computationally intensive due to model complexity

Output

List of tokens

Tokens with attention to context

ترميز النص باستخدام المحولات

من الطرق الفعّالة لتقسيم النصوص إلى رموز هي استخدام المحولات. يختلف تقسيم النصوص باستخدام المحولات عن مكتبة NLTK، ويتم فصل الرموز بطرق مختلفة حسب النموذج المختار. من نماذج Hugging Face، يمكننا اختيار "Fill-Mask" ثم "bert-large-uncased".

قم بتشغيل الكود أدناه لتجزئة الجملة المقدمة:

Python
# Import libraries
# pip install transformers
# pip install tensorflow
from transformers import AutoTokenizer
# Define the model name
model_name = 'bert-large-uncased'
# Initialize tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name)
# User input text
text = """Artificial intelligence will change the way we think, \
operate, and communicate. We believe that Artificial General \
Intelligence, refered to as AGI, would be reached in the \
next 5 to 7 years."""
print('Current text:')
print('-'*80)
print(text)
# Tokenize text
tokens = tokenizer.tokenize(text)
# Output the tokens
print('-'*80)
print('Tokenized text:')
print('-'*80)
print(tokens)

في هذا الكود نقوم بالخطوات التالية:

  • الأسطر 1-4 : نقوم باستيراد مكتبة المحولات ووظيفتهاAutoTokenizer .
  • السطرين 6-7 : نقوم بتحديد نموذج المحول الذي سيتم استخدامه.
  • السطرين 9-10 : نقوم بتهيئةtokenizer وظيفة.
  • الأسطر 12-16 : نقدم النص المراد تقسيمه إلى رموز.
  • الأسطر 18-20 : نقوم بطباعة النص الحالي.
  • الأسطر 22-28 : نقوم بتقسيم النص إلى رموز باستخدام محول الرموز، ثم نقوم بطباعته.

لاحظ كيف يقوم المحول بتغيير النص إلى أحرف صغيرة تلقائيًا دون استخدام أي وظيفة إضافية.

ممارسة التجزئة باستخدام المحولات

في التمرين التالي، جرّب تغيير النص ولاحظ اختلاف إخراج . جرّب استخدام أحرف وعلامات ترقيم وحتى رموز مختلفة. جرّب أيضًا تغيير نموذج المحول للترميز من القائمة التالية: "t5-small"، "camembert-base"، "gpt2"، أو من موقع Hugging Face الإلكتروني.

Python
# Import libraries
# pip install transformers
# pip install tensorflow
from transformers import AutoTokenizer
# Enter model name here:
model_name = ''
# Enter new text here:
text = """
"""
# Do not change the below code
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokens = tokenizer.tokenize(text)
print('Tokenized text:')
print(tokens)

التحديات والاعتبارات في معالجة النصوص

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

علاوة على ذلك، يُشكّل التعامل مع اللغة العامية والتعبيرات الاصطلاحية والتعبيرات العامية تحديات إضافية، إذ قد تختلف باختلاف الثقافات والمجتمعات. يُعدّ دمج آليات لتفسير هذه التعبيرات بشكل صحيح أمرًا أساسيًا لبناء روبوتات دردشة تُشرك المستخدمين بشكل طبيعي. كما تُعدّ إدارة الأخطاء المطبعية والإملائية أمرًا أساسيًا للحفاظ على المتانة، إذ تتطلب خوارزميات متطورة تُمكّن من تحديد الأخطاء وتصحيحها دون إساءة تفسير رسالة المستخدم.

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