سلام ، من نتوانستم راه حلی برای مشکل خود پیدا کنم: فرض کنید DFM ایجاد کرده ام. چگونه می توانم از هر سند به عنوان دنباله ای از شاخص های کلمه بازنمایی کنم؟فرض کنید ما:
> متن = "من عاشق بسته quanteda هستم" > متن 2 = "من عاشق زبان R هستم" > mydfm =DFM (ج (متن, متن 2)) > mydfm مدرک-ویژگی ماتریس of: 2 اسناد, 7امکانات (28. 6% پراکنده). 2 x 7 پراکنده ماتریس of طبقه "DFM" امکانات اسناد i عشق در کمیته بسته بندی کردن r زبان text1 1 1 1 1 1 0 0 متن 2 1 1 1 0 0 1 1
آنچه می خواهم Text1 باشد این است: 1 2 3 4 5 و Text2 1 2 3 6 7 چگونه می توان برای یک DFM بزرگ به این هدف رسید؟
پ. من اساساً همان نتیجه ای را می خواهم که Keras :: texts_to_toctions ارائه می دهد:
> keras_tokenizer =text_tokenizer () ٪>٪ fit_text_tokenizer (x =ج (متن, متن 2)) > keras_tokenizer %>٪ texts_to_tequence (c (متن, متن 2)) [[1, 2, 3, 4, 5], [1, 2, 3, 6, 7]]
این امر باعث می شود جایگزین کامل Quanteda با متن (حداقل) پیش پردازش که Keras دارد. با تشکر!
متن با موفقیت به روز شد ، اما این خطاها با آن روبرو شدند:
همکار Kbenoit در 13 دسامبر 2017 اظهار نظر کرد • ویرایش شده
koheiw نشان داده است که چگونه این کار می کند ، اما از آنجا که ما واقعاً با فرمت Keras آشنا نیستیم ، اگر می توانید یک مثال خاص تر را تهیه کنید ، احتمالاً می توانیم یک عملکرد مبدل را اضافه کنیم. این چیزی شبیه به این خواهد بود:
متن ج ("من عاشق بسته quanteda هستم", "من عاشق زبان R هستم") توک نشانه ها (متن) as. keras تابع(x) "as. keras")> as. keras. tokens تابع(x) <مقاوم در اوردن غیر کلاس (x) ویژگی های(مقاوم در اوردن) خالینام ها (مقاوم در اوردن) نام ها (x) مقاوم در اوردن>as. integer (توک) #Text1 $ #[1] 1 2 3 4 5 # #Text2 $ #[1] 1 2 3 6 7اما اگر می خواهید تعداد DFM یا DFM وزنی را انجام دهید ، انجام این کار از DFM نیز بسیار آسان خواهد بود. برای این کار ، ما می توانیم یک قالب خروجی جدید برای تبدیل () اضافه کنیم. من فرض می کنم شما همچنین می خواهید برچسب های توکن در جایی در شیء Keras ذخیره شوند؟
لطفاً یک مورد استفاده خاص تر را تهیه کنید.
نویسنده Farzant در 13 دسامبر 2017 اظهار نظر کرد • ویرایش شده
متشکرم! در اینجا یک مورد از مثال استفاده شده است:
> text1 = "من عاشق بسته quanteda هستم" > متن 2 = "من عاشق زبان R هستم" > mydfm =DFM (ج (متن, متن 2)) > mydfm مدرک-ویژگی ماتریس of: 3 اسناد, 7امکانات (28. 6% پراکنده). 3 x 7 پراکنده ماتریس of طبقه "DFM" امکانات اسناد i عشق در کمیته بسته بندی کردن r زبان text1 1 1 1 1 1 0 0 متن 2 1 1 1 0 0 1 1 text3 1 1 1 0 0 1 1
> میتوکسن =توکن ها (ج (text1, متن 2)) > طبقه بدون طبقه =غیر کلاس (میتوکسن) > طبقه بدون طبقه$text1 [1] 1 2 3 4 5 > طبقه بدون طبقه$متن 2 [1] 1 2 3 6 7
> mykerastokenizer = کروس::text_tokenizer () ٪>% کروس::fit_text_tokenizer (x =ج (text1, متن 2)) > کروس::texts_to_tequeences (نشان دهنده = mykerastokenizer, متن =ج (text1, متن 2)) [[1, 2, 3, 4, 5], [1, 2, 3, 6, 7]]
اکنون روی داده های جدید اعمال کنید (به عنوان مثال پس از دیدن داده های آموزش ، می خواهید در داده های آزمون استفاده کنید) توجه داشته باشید که Keras در اینجا (حتی در مثال اول) از یک پس زمینه پایتون استفاده می کند ، بنابراین باید به Object R تبدیل شوید (لیست)
> متن_ جدید = "من عاشق کوکو هستم" > python_list = کروس::texts_to_tequeences (نشان دهنده = mykerastokenizer, متن = لیست(متن_ جدید)) > R_LIST = مجدداً::py_to_r (python_list) > R_LIST [[1]] [1] 1 2 3
در اینجا ، Tokenizer Keras فقط شاخص کلماتی را که قبلاً دیده است برمی گرداند: من ، عشق ،. همچنین ، Tokenizer شاخص ها را بر اساس فرکانس آنها مرتب می کند ، اما در این مثال کوچک نباید مهم باشد. چگونه می توان از unclass () و نشانه ها () برای دریافت شاخص های واژگان/فرهنگ لغت در داده های غیب استفاده کرد؟(با عملکرد توکن ها مشاهده نشده است) امیدوارم بدون نیاز به نشانه آموزش و آزمایش داده ها در کنار هم. ویرایش: شاید برچسب های توکن مانند یک فرهنگ لغت/لیست نامگذاری شده ذخیره شوند که در صورت لزوم (در صورت نیاز) شاخص های کلمه را می توان به کلمات واقعی تبدیل کرد. این اساساً اجازه می دهد تا دومین وکتور کلمه: شاخص های کلمات در یک واژگان آموخته شده (Keras :: FIT_TEXT_TOKENIZER قسمت یادگیری/حفظ کننده را در بالا انجام می دهد). چگونه می توان با استفاده از DFMS به این هدف دست یافت؟دوباره متشکرم!
همکار Koheiw در 14 دسامبر 2017 نظر داد
من هنوز مطمئن نیستم که مورد استفاده چیست ، اما شما می توانید از C () برای نمایه کردن یک شیء جدید توکن به همان روش قدیمی استفاده کنید. هنگامی که Toks بدون طبقه بندی قرار گرفت ، وقتی زیر مجموعه توسط [] [] مجدداً نشانگر نشد.
text1 ج (قدیمی = "من عاشق بسته quanteda هستم") متن 2 ج (جدید = "من عاشق زبان R هستم") toks1 نشانه ها (text1) toks2 نشانه ها (متن 2) توک ج (toks1, toks2) Docnames (توک) toks_seri غیر کلاس (توک) toks_seri[1] #$ قدیمی #[1] 1 2 3 4 5 toks_seri[2] #$ جدید #[1] 1 2 3 6 7
شما می توانید همین کار را با dfm با rbind () انجام دهید:
MT1 DFM (text1) MT2 DFM (متن 2) mt rbind (MT1, MT2)
نویسنده Farzant در 14 دسامبر 2017 اظهار نظر کرد
مثال اول دقیقاً همان چیزی است که من نیاز دارم! متأسفانه ، من هنوز نمی فهمم که چگونه می توان DFM را به لیستی از شاخص های کلمه تبدیل کرد. اگر تابعی برای تبدیل DFM وجود داشته باشد ، امکان استفاده یکپارچه از شبکه های عصبی tensorflow/keras در متن پیش پردازش شده از Quanteda را فراهم می کند ، به خصوص که قابلیت های پردازش متن از کراس ها کاملاً محدود است. با تشکر از وقت شما ، بالاخره توانستم مدل های NLP را با پیش پردازش متن مناسب اجرا کنم!
Farzant این کار را به عنوان تکمیل شده در 14 دسامبر 2017 بسته کرد همکار Koheiw در 14 دسامبر 2017 نظر داد
تبدیل DFM به لیست آسان است:
دما مانند(mt, 'dgtmatrix') #MT یک DFM استشکاف(دما@j + 1, دما@i + 1)
ما باید این را برای تبدیل () اضافه کنیم.
نویسنده Farzant در 14 دسامبر 2017 اظهار نظر کرد
با تشکر! من حدس می زنم که اگر DFM دارای رتبه بندی باشد ، یعنی شایع ترین کلمه (در جسد) دارای شاخص 1 و غیره نیز عالی خواهد بود.
Kbenoit این شماره را در تاریخ 14 دسامبر 2017 ذکر کرد همکار Kbenoit در 14 دسامبر 2017 اظهار نظر کرد
dfm_sort () این کار را انجام می دهد.
نویسنده Farzant در مورد 14 دسامبر 2017 اظهار نظر کرد • ویرایش شده
این کمک می کند ، اما از آنجا که ما می خواهیم از همان شاخص ها در داده های جدید (آزمایش) استفاده کنیم ، می خواهیم اطمینان حاصل کنیم که شاخص ها در Test_DFM در واقع به کلمات _as که در آموزش DFM فهرست بندی شده اند ، اشاره می کنند. اکنون می توانم dfm_sort (x = train_dfm) را اجرا کنم ، اما چگونه می توان همان شاخص های مشابه را در واژگان آموزش دریافت کرد؟فرض کنید خط لوله زیر: ویرایش: یک مثال بهتر اضافه شده است (همچنین نشان داده اید که نظم حفظ نشده است)
> text1 ج (Old1 = "من عاشق بسته quanteda هستم") > متن 2 ج (قدیمی 2 = "من عاشق زبان r هستم ، زبان r عالی است") > text3 ج (old3 = "R بسیار عالی است") > متن =ج (text1, متن 2, text3) > قطار +DFM (+ x = متن, + برای کاهش = T, + remove_numbers = F, + حذف_ = T, + remove_hyphens = F, + remove_url = T, + remove_twitter = T, + remove_symbols = T + ) > قطار مدرک-ویژگی ماتریس of: 3 اسناد, 10امکانات (46. 7% پراکنده). 3 x 10 پراکنده ماتریس of طبقه "DFM" امکانات اسناد i عشق در کمیته بسته بندی کردن r زبان is عالی so Old1 1 1 1 1 1 0 0 0 0 0 قدیمی 2 1 1 2 0 0 2 2 1 1 0 old3 0 0 0 0 0 1 0 1 1 1 > #این کلمه را بر اساس فرکانس آنها در کل قسمت آموزشی مرتب کنید > قطار dfm_sort (x = قطار) > قطار مدرک-ویژگی ماتریس of: 3 اسناد, 10امکانات (46. 7% پراکنده). 3 x 10 پراکنده ماتریس of طبقه "DFM" امکانات اسناد در r i عشق زبان is عالی کمیته بسته بندی کردن so Old1 1 0 1 1 0 0 0 1 1 0 قدیمی 2 2 2 1 1 2 1 1 0 0 0 old3 0 1 0 0 0 1 1 0 0 1 > #تبدیل به لیست فهرست Word (که باید بر اساس فرکانس/رتبه باشد) > دما مانند(قطار, 'dgtmatrix') > word_index_list شکاف(دما@j + 1, دما@i + 1) > word_index_list $`1 [1] 1 3 4 8 9 $`2" [1] 1 2 3 4 5 6 7 $`3` [1] 2 6 7 10
خط آخر نشان می دهد که سفارش کلمه حفظ نشده است ، و بردار برگشتی فقط دارای شاخص های کلمه مرتب شده است (و نه جایگزینی از کلمات با شاخص آنها)
> #ایجاد یک فرهنگ لغت کلمه آموزشی (برای انتخاب در داده های آزمون) > Dictdfm DFM (Paste0 (featnames (قطار), سقوط - فروپاشی = " ")) > testdfm DFM (+ x = text3, + برای کاهش = T, + remove_numbers = F, + حذف_ = T, + remove_hyphens = F, + remove_url = T, + remove_twitter = T, + remove_symbols = T + ) > #فقط کلماتی را که در داده های آموزش دیده شده است نگه دارید > testdfm DFM_SELECT (x = testdfm, الگو = Dictdfm) > testdfm مدرک-ویژگی ماتریس of: 1 مدرک, 10امکانات (60% پراکنده). 1 x 10 پراکنده ماتریس of طبقه "DFM" امکانات اسناد در r i عشق زبان is عالی کمیته بسته بندی کردن so old3 0 1 0 0 0 1 1 0 0 1
حال اگر DFM_SORT (x = testdfm) را اجرا کنم ، همه چیز نسبت به testdfm نمایه می شود ، و نه traindfm.(جمع آوری نشانه ها در بالا پیشنهاد شد ، اما فکر نمی کنم برای DFM کاربرد داشته باشد).
اگر یک عملکرد تبدیل (x ، to = "keras") وجود داشته باشد ، شگفت آور خواهد بود. این حتی بهتر خواهد بود اگر کسی بتواند آموزش DFM را تأمین کند و آزمایش DFM را که بر اساس آموزش DFM پردازش می شود ، دریافت کند ، به عنوان مثال. dfm_select () + index_using_dfm ()
ازت خیلی ممنونم بابت زمانی که واسم گذاشتی!
سیگنال های تجاری...
ما را در سایت سیگنال های تجاری دنبال می کنید
برچسب :
نویسنده : عبدالله بوتیمار
بازدید : <-PostHit->
تاريخ : دوشنبه
9 مرداد
1402 ساعت: 11:26