سؤال

أرغب في تنفيذ التحليل الدلالي الكامن (LSA) في PHP من أجل معرفة المواضيع/العلامات للنصوص.

هذا ما أعتقد أنه يجب علي فعله. هل هذا صحيح؟كيف يمكنني ترميزها بلغة PHP؟كيف يمكنني تحديد الكلمات التي يجب اختيارها؟

لا أريد استخدام أي مكتبات خارجية. لقد قمت بالفعل بتطبيق تحليل القيمة المفردة (SVD).

  1. استخراج جميع الكلمات من النص المحدد.
  2. وزن الكلمات/العبارات، على سبيل المثال.مع tf-idf.إذا كان الترجيح معقدًا للغاية، فما عليك سوى أخذ عدد مرات الظهور.
  3. بناء مصفوفة:الأعمدة هي بعض المستندات من قاعدة البيانات (كلما زاد عددها، كان ذلك أفضل؟)، والصفوف كلها كلمات فريدة، والقيم هي عدد التكرارات أو الوزن.
  4. قم بتحليل القيمة المفردة (SVD).
  5. استخدم القيم الموجودة في المصفوفة S (SVD) للقيام بتقليل الأبعاد (كيف؟).

آمل أن تتمكن من مساعدتي.شكرا جزيلا لك مقدما!

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

المحلول

روابط LSA:

هنا هي الخوارزمية الكاملة.إذا كان لديك SVD، فأنت على وشك الوصول إلى هناك.الأوراق أعلاه تشرح ذلك أفضل مما أفعل.

الافتراضات:

  • ستعطي وظيفة SVD الخاصة بك القيم المفردة والمتجهات المفردة بترتيب تنازلي. إذا لم يكن الأمر كذلك، عليك أن تفعل المزيد من الألعاب البهلوانية.

م:مصفوفة النص، ث (كلمات) × د (مستندات) (صفوف ث، أعمدة د).يمكن أن تكون هذه أعدادًا أولية أو tfidf أو أيًا كان.قد يتم أو لا يتم حذف كلمات الإيقاف، وقد يحدث الاستئصال (يقول Landauer احتفظ بكلمات الإيقاف ولا تنبع، ولكن نعم لـ tfidf).

U,Sigma,V = singular_value_decomposition(M)

U:  w x w
Sigma:  min(w,d) length vector, or w * d matrix with diagonal filled in the first min(w,d) spots with the singular values
V:  d x d matrix

Thus U * Sigma * V = M  
#  you might have to do some transposes depending on how your SVD code 
#  returns U and V.  verify this so that you don't go crazy :)

ثم التخفيض....تشير ورقة LSA الفعلية إلى أن التقريب الجيد للأساس هو الاحتفاظ بما يكفي من المتجهات بحيث تكون قيمها المفردة أكثر من 50% من إجمالي القيم المفردة.

وبشكل أكثر إيجازا...(كود مزيف)

Let s1 = sum(Sigma).  
total = 0
for ii in range(len(Sigma)):
    val = Sigma[ii]
    total += val
    if total > .5 * s1:
        return ii

سيؤدي هذا إلى إرجاع رتبة الأساس الجديد، الذي كان min(d,w) من قبل، وسنقوم الآن بالتقريب مع {ii}.

(هنا، '-> أولية، وليست منقولة)

نقوم بإنشاء مصفوفات جديدة:U',Sigma', V'، بأحجام w x ii، ii x ii، وii x d.

هذا هو جوهر خوارزمية LSA.

يمكن استخدام هذه المصفوفة الناتجة U' * Sigma' * V' للبحث عن تشابه جيب التمام "المحسن"، أو يمكنك اختيار أفضل 3 كلمات لكل مستند فيه، على سبيل المثال.ما إذا كان هذا ينتج أكثر من مجرد tf-idf بسيط هو موضوع لبعض الجدل.

بالنسبة لي، أداء LSA ضعيف في مجموعات بيانات العالم الحقيقي بسبب تعدد المعاني، ومجموعات البيانات التي تحتوي على عدد كبير جدًا من المواضيع.أساسها الرياضي/الاحتمالي غير سليم (يفترض التوزيعات العادية (الغاوسية)، والتي لا معنى لها بالنسبة لعدد الكلمات).

سوف تختلف الأميال الخاصة بك بالتأكيد.

وضع العلامات باستخدام LSA (طريقة واحدة!)

  1. قم ببناء مصفوفات U'Sigma' V' المخفضة الأبعاد باستخدام SVD وإرشاد الاختزال

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

  3. بافتراض أن لديك متجهًا (v1) للكلمات في مستند ما، فإن v1 * t(U') سيعطي أقوى "موضوعات" لهذا المستند.حدد الثلاثة الأعلى، ثم قم بإدراج "المواضيع" الخاصة بهم كما تم حسابها في الخطوة السابقة.

نصائح أخرى

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

نظرًا لهذه القيود (600 عنصر / يوم، 100-200 حرف / عنصر) مع مصادر متباينة، إليك بعض خيارات وضع العلامات:

  1. باليد.يمكن للمحلل أن يقوم بسهولة بـ 600 من هذه المهام يوميًا، ربما في بضع ساعات.وقد يكون من الممكن أيضًا تنفيذ شيء مثل برنامج Amazon Mechanical Turk، أو جعل المستخدمين يقومون بذلك.إن الحصول على عدد معين من "العلامات اليدوية"، حتى لو كان 50 أو 100 فقط، سيكون أساسًا جيدًا لمقارنة ما تحصل عليه من الطرق التي تم إنشاؤها تلقائيًا أدناه.

  2. تخفيضات الأبعاد، باستخدام LSA، والنماذج الموضوعية (تخصيص Dirichlet الخفي)، وما شابه....لقد كان حظي سيئًا حقًا مع LSA في مجموعات البيانات الواقعية وأنا غير راضٍ عن أساسها الإحصائي.LDA أجده أفضل بكثير، ولديه قائمة بريدية لا تصدق لديه أفضل تفكير حول كيفية تخصيص المواضيع للنصوص.

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

حظ سعيد!

(إذا أعجبتك هذه الإجابة، يمكنك إعادة تسمية السؤال ليناسبها)

يبدو أن كل شيء على ما يرام، حتى الخطوة الأخيرة.الترميز المعتاد لـ SVD هو أنه يُرجع ثلاث مصفوفات A = USV*.S عبارة عن مصفوفة قطرية (أي كل الصفر خارج القطر) والتي، في هذه الحالة، تعطي بشكل أساسي مقياسًا لمدى التقاط كل بُعد للبيانات الأصلية.ستنخفض الأرقام ("القيم المفردة")، ويمكنك البحث عن قائمة منسدلة لعدد الأبعاد المفيدة.بخلاف ذلك، ستحتاج فقط إلى اختيار رقم عشوائي N لعدد الأبعاد التي يجب اتخاذها.

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

هث

تحديث:

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

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

يوجد موضوع SO إضافي حول مخاطر القيام بكل هذا في PHP على نص الرابط.

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

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