You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/fi/6-NLP/2-Tasks/README.md

13 KiB

Yleisiä luonnollisen kielen käsittelyn tehtäviä ja tekniikoita

Useimmissa luonnollisen kielen käsittelyn tehtävissä käsiteltävä teksti täytyy pilkkoa, tutkia ja tallentaa tulokset tai verrata niitä sääntöihin ja tietokantoihin. Näiden tehtävien avulla ohjelmoija voi selvittää tekstin merkityksen, tarkoituksen tai pelkästään sanojen ja termien esiintymistiheyden.

Esiluennon kysely

Tutustutaan yleisiin tekniikoihin, joita käytetään tekstin käsittelyssä. Yhdistettynä koneoppimiseen nämä tekniikat auttavat analysoimaan suuria tekstimääriä tehokkaasti. Ennen kuin sovellamme koneoppimista näihin tehtäviin, on tärkeää ymmärtää ongelmat, joita NLP-asiantuntija kohtaa.

NLP:n yleiset tehtävät

Tekstin analysointiin on monia eri tapoja. On olemassa tehtäviä, joita voit suorittaa, ja näiden tehtävien avulla voit ymmärtää tekstiä ja tehdä johtopäätöksiä. Yleensä nämä tehtävät suoritetaan tietyssä järjestyksessä.

Tokenisointi

Todennäköisesti ensimmäinen asia, jonka useimmat NLP-algoritmit tekevät, on tekstin jakaminen tokeneiksi eli sanoiksi. Vaikka tämä kuulostaa yksinkertaiselta, välimerkkien ja eri kielten sanan- ja lauseenrajoittimien huomioiminen voi tehdä siitä haastavaa. Saatat joutua käyttämään erilaisia menetelmiä rajojen määrittämiseksi.

tokenisointi

Tokenisointi lauseesta Ylpeys ja ennakkoluulo. Infografiikka: Jen Looper

Upotukset

Sana-upotukset ovat tapa muuttaa tekstidata numeeriseen muotoon. Upotukset tehdään siten, että samankaltaista merkitystä omaavat tai yhdessä käytetyt sanat ryhmittyvät yhteen.

sana-upotukset

"Kunnioitan suuresti hermojasi, ne ovat vanhoja ystäviäni." - Sana-upotukset lauseesta Ylpeys ja ennakkoluulo. Infografiikka: Jen Looper

Kokeile tätä mielenkiintoista työkalua tutkiaksesi sana-upotuksia. Klikkaamalla yhtä sanaa näet samankaltaisten sanojen ryhmiä: 'toy' ryhmittyy sanojen 'disney', 'lego', 'playstation' ja 'console' kanssa.

Jäsennys ja sanaluokkien tunnistus

Jokainen tokenisoitu sana voidaan merkitä sanaluokaksi, kuten substantiiviksi, verbiksi tai adjektiiviksi. Lause the quick red fox jumped over the lazy brown dog voidaan merkitä sanaluokittain esimerkiksi fox = substantiivi, jumped = verbi.

jäsennys

Lauseen jäsennys Ylpeys ja ennakkoluulo. Infografiikka: Jen Looper

Jäsennys tarkoittaa sanojen välisten suhteiden tunnistamista lauseessa esimerkiksi the quick red fox jumped on adjektiivi-substantiivi-verbi-sekvenssi, joka on erillinen lazy brown dog -sekvenssistä.

Sanojen ja fraasien esiintymistiheys

Kun analysoidaan suurta tekstimassaa, on hyödyllistä rakentaa sanakirja, joka sisältää kaikki kiinnostavat sanat tai fraasit ja niiden esiintymistiheyden. Lauseessa the quick red fox jumped over the lazy brown dog sanan the esiintymistiheys on 2.

Tarkastellaan esimerkkitekstiä, jossa lasketaan sanojen esiintymistiheys. Rudyard Kiplingin runo The Winners sisältää seuraavan säkeen:

What the moral? Who rides may read.
When the night is thick and the tracks are blind
A friend at a pinch is a friend, indeed,
But a fool to wait for the laggard behind.
Down to Gehenna or up to the Throne,
He travels the fastest who travels alone.

Koska fraasien esiintymistiheys voi olla kirjainkoolle herkkä tai herkkä, fraasin a friend esiintymistiheys on 2, the esiintymistiheys on 6 ja travels esiintymistiheys on 2.

N-grammit

Teksti voidaan jakaa tietyn pituisiksi sanasekvensseiksi: yksi sana (unigrammi), kaksi sanaa (bigrammi), kolme sanaa (trigrammi) tai mikä tahansa määrä sanoja (n-grammi).

Esimerkiksi lause the quick red fox jumped over the lazy brown dog n-grammiarvolla 2 tuottaa seuraavat n-grammit:

  1. the quick
  2. quick red
  3. red fox
  4. fox jumped
  5. jumped over
  6. over the
  7. the lazy
  8. lazy brown
  9. brown dog

Tätä voi olla helpompi visualisoida liukuvana laatikkona lauseen päällä. Tässä esimerkki 3 sanan n-grammeista, n-grammi on lihavoitu jokaisessa lauseessa:

  1. the quick red fox jumped over the lazy brown dog
  2. the quick red fox jumped over the lazy brown dog
  3. the quick red fox jumped over the lazy brown dog
  4. the quick red fox jumped over the lazy brown dog
  5. the quick red fox jumped over the lazy brown dog
  6. the quick red fox jumped over the lazy brown dog
  7. the quick red fox jumped over the lazy brown dog
  8. the quick red fox jumped over the lazy brown dog

n-grammit liukuva ikkuna

N-grammiarvo 3: Infografiikka: Jen Looper

Substantiivifraasien tunnistus

Useimmissa lauseissa on substantiivi, joka toimii subjektina tai objektina. Englannissa sen voi usein tunnistaa sanoista 'a', 'an' tai 'the', jotka edeltävät sitä. Subjektin tai objektin tunnistaminen lauseesta 'substantiivifraasin tunnistamisella' on yleinen tehtävä NLP:ssä, kun pyritään ymmärtämään lauseen merkitystä.

Lauseessa "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun." voitko tunnistaa substantiivifraasit?

Lauseessa the quick red fox jumped over the lazy brown dog on 2 substantiivifraasia: quick red fox ja lazy brown dog.

Tunteiden analysointi

Lause tai teksti voidaan analysoida sen tunnesävyn perusteella, eli kuinka positiivinen tai negatiivinen se on. Tunnesävyä mitataan polariteetilla ja objektiivisuudella/subjektiivisuudella. Polariteetti mitataan välillä -1.01.0 (negatiivisesta positiiviseen) ja 0.01.0 (objektiivisimmasta subjektiivisimpaan).

Myöhemmin opit, että tunnesävyn määrittämiseen on erilaisia tapoja koneoppimisen avulla, mutta yksi tapa on käyttää listaa sanoista ja fraaseista, jotka ihmisen asiantuntija on luokitellut positiivisiksi tai negatiivisiksi, ja soveltaa tätä mallia tekstiin polariteettipisteen laskemiseksi. Näetkö, miten tämä toimisi joissakin tilanteissa ja vähemmän hyvin toisissa?

Taivutus

Taivutus mahdollistaa sanan muuttamisen yksikkö- tai monikkomuotoon.

Lemmatisaatio

Lemma on sanan perusmuoto tai kantasana, esimerkiksi flew, flies, flying ovat verbin fly lemma.

NLP-tutkijalle on myös saatavilla hyödyllisiä tietokantoja, kuten:

WordNet

WordNet on tietokanta, joka sisältää sanoja, synonyymejä, antonyymejä ja monia muita yksityiskohtia eri kielten sanoista. Se on erittäin hyödyllinen, kun pyritään rakentamaan käännöksiä, oikeinkirjoituksen tarkistimia tai minkä tahansa tyyppisiä kielityökaluja.

NLP-kirjastot

Onneksi sinun ei tarvitse rakentaa kaikkia näitä tekniikoita itse, sillä saatavilla on erinomaisia Python-kirjastoja, jotka tekevät NLP:stä paljon helpommin lähestyttävää kehittäjille, jotka eivät ole erikoistuneet luonnollisen kielen käsittelyyn tai koneoppimiseen. Seuraavissa oppitunneissa on lisää esimerkkejä näistä, mutta tässä opit joitakin hyödyllisiä esimerkkejä seuraavaa tehtävää varten.

Harjoitus - TextBlob-kirjaston käyttö

Käytetään kirjastoa nimeltä TextBlob, sillä se sisältää hyödyllisiä API-rajapintoja näiden tehtävien käsittelyyn. TextBlob "perustuu NLTK- ja pattern-kirjastojen vahvuuksiin ja toimii hyvin molempien kanssa." Sen API sisältää huomattavan määrän koneoppimista.

Huom: Hyödyllinen Quick Start -opas on saatavilla TextBlobille, ja sitä suositellaan kokeneille Python-kehittäjille.

Kun yritetään tunnistaa substantiivifraaseja, TextBlob tarjoaa useita vaihtoehtoja fraasien tunnistamiseen.

  1. Tutustu ConllExtractor-luokkaan.

    from textblob import TextBlob
    from textblob.np_extractors import ConllExtractor
    # import and create a Conll extractor to use later 
    extractor = ConllExtractor()
    
    # later when you need a noun phrase extractor:
    user_input = input("> ")
    user_input_blob = TextBlob(user_input, np_extractor=extractor)  # note non-default extractor specified
    np = user_input_blob.noun_phrases                                    
    

    Mitä tässä tapahtuu? ConllExtractor on "substantiivifraasien tunnistaja, joka käyttää chunk-jäsennystä, joka on koulutettu ConLL-2000-koulutusdatalla." ConLL-2000 viittaa vuoden 2000 Computational Natural Language Learning -konferenssiin. Jokaisena vuonna konferenssi järjesti työpajan, jossa käsiteltiin haastavaa NLP-ongelmaa, ja vuonna 2000 se oli substantiivifraasien tunnistus. Malli koulutettiin Wall Street Journalin datalla, jossa "osat 15-18 toimivat koulutusdatana (211727 tokenia) ja osa 20 testidatana (47377 tokenia)". Voit tutustua käytettyihin menetelmiin täällä ja tuloksiin.

Haaste - paranna bottiasi NLP:n avulla

Edellisessä oppitunnissa rakensit hyvin yksinkertaisen kysymys-vastausbotin. Nyt teet Marvinista hieman empaattisemman analysoimalla syötteesi tunnesävyn ja tulostamalla vastauksen, joka vastaa tunnesävyä. Sinun täytyy myös tunnistaa substantiivifraasi ja kysyä siitä lisää.

Askeleet paremman keskustelubotin rakentamiseksi:

  1. Tulosta ohjeet, jotka neuvovat käyttäjää, miten botin kanssa voi keskustella
  2. Aloita silmukka
    1. Hyväksy käyttäjän syöte
    2. Jos käyttäjä haluaa lopettaa, lopeta
    3. Käsittele käyttäjän syöte ja määritä sopiva tunnesävyn vastaus
    4. Jos tunnesävyssä havaitaan substantiivifraasi, monikkomuotoile se ja kysy lisää aiheesta
    5. Tulosta vastaus
  3. Palaa kohtaan 2

Tässä on koodinpätkä tunnesävyn määrittämiseksi TextBlobin avulla. Huomaa, että tunnesävyn vastauksia on vain neljä sävyä (voit lisätä enemmän, jos haluat):

if user_input_blob.polarity <= -0.5:
  response = "Oh dear, that sounds bad. "
elif user_input_blob.polarity <= 0:
  response = "Hmm, that's not great. "
elif user_input_blob.polarity <= 0.5:
  response = "Well, that sounds positive. "
elif user_input_blob.polarity <= 1:
  response = "Wow, that sounds great. "

Tässä on esimerkkitulostus ohjeeksi (käyttäjän syöte alkaa rivillä, jossa on >):

Hello, I am Marvin, the friendly robot.
You can end this conversation at any time by typing 'bye'
After typing each answer, press 'enter'
How are you today?
> I am ok
Well, that sounds positive. Can you tell me more?
> I went for a walk and saw a lovely cat
Well, that sounds positive. Can you tell me more about lovely cats?
> cats are the best. But I also have a cool dog
Wow, that sounds great. Can you tell me more about cool dogs?
> I have an old hounddog but he is sick
Hmm, that's not great. Can you tell me more about old hounddogs?
> bye
It was nice talking to you, goodbye!

Yksi mahdollinen ratkaisu tehtävään löytyy täältä

Tietotesti

  1. Uskotko, että empaattiset vastaukset voisivat 'huijata' jonkun ajattelemaan, että botti todella ymmärtää heitä?
  2. Tekevätkö substantiivifraasin tunnistaminen botista 'uskottavamman'?
  3. Miksi substantiivifraasin tunnistaminen lauseesta olisi hyödyllistä?

Toteuta botti edellisessä tietotestissä ja testaa sitä ystävälläsi. Voiko se huijata heitä? Voitko tehdä botista 'uskottavamman'?

🚀Haaste

Valitse tehtävä edellisestä tietotestistä ja yritä toteuttaa se. Testaa bottia ystävälläsi. Voiko se huijata heitä? Voitko tehdä botista 'uskottavamman'?

Jälkiluennon kysely

Kertaus ja itseopiskelu

Seuraavissa oppitunneissa opit lisää tunnesävyn analysoinnista. Tutki tätä mielenkiintoista tekniikkaa esimerkiksi KDNuggets-artikkeleista.

Tehtävä

Saata botti keskustelemaan


Vastuuvapauslauseke:
Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.