ভূমিকা
ট্রান্সফরমারগুলি কীভাবে কাজ করে তা ব্যাখ্যা করে এবং সেগুলির একটি মূল উপাদান - টোকেন এবং অবস্থান এমবেডিং-এর উপর একটি অন্তর্দৃষ্টি তৈরি করার জন্য প্রচুর গাইড রয়েছে।
অবস্থানগতভাবে টোকেন এম্বেড করা ট্রান্সফরমারকে টোকেনের (সাধারণত, শব্দ) মধ্যে অ-কঠোর সম্পর্ক উপস্থাপন করতে দেয়, যা ভাষা মডেলিং-এ আমাদের প্রসঙ্গ-চালিত বক্তৃতাকে মডেল করার ক্ষেত্রে অনেক ভালো। যদিও প্রক্রিয়াটি তুলনামূলকভাবে সহজ, এটি মোটামুটি জেনেরিক, এবং বাস্তবায়নগুলি দ্রুত বয়লারপ্লেটে পরিণত হয়।
এই সংক্ষিপ্ত নির্দেশিকাটিতে, আমরা কীভাবে কার্য সম্পাদনের জন্য কেরাসএনএলপি, অফিসিয়াল কেরাস অ্যাড-অন ব্যবহার করতে পারি তা দেখব।
PositionEmbedding
এবংTokenAndPositionEmbedding
.
কেরাসএনএলপি
KerasNLP হল NLP-এর জন্য একটি অনুভূমিক সংযোজন। লেখার মতো, এটি এখনও খুব অল্প বয়সী, সংস্করণ 0.3 এ, এবং ডকুমেন্টেশন এখনও মোটামুটি সংক্ষিপ্ত, তবে প্যাকেজটি ইতিমধ্যেই ব্যবহারযোগ্য নয়।
এটি কেরাস স্তরগুলিতে অ্যাক্সেস সরবরাহ করে, যেমন TokenAndPositionEmbedding
, TransformerEncoder
এবং TransformerDecoder
, যা কাস্টম ট্রান্সফরমার তৈরি করা আগের চেয়ে সহজ করে তোলে।
আমাদের প্রকল্পে KerasNLP ব্যবহার করতে, আপনি এটি এর মাধ্যমে ইনস্টল করতে পারেন pip
:
$ pip install keras_nlp
একবার প্রকল্পে আমদানি করা হলে, আপনি যেকোনো ব্যবহার করতে পারেন keras_nlp
একটি আদর্শ কেরাস স্তর হিসাবে স্তর।
টোকেনাইজেশন
কম্পিউটার সংখ্যা দিয়ে কাজ করে। আমরা কথায় কথায় আমাদের চিন্তা প্রকাশ করি। কম্পিউটারকে তাদের মাধ্যমে ক্রাঞ্চ করার অনুমতি দেওয়ার জন্য, আমাদের কিছু আকারে সংখ্যার সাথে শব্দ ম্যাপ করতে হবে।
এটি করার একটি সাধারণ উপায় হল শব্দগুলিকে সংখ্যায় ম্যাপ করা যেখানে প্রতিটি পূর্ণসংখ্যা একটি শব্দকে উপস্থাপন করে। শব্দের একটি অংশ একটি শব্দভাণ্ডার তৈরি করে এবং শব্দভাণ্ডারের প্রতিটি শব্দ একটি সূচক পায়। এইভাবে, আপনি শব্দের একটি ক্রমকে সূচকগুলির একটি ক্রম হিসাবে পরিচিত করতে পারেন টোকেন:
def tokenize(sequence):
return tokenized_sequence
sequence = ['I', 'am', 'Wall-E']
sequence = tokenize(sequence)
print(sequence)
টোকেনগুলির এই ক্রমটি একটি ঘন ভেক্টরের মধ্যে এমবেড করা যেতে পারে যা সুপ্ত স্থানের টোকেনগুলিকে সংজ্ঞায়িত করে:
[[4], [26], [472]] -> [[0.5, 0.25], [0.73, 0.2], [0.1, -0.75]]
এটি সাধারণত সঙ্গে করা হয় Embedding
কেরাসে স্তর। ট্রান্সফরমার শুধুমাত্র একটি স্ট্যান্ডার্ড ব্যবহার করে এনকোড করে না Embedding
স্তর তারা পারফর্ম করে Embedding
এবং PositionEmbedding
, এবং তাদের একসাথে যুক্ত করুন, সুপ্ত স্থানে তাদের অবস্থান অনুসারে নিয়মিত এম্বেডিংগুলিকে স্থানচ্যুত করে৷
কেরাসএনএলপি-র সাথে পারফর্ম করছে TokenAndPositionEmbedding
নিয়মিত টোকেন এমবেডিং একত্রিত করে (Embedding
অবস্থানগত এম্বেডিং সহ (PositionEmbedding
).
অবস্থান এমবেডিং
একনজরে দেখে নেওয়া যাক PositionEmbedding
প্রথম এটি টেনসর এবং র্যাগড টেনসর গ্রহণ করে এবং ধরে নেয় যে চূড়ান্ত মাত্রা বৈশিষ্ট্যগুলিকে প্রতিনিধিত্ব করে, যখন দ্বিতীয় থেকে শেষ মাত্রাটি ক্রমকে প্রতিনিধিত্ব করে।
# Seq
(5, 10)
# Features
স্তরটি গ্রহণ করে একটি sequence_length
যুক্তি, বোঝানো, ভাল, ইনপুট এবং আউটপুট অনুক্রমের দৈর্ঘ্য। আসুন এগিয়ে যাই এবং অবস্থানগতভাবে একটি র্যান্ডম ইউনিফর্ম টেনসর এম্বেড করি:
seq_length = 5
input_data = tf.random.uniform(shape=[5, 10])
input_tensor = keras.Input(shape=[None, 5, 10])
output = keras_nlp.layers.PositionEmbedding(sequence_length=seq_length)(input_tensor)
model = keras.Model(inputs=input_tensor, outputs=output)
model(input_data)
এর ফলে:
<tf.Tensor: shape=(5, 10), dtype=float32, numpy=
array([[ 0.23758471, -0.16798696, -0.15070847, 0.208067 , -0.5123104 ,
-0.36670157, 0.27487397, 0.14939266, 0.23843127, -0.23328197],
[-0.51353353, -0.4293166 , -0.30189738, -0.140344 , -0.15444171,
-0.27691704, 0.14078277, -0.22552207, -0.5952263 , -0.5982155 ],
[-0.265581 , -0.12168896, 0.46075982, 0.61768025, -0.36352775,
-0.14212841, -0.26831496, -0.34448475, 0.4418767 , 0.05758983],
[-0.46500492, -0.19256318, -0.23447984, 0.17891657, -0.01812166,
-0.58293337, -0.36404118, 0.54269964, 0.3727749 , 0.33238482],
[-0.2965023 , -0.3390794 , 0.4949159 , 0.32005525, 0.02882379,
-0.15913549, 0.27996767, 0.4387421 , -0.09119213, 0.1294356 ]],
dtype=float32)>
টোকেনএন্ডপজিশন এম্বেডিং
টোকেন এবং অবস্থান এমবেডিং ব্যবহার করার জন্য ফোঁড়া Embedding
ইনপুট ক্রম উপর, PositionEmbedding
এমবেডেড টোকেনগুলিতে, এবং তারপরে এই দুটি ফলাফল একসাথে যুক্ত করে, টোকেন এমবেডিংগুলিকে তাদের আপেক্ষিক অর্থপূর্ণ সম্পর্কগুলিকে এনকোড করতে কার্যকরভাবে স্থানচ্যুত করে৷
এটি প্রযুক্তিগতভাবে করা যেতে পারে:
seq_length = 10
vocab_size = 25
embed_dim = 10
input_data = tf.random.uniform(shape=[5, 10])
input_tensor = keras.Input(shape=[None, 5, 10])
embedding = keras.layers.Embedding(vocab_size, embed_dim)(input_tensor)
position = keras_nlp.layers.PositionEmbedding(seq_length)(embedding)
output = keras.layers.add([embedding, position])
model = keras.Model(inputs=input_tensor, outputs=output)
model(input_data).shape
ইনপুটগুলি এম্বেড করা হয়, এবং তারপর অবস্থানগতভাবে এম্বেড করা হয়, তারপরে সেগুলি একসাথে যুক্ত করা হয়, একটি নতুন অবস্থানগতভাবে এমবেড করা আকৃতি তৈরি করে। বিকল্পভাবে, আপনি লিভারেজ করতে পারেন TokenAndPositionEmbedding
স্তর, যা হুডের নীচে এটি করে:
সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!
...
def call(self, inputs):
embedded_tokens = self.token_embedding(inputs)
embedded_positions = self.position_embedding(embedded_tokens)
outputs = embedded_tokens + embedded_positions
return outputs
এটি সঞ্চালন করা অনেক পরিষ্কার করে তোলে TokenAndPositionEmbedding
:
seq_length = 10
vocab_size = 25
embed_dim = 10
input_data = tf.random.uniform(shape=[5, 10])
input_tensor = keras.Input(shape=[None, 5, 10])
output = keras_nlp.layers.TokenAndPositionEmbedding(vocabulary_size=vocab_size,
sequence_length=seq_length,
embedding_dim=embed_dim)(input_tensor)
model = keras.Model(inputs=input_tensor, outputs=output)
model(input_data).shape
আমরা স্তরে যে ডেটা দিয়েছি তা এখন 10 মাত্রার একটি সুপ্ত স্থানে অবস্থানগতভাবে এমবেড করা হয়েছে:
model(input_data)
<tf.Tensor: shape=(5, 10, 10), dtype=float32, numpy=
array([[[-0.01695484, 0.7656435 , -0.84340465, 0.50211895,
-0.3162892 , 0.16375223, -0.3774369 , -0.10028353,
-0.00136751, -0.14690581],
[-0.05646318, 0.00225556, -0.7745967 , 0.5233861 ,
-0.22601983, 0.07024342, 0.0905793 , -0.46133494,
-0.30130145, 0.451248 ],
...
আরও এগিয়ে যাওয়া - হাতে-হোল্ড এন্ড-টু-এন্ড প্রজেক্ট
আপনার অনুসন্ধিৎসু প্রকৃতি আপনাকে আরও যেতে চায়? আমরা আমাদের চেক আউট সুপারিশ নির্দেশিত প্রকল্প: "কেরাসের সাথে সিএনএন এবং ট্রান্সফরমারগুলির সাথে চিত্রের ক্যাপশনিং".
এই নির্দেশিত প্রকল্পে - আপনি কীভাবে একটি চিত্র ক্যাপশনিং মডেল তৈরি করবেন তা শিখবেন, যা একটি চিত্রকে ইনপুট হিসাবে গ্রহণ করে এবং আউটপুট হিসাবে একটি পাঠ্য ক্যাপশন তৈরি করে।
আপনি কীভাবে শিখবেন:
- প্রিপ্রসেস টেক্সট
- সহজে পাঠ্য ইনপুট ভেক্টরাইজ করুন
- সঙ্গে কাজ
tf.data
API এবং পারফরম্যান্স ডেটাসেট তৈরি করুন - TensorFlow/Keras এবং KerasNLP-এর সাথে স্ক্র্যাচ থেকে ট্রান্সফরমার তৈরি করুন – অত্যাধুনিক এনএলপি মডেল তৈরির জন্য কেরাসের অফিসিয়াল অনুভূমিক সংযোজন
- হাইব্রিড আর্কিটেকচার তৈরি করুন যেখানে একটি নেটওয়ার্কের আউটপুট অন্য নেটওয়ার্কের জন্য এনকোড করা হয়
আমরা কিভাবে ছবির ক্যাপশনিং ফ্রেম করব? বেশিরভাগই এটিকে জেনারেটিভ ডিপ লার্নিংয়ের উদাহরণ হিসেবে বিবেচনা করে, কারণ আমরা একটি নেটওয়ার্ককে বর্ণনা তৈরি করতে শেখাচ্ছি। যাইহোক, আমি এটিকে নিউরাল মেশিন অনুবাদের উদাহরণ হিসাবে দেখতে চাই - আমরা একটি চিত্রের ভিজ্যুয়াল বৈশিষ্ট্যগুলিকে শব্দে অনুবাদ করছি। অনুবাদের মাধ্যমে, আমরা নতুন অর্থ তৈরি করার পরিবর্তে সেই চিত্রটির একটি নতুন উপস্থাপনা তৈরি করছি। এটিকে অনুবাদ হিসেবে দেখা, এবং শুধুমাত্র এক্সটেনশন জেনারেশনের মাধ্যমে, কাজটিকে ভিন্ন আলোতে স্কোপ করে এবং এটিকে একটু বেশি স্বজ্ঞাত করে তোলে।
অনুবাদের একটি হিসাবে সমস্যাটিকে ফ্রেম করা আমরা কোন আর্কিটেকচার ব্যবহার করতে চাই তা নির্ধারণ করা সহজ করে তোলে। এনকোডার-শুধু ট্রান্সফরমার টেক্সট (অনুভূতি বিশ্লেষণ, শ্রেণীবিভাগ, ইত্যাদি) বোঝার ক্ষেত্রে দুর্দান্ত কারণ এনকোডার অর্থপূর্ণ উপস্থাপনা এনকোড করে। ডিকোডার-শুধুমাত্র মডেলগুলি প্রজন্মের জন্য দুর্দান্ত (যেমন GPT-3), যেহেতু ডিকোডার একই অর্থ সহ অন্য ক্রমানুসারে অর্থপূর্ণ উপস্থাপনা অনুমান করতে সক্ষম। অনুবাদ সাধারণত একটি এনকোডার-ডিকোডার আর্কিটেকচার দ্বারা করা হয়, যেখানে এনকোডাররা একটি বাক্যের (বা চিত্র, আমাদের ক্ষেত্রে) একটি অর্থপূর্ণ উপস্থাপনাকে এনকোড করে এবং ডিকোডাররা এই ক্রমটিকে আরেকটি অর্থপূর্ণ উপস্থাপনায় পরিণত করতে শেখে যা আমাদের জন্য আরও ব্যাখ্যাযোগ্য (যেমন একটি বাক্য)।
উপসংহার
2017 সাল থেকে ট্রান্সফরমারগুলি একটি বড় তরঙ্গ তৈরি করেছে, এবং অনেক দুর্দান্ত গাইড তারা কীভাবে কাজ করে তার অন্তর্দৃষ্টি দেয়, তবুও, কাস্টম বাস্তবায়নের ওভারহেডের কারণে তারা এখনও অনেকের কাছে অধরা ছিল। কেরাসএনএলপি এই সমস্যাটির সমাধান করে, বিল্ডিং ব্লক প্রদান করে যা আপনাকে নমনীয়, শক্তিশালী এনএলপি সিস্টেম তৈরি করতে দেয়, প্রাক-প্যাকেজ করা সমাধান প্রদান করার পরিবর্তে।
এই নির্দেশিকায়, আমরা কেরাস এবং কেরাসএনএলপি-এর সাথে টোকেন এবং অবস্থান এমবেডিংয়ের দিকে নজর দিয়েছি।