نویسنده(های): تجارتی_گانسان
در ابتدا منتشر شد به سمت هوش مصنوعی.
خودکارسازی کلمات: چگونه GRU ها به آینده تولید متن کمک می کنند
آیا این باور نکردنی نیست که فناوری زبان تا کجا پیش رفته است؟ پردازش زبان طبیعی، یا NLP، قبلاً فقط به رایانه ها برای پیروی از دستورات اولیه مربوط می شد. با این حال، اکنون ما می بینیم که کامپیوترها در واقع شروع به درک زبان می کنند و حتی به روش هایی پاسخ می دهند که به طرز شگفت آوری احساس انسان بودن می کنند. به تفاوت این موضوع فکر کنید! بهجای دریافت پاسخهای واقعی، ما به سمت دنیایی حرکت میکنیم که ماشینها واقعاً آنچه را که میگوییم «دریافت» میکنند. و این فقط در مورد درک ما نیست، بلکه در مورد ایجاد پاسخ نیز است و باعث می شود تعامل ما نرم تر و طبیعی تر به نظر برسد. وحشیانه است که فکر کنیم این موضوع می تواند ما را به کجا برساند!
در میان این پیشرفت ها، یکی از حوزه های هیجان انگیز است تولید متن. ماشینی را تصور کنید که هر چیزی از ایمیل گرفته تا داستان می نویسد یا کل مکالمه را ایجاد می کند. این چیزی است که ما در اینجا کاوش خواهیم کرد. برای رسیدن به چنین روان و منسجم تولید متن، محققان از مدل های مختلفی استفاده می کنند که هر کدام دارای نقاط قوت منحصر به فردی هستند. یکی از ابزارهای قدرتمند برای این منظور است واحد بازگشتی دردار (GRU) شبکه. GRU ها به این دلیل محبوبیت پیدا کرده اند که دو جنبه کلیدی را متعادل می کنند: وابستگی های طولانی مدت را در متن ثبت می کنند (به دستگاه کمک می کند اطلاعات مربوطه را در بین جملات به خاطر بسپارد) و این کار را به طور موثر انجام می دهند و کارها را سریع و قابل مدیریت نگه می دارند.
بنابراین، بیایید غوطه ور شویم و ببینیم که چگونه GRU ها جادوی خود را به کار می گیرند تا ماشین ها را به روشی که زبان تولید می کنند کمی “انسان تر” کنند.
تولید متن چیست؟
با رو به رشد برنامه های کاربردی در صنایع مختلف، تولید متن به عنوان یک حوزه مهم تحقیق در پردازش زبان طبیعی در نظر گرفته می شود. بسیاری از سازمان ها نیاز به ایجاد حجم زیادی از محتوا مانند توضیحات محصول شخصی، پاسخ های پشتیبانی مشتری یا حتی پست های رسانه های اجتماعی دارند. تولید دستی این محتویات می تواند زمان بر و کار فشرده باشد. یک راه حل عملی برای مقابله با این چالش، خودکارسازی تولید متن است.
قبل از پرداختن به نحوه عملکرد تولید متن، اجازه دهید با مروری کوتاه آشنا شویم.
گفته می شود که تولید متن شاخه ای از پردازش زبان طبیعی (NLP) است و در درجه اول بر ایجاد متون منسجم و مرتبط به طور خودکار متمرکز است. فرآیند تولید متن شامل استفاده از الگوریتمها و مدلها برای تولید محتوای نوشتهشده بر اساس ورودی دادهشده است، به عنوان مثال، میتواند یک دستور، مجموعهای از کلمات کلیدی یا حتی یک زمینه خاص باشد. متن تولید شده توسط مدل می تواند از نظر طول و پیچیدگی متفاوت باشد که معمولاً بر اساس الزامات کار و قابلیت های مدل اساسی است.
درک واحد بازگشتی دردار
بنابراین، آیا در مورد GRU ها شنیده اید؟ آنها Gated Recurrent Units نامیده می شوند و اساساً یک نوع ارتقا یافته از شبکه عصبی هستند که در سال 2014 عرضه شدند. LSTM (حافظه کوتاه مدت بلند). هر دو LSTM و GRU برای کمک به رایانه ها برای “به خاطر سپردن” اطلاعات مهم هنگام کار با دنباله ها، مانند پیش بینی کلمات در یک جمله، استفاده می شوند. اما GRU ها با حذف برخی از مراحل اضافی که LSTM ها دارند، کارها را سریع و کارآمد نگه می دارند. بنابراین، اگر چیزی میخواهید که قدرتمند باشد اما سرعت کار را کاهش ندهد، GRU ها انتخاب خوبی هستند!
GRU قدرت حفظ وابستگی های طولانی مدت را دارد که پردازش داده های متوالی مانند داده های سری زمانی، متن و گفتار را ممکن می کند.
یک واحد بازگشتی دردار (GRU) دارای دو “دروازه” ویژه است که به کنترل جریان اطلاعات در هنگام پردازش داده ها کمک می کند. این گیت ها به روز رسانی و گیت ریست نامیده می شوند.
گیت به روز رسانی تصمیم می گیرد که چه مقدار از اطلاعات قدیمی (از مراحل قبلی) باید حفظ شود و چه مقدار اطلاعات جدید باید اضافه شود. گیت تنظیم مجدد به GRU کمک می کند تا اطلاعات نامربوط را که دیگر مورد نیاز نیست فراموش کند.
توضیح نحوه عملکرد این گیت ها:
GRU دو چیز را به عنوان ورودی می گیرد: داده فعلی (ورودی) و مجموعه ای از اطلاعات مرحله قبل (حالت پنهان).
محاسبات گیت:
برای هر گیت (به روز رسانی و تنظیم مجدد)، GRU مقداری ریاضی به نام ضرب المان انجام می دهد. این فقط به این معنی است که هر عدد از حالت ورودی و پنهان را در اعداد (به نام وزن) اختصاص داده شده به دروازه ضرب می کند.
عملکرد فعال سازی:
پس از ضرب، GRU از یک تابع فعال سازی برای انجام تنظیمات برای هر عدد استفاده می کند. این به GRU کمک می کند تا تصمیم بگیرد چه مقدار اطلاعات را در گیت ها نگه دارد یا فراموش کند.
نمونه ای از GRU
بیایید با یک مثال GRU را درک کنیم. فرض کنید می خواهیم به یک مدل GRU آموزش نوشتن جملات کوتاه بر اساس برخی کلمات ورودی را بدهیم. تصور کنید ما در حال آموزش مدل هستیم تا جملاتی درباره آب و هوا تولید کند.
1. آموزش مدل:
در ابتدا، مدل GRU را با نمونه های زیادی از جملات مربوط به آب و هوا ارائه می دهیم
امروز هوا آفتابی است. هوا بارانی است. ممکنه فردا هوا ابری باشه
مدل از این جملات الگوها را یاد می گیرد. شروع می شود به درک اینکه کدام کلمات معمولاً دنبال یکدیگر می آیند.
2. تولید متن:
هنگامی که مدل GRU آموزش داده شد، می توانیم یک کلمه شروع به آن بدهیم و بقیه جمله را تولید می کند. به عنوان مثال:
اگر به مدل کلمه «It» را بدهیم، مدل پیشبینی میکند که کلمه بعدی میتواند «است» باشد. اکنون ورودی به “It is” تبدیل می شود و مدل پیش بینی می کند که کلمه بعدی “sunny” باشد. این مدل همچنان به تولید کلمات بیشتری مانند «امروز» ادامه میدهد.
بنابراین خروجی ورودی فوق “It” ممکن است این باشد:
“امروز آفتابی است”
3. آنچه در داخل اتفاق می افتد:
مدل GRU با به خاطر سپردن اطلاعات مهم (مانند جفت کلمات رایج) و فراموش کردن اطلاعات کمتر مهم در حین حرکت در جمله کار می کند. این به آن کمک می کند تا جملاتی را ایجاد کند که معنادار باشند.
چگونه GRU برای تولید متن کار می کند – مثال عملی
مرحله 1: کتابخانه های لازم را وارد کنید
- نومپی: ما از numpy برای تبدیل توالی کلمات رمزگذاری شده خود به آرایه استفاده می کنیم تا مدل بتواند آن را پردازش کند.
- TensorFlow و کراس: استفاده می کنیم TensorFlowKeras API برای تعریف، کامپایل و آموزش مدل GRU. لایه های مورد استفاده از Keras شامل GRU برای معماری GRU، متراکم برای لایه خروجی کاملا متصل و Embedding برای نمایش کلمات به عنوان بردارهای متراکم است.
- توکنایزر و پیش پردازش متن: توکنایزر در اینجا برای تبدیل متن آموزشی به دنبالهای از اعداد و pad_sequences استفاده میشود تا اطمینان حاصل شود که تمام دنبالهها قبل از وارد شدن به مدل، طول یکسانی دارند.
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import GRU, Dense, Embedding
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
مرحله 2: داده های ورودی را ایجاد کنید
اکنون متن ورودی را ایجاد می کنیم، جایی که این متن ورودی یک متن طولانی تر است. و به عنوان داده ورودی برای آموزش مدل GRU استفاده می شود.
data = [
"it was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness,",
"it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness,",
"it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us,",
"we were all going direct to Heaven, we were all going direct the other way – in short, the period was so far like the present period,",
"that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only."]
مرحله 3: توکن سازی
با استفاده از ژتون جملات را به عدد تبدیل می کنیم. مثل این است که به هر کلمه شناسه اختصاصی خود بدهید تا کامپیوتر بتواند متن را بهتر بفهمد. به این ترتیب، به جای کلمات، با اعدادی کار می کنیم که مدل واقعاً می تواند از آنها استفاده کند.
tokenizer = Tokenizer()
tokenizer.fit_on_texts(data)
total_words = len(tokenizer.word_index)+1
مرحله 4: ایجاد توالی
دنباله ای از کلمات ایجاد می شود که هر دنباله حاوی یک کلمه بیشتر از قبلی باشد. این به مدل می آموزد که چگونه یک کلمه در قسمت بعدی کلمه دیگر را دنبال می کند.
input_sequences = []
for sentence in data:
token_list = tokenizer.texts_to_sequences([sentence])[0]
for i in range(1, len(token_list)):
n_gram_sequence = token_list[:i+1]
input_sequences.append(n_gram_sequence)
مرحله 5: دنباله های padding
از آنجایی که جملات می توانند همه نوع طول داشته باشند، ما بالشتک اضافه می کنیم تا مطمئن شویم که اندازه همه آنها یکسان است. به این ترتیب، مدل GRU می تواند آنها را بدون هیچ مشکلی به راحتی پردازش کند.
max_sequence_len = max([len(x) for x in input_sequences])
input_sequences = np.array(pad_sequences(input_sequences, maxlen = max_sequence_len, padding = 'pre'))
مرحله 6: تقسیم به ورودی و خروجی
دنباله ها را به ورودی (X) و خروجی (y) تقسیم می کنیم.
- ورودی (X) – چند کلمه اول جمله
- خروجی (y) – کلمه بعدی که باید پیش بینی شود
X, y = input_sequences[:,:-1], input_sequences[:,-1]
y = np.array(y)
مرحله 7: رمزگذاری یکباره
اکنون خروجی (y) را به بردار تک داغ تبدیل می کنیم. پس چه کار می کند؟
هر کلمه را به صورت 0 و 1 نشان می دهد.
- 1 – موقعیت مربوط به کلمه صحیح
- 0 – بقیه موقعیت ها
y = np.eye(total_words)[y]
مرحله 8: معماری مدل GRU
ما یک مدل GRU را با یک لایه جاسازی برای تبدیل کلمات به بردارهای متراکم تعریف می کنیم، یک لایه GRU مسئول پردازش داده های متوالی است و یک لایه متراکم نهایی با یک تابع فعال سازی softmax که کلمه بعدی را پیش بینی می کند.
model = Sequential()
model.add(Embedding(total_words, 100, input_length=max_sequence_len-1))
model.add(GRU(150))
model.add(Dense(total_words, activation='softmax'))
#Compile the model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
مرحله 9: آموزش مدل
این مدل بر روی داده های ورودی آموزش داده شده است تا الگوهای دنباله کلمات در متن را بیاموزد. و سپس از دو چیز مهم مانند تابع ضرر و بهینه ساز Adam برای همگرایی سریعتر استفاده می کند
model.fit(X, y, epochs = 100, verbose = 1)
مرحله 10: تولید متن
بعد از آموزش مدل، میتوانیم هر کلمه یا عبارتی را برای شروع به آن بدهیم، و بر اساس آموختههایش به کلمه بعدی میرسد. بنابراین، اگر با چیزی مانند «ما بودیم» شروع کنیم، ممکن است با «همه به بهشت میروند…» ادامه یابد و از آنجا به ساختن ادامه دهیم.
def generate_text(seed_text, next_words):
for _ in range(next_words):
token_list = tokenizer.texts_to_sequences([seed_text])[0]
token_list = pad_sequences([token_list], maxlen=max_sequence_len-1,padding='pre')
predicted = np.argmax(model.predict(token_list), axis=-1)
output_word = ""
for word, index in tokenizer.word_index.items():
if index == predicted:
output_word = word
break
seed_text += " " + output_word
return seed_text
#Generate a sentence
print(generate_text("it was the best", 20))
خروجی
بهترین زمان بود بدترین زمان عصر خرد بود عصر حماقت بود
مزایای تولید متن با استفاده از GAN
1. مدل های زبان بهتر:
در آینده، مدلهای زبانی مانند GPT حتی بهتر خواهند شد. آنها متنی را ایجاد می کنند که حتی بیشتر شبیه آن است که توسط یک انسان نوشته شده است.
این مدل ها زمینه و احساسات را بهتر درک می کنند و نوشتن آنها را طبیعی تر می کند.
2. ترکیب متن با تصویر و صدا:
تولید متن فقط در مورد نوشتن نیست. مدل ها یاد می گیرند که همزمان با متن، عکس و صدا کار کنند.
به عنوان مثال، یک مدل می تواند برای یک عکس توضیحی ایجاد کند یا داستانی را بر اساس یک ویدیو بنویسد.
3. متن شخصی شده:
تولید متن شخصیتر میشود، به این معنی که هوش مصنوعی متنی را ایجاد میکند که متناسب با ترجیحات و سبک افراد باشد.
این برای مواردی مانند توضیحات محصول سفارشی شده یا چت ربات های شخصی مفید خواهد بود.
4. متن برای همه زبانها:
مدلهای آینده بر تولید متن به زبانهای مختلف، از جمله زبانهای کم منبع که دادههای زیادی ندارند، تمرکز خواهند کرد.
این به گسترش استفاده از هوش مصنوعی در سطح جهانی کمک می کند و تولید متن را برای افراد بیشتری ممکن می کند.
5. متن نویسی تخصصی:
تولید متن بیشتر بر حوزههای خاص متمرکز میشود، مانند نوشتن حقوقی، گزارشهای پزشکی یا اسناد فنی.
این به ایجاد متن دقیق تر و حرفه ای تر برای صنایع مختلف کمک می کند.
نتیجه گیری
تولید متن در پردازش زبان طبیعی (NLP) بسیار مفید است، زیرا به ما امکان می دهد متن را به طور خودکار ایجاد کنیم. GRU ها یا واحدهای بازگشتی دردار برای این کار عالی هستند، آنها در به خاطر سپردن اطلاعات مهم خوب هستند، که به آنها کمک می کند تا جملاتی را ارائه کنند که واقعاً منطقی هستند. GRU در مقایسه با مدلهای دیگر سادهتر و سریعتر است و آن را به انتخاب خوبی برای ایجاد متن تبدیل میکند. با پیشرفت فناوری، GRU و سایر مدلها برای کارهایی مانند تولید محتوا و آسانتر کردن ارتباطات مفیدتر میشوند.
منتشر شده از طریق به سمت هوش مصنوعی
منبع: https://towardsai.net/p/l/automating-words-how-grus-power-the-future-of-text-generation