Rumah >Peranti teknologi >AI >Memahami Beg Berterusan Kata (Cbow)
Semantik adalah penting kerana di NLP ia adalah hubungan antara kata -kata yang sedang dikaji. Salah satu prosedur yang paling mudah tetapi sangat berkesan ialah beg perkataan (cbow) yang berterusan yang memaparkan kata -kata kepada vektor yang sangat bermakna yang dipanggil vektor perkataan. CBow digunakan dalam rangka kerja Word2VEC dan meramalkan perkataan berdasarkan kata -kata yang bersebelahan dengannya yang menangkap makna semantik serta sintaksis bahasa. Dalam artikel ini, pembaca akan belajar tentang operasi model CBow, serta kaedah penggunaannya.
Beg berterusan kata -kata (cbow) juga merupakan model yang digunakan semasa menentukan perkataan embedding menggunakan rangkaian saraf dan merupakan sebahagian daripada model Word2Vec oleh Tomas Mikolov. Cbow cuba meramalkan perkataan sasaran bergantung pada kata -kata konteks yang memerhatikannya dalam ayat yang diberikan. Dengan cara ini ia dapat menangkap hubungan semantik sehingga kata -kata rapat diwakili rapat di ruang dimensi yang tinggi.
Sebagai contoh, dalam ayat "kucing duduk di atas tikar" , jika saiz tetingkap konteks adalah 2, kata -kata konteks untuk "duduk" adalah ["", "kucing", "on", "the"] , dan tugas model adalah untuk meramalkan perkataan "duduk" .
Cbow beroperasi dengan mengagregatkan kata -kata konteks (contohnya, purata embeddings mereka) dan menggunakan perwakilan agregat ini untuk meramalkan perkataan sasaran. Senibina model melibatkan lapisan input untuk kata -kata konteks, lapisan tersembunyi untuk generasi embedding, dan lapisan output untuk meramalkan perkataan sasaran menggunakan taburan kebarangkalian.
Ia adalah model yang cepat dan cekap yang sesuai untuk mengendalikan kata -kata yang kerap, menjadikannya sesuai untuk tugas -tugas yang memerlukan pemahaman semantik, seperti klasifikasi teks, sistem cadangan, dan analisis sentimen.
Cbow adalah salah satu teknik yang paling mudah tetapi cekap seperti konteks untuk membenamkan perkataan di mana seluruh perbendaharaan kata kata -kata dipetakan ke vektor. Bahagian ini juga menerangkan operasi sistem CBOW sebagai cara untuk memahami kaedah pada tahap yang paling asas, membincangkan idea -idea utama yang menyokong kaedah CBow, serta menawarkan panduan komprehensif kepada susun atur seni bina sistem pengiraan hit CBow.
CBow bergantung pada dua konsep utama: Kata Konteks dan Word Sasaran.
Dengan menganalisis hubungan antara konteks dan kata -kata sasaran di seluruh korpora besar, Cbow menghasilkan embeddings yang menangkap hubungan semantik antara kata -kata.
Berikut adalah pecahan bagaimana kerja cbow, langkah demi langkah:
Tukar kata-kata konteks dan sasaran perkataan menjadi vektor satu panas berdasarkan saiz perbendaharaan kata. Untuk perbendaharaan kata saiz 5, perwakilan satu-panas perkataan "cinta" mungkin kelihatan seperti [0, 1, 0, 0, 0] .
Lulus kata-kata konteks yang dikodkan satu-panas melalui lapisan embedding. Lapisan ini memaparkan setiap perkataan ke perwakilan vektor yang padat, biasanya dimensi yang lebih rendah daripada saiz perbendaharaan kata.
Agregat embeddings semua kata konteks (misalnya, dengan merumuskan atau menjumlahkannya) untuk membentuk vektor konteks tunggal.
Ulangi proses untuk semua pasangan sasaran konteks di korpus sehingga model menumpu.
Beg berterusan Arsitektur Model Kata -kata (CBow) direka untuk meramalkan perkataan sasaran berdasarkan kata -kata konteksnya. Ia adalah rangkaian saraf cetek dengan struktur yang mudah namun berkesan. Senibina CBow terdiri daripada komponen berikut:
Input :
Kalimat: "Saya suka pembelajaran mesin" , sasaran perkataan: "mesin" , kata -kata konteks: ["Saya", "cinta", "belajar"] .
Pengekodan satu-panas :
Perbendaharaan Kata: ["Saya", "Cinta", "Mesin", "Belajar", "Ai"]
Lapisan Embedding :
Embeddings:
Pengagregatan :
Lapisan output :
Lapisan Input: ["I", "Cinta", "Pembelajaran"] -> Pengekodan satu-panas -> Lapisan Embedding -> Embeddings padat -> vektor konteks agregat -> softmax lapisan yang disambungkan sepenuhnya Output: perkataan "mesin" yang diramalkan
Kami sekarang akan berjalan melalui pelaksanaan model CBow dari awal di Python.
Spike pertama adalah untuk mengubah teks menjadi token, kata-kata yang dihasilkan ke dalam pasangan sasaran konteks dengan konteks sebagai kata-kata yang mengandungi perkataan sasaran.
Corpus = "Fox coklat cepat melompat ke atas anjing malas" corpus = corpus.lower (). Split () # tokenisasi dan penukaran huruf kecil # Tentukan saiz tetingkap konteks C = 2 context_target_pairs = [] # Menghasilkan pasangan sasaran konteks untuk i dalam julat (c, len (corpus) - c): konteks = corpus [i - c: i] corpus [i 1: i c 1] sasaran = corpus [i] context_target_pairs.append ((konteks, sasaran)) Cetak ("Pasangan sasaran konteks:", context_target_pairs)
Output:
Pasangan sasaran konteks: [(['the', 'cepat', 'fox', 'melompat'], 'coklat'), (['cepat', 'coklat', 'melompat', 'over', 'fox'), ('coklat', 'fox', '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' (['melompat', 'lebih', 'malas', 'anjing'], '')]
Kami membina perbendaharaan kata (satu set kata yang unik), kemudian peta setiap perkataan ke indeks yang unik dan sebaliknya untuk mencari yang cekap semasa latihan.
# Buat perbendaharaan kata dan peta setiap perkataan ke indeks vocab = set (corpus) word_to_index = {word: idx for idx, word in enumerate (vocab)} index_to_word = {idx: word for word, idx dalam word_to_index.items ()} Cetak ("Kamus Word to Index:", word_to_index)
Output:
Word to Index Dictionary: {'Brown': 0, 'Dog': 1, 'Quick': 2, 'Jumps': 3, 'Fox': 4, 'Over': 5, 'the' the 'the' the 'the' the 'the' the ': 6, lazy': 7}
Pengekodan satu panas berfungsi dengan mengubah setiap perkataan dalam sistem pembentukan perkataan ke dalam vektor, di mana penunjuk perkataan adalah '1' manakala seluruh tempat mengambil '0,' atas sebab-sebab yang tidak lama lagi akan jelas.
def one_hot_encode (word, word_to_index): one_hot = np.zeros (len (word_to_index)) one_hot [word_to_index [word]] = 1 kembali one_hot # Contoh penggunaan untuk perkataan "cepat" context_one_hot = [one_hot_encode (word, word_to_index) untuk perkataan dalam ['the', 'cepat']] Cetak ("Pengekodan satu-panas untuk 'cepat':", context_one_hot [1])
Output:
Pengekodan satu panas untuk 'cepat': [0. 0. 1. 0. 0. 0. 0.]
Dalam langkah ini, kami membuat rangkaian neural asas dengan dua lapisan: satu untuk embeddings perkataan dan satu lagi untuk mengira output berdasarkan kata -kata konteks, dengan purata konteks dan lulus melalui rangkaian.
Kelas Cbow: def __init __ (diri, vocab_size, embedding_dim): # Secara rawak memulakan berat untuk lapisan embedding dan output self.w1 = np.random.randn (vocab_size, embedding_dim) self.w2 = np.random.randn (embedding_dim, vocab_size) def forward (diri, context_words): # Kirakan lapisan tersembunyi (purata perkataan konteks) h = np.mean (context_words, paksi = 0) # Kirakan lapisan output (kebarangkalian softmax) output = np.dot (h, self.w2) output pulangan def ke belakang (diri, context_words, target_word, learning_rate = 0.01): # Lulus ke hadapan h = np.mean (context_words, paksi = 0) output = np.dot (h, self.w2) # Kirakan ralat dan kecerunan ralat = sasaran_word - output self.w2 = learning_rate * np.outer (h, ralat) self.w1 = learning_rate * np.outer (context_words, ralat) # Contoh membuat objek cbow vocab_size = len (word_to_index) embedding_dim = 5 # mari kita asumsikan embeddings 5 dimensi cbow_model = cbow (vocab_size, embedding_dim) # Menggunakan kata dan sasaran konteks rawak (sebagai contoh) context_words = [one_hot_encode (word, word_to_index) untuk perkataan dalam ['the', 'cepat', 'fox', 'melompat']] context_words = np.array (context_words) context_words = np.mean (context_words, axis = 0) # kata -kata konteks purata sasaran_word = one_hot_encode ('coklat', word_to_index) # Lulus melalui model cbow output = cbow_model.forward (context_words) Cetak ("Output Cbow Forward Pass:", Output)
Output:
Output Cbow Forward Pass: [[-0.20435729 -0.23851241 -0.08105261 -0.14251447 0.20442154 0.14336586 -0.06523201 0.0255063] [-0.0192184 -0.12958821 0.1019369 0.11101922 -0.17773069 -0.02340574 -0.22222151 -0.23863179] [0.21221977 -0.15263454 -0.015248 0.27618767 0.02959409 0.21777961 0.16619577 -0.20560026] [0.05354038 0.06903295 0.0592706 -0.13509918 -0.00439649 0.18007843 0.1611929 0.2449023] [0.01092826 0.19643582 -0.07430934 -0.16443165 -0.01094085 -0.27452367 -0.13747784 0.31185284]]
Tensorflow memudahkan proses dengan menentukan rangkaian saraf yang menggunakan lapisan penyembuhan untuk mempelajari perwakilan perkataan dan lapisan padat untuk output, menggunakan kata -kata konteks untuk meramalkan perkataan sasaran.
Import Tensorflow sebagai TF # Tentukan model cbow mudah menggunakan tensorflow Kelas CbowModel (tf.keras.model): def __init __ (diri, vocab_size, embedding_dim): super (cbowmodel, diri) .__ init __ () self.embeddings = tf.keras.layers.embedding (input_dim = vocab_size, output_dim = embedding_dim) self.output_layer = tf.keras.layers.dense (vocab_size, activation = 'softMax') DEF CALL (Diri, Context_Words): embedded_context = self.embeddings (context_words) context_avg = tf.reduce_mean (embedded_context, paksi = 1) output = self.output_layer (context_avg) output pulangan # Contoh penggunaan Model = CbowModel (vocab_size = 8, embedding_dim = 5) context_input = np.random.randint (0, 8, saiz = (1, 4)) # input konteks rawak context_input = tf.convert_to_tensor (context_input, dtype = tf.int32) # Lulus ke hadapan output = model (context_input) Cetak ("Output model cbow tensorflow:", output.numpy ())
Output:
Output model cbow tensorflow: [[0.12362909 0.12616573 0.12758036 0.12601459 0.12477358 0.1237749 0.12319998 0.12486169]]
Gensim menawarkan pelaksanaan CBow dalam fungsi Word2Vec () di mana seseorang tidak perlu bekerja dengan latihan ketika Gensim melatih embeddings Word dari korpus teks.
Import Gensim dari gensim.models import word2vec # Sediakan data (senarai senarai perkataan) corpus = [["the", "cepat", "coklat", "fox"], ["melompat", "over", "the", "malas", "dog"]] # Melatih model Word2Vec menggunakan CBow model = word2vec (corpus, vector_size = 5, window = 2, min_count = 1, sg = 0) # Dapatkan perwakilan vektor perkataan vektor = model.wv ['fox'] Cetak ("Perwakilan Vektor 'Fox':", Vektor)
Output:
Perwakilan vektor 'Fox': [-0.06810732 -0.01892803 0.11537147 -0.15043275 -0.07872207]
Kami kini akan meneroka kelebihan beg perkataan yang berterusan:
Marilah kita membincangkan batasan cbow:
Model Beg Berterusan (CBOW) telah terbukti menjadi pendekatan yang cekap dan intuitif untuk menghasilkan embeddings perkataan dengan memanfaatkan konteks sekitarnya. Melalui seni bina yang mudah namun berkesan, CBow menjembatani jurang antara teks mentah dan perwakilan vektor yang bermakna, membolehkan pelbagai aplikasi NLP. Dengan memahami mekanisme kerja Cbow, kekuatan, dan batasannya, kita mendapat pandangan yang lebih mendalam tentang evolusi teknik NLP. Dengan peranan asasnya dalam generasi penyembuhan, CBow terus menjadi batu loncatan untuk meneroka model bahasa canggih.
A: Cbow meramalkan perkataan sasaran menggunakan kata-kata konteks, sementara skip-gram meramalkan perkataan konteks menggunakan perkataan sasaran.
S2: Kenapa Cow Computasi lebih cepat daripada Skip-Gram?A: Cbow memproses pelbagai perkataan konteks secara serentak, sementara skip-gram menilai setiap perkataan konteks secara bebas.
S3: Bolehkah cbow mengendalikan kata -kata langka dengan berkesan?A: Tidak, Skip-gram pada umumnya lebih baik pada perwakilan pembelajaran untuk kata-kata yang jarang berlaku.
S4: Apakah peranan lapisan embedding di Cbow?A: Lapisan embedding mengubah vektor satu panas yang jarang menjadi perwakilan padat, menangkap semantik perkataan.
S5: Adakah CBow masih relevan hari ini?A: Ya, sementara model yang lebih baru seperti Bert wujud, Cbow tetap menjadi konsep asas dalam embeddings word.
Atas ialah kandungan terperinci Memahami Beg Berterusan Kata (Cbow). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!