নিউরাল নেটওয়ার্কে এমবেডিং স্তর কী?


91

অনেক নিউরাল নেটওয়ার্ক লাইব্রেরিতে কেরাস বা লাসাগেনের মতো 'এম্বেডিং স্তর' রয়েছে

ডকুমেন্টেশন পড়েও আমি এর ফাংশনটি বুঝতে পেরেছি তা নিশ্চিত নই। উদাহরণস্বরূপ, কেরাস ডকুমেন্টেশনে এটি বলে:

ধনাত্মক পূর্ণসংখ্যার (সূচকগুলি) স্থির আকারের ঘন ভেক্টরগুলিতে পরিণত করুন, যেমন। [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]

কোনও জ্ঞানী ব্যক্তি কী এটি ব্যাখ্যা করতে পারে এবং আপনি কখন এটি ব্যবহার করবেন?


সম্পাদনা: ডকুমেন্টেশনে আটকানোর বিষয়ে, ডকুমেন্টেশন থেকে পেস্ট করার মতো অনেক কিছুই নেই, তাই আমার প্রশ্ন। আমি এটি রূপান্তর বুঝতে পারি না, কেন এটি ব্যবহার করা উচিত।

যাইহোক, কেরাসে এটি এভাবে ব্যাখ্যা করা হয়েছে:

এম্বেডিং

keras.layers.e એમ્બેડdings. এমবেডিং (ইনপুট_ডিম, আউটপুট_ডিম, init = 'ইউনিফর্ম', ইনপুট_লেন্থ = কিছুই নয়, ওজন = কিছুই নয়, W_regularizer = কিছুই নয়, W_constraint = কোনও নয়, মাস্ক_জারো = মিথ্যা) ধনাত্মক পূর্ণসংখ্যা (সূচী) নির্দিষ্ট আকারের ডেস্ক ভেক্টরে রূপান্তর করুন , যেমন। [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]

ইনপুট শেপ: শেপ সহ 2 ডি টেনসর: (এনবি_সাম্পল, সিকোয়েন্স_ লেন্থ)। আউটপুট শেপ: শেপযুক্ত থ্রিডি টেনসর: (এনবি_সাম্পল, সিকোয়েন্স_ লেন্থ, আউটপুট_ডিম)। যুক্তি:

ইনপুট_ডিম: ইন>> ০. শব্দভান্ডারটির আকার, যেমন। ইনপুট ডেটাতে 1 + সর্বাধিক পূর্ণসংখ্যার সূচক। আউটপুট_ডিম: ইন্ট> = 0. ঘন এমবেডিংয়ের মাত্রা

এবং এখানে এটি কীভাবে লাসাগনে ব্যাখ্যা করা হয়েছে:

শব্দ এম্বেডিংয়ের জন্য একটি স্তর। ইনপুটটি একটি পূর্ণসংখ্যার ধরণের টেনসর ভেরিয়েবল হওয়া উচিত।

পরামিতি: আগত: একটি স্তর উদাহরণ বা একটি tuple

এই স্তরটিতে স্তরটি খাওয়ানো হচ্ছে, বা প্রত্যাশিত ইনপুট আকার।

ইনপুট_সাইজ: ইনট

বিভিন্ন এম্বেডিংয়ের সংখ্যা। শেষ এম্বেডিংয়ে সূচি ইনপুট_সাইজ থাকবে - 1।

আউটপুট_সাইজ: ইনট

প্রতিটি এম্বেডিংয়ের আকার।

ডাব্লু: থায়ানো ভেরিয়েবল, এক্সপ্রেশন, নম্পি অ্যারে বা কলযোগ্য শেয়ার করেছেন

এম্বেডিং ম্যাট্রিক্সের জন্য প্রাথমিক মান, অভিব্যক্তি বা আরম্ভকারী এটি আকার (ইনপুট_সাইজ, আউটপুট_সাইজ) সহ একটি ম্যাট্রিক্স হওয়া উচিত। আরও তথ্যের জন্য দেখুন Lasagne.utils.create_param ()।

উদাহরণ

>>> from lasagne.layers import EmbeddingLayer, InputLayer, get_output
>>> import theano
>>> x = T.imatrix()
>>> l_in = InputLayer((3, ))
>>> W = np.arange(3*5).reshape((3, 5)).astype('float32')
>>> l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W)
>>> output = get_output(l1, x)
>>> f = theano.function([x], output)
>>> x_test = np.array([[0, 2], [1, 2]]).astype('int32')
>>> f(x_test) array([[[  0.,   1.,   2.,   3.,   4.],
                      [ 10.,  11.,  12.,  13.,  14.]],
                     [[  5.,   6.,   7.,   8.,   9.],
                      [ 10.,  11.,  12.,  13.,  14.]]], dtype=float32)

1
আপনার প্রশ্নের বোঝার জন্য এবং উত্তর দেওয়ার জন্য প্রয়োজনীয় যে প্রসঙ্গে পেস্ট করুন। লোকেরা অন্য কোথাও যেতে চায় না এবং আপনার প্রশ্নের উত্তর দেওয়ার জন্য ডকুমেন্টেশন পড়তে চায় না।
গাং

1
আপনি যে পরিবর্তনগুলি করেছিলেন তা আমি করেছি
ফ্রান্সেস্কো

আমি একই সন্দেহের সাথে ছিলাম এবং এটি সম্পর্কে কথা বলার কয়েকটি নথি পেয়েছি। এখানে কিছু আকর্ষণীয় বিষয় রয়েছে: cs.cmu.edu/afs/cs/academic/class/15782-f06/slides/… fromthebottomoftheheap.net/2011/01/21/… দৃশ্যত এটি ইনপুটড সময় সিরিজের বিলম্ব প্রযোজ্য এবং বিবেচনা করুন নতুন ভেক্টর হিসাবে বিলম্ব।
আবুত্রেমুটান্তে

এই ভিডিওটি দেখুন: youtube.com/watch?v=bvZnphPgz74 । প্রায় 30 মিনিটের মধ্যে তিনি এম্বেডিং সম্পর্কে কথা বলেন।
পিটার

উত্তর:


69

ওয়ার্ড 2Vec সম্পর্কিত

==========================================

একটি সরল ছবিতে ওয়ার্ড 2 ভেক:

word2vec ছবি

আরও গভীরতার ব্যাখ্যা:

আমি বিশ্বাস করি এটি প্রাকৃতিক ভাষা প্রক্রিয়াকরণে সাম্প্রতিক ওয়ার্ড 2 ভেক উদ্ভাবনের সাথে সম্পর্কিত। মোটামুটিভাবে, ওয়ার্ড 2Vec এর অর্থ হল আমাদের শব্দভাণ্ডারগুলি স্বতন্ত্র এবং আমরা একটি মানচিত্র শিখব যা প্রতিটি শব্দকে একটি অবিচ্ছিন্ন ভেক্টর স্পেসে এম্বেড করবে। এই ভেক্টর স্পেস প্রতিনিধিত্ব ব্যবহার করে আমাদের শব্দভান্ডার শব্দের একটি অবিচ্ছিন্ন, বিতরণ প্রতিনিধিত্ব করতে অনুমতি দেবে। উদাহরণস্বরূপ, যদি আমাদের ডেটাসেটে এন-গ্রাম থাকে, তবে আমরা এখন আমাদের এন-গ্রামগুলির বিতরণ উপস্থাপনা তৈরি করতে আমাদের অবিচ্ছিন্ন শব্দ বৈশিষ্ট্যগুলি ব্যবহার করতে পারি। একটি ভাষা মডেল প্রশিক্ষণের প্রক্রিয়াতে আমরা এই শব্দটি এম্বেডিং মানচিত্র শিখব। আশা করি একটি ধারাবাহিক উপস্থাপনা ব্যবহার করে, আমাদের এম্বেডিং একই জাতীয় শব্দগুলিকে একই অঞ্চলে ম্যাপ করবে। উদাহরণস্বরূপ ল্যান্ডমার্ক পেপারে শব্দ এবং বাক্যাংশের বিতরণ উপস্থাপনা এবং তাদের গঠনতন্ত্র, সারণি 6 এবং 7 এ পর্যালোচনা করুন যে নির্দিষ্ট বাক্যাংশের দর্শনার্থ দৃষ্টিকোণ থেকে খুব নিকটবর্তী প্রতিবেশী বাক্যাংশ রয়েছে। এই অবিচ্ছিন্ন স্থানে রূপান্তর আমাদের এম্বেডিংয়ের শব্দার্থক মানের মূল্যায়নের জন্য আমাদের সাথে সামঞ্জস্যের ধারাবাহিক মেট্রিক ধারণা ব্যবহার করতে দেয়।

লাসাগন কোড ব্যবহার করে ব্যাখ্যা

লাসাগন কোড স্নিপেটটি ভেঙে দেওয়া যাক:

x = T.imatrix()

x হল পূর্ণসংখ্যার একটি ম্যাট্রিক্স। ঠিক আছে কোনো সমস্যা নেই. শব্দভাণ্ডারের প্রতিটি শব্দ একটি পূর্ণসংখ্যা বা 1-হট স্পার্স এনকোডিং উপস্থাপন করতে পারে। সুতরাং x যদি 2x2 হয়, আমাদের দুটি ডেটাপয়েন্ট রয়েছে, প্রতিটি একটি 2-গ্রাম।

l_in = InputLayer((3, ))

W0,W1,W2

W = np.arange(3*5).reshape((3, 5)).astype('float32')

এটি আমাদের শব্দ এম্বেডিং ম্যাট্রিক্স। এটি 0 থেকে 14 এন্ট্রি সহ 5 সারিতে বাই 5 কলামের ম্যাট্রিক্স।

W0=(1,0,0)W1=(0,1,0)W2=(0,0,1)ওয়াটW0W0ওয়াট=[0,1,2,3,4]W1W1ওয়াট=[5,6,7,8,9]

এটি লক্ষ করা উচিত, আমরা যে এক-হট স্পার্স এনকোডিংটি ব্যবহার করছি তার কারণে আপনি এটিকে টেবিলের অনুসন্ধান হিসাবেও দেখেন।

l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W)

এম্বেডিং স্তর

 output = get_output(l1, x)

এম্বেডিংয়ের জন্য সিম্বলিক থিয়ানো এক্সপ্রেশন।

f = theano.function([x], output)

থিয়ানো ফাংশন যা এম্বেডিংয়ের গণনা করে।

x_test = np.array([[0, 2], [1, 2]]).astype('int32')

(W0,W2)(W1,W2)

(W0,W2)ওয়াট

f(x_test) 

আয়:

          array([[[  0.,   1.,   2.,   3.,   4.],
                  [ 10.,  11.,  12.,  13.,  14.]],
                 [[  5.,   6.,   7.,   8.,   9.],
                  [ 10.,  11.,  12.,  13.,  14.]]], dtype=float32)

আপনাকে নিশ্চিত করতে যে 3 টি প্রকৃতপক্ষে শব্দভান্ডার আকারকে উপস্থাপন করে, একটি ম্যাট্রিক্স ইনপুট করার চেষ্টা করুন x_test = [[5, 0], [1, 2]]। আপনি দেখতে পাবেন যে এটি একটি ম্যাট্রিক্স মিস-মিলের ত্রুটি উত্থাপন করে।


2
এই উত্তর ভাল। আমার এই প্রশ্নের একটি এক্সটেনশন রয়েছে, এম্বেডড লেয়ারটি কীভাবে ইমডিবির সেন্টিমেন্টের নমুনা (বা অন্য কোনও ডেটাसेट) ভেক্টরে রূপান্তর করে। এগুলি শব্দের সংকলন।
দলা

1

ইন https://stackoverflow.com/questions/45649520/explain-with-example-how-embedding-layers-in-keras-works/ আমি 2 বাক্য ব্যবহার করে একটি উদাহরণ প্রস্তুত করতে চেষ্টা করেছি, keras এর texts_to_sequences

'This is a text' --> [0 0 1 2 3 4]

এবং এম্বেডিং স্তর কীভাবে কেরাস 'এম্বেডিং' স্তর কাজ করে তার উপর ভিত্তি করে ? এম্বেডিং স্তরটি প্রথমে এলোডিং ভেক্টরটিকে এলোমেলোভাবে শুরু করে এবং তারপরে নেটওয়ার্ক অপ্টিমাইজার ব্যবহার করে এটি একইভাবে আপডেট করে যেমন এটি কেরাসের অন্য কোনও নেটওয়ার্ক স্তরকে করতে পারে।

[0 0 1 2 3 4] --> 
[-0.01494285, -0.007915  ,  0.01764857],
[-0.01494285, -0.007915  ,  0.01764857],
[-0.03019481, -0.02910612,  0.03518577],
[-0.0046863 ,  0.04763055, -0.02629668],
[ 0.02297204,  0.02146662,  0.03114786],
[ 0.01634104,  0.02296363, -0.02348827]

উপরে (সর্বাধিক) 6 টি শব্দ এবং 3 এর আউটপুট_ডিমের জন্য কিছু প্রাথমিক এম্বেডিং ভেক্টর থাকবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.