Gekissimo.net - Opi ansaitsemaan rahaa webilläsi Internetissä!

Kysymysten vastausmallin rakentaminen FNet Encoderilla

Seuraava artikkeli auttaa sinua: Kysymysten vastausmallin rakentaminen FNet Encoderilla

Muuntajan arkkitehtuuri on enkooderi-dekooderi. Enkooderi kerää syötelauseesta ominaisuuksia, joita dekooderi käyttää sitten tuloslauseen luomiseen. FNet Encoder on Fourier-muunnosperiaatteeseen perustuva muuntaja. Sen väitetään olevan huomattavasti nopeampi kuin BERT-malli. Tämä saavutettiin poistamalla BERT-mallin itsehuomiokerros Fourier-muunnoksen avulla. Tässä artikkelissa keskitymme keskustelemaan FNet Encoderin arkkitehtuurista ja toteutuksesta. Seuraavassa on aiheet, joista keskustellaan.

Sisällysluettelo

  1. Lyhyt kuvaus Encoder-Decoder-mallista
  2. FNet Encoderin arkkitehtuuri
  3. FNet-enkooderin edut ja haitat
  4. Kysymyksiin vastaaminen FNet-enkooderilla

Lyhyt kuvaus Encoder-Decoder-mallista

Natural Language Processingissa muuntaja toimii tulkkina syvään oppimiseen ymmärtämään ihmiskieltä ja saavuttamaan tavoitteet, kuten tunteiden analysointi, kysymyksiin vastaaminen, tekstin luokittelu jne. Muuntaja koostuu pääosin kahdesta komponentista, kooderista ja dekooderista.

Sanan arvauspeli on paras tapa ymmärtää kooderi-dekooderi-paradigma. Pelin säännöt ovat suhteellisen yksinkertaiset: Pelaajan 1 on piirrettävä satunnaisesti listalta valitun sanan merkitys. Toisen tiimin jäsenen tehtävänä on analysoida piirustus ja määrittää, mitä sanaa sen on tarkoitus edustaa. Kolme keskeistä osaa ovat pelaaja 1 (se, joka muuttaa sanan maalaukseksi), taideteos (jänis) ja henkilö, joka arvaa oikein piirustuksen kuvaaman sanan (pelaaja 2). Joten pelaaja 1 on enkooderi, joka ottaa syötearvon ja muuntaa sen muotoon, jonka pelaaja 2 ymmärtää, ja sitten pelaaja 2 muuntaa vastauksen ihmiskieleksi.

Tiedot on koodattava, jotta ne ovat halutussa muodossa. Yllä olevassa esimerkissä muutetaan sana (teksti) kuvaksi (kuvaksi). Koneoppimisen yhteydessä käännämme sanajonon ihmiskielestä kaksiulotteiseksi vektoriksi, jota joskus kutsutaan piilotilaksi. Pinoamalla toistuva neuroverkko luodaan kooderi (RNN).

Kaksiulotteinen vektori, joka edustaa tulosekvenssin koko merkitystä, on kooderin lähtö. RNN:n solujen määrä määrittää vektorin pituuden.

Koodattu viesti on dekoodattava, ennen kuin se voidaan ymmärtää. Pelaaja 2 kirjoittaa kuvan sanaksi. Dekooderi muuttaa kaksiulotteisen vektorin tulossekvenssiksi, joka on englanninkielinen lause, koneoppimismallissa. Englanninkielisen termin ennustamiseksi se on myös rakennettu RNN-kerroksista ja paksusta kerroksesta.

🔥 Empfohlen:  Kuinka hyvä sisältöstrategia voi ansaita rahaa: 11 tekemättä ja kieltäytymistä

Etsitkö täydellistä arkistoa tietotieteessä käytettävistä Python-kirjastoista, katso tästä.

FNet Encoderin arkkitehtuuri

Jokainen FNet-nimellä tunnetun tarkkaavaisen Transformer-suunnittelun kerros koostuu eteenpäin syötettävästä alikerroksesta, jota seuraa Fourier-sekoitusalikerros. Kunkin muuntajan kooderikerroksen itsehuomio-alikerros korvataan olennaisesti Fourier-alikerroksella, joka suorittaa kaksiulotteisen Diskreetin Fourier-muunnoksen (DFT) upotustulollaan.

  • Yksiulotteinen DFT sekvenssidimensiota pitkin
  • Yksiulotteinen DFT piilotettua ulottuvuutta pitkin

Epälineaarisia myötäkytkentäisiä alikerroksia tai lähtökerroksia ei tarvitse muuttaa, koska vain todellinen komponentti säilytetään monimutkaisten arvojen käsittelemiseksi. Kun koko muunnoksen todellinen osa haettiin vasta Fourier-alikerroksen jälkeen, toisin sanoen sen jälkeen, kun oli käytetty molempia yksiulotteisia DFT:itä pitkin sekvenssiulottuvuutta yhdessä piilotetun ulottuvuuden kanssa, FNet tuotti parhaat tulokset.

Analytics India -lehti

Fourier-muunnos voidaan parhaiten ymmärtää erittäin tehokkaaksi token-sekoitusmenetelmäksi, joka antaa eteenpäinsyöttöalikerroksille riittävän pääsyn kaikkiin tokeneihin. Voimme myös ajatella kunkin vuorottelevan enkooderilohkon suorittavan vaihtoehtoisia Fourier- ja käänteisiä Fourier-muunnoksia, siirtäen tuloa “aika-” ja taajuusalueen välillä Fourier-muunnoksen kaksoisluonteen ansiosta. FNetin voidaan katsoa vaihtelevan kertolaskujen ja konvoluutioiden välillä, koska kertominen myötäkytkentäisten alikerroksen kertoimilla taajuusalueella on samanlaista kuin konvoloimista (verrattavissa olevalla kerroinjoukolla) aika-alueella.

FNet-enkooderin edut ja haitat

FNet-enkooderin tärkeimmät edut voidaan luetella seuraavasti:

  • Tiedon menetys muunnoksen aikana on minimaalinen.
  • Tämä menetelmä korostaa sitä tosiasiaa, että kooderi voidaan rakentaa ilman huomiokerroksia
  • Anturin nopeus kasvaa 3 % BERT-enkooderista.

FNetissä on tiettyjä haittoja

  • Se on hitaampaa GPU: lla
  • Sillä on huomattavasti suurempi muistitilavuus.
  • Se on epävakaa harjoittelun aikana

Kysymyksiin vastaaminen FNet-enkooderilla

Tämä artikkeli käyttää Keras-tasoa Fnet-enkooderin ja -dekooderin mallin rakentamiseen, joka opetetaan Cornell Dialog Corpuksessa. Tämä korpus sisältää mittavan, runsain merkinnöin varustetun kokoelman fiktiivisiä puheita, jotka on otettu leikkaamattomista elokuvakäsikirjoituksista. Malli yrittää vastata kysymyksiin esitettyjen kysymysten perusteella.

Toteutuksen alkuvaiheet, kuten tietojen lukeminen ja käsittely, jäävät väliin aikarajoitusten vuoksi, katso viittaukset-osiossa annettu colab-muistikirja.

🔥 Empfohlen:  6 suosituinta GPT-4:n käyttötapausta

Mallia opetetaan vain 13 %:lle kokonaisdatasta rajoitusten vuoksi, että sitä voitaisiin harjoitella suuremmalla määrällä dataa. Kun tiedot on ladattu ja jaettu koulutus- ja validointitietoihin, teksti on tokenisoitava, vektorisoitava ja täytettävä.

vectorizer = kerrokset.TextVectorization(VOCAB_SIZE, standardize=preprocess_text, output_mode=”int”, output_sequence_length=MAX_LENGTH, ) vectorizer.adapt(tf.data.Dataset.from_tensor_slices((kysymykset + vastaukset))).batch(128)

Tekstin vektorointi tapahtuu Keras TextVectorization -kerroksen avulla. Keras-mallin tekstin käsittelyn perusasetukset ovat käytettävissä tässä tasossa. Se muuntaa merkkijonokokoelman (jokainen näyte on yhtä kuin yksi merkkijono) merkki-indeksien luetteloksi (jokainen näyte on yhtä suuri kuin kokonaislukujen merkkiindeksien 1D-tensori) tai tiheäksi esitykseksi (jokainen näyte on yhtä suuri kuin kelluntatensori 1D-tensori). arvot, jotka antavat tietoa näytteen tunnuksista).

koulutus = train_data.map(vectorize_text, num_parallel_calls=tf.data.AUTOTUNE) validointi = val_data.map(vectorize_text, num_parallel_calls=tf.data.AUTOTUNE) train_dataset = ( training.cache() .shuffle_SIZEBCH)ATFER_SIZEB .prefetch(tf.data.AUTOTUNE) ) val_dataset = validation.cache().batch(BATCH_SIZE).prefetch(tf.data.AUTOTUNE)

Koska kunkin lauseen sanojen määrä vaihtelee, täyttö on tarpeen. Voimme myös asettaa kullekin lauseelle enimmäismäärän sanoja, ja jos se ylittää tämän määrän, voimme jättää tietyt sanat pois.

Rakenna Fnet-enkooderi ja dekooderi, harjoittele malli harjoitustietojen pohjalta ja olemme valmiit käyttämään mallia kysymykseen vastaamiseen.

luokka FnetEncode(kerrokset.Layer): def __init__(self, embed_dim, dense_dim, **kwargs): super(FnetEncode, itse).__init__(**kwargs) self.embed_dim = embed_dim self.dense_dim = dense_dim self.dense_proj .Sequential(
[
layers.Dense(dense_dim, activation=”relu”),
layers.Dense(embed_dim),
]
) self.layernorm_1 = layers.LayerNormalization() self.layernorm_2 = layers.LayerNormalization() def call(self, inputs): inp_complex = tf.cast(inputs, tf.complex64) fft = tf.math.real(tf.signal) .fft2d(inp_complex)) proj_input = self.layernorm_1(inputs + fft) proj_output = self.dense_proj(proj_input) return self.layernorm_2(proj_input + proj_output)

Kuten edellä arkkitehtuuriosiossa kerrottiin, Fnet-kooderissa on yhteensä 2 normalisointikerrosta ja yksi Fourier-muunnoskerros. Fourier-kerroksen tulos lähetetään normalisoitavaksi ja lähetetään sitten tiheälle kerrokselle.

Dekooderin osalta voit katsoa viittausosion liitteenä olevasta colab-muistikirjasta. Sitten Fnet-malli opetettaisiin harjoitustietojen perusteella ja validoitaisiin validointitietojen perusteella.

fNetModel.fit(train_dataset, epochs=1, validation_data=val_dataset)

Analytics India -lehti

Tarkkuus on alhainen, koska mallia harjoitellaan vain 13 prosentissa tiedoista, jos sitä harjoitellaan enemmän datalla, se toimisi varmasti paremmin.

decoding_text(“Kuinka vaikeaa on sanoa anteeksi?”)

Analytics India -lehti

Johtopäätös

Poikkeuksellinen tarkkuus, joka saavutetaan, kun FNetin Fourier-alikerrokset korvataan muuntajan itsehuomio-alikerroksilla, korostaa myös jännittävää mahdollisuutta soveltaa lineaarisia muunnoksia huomiomekanismien sijaan tekstin luokittelutehtävissä. Tämän artikkelin avulla olemme ymmärtäneet FNet-kooderin arkkitehtuurin ja toteutuksen.

🔥 Empfohlen:  Puhelun tallennuksen lopetusilmoitus: Näin voit poistaa 2023:n käytöstä

Viitteet