اطلاعیه

Collapse
No announcement yet.

پرسپترون با bp برای استخراج کلمات کلیدی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پرسپترون با bp برای استخراج کلمات کلیدی

    بسمه تعالی
    پروژه: بازیابی اطلاعات از متن
    هدف پروژه آموزش برای استخراج کلمات کلیدی صحیح می باشد

    مثال

    کلمات ورودی یا به عبارتی x های ما
    1. Computer 6. Computers 11.compute 16. computing
    2. Engineer 7. Engine 12. Engineers 17. engineering
    3. MATLAB 8.mfile 13.files 18.math
    4. Electronic 9. electrical 14.electric 19.electricaly
    5. IT 10. Information 15. Technology 20.Tech
    یعنی 20 نورون به عنوان نورون ورودی داریم
    کلمات کلیدی ما 5 تا هستند (پنج نورون)
    و خروجی ما تنها یکی از این پنج نورون خواهد بود
    به ازای 20 کلمه ورودی ایندکس گذاری صورت می گیرد
    نورون های لایه پنهان کلمات کلیدی ما هستند
    Computer / engineer/MATLAB/Electronic/IT
    یعنی به ازای هریک از کلمات ریشه کامپیوتر ، کلمه کلیدی کامپیوتر را بر گرداند.

    کد نوشته شده

    clc

    clear all
    inp_query = fopen('keywords.txt','rb', 'n', 'UTF-8'
    query = fgetl(inp_query);
    input_file = fopen('keys.txt','rb', 'n', 'UTF-8'
    q = strread(query, '%s', 'delimiter', '-' % INPUT
    kword = 0;
    kw = [];
    remain=fscanf(input_file,'%c'
    kw = strread(remain, '%s', 'delimiter', '-&#039 ; % KeyWords
    %--------------------------------------------------------------------------
    p = zeros(5,20);
    t = eye(5, 5);
    for i=1:size(q, 1)
    if (i==1 |i==2 | i==3 | i==4)
    kword = 1;
    p(kword,1)=1; p(kword,2)=1; p(kword,3)=1; p(kword,4)=1;
    else
    if(i==5 |i==6 | i==7 | i==8)
    kword = 2;
    p(kword,5)=1; p(kword,6)=1; p(kword,7)=1; p(kword,8)=1;
    else
    if (i==9 |i==10 | i==11 | i==12)
    kword = 3;
    p(kword,9)=1; p(kword,10)=1; p(kword,11)=1; p(kword,12)=1;
    else
    if (i==13 |i==14 | i==15 | i==16)
    kword = 4;
    p(kword,13)=1; p(kword,14)=1; p(kword,15)=1; p(kword,16)=1;
    else
    if (i==17 |i==18 | i==19 | i==20)
    kword = 5;
    p(kword,17)=1; p(kword,18)=1; p(kword,19)=1; p(kword,20)=1;
    end
    end
    end
    end
    end

    % if(kword ~= 0)
    %-----------------------------------------------------------------
    % Back Propagation
    %-----------------------------------------------------------------
    sse_rec = [];
    sse = 10; % Emax
    eta = 1;
    alpha = 0.5; % Initial Learning Factor = c
    p = [p ones(5,1)];
    num_inp = size(p,2);
    num_hid = 5;
    num_out = 5;
    w1 = 0.5*(1-2*rand(num_inp,num_hid-1));
    w2 = 0.5*(1-2*rand(num_hid,num_out));
    dw1_last = zeros(size(w1&#039);
    dw2_last = zeros(size(w2&#039);
    epoch = 0;

    while epoch < 1000
    Y = p * w1;
    y = 1./(1+exp( - Y));
    y = [ y ones(size(y,1),1) ];
    Z = y' * w2;
    z = 1./(1+exp( - Z));
    output_error = 0.5*(t - z)^2;
    sse = trace(output_error'*output_error);
    sse_rec = [sse_rec sse];
    deltas_out = z*(1-z)*(t-z);
    deltas_hid = (t-z)*z*(1-z)*w2 .* y .* (1-y);
    deltas_hid(:,size(deltas_hid,2)) = [];
    dw1 =(eta * deltas_hid * p) + (dw1_last *alpha);
    dw2 = eta * deltas_out * y + alpha * dw2_last;
    w1 = w1 + dw1';
    w2 = w2 + dw2';
    dw1_last = dw1';
    dw2_last = dw2';
    epoch = epoch + 1;
    disp([' Epoch ' num2str(epoch) ' SSE ' num2str(sse)]);
    end
    end

    figure(1);
    plot(sse_rec); xlabel('Epochs' ylabel('Sum squared error (SSE)'

    %--------------------------------------------------------------------------
    % fetch document
    %--------------------------------------------------------------------------
    % p = zeros(1, 20);
    % p(1, kword) = 1;
    % p = [p ones(size(p,1),1) ];
    % winp = w1*p';
    % hact = 1 ./(1+exp(-winp));
    % hidwb = [hact ones(size(hact,1),1)];
    % wout = hidwb * w2;
    % oact = 1 ./(1+exp(-wout));
    % num2str(round(oact * 5));
    % str_addr = ['DS/',num2str(round(oact * 5)),'.txt'];
    % % obj = xml2struct(['DS/',num2str(round(oact * 50)),'.xml']);
    % ans_file = fopen(str_addr, 'r'
    % fid = fopen('output.txt', 'w', 'n', 'UTF-8'
    % while ~feof(ans_file)
    % line=fgetl(ans_file);
    % fprintf(fid, '%s', line);
    % end
    %
    % fclose(fid);
    % else
    % disp('Error : Wrong Query!!!'
    % %--------------TEST
    % P=ones(25,25);
    % P(19,14)=0;
    % P(2,2)=0;


    %+++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++
    %test
    %^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^



    % Y = P * w1;
    % y = 1./(1+exp( - Y));
    % y = [ y ones(size(y,1),1) ];
    % Z = y * w2;
    % z = 1./(1+exp( - Z));
    % if (z>0)
    %
    % fprintf('YOUR INPUT IS "computer"&#039
    % else
    %
    % fprintf('YOUR INPUT IS NO "computer"&#039
    % end
    %
    %

    #2
    پاسخ : پرسپترون با bp برای استخراج کلمات کلیدی

    سلام.

    من پیشنهادم سیستم به صورت زیر هست:
    ورودی حداکثر طول یک کلمه مثلا بزرگترین کلمه انگلیسی چند تا حرف میتونه داشته باشه؟ فرض کنید مثلا 20 تا.
    خب زبان انگلیسی چند تا حرف داره؟
    انگلیسی 26 تا حرف داره.
    شما به جای اینکه به کلمات کد اختصاص بدید به حروف کد اختصاص بدید و یک کلمه رو با کدهای حروفش به شبکه اعمال کنید
    مثلا
    Tech
    میشه یه رشته به صورت زیر
    21 6 4 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    این رو میدید به شبکه و شبکه به ازای این ورودی باید مشخص کنه که این کلمه از مشتقات کدوم هست.
    خروجی هم مثل حالت قبل میشه یعنی 5 تا نورون خروجی.
    اگه البته یه چند تا نکته ریز دیگه هم داره که به وقتش بهتون میگم.
    فعلا به نظرم کاری که شما میکنید اینطوری باشه:
    برنامه ای بنویسید که از متونی که دارید بین دو تا اسپیس رو استخراج کنه یعنی کلمه رو بعد حروف اون رو استخراج کنه.
    بعد 26 تا حرف داریم، یکی رو هم در نظر بگیرید بدون حرف منظورم این هست که طول خیلی از کلمات از 20 حرف کمتره اونجاهایی که حرف نیست رو با یه عدد مشخص به شبکه بفهمونید برای همین میگم بجای 26 حرف فرض کنید 27 حرف داریم.
    صفر رو برای بدون حرف در نظر بگیرید و 1 تا 27 رو هم برای بقیه حروف.
    این پایگاه داده رو آماده کنید یعنی کدش رو بنویسید تا بریم سراغ بقیه ماجرا
    شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
    هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
    چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

    دیدگاه

    لطفا صبر کنید...
    X