الكشف عن الحدث Event Detection في النص والصورة

تحديد الحدث في النص والصورة

159

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

تهدف طرق كشف الحدث بشكل رئيسي إلى وضع قالب للحدث من خلال الإجابة عن بضعة أسئلة تتمثل في : من قام؟ لمن؟  بماذا؟ وأين؟ ومتى؟

بالنسبة لمتى؟ ومن؟ وأين؟ فهي أسئلة أساسية ويمكن الإجابة عنها بطرق بسيطة أما لمن؟ وماذا؟ فهي أسئلة أكثر تعقيدا تتطلب تحليلا أكبر للحدث.

يمكن للحدث أن يكون نصا أو موجات صوتية أو حتى فيديو ويختلف تعقيد الوسائل باختلاف طبيعة الحدث نفسه.

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

اعتمدت الفرضية الأولى على تحديد حدث ما بملاحظة مدى تكرار نفس الكلمة في أكثر من مكان في فترة زمنية معينة مثلا كانقراض الباندا فتعتمد عملية البحث على كل من كلمتي انقراض وباندا  في مدة اسبوع مثلا أي اجمع كل الأخبار التي تم فيها ذكر انقراض وباندا في مدة زمنية قدرها من 21/3/2017 وحتى 28/3/2017.

دعنا نر مثالا بسيطا للتوضيح:

المثال الآتي يستخدم هذا المقال للعمل عليه في البداية نبدأ بأخذ المحتوى من النص كالتالي

content = ''
with open(filename, encoding="utf8") as f:
     for line in f:
     content = content + line.lower()

ثم نقوم بتجزئة المقال عن طريق تحويله لعدة tokens

tokens = word_tokenize(content)

هذه الtokens قد تحتوى على بعض الكلمات الغير ضرورية كحروف الجر والعطف مثلا لهذا نقوم بإزالة هذه الكلمات كما نرى بالكود التالي في البداية قمنا بإزالة الكلمات التي يقل عدد حروفها عن 4 أحرف ثم قمنا بإزالة ما يعرف بالStop words وهي الكلمات شائعة الاستخدام وغير مهمة لتحديد هدف النص مثل أريد مثلا

clean_tokens = []
stop_words = stopwords.words('english')
for token in tokens:
    # ignore string less than 4 characters
    if(len(token) < 4):
        continue
    if(token in stopwords.words('english')):
        continue
    token = porter_stemmer.stem(token)
    
    clean_tokens.append(token)

ثم نستخدم ما يعرف باسم تحليل الجذور أو PoterStemmer وهي طريقة تقوم على إيجاد أساس الكلمة بمعنى إن تكرر لديك في المقال keep و Kept و keeping يقوم الPoterStemmer بإخبارك أنهم جميعا يؤولون لنفس الأصل وهو keep لاتسخدام تلك التقنية نقوم بكتابة الآتي :

from nltk.stem import PorterStemmer
porter_stemmer = PorterStemmer()
token = porter_stemmer.stem(token)

الآن لدينا tokens خالية من كل الإضافات الغير مرغوب فيها بالتالي بإمكاننا تحديد توزيع التكرار أو Frequency distribution ونقوم بذلك عن طريق الآتي :

freq = nltk.FreqDist(clean_tokens)
freq.plot(20, cumulative=False)

نجد أن ناتج توزيع التكرار كالآتي :

الكود كاملا

import os 
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmer

porter_stemmer = PorterStemmer()

def get_dir():
    dir_path = os.path.dirname(os.path.realpath(__file__))
    return dir_path

def get_frequency(filename):

    content = ''
    with open(filename, encoding="utf8") as f:
        for line in f:
            #print(line, end = '') 
            content = content + line.lower()

    #print(content)

    tokens = word_tokenize(content)

    freq = nltk.FreqDist(tokens)

    clean_tokens = [] 

    stop_words = stopwords.words('english')

    for token in tokens:

        # ignore string less than 4 characters
        if(len(token) < 4):
            continue

        if(token in stopwords.words('english')):
            continue

        token = porter_stemmer.stem(token)

        clean_tokens.append(token)

    freq = nltk.FreqDist(clean_tokens)
    freq.plot(20, cumulative=False)

            
get_frequency(get_dir() + "/article1.txt")

الآن ربما نرغب بالتحدث عن تحديد النص من الصورة أي تكون لديك صورة بها نص معين وتريد قراءته من الصورة

في الحقيقة هناك عدة طرق لتحديد النص من الصورة سنتناول منها هنا طريقة STN-OCR وهي شبكة عصبية تتكون من

1 – شبكة محول حيزي أو Spatial transformer network “ويستخدم في تحديد مناطق النص في الصور ”

2 – شبكة تعرف عالنص أو text recognition network  “يتعرف على محتوى النص في المناطق التي تم تحديدها كمنطقة نص بالفعل”

في البداية ربما نعطي ملخصا سريعا لكيفية إتمام العملية من خلال الصورة الآتية فعلى اليسار تجد المحدد Detector ويتمثل في الشبكة الأولى التي تحدد مناطق النص في الصورة وعلى اليمين تجد المتعرف Recognizer الذي يتعرف على محتوى النص بداخل تلك المناطق التي تم تحديدها كمناطق نصية بالفعل

المرحلة الأولى وهي مرحلة تحديد أماكن النص :

تتكون هذه المرحلة من ثلاثة مراحل

  1. دالة f_loc المحسوبة بواسطة شبكة تحديد مواقع Localization Network.
  2. شبكة تقسيم العينات المنتجة بواسطة المعايير المتنبأ بها وتستخدم لتحديد أي جزء من المدخلات يمتلك المميزات المطلوبة لكي يكون في المخرجات.
  3. أخذ شبكة تقسيم العينات المولدة وإنتاج خريطة خصائص محددة محوٍلة مكانياً بواسطة وسيلة تسمى differentiable interpolation method.

Localization Network

تأخذ خريطة الخصائص المحددة كمدخل وتنتج المخرجات على هيئة أكتر من بارامتر  في هذا النظام تستخدم لكي تأخذ الصورة كمدخل وتتنبأ بقيمة الN في مصفوفات التحويل حيث يمكن للN أن تكون عدد الحروف أو الكلمات أو السطور

وبشكل أكثر تحديدا بإمكاننا القول إن ما يحدث كالتالي :

يتم إنتاج مصفوفات التحويل A_θ^n عن طريق  تغذية الشبكة العصبية باستخدام كلا من CNN و RNN.

بالإضافة إلى g_loc كتغذية مباشرة للشبكة العصبية

وكل مصفوفات التحويل يتم حسابها بواسطة الحالة المخفية h_n لكل خطوة من خطوات الRNN.

وقد استخدم بها ResNet ك CNN والتي بدورها تجعل النظام أسرع وأفضل في الأداء مقارنة بمثيلاتها ك VGGNet مثلا.

وقد استخدم BLSTM ك RNN وهو اختصار ل Bidirectional Long-Short Term Memory

وفي كل التجارب تم استخدام الBatch Normalization

Grid Generator :

يولد الجريد جينيراتور شبكات عادية G_i^n بإحداثيات u_i^n, v_i^n لخريطة الخصائص الرئيسية باستخدام شبكات منظمة التباعد.G_0 بإحداثيات y_h_o, x_w_o ومصفوفات تحويل A_n^θ  والشبكات  الناتجة ذات العدد N وهي G_i^n والتي تحتوى على مستطيلات لتحديد مناطق النص يمكن استخراجها من خريطة الخصائص المدخلة

Image sampling :

شبكات التقسيم والتي يبلغ عددها N تستخدم لتقسيم القيم الخاصة بخريطة الخصائص المميزة عند الإحداثيات المقابلة لها u_i^n, v_i^n. على الرغم من أن هذه النقط قد لا تتماشى تماما مع قيم الdiscrete grid في خريطة الخصائص المدخلة.وهكذا ، يتم استخراج القيمة في إحداثيين معينين عن طريق إجراء استيفاء خطي لقيم أقرب النقط. ومن ثم يتم الحصول على قيم الN  الخواص المميزة للخرائط  O ^ n في إحداثي i، j من الصيغة التالية.

مرحلة التعرف على النص Text Recognition state 

في مرحلة التعرف على النص ، تتم معالجة هذه المناطق N المختلفة التي تنتج عن مرحلة الكشف بشكل منفصل عن بعضها البعض. يُستخدم  أيضًا بنية ResNet لمرحلة التعرف على النص ، ويُزعم أن استخدام ResNet في مرحلة التعرّف أكثر أهمية من مرحلة الكشف ، لسبب أن مرحلة الكشف تحتاج إلى تلقي Gradients قوية من مرحلة التعرف من أجل تحديث أوزان شبكة تحديد المواقع Localization. يتم التنبؤ بتوزيع احتمالات yˆ على Label space L_epsilon في هذه المرحلة حيث Lǫ = L ∪ ǫ

حيث ال L = 0–9a — z و ǫ هي الblank label يستخدم كل مصنف  softmax للتنبؤ بصفة واحدة من الكلمة.

يُقترح أيضًا استخدام  تصنيف الاتصال العكسي أو Connectionist Temporal Classification ويعرف بال CTC   لتدريب الشبكة واسترجاع الLabel  الأكثر احتمالًا من خلال تعيين yˆ ليكون مسار الLabel الأكثر احتمالًا π.

L_epsilon ^ T عبارة عن مجموعة من Labels التي يكون طولها T و هو احتمال أن يكون المسار π ∈ L_epsilon ^ T متوقع بواسطة DNN. أما الB فهي دالة تقوم بإزالة كل الLabels الفارغة والمكررة.

في النهاية يمكننا القول أن هذا النظام  قادر على اكتشاف مجموعة من خطوط النص المرتبة بأشكال مختلفة وكذلك التعرف على محتوى هذه النصوص.

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

المصادر :

1 , 2 , 3 , 4

تعليقات