كيفية تشغيل تلخيص النص مع TensorFlow

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

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

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

رصيد الصورة: https://research.googleblog.com/2015/11/computer-respond-to-this-email.html

تلخيص النص مع TensorFlow

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

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

يتم تضمين رمز التدريب واختبار النموذج في مستودع TensorFlow Models GitHub. النموذج الأساسي هو نموذج تسلسل إلى تسلسل مع الانتباه. عند التدريب ، يستخدم النموذج أول جملتين من المقالة كمدخلات ويصدر عنوانًا.

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

لا يشتمل مستودع GitHub على نموذج مدرّب. مجموعة البيانات غير متاحة للجمهور ، حيث تبلغ تكلفة الترخيص 6000 دولار للمؤسسات التي ليست أعضاء في اتحاد البيانات اللغوية. لكنها تشمل مجموعة بيانات لعبة تكفي لتشغيل الكود.

كيفية تشغيل

ستحتاج إلى TensorFlow و Bazel كشرط مسبق لتدريب النموذج.

تحتوي مجموعة بيانات الألعاب المضمّنة في المستودع على ملفين في دليل "data": "data" و "vocab". يحتوي الأول على سلسلة من الكائنات المتسلسلة tensorflow.core.example.example_pb2.Example. مثال على الكود لإنشاء ملف بهذا التنسيق:

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

تشغيل الكود على لعبة البيانات بسيط للغاية. يسرد Readme on GitHub repo سلسلة من الأوامر لتشغيل رمز التدريب والاختبار.

يمكنك تشغيل TensorBoard لمراقبة عملية التدريب:

عند تشغيل شفرة "فك شفرة" ، لاحظ أنه سيتم تكرارها على مجموعة البيانات بأكملها إلى أجل غير مسمى ، لذلك سيكون عليك إيقاف التنفيذ يدويًا في مرحلة ما. يمكنك العثور على نتائج فك التشفير في مجلد log_root / decode. سيحتوي على عدد قليل من الملفات ، بعضها يحتوي على بادئة "ref" ، وهي تحتوي على عناوين أصلية من مجموعة الاختبار. الملفات الأخرى لها بادئة "فك شفرة" ، فهي تحتوي على عناوين تم إنشاؤها بواسطة النموذج.

استكشاف الأخطاء وإصلاحها

يمكنك مواجهة خطأ عند تشغيل كود "eval" أو "فك شفرة" باستخدام TensorFlow 0.10 أو الأحدث:

"ValueError: لا يمكن أن تتسطح القاموس. يحتوي المفتاح على عنصرين ، ولكن القيمة تحتوي على عنصر واحد. "

هناك مشكلة مفتوحة على جيثب لهذا الخطأ. أحد الحلول هو تقليل TensorFlow إلى 0.9 ، وهو يعمل بالنسبة لي. يتطلب حل آخر تغيير رمز النموذج: إضافة "state_is_tuple = False" إلى إنشاء مثيل لـ LSTMCell في seq2seq_attention_model.py.

إذا قمت بتشغيل تدريب وفك تشفير على مجموعة بيانات اللعبة ، فستلاحظ أن فك التشفير يولد هراء. فيما يلي بعض الأمثلة على العناوين التي تم إنشاؤها:

إلى .
من من .
في في .

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

كيف تعمل على مجموعة بيانات أخرى

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

نظرًا لعدم تمكني من الوصول إلى مجموعة بيانات GigaWord ، فقد حاولت تدريب النموذج على مجموعات بيانات المقالات الإخبارية الأصغر حجمًا: CNN و DailyMail. لقد عثرت على رمز لتنزيل مجموعات البيانات هذه في DeepMind / rcdata GitHub repo ، وقمت بتعديله قليلاً لإضافة عنوان المقالة في السطر الأول من كل ملف إخراج. انظر التعليمات البرمجية المعدلة هنا.

92570 مقالة في مجموعة بيانات CNN ، و 219503 مقالة في مجموعة بيانات Daily Mail. يمكن أن يكون هناك عدد قليل من المقالات الأخرى ، لكن الرمز من DeepMind repo لا يمكن تنزيل جميع عناوين URL. المقالات 322k هي أقل بكثير من 10 مليون مقال في GigaWord ، لذلك أتوقع أداء أقل للنموذج إذا تم التدريب على مجموعات البيانات هذه.

بعد تشغيل التعليمات البرمجية لتنزيل مجموعة البيانات ، سيكون لديك مجلد به الكثير من الملفات ، ملف HTML واحد لكل مقالة. لاستخدامه في نموذج TextSum ، ستحتاج إلى تحويله إلى التنسيق الثنائي الموضح أعلاه. يمكنك العثور على الكود الخاص بي لتحويل مقالات CNN / DailyMail إلى تنسيق ثنائي في ملف textsum_data_convert.py في ملفي "TextSum" repo على GitHub. مثال على تشغيل الكود الخاص بمجموعة بيانات CNN:

بعد ذلك يمكنك نسخ مجموعات القطار / التحقق من الصحة / الاختبار وملفات المفردات في دليل "البيانات" والبدء في تدريب النموذج:

التدريب مع المعلمات الافتراضية لا يسير على ما يرام. فيما يلي رسم بياني لـ running_avg_loss:

نتائج فك التشفير مخيبة للآمال أيضًا:

"الخاص بك "
"سنقوم في "
"الثلج ضرب ضرب ضرب "

إما أن تكون مجموعة البيانات صغيرة جدًا ، أو يجب تغيير المعلمات الفوقية لمجموعة البيانات هذه.

عند تشغيل التعليمات البرمجية ، وجدت أن رمز التدريب لا يستخدم GPU ، على الرغم من أنني أمتلك كل التكوينات الصحيحة: GeForce 980Ti ، CUDA ، CuDNN ، TensorFlow تم تجميعها باستخدام GPU. أثناء التدريب ، يستهلك python.exe وحدة المعالجة المركزية بنسبة 100 - 300٪ ، ويظهر في قائمة العمليات عند تشغيل nvidia-smi ، لكن استخدام GPU يبقى 0٪.

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

يستخدم كود فك التشفير GPU بشكل جيد. فهي تستهلك ذاكرة GPU بسعة 6 جيجا بايت تقريبًا وتحافظ على الاستخدام أكثر من 50٪.

استنتاج

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

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

هل تستخدم أي خوارزميات تلخيص النص الأخرى؟ ما هو الأفضل؟

تم نشر المقال في الأصل على http://pavel.surmenok.com/2016/10/15/how-to-run-text-summarization-with-tensorflow/

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