واجهة node.js إلى أداة Google Word2Vec
هذه واجهة Node.js لأداة Word2Vec التي تم تطويرها في Google Research من أجل "التنفيذ الفعال لمستمر أكياس الكلمات وأبنية تخطي GRAM لحساب تمثيلات المتجهات للكلمات" ، والتي يمكن استخدامها في مجموعة متنوعة من مهام NLP. لمزيد من المعلومات حول مشروع Word2VEC ، استشر https://code.google.com/p/word2vec/.
حاليًا ، يتم دعم node-word2vec فقط لأنظمة التشغيل UNIX.
تثبيته عبر NPM:
npm install word2vecلاستخدامه داخل node.js ، اطلب الوحدة النمطية على النحو التالي:
var w2v = require ( 'word2vec' ) ;بالنسبة للتطبيقات التي من المهم أن يتم التعامل مع بعض الأزواج من الكلمات على أنها مصطلح واحد (على سبيل المثال ، ينبغي معالجة "Barack Obama" أو "New York" ككلمة واحدة) ، يجب معالجة شركة النص المستخدمة للتدريب عبر وظيفة Word2Phrases . سيتم تسلسل الكلمات التي تحدث بشكل متكرر بجوار بعضها البعض عن طريق السطح السطحي ، على سبيل المثال ، الكلمات "الجديدة" و "يورك" إذا كان متابعة بعضها البعض قد تحول إلى كلمة واحدة "new_york".
داخليًا ، تستدعي هذه الوظيفة تطبيق سطر الأوامر C لمشروع Google Word2VEC . هذا يسمح لها بالاستفادة من الخيوط المتعددة ويحافظ على كفاءة رمز C الأصلي. يقوم بمعالجة النصوص التي قدمها مستند نص input ، وكتابة الإخراج إلى ملف بالاسم المعطى بواسطة output .
تتوقع معلمة params كائن JS اختياريًا يحتوي على بعض المفاتيح التالية والقيم المرتبطة بها. إذا لم يتم توفيرها ، يتم استخدام القيم الافتراضية.
| مفتاح | وصف | القيمة الافتراضية |
|---|---|---|
| Mincount | تجاهل الكلمات التي تظهر أقل من أوقات العصر | 5 |
| عتبة | يحدد عدد العبارات ، القيمة الأعلى تعني عبارات أقل | 100 |
| تصحيح | تعيين وضع التصحيح | 2 |
| صامت | يحدد ما إذا كان ينبغي طباعة أي إخراج إلى وحدة التحكم | خطأ شنيع |
بعد التنفيذ الناجح ، يتم استدعاء وظيفة callback المقدم. يتلقى رقم رمز الخروج كمعلمة له الأولى.
تستدعي هذه الوظيفة تطبيق سطر أوامر Word2VEC من Google وتجد تمثيلات المتجهات للكلمات في مجموعة تدريب input ، وكتابة النتائج إلى ملف output . يمكن بعد ذلك تحميل الإخراج في عقدة عبر وظيفة loadModel ، والتي تعرض عدة طرق للتفاعل مع تمثيل المتجه المستفاد للكلمات.
تتوقع معلمة params كائن JS اختياريًا يحتوي على بعض المفاتيح التالية والقيم المرتبطة بها. بالنسبة لأولئك المفقودين ، يتم استخدام القيم الافتراضية:
| مفتاح | وصف | القيمة الافتراضية |
|---|---|---|
| مقاس | يحدد حجم ناقلات الكلمات | 100 |
| نافذة | يضع أقصى طول تخطي بين الكلمات | 5 |
| عينة | يضع عتبة لحدوث الكلمات. أولئك الذين يظهرون مع تواتر أعلى في بيانات التدريب سوف يتم أخذ عينات منه بشكل عشوائي ؛ النطاق المفيد هو (0 ، 1E-5) | 1E-3 |
| HS | 1 = استخدم softmax الهرمي | 0 |
| سلبي | عدد الأمثلة السلبية ؛ القيم الشائعة هي 3 - 10 (0 = غير مستخدم) | 5 |
| المواضيع | عدد المواضيع المستخدمة | 12 |
| iter | عدد تكرارات التدريب | 5 |
| Mincount | هذا سوف يتجاهل الكلمات التي تظهر أقل من أوقات العصر | 5 |
| ألفا | يحدد معدل التعلم البدء | 0.025 لـ Skip-Gram و 0.05 لـ CBOW |
| فصول | إخراج فئات الكلمات بدلاً من ناقلات الكلمات | 0 (مكتوبة المتجهات) |
| تصحيح | تعيين وضع التصحيح | 2 |
| ثنائي | احفظ المتجهات الناتجة في الوضع الثنائي | 0 (قبالة) |
| SaveVocab | سيتم حفظ المفردات لقيمة SaveVocab | |
| readvocab | ستتم قراءة المفردات من قيمة ReadVocab ، ولم يتم بناؤها من بيانات التدريب | |
| CBOW | استخدم نموذج نموذج الكلمات المستمر | 1 (استخدم 0 لنموذج Skip-Gram) |
| صامت | يحدد ما إذا كان ينبغي طباعة أي إخراج إلى وحدة التحكم | خطأ شنيع |
بعد التنفيذ الناجح ، يتم استدعاء وظيفة callback المقدم. يتلقى رقم رمز الخروج كمعلمة له الأولى.
هذه هي الوظيفة الرئيسية للحزمة ، والتي تقوم بتحميل ملف نموذج محفوظ يحتوي على تمثيلات متجه للكلمات في الذاكرة. يمكن إنشاء مثل هذا الملف باستخدام وظيفة Word2Vec . بعد تحميل الملف بنجاح ، يتم إطلاق وظيفة رد الاتصال المقدم ، والتي تحتوي على الاتفاقيات التالية معلمتين: err model . إذا تم تشغيل كل شيء بسلاسة ولم يحدث أي خطأ ، فيجب أن تكون الوسيطة الأولى null . المعلمة model هي كائن نموذج يحمل جميع البيانات وفضح الخصائص والأساليب الموضحة في قسم كائن النموذج .
مثال:
w2v . loadModel ( './vectors.txt' , function ( error , model ) {
console . log ( model ) ;
} ) ;إخراج العينة:
{
getVectors : [ Function ] ,
distance : [ Function : distance ] ,
analogy : [ Function : analogy ] ,
words : '98331' ,
size : '200'
} عدد الكلمات الفريدة في مجموعة التدريب.
طول ناقلات الكلمة المستفادة.
يحسب كلمة التشابه بين word1 و word2 .
مثال:
model . similarity ( 'ham' , 'cheese' ) ;إخراج العينة:
0.4907762118841032 يحسب مسافة جيب التمام بين العبارة الموردة ( string يتم تحويلها داخليًا إلى مجموعة من الكلمات ، والتي تؤدي إلى متجه عبارة ) وناقلات الكلمات الأخرى للمفردات. تم إرجاعها هي كلمات number مع أعلى تشابه مع العبارة المقدمة. إذا لم يتم توفير number ، فسيتم إرجاع أعلى 40 كلمة تسجيل. إذا لم تظهر أي من الكلمات في العبارة في القاموس ، فإن الوظيفة تُرجع null . في جميع الحالات الأخرى ، سيتم إسقاط كلمات غير معروفة في حساب مسافة جيب التمام.
مثال:
model . mostSimilar ( 'switzerland' , 20 ) ;إخراج العينة:
[
{ word : 'chur' , dist : 0.6070252929307018 } ,
{ word : 'ticino' , dist : 0.6049085549621765 } ,
{ word : 'bern' , dist : 0.6001648890419077 } ,
{ word : 'cantons' , dist : 0.5822226582323267 } ,
{ word : 'z_rich' , dist : 0.5671853621346818 } ,
{ word : 'iceland_norway' , dist : 0.5651901750812693 } ,
{ word : 'aargau' , dist : 0.5590524831511438 } ,
{ word : 'aarau' , dist : 0.555220055372284 } ,
{ word : 'zurich' , dist : 0.5401119092258485 } ,
{ word : 'berne' , dist : 0.5391358099043649 } ,
{ word : 'zug' , dist : 0.5375590160292268 } ,
{ word : 'swiss_confederation' , dist : 0.5365824598661265 } ,
{ word : 'germany' , dist : 0.5337325187293028 } ,
{ word : 'italy' , dist : 0.5309218588704736 } ,
{ word : 'alsace_lorraine' , dist : 0.5270204106304165 } ,
{ word : 'belgium_denmark' , dist : 0.5247942780963807 } ,
{ word : 'sweden_finland' , dist : 0.5241634037188426 } ,
{ word : 'canton' , dist : 0.5212495170066538 } ,
{ word : 'anterselva' , dist : 0.5186651140386938 } ,
{ word : 'belgium' , dist : 0.5150383129735169 }
] بالنسبة لزوج من الكلمات في علاقة مثل man king ، تحاول هذه الوظيفة العثور على المصطلح الذي يقف في علاقة مماثلة word الموردة. إذا لم يتم توفير number ، فسيتم إرجاع أفضل 40 نتائج تسجيل.
مثال:
model . analogy ( 'woman' , [ 'man' , 'king' ] , 10 ) ;إخراج العينة:
[
{ word : 'queen' , dist : 0.5607083309028658 } ,
{ word : 'queen_consort' , dist : 0.510974781496456 } ,
{ word : 'crowned_king' , dist : 0.5060923120115347 } ,
{ word : 'isabella' , dist : 0.49319425034513376 } ,
{ word : 'matilda' , dist : 0.4931204901924969 } ,
{ word : 'dagmar' , dist : 0.4910608716969606 } ,
{ word : 'sibylla' , dist : 0.4832698899279795 } ,
{ word : 'died_childless' , dist : 0.47957251302898396 } ,
{ word : 'charles_viii' , dist : 0.4775804990655765 } ,
{ word : 'melisende' , dist : 0.47663194967001704 }
] إرجاع تمثيل المتجه المستفاد word الإدخال. إذا كانت word غير موجودة في المفردات ، فإن الوظيفة تُرجع null .
مثال:
model . getVector ( 'king' ) ;إخراج العينة:
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} إرجاع تمثيل المتجهات المستفادة للكلمات المقدمة. إذا كانت الكلمات غير محددة ، أي يتم استحضار الوظيفة دون تمرير أي وسيطات ، فإنها تُرجع المتجهات لجميع الكلمات المستفادة. القيمة التي تم إرجاعها هي array من الكائنات التي هي مثيلات من فئة WordVec .
مثال:
model . getVectors ( [ 'king' , 'queen' , 'boy' , 'girl' ] ) ;إخراج العينة:
[
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} ,
{
word : 'queen' ,
values : [
0.014399041122817985 ,
- 0.000026896638109750347 ,
0.20398248693190596 ,
...
- 0.05329081648586445 ,
- 0.012556868376422963
]
} ,
{
word : 'girl' ,
values : [
- 0.1247347144692245 ,
0.03834108759049417 ,
- 0.022911846734360187 ,
...
- 0.0798994867922872 ,
- 0.11387393949666696
]
} ,
{
word : 'boy' ,
values : [
- 0.05436531234037158 ,
0.008874993957578164 ,
- 0.06711992414442335 ,
...
0.05673998568026764 ,
- 0.04885347925837509
]
}
] إرجاع الكلمة التي لديها أقرب تمثيل متجه إلى المدخلات vec . تتوقع الوظيفة ناقل كلمة ، إما مثيل لـ WordVector المُنشئ أو مجموعة من قيم عدد size الطول. إنه يعيد الكلمة في المفردات التي تكون المسافة بين متجهها ومتجه الإدخال الموردين أدنى.
مثال:
model . getNearestWord ( model . getVector ( 'empire' ) ) ;إخراج العينة:
{ word : 'empire' , dist : 1.0000000000000002 } إرجاع الكلمات التي تكون تمثيلات ناقلاتها الأقرب إلى إدخال vec . تتوقع المعلمة الأولى للدالة ناقل كلمة ، إما مثيل لـ WordVector المُنشئ أو مجموعة من قيم عدد size الطول. المعلمة الثانية ، number ، اختياري وتحدد عدد الكلمات التي تم إرجاعها. إذا لم يتم توفيرها ، يتم استخدام القيمة الافتراضية 10 .
مثال:
model . getNearestWords ( model . getVector ( 'man' ) , 3 )إخراج العينة:
[
{ word : 'man' , dist : 1.0000000000000002 } ,
{ word : 'woman' , dist : 0.5731114915085445 } ,
{ word : 'boy' , dist : 0.49110060323870924 }
] الكلمة في المفردات.
تمثيل المتجه المستفاد للكلمة ، مجموعة من size الطول.
يضيف ناقل الإدخال wordVector إلى المتجه .values .
يطرح متجه wordVector الإدخال إلى المتجه .values .
قم بتشغيل الاختبارات عبر npm test Command
استنساخ مستودع GIT مع الأمر
$ git clone https://github.com/Planeshifter/node-word2vec.gitتغيير إلى دليل المشروع وتجميع ملفات مصدر C عبر
$ cd node-word2vec
$ make --directory=srcApache V2.