Amir Kabiri
Amir Kabiri
خواندن ۲ دقیقه·۳ سال پیش

Text vectorization در Keras بدون درد و خون ریزی

بی مقدمه بریم سر اصل مطلب!

Text vectorization اصلا چیه؟

جوابش خیلی سادس، تبدیل متون به یک بردار عددی.

مثلا ما جمله ی "the cat sat on the mat" رو داریم. میاییم اینو به یک بردار عددی مانند

[2, 1751, 2485, 14, 2, 14745]

تبدیل میکنیم.

اینکار به چه دردی میخوره اصلا؟

یکی از کاربرد هاش در زمینه ی هوش مصنوعی و الگوریتم های مختلف یادگیری ماشین و یادگیری عمیقه.

مثلا تو شبکه های عصبی، ما یه سری محاسبات ریاضی ماتریسی داریم، ازین رو نمیتونیم که مثلا یه رشته رو در یه ماتریس ضرب کنیم! پس باید اون رشته رو هم به دنباله ای از اعداد تبدیل کنیم تا بتونیم روش محاسبه انجام بدیم.

یکی از کاربردای دیگش مثلا میتونه تو سیستم های بازیابی اطلاعات باشه. ما داکیومنت های مختلفو به بردار تبدیل میکنیم. بعدش میتونیم فاصله ی این دو بردار رو با روش های موجود مانند فاصله اقلیدسی یا شباهت کسینوسی بسنجیم تا فهمیم که این دو تا داکیومنت چقدر به هم شبیه هستن.

چطوری Text Vectorization رو انجام بدیم؟

کتابخونه های مختلفی واسه زبانای مختلف وجود داره. حتی خودتون میتونین این الگوریتما رو پیاده کنین و از کتابخونه استفاده نکنین.

ولی اینجا من میخوام کلاس TextVectorization رو از کتابخونه ی Keras بهتون معرفی کنم که ببینید چقدر کار باهاش راحته!


اصل مطلب

کراس (keras) یه کتابخونه برای یادگیری عمیقه که امکانات متعددی داره.

در زمینه پیش پردازش متن هم یه سری توابع و کلاس های آماده داره که یکیش TextVectorization هست.

خب اولش به صورت زیر ایمپورتش میکنیم

from keras.layers.experimental.preprocessing import TextVectorization

بعدش اینطوری متونی که داریم رو بهش میدیم که یه سری محاسبات اولیه رو انجام بده:

vectorizer = TextVectorization(max_tokens=20000, output_sequence_length=200)
vectorizer.adapt(tf.data.Dataset.from_tensor_slices(list_of_texts))

به max_tokens میتونین None بدین ، در این صورت هیچ محدودیتی نداره، ولی اگه مثل من بهش یه عدد مثل 20000 بدین، فقط 20000 کلمه ی پرتکرار رو تو لیست واژگانش نگه میداره.

و output_sequence_length هم میگه که vector هایی که قراره برامون تولید کنه، اندازشون چقدر باشه؟

اینجا 200 گذاشتم، بنابراین اگه جمله ای بهش بدین که 1000 تا کلمه داشته باشه، فقط 200 تا کلمه اولشو برمیداره و تبدیل به بردار میکنه.

و در نهایت برای تبدیل رشته های به بردار اینطوری ازش استفاده میکنیم:

texts = ['hello world', 'the cat sat on the mat'] vectors = vectorizer(texts)


سخن پایانی

این کلاس قابلیت های خیلی زیادی داره، حتی میتونه واستون tf-idf خروجی بده و کلی چیزای دیگه.

اگه خواستین بیشتر بدونین به داکیومنتش مراجعه کنید

https://keras.io/api/layers/preprocessing_layers/core_preprocessing_layers/text_vectorization

کراسtext vectorizationtext preprocessingپیش پردازش متنیادگیری عمیق
علاقمند به دنیای کامپیوترها !
شاید از این پست‌ها خوشتان بیاید