سؤال

سلاسل Markov هي طريقة (قياسية تقريبا) لتوليد جبريش عشوائي التي تبدو ذكية العين غير المدربين. كيف يمكنك الذهاب حول تحديد نص ماركوف الناتج عن نص مكتوب الإنسان.

سيكون الأمر رائعا إذا كانت الموارد التي تشير إليها هي بايثون ودية.

هل كانت مفيدة؟

المحلول

يمكنك استخدام نهج "القوة الغاشمة"، حيث تقارن اللغة التي تم إنشاؤها البيانات التي تم جمعها على نجمات N-Gram من ترتيب أعلى من نموذج Markov الذي ولدت ذلك.

أي إذا تم إنشاء اللغة مع نموذج ماركوف للطلب 2، فإن ما يصل إلى 3 غرامات ستحصل على الترددات الصحيحة، ولكن 4 غرام ربما لن أليس كذلك.

يمكنك الحصول على ترددات 5 غرام من جمهور Google DataSet n-gram. انها ضخمة على الرغم من - 24G مضغوط - تحتاج إلى الحصول عليها عن طريق النشر على أقراص DVD LDC..

تحرير: إضافة بعض تفاصيل التنفيذ

لقد تم بالفعل حساب N-Grams بالفعل، لذلك تحتاج فقط إلى تخزين التهم (أو الترددات) بطريقة سريعة للبحث. قاعدة بيانات مفهرسة بشكل صحيح، أو ربما يجب أن يعمل مؤشر Lucene.

بالنظر إلى نص نص، فقم بمسح عبره وابحث عن تواتر كل 5 غرام في قاعدة البيانات الخاصة بك، ومعرفة أين ترتبص مقارنة ب 5 غرامات أخرى تبدأ بنفس الكلمات 4 كلمات.

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

نصائح أخرى

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

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

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

كمثال، وهنا وقاحة من القناة:

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

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

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

أقترح تعميم إجابة EVAN: قم بعمل نموذج Markov الخاص بك وتدريبه مع قطعة كبيرة من العينة (كبيرة جدا) التي قدمتها، وحجز بقية العينة ك "بيانات اختبار". الآن، انظر مدى جودة النموذج الذي تدربت به في بيانات الاختبار، على سبيل المثال مع اختبار مربع Chi Square الذي يوحي بالوضع الذي "مناسب للغاية" (مما يشير إلى أن بيانات الاختبار قد تم إنشاؤها بالفعل هذا النموذج) تلك التي تناسبها سيئة للغاية (مما يقترح خطأ في بنية النموذج - نموذج تم تدريبه مع الهيكل الخاطئ مهمة سيئة سيئة السمعة في مثل هذه الحالات).

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

نهج مختلف هو استخدام nltk. لتحليل الجمل التي أعطيتها - يتم توقع عدد صغير من مؤسسات MIS-Possue حتى في النص الطبيعي (حيث أن البشر غير كامل وهكذا فإن المحلل المحلل - قد لا يعرف أن Word X يمكن استخدامها كفعل وتصنيفها فقط كاسم، إلخ، إلخ)، ولكن معظم طرازات ماركوف (ما لم تكن نمذجة في الأساس نفس هيكل القواعد الحثية يحدث أن يكون محللك يستخدم - ويمكنك استخدام العديد من المحللين لمحاولة مواجهة ذلك! -) سوف يسبب المزيد من الأخطاء المخاطية بشكل كبير من البشر عسر القراءة. مرة أخرى، معايرة ذلك على النصوص الاصطناعية الطبيعية، وسترى ما أعنيه! -)

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

الجماعة الجماعية. استخدم الترك الميكانيكي والحصول على عدد من البشر للتصويت على هذا. هناك حتى بعض المكتبات لمساعدتك في سحب هذا. علي سبيل المثال:

إليك منشور مدونات من الرادار O'Reilly على نصائح لاستخدام الترك الميكانيكي للحصول على عملك:

إذا كتبت برنامجا ينشئ احتمالات انتقال Markovian من أي سلسلة من الرموز، ثم يحسب معدل الانتروبي لمصفوفة Markov. (يرى http://en.wikipedia.org/wiki/entropy_rate#entropy_rates_for_markov_chains.) هذا هو أساسا تقدير للمدى سهولة التنبؤ بالنص باستخدام سلسلة Markov فقط (تعني Enterpy أعلى أصعب ليتنبأ). لذلك أعتقد أن انخفاض انتروبا من مصفوفة ماركوف هو، والأرجح أن يتم التحكم في عينة النص من قبل مصفوفة ماركوف. إذا كانت لديك أسئلة حول كيفية كتابة هذا الرمز، فسوف أحصل على برنامج في Python الذي يفعل ذلك بالضبط على جهاز الكمبيوتر الخاص بي، حتى أتمكن من مساعدتك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top