Gensim Tutorial – Täydellinen aloitusopas

Gensimiä mainostetaan luonnollisen kielen prosessointipakettina, joka tekee ”aihepiirien mallintamista ihmisille”. Mutta se on käytännössä paljon muutakin. Se on johtava ja huippuluokan paketti tekstien käsittelyyn, sanavektorimallien (kuten Word2Vec, FastText jne.) kanssa työskentelyyn ja aihepiirimallien rakentamiseen.

Gensim Tutorial – Täydellinen aloitusopas. Kuva: Jasmin Schreiber

Sisältö

1. Johdanto
2. Mikä on sanakirja ja korpus?
3. Miten luoda sanakirja lauseiden luettelosta?
4. Miten luoda sanakirja yhdestä tai useammasta tekstitiedostosta?
5. Miten luoda sanapussikorpus gensimissä?
6. Miten luodaan sanapussikorpus ulkoisesta tekstitiedostosta?
7. Miten tallennetaan gensim-sanakirja ja -korpus levylle ja ladataan takaisin?
8. Miten luodaan TFIDF-matriisi (korpus) gensimissä?
9. Miten luodaan TFIDF-matriisi (korpus)? Kuinka käyttää gensim downloader API:ta tietokokonaisuuksien lataamiseen?
10. Kuinka luoda bigrammeja ja trigrammeja käyttäen Phraser-malleja?
11. Miten luoda aihepiirimalleja LDA:n avulla?
12. Miten tulkitaan LDA-aihemallin tulosta?
13. Miten luodaan LSI-teemamalli gensimin avulla?
14. Miten koulutetaan Word2Vec-malli gensimin avulla?
15. Miten päivitetään olemassa olevaa Word2Vec-mallia uusilla tiedoilla?
16. Miten poimia sanavektoreita käyttämällä valmiiksi koulutettuja Word2Vec- ja FastText-malleja?
17. Miten luodaan asiakirjavektoreita Doc2Vecin avulla?
18. Miten lasketaan samankaltaisuusmittareita, kuten kosinin samankaltaisuus ja pehmeä kosinin samankaltaisuus?
19. Kuinka tiivistää tekstidokumentteja?
20. Johtopäätökset

Esittely

Mikä on gensim?

Gensimiä mainostetaan luonnollisen kielen prosessointipakettina, joka tekee ’aihepiirien mallintamista ihmisille’. Mutta käytännössä se on paljon muutakin.

Jos aihepiirien mallintaminen ei ole sinulle tuttua, se on tekniikka, jolla voidaan poimia taustalla olevia aiheita suurista tekstimassoista. Gensim tarjoaa LDA:n ja LSI:n kaltaisia algoritmeja (joita näemme myöhemmin tässä postauksessa) ja tarvittavaa hienostuneisuutta laadukkaiden aihepiirimallien rakentamiseen.

Voit väittää, että aihepiirimallit ja sanojen upottaminen ovat saatavilla muissa paketeissa, kuten scikit, R jne. Mutta teemamallien rakentamiseen ja arviointiin tarkoitettujen toimintojen laajuus ja laajuus on gensimissä vertaansa vailla, ja lisäksi paljon muita käteviä toimintoja tekstinkäsittelyyn.

Se on loistava paketti tekstinkäsittelyyn, sanavektorimallien kanssa työskentelyyn (kuten Word2Vec, FastText jne.) ja teemamallien rakentamiseen.

Yksi merkittävä etu gensimissä on myös: sen avulla voit käsitellä suuria tekstitiedostoja ilman, että koko tiedostoa tarvitsee ladata muistiin.

Tässä postauksessa on tarkoitus antaa käytännönläheinen yleiskatsaus lähes kaikkiin tärkeimpiin ominaisuuksiin, jotka on selitetty yksinkertaisella ja helposti ymmärrettävällä tavalla.

Tämän tutoriaalin päätteeksi tietäisit:

  • Mitkä ovat gensimin keskeiset käsitteet?
  • Mitä ovat sanakirja ja korpus, miksi niillä on merkitystä ja missä niitä käytetään?
  • Miten sanakirjaa ja korpusta luodaan ja miten niiden kanssa työskennellään?
  • Miten ladata ja työskennellä tekstidatan kanssa useista tekstitiedostoista muistitehokkaasti
  • Luo teemamalleja LDA:lla ja tulkitse tuotoksia
  • Luo TFIDF-mallia, bigrammeja, trigrammeja, Word2Vec-mallia, Doc2Vec-mallia
  • Laskekaa samankaltaisuusmittareita
  • Ja paljon muuta..

Aloitetaan.

Mikä on sanakirja ja korpus?

Voidakseen työskennellä tekstidokumenttien parissa, Gensim vaatii sanojen (eli tunnisteiden) muuntamista yksilöllisiksi tunnuksiksi. Tämän saavuttamiseksi Gensim antaa sinun luoda Dictionary-objektin, joka muuntaa jokaisen sanan yksilölliseksi id:ksi.

Katsomme, miten tämä oikeastaan tehdään seuraavassa osiossa.

Mutta miksi sanakirja-objektia tarvitaan ja missä sitä voidaan käyttää?

Sanakirja-objektia käytetään tyypillisesti ’sanapussin’ (bag of words) Corpusin luomiseen. Juuri tätä sanakirjaa ja sanapussia (Corpus) käytetään syötteenä aihepiirien mallintamiseen ja muihin malleihin, joihin Gensim on erikoistunut.

Millaisia tekstinsyötteitä gensim voi käsitellä? Syöteteksti tulee tyypillisesti kolmessa eri muodossa:

  1. Pythonin natiiviin listo-objektiin tallennettuina lauseina
  2. Yksittäisenä tekstitiedostona, pienenä tai suurena.
  3. Monessa tekstitiedostossa.

Nyt kun tekstinsyöttösi on suuri, sinun täytyy pystyä luomaan sanakirjaobjekti ilman, että sinun tarvitsee ladata koko tekstitiedostoa.

Hyvä uutinen on se, että Gensim antaa sinun lukea tekstiä ja päivittää sanakirjaa rivi kerrallaan lataamatta koko tekstitiedostoa järjestelmämuistiin. Katsotaan, miten se tehdään seuraavissa kahdessa osiossa.

Mutta ennen kuin päästään asiaan, ymmärretään hieman NLP-jargonia.

’Token’ tarkoittaa yleensä ’sanaa’. ’Dokumentti’ voi tyypillisesti tarkoittaa ’lausetta’ tai ’kappaletta’, ja ’korpus’ on tyypillisesti ’kokoelma dokumentteja sanapussina’. Toisin sanoen korpus sisältää kunkin asiakirjan osalta kunkin sanan tunnuksen ja sen esiintymistiheyden kyseisessä asiakirjassa. Tämän seurauksena tieto sanojen järjestyksestä katoaa.

Jos kaikki on tähän mennessä selvää, otetaanpa kädet likoon ja katsotaan, miten sanakirja luodaan lauseiden luettelosta.

Miten sanakirja luodaan lauseiden luettelosta?

Gensimissä sanakirja sisältää kartan kaikista sanoista (tokeneista) sen yksilölliseen tunnukseen.

Sanakirjan voi luoda lauseiden kappaleesta, tekstitiedostosta, joka sisältää useita rivejä tekstiä, ja useista tällaisista tekstitiedostoista, jotka sisältyvät hakemistoon. Toisessa ja kolmannessa tapauksessa teemme sen lataamatta koko tiedostoa muistiin, jotta sanakirja päivittyy, kun luet tekstiä rivi riviltä.

Aloitetaan ’Luettelo lauseista’ -syötteestä.

Kun sinulla on useita lauseita, sinun on muunnettava jokainen lause sanaluetteloksi. Listan ymmärtäminen on yleinen tapa tehdä tämä.

Kuten sanakirjassa sanotaan, sanakirjassa on 34 uniikkia merkkiä (eli sanaa). Katsotaanpa näiden merkkien yksilölliset tunnukset.

Olemme onnistuneesti luoneet Dictionary-olion. Gensim käyttää tätä sanakirjaa luodakseen bag-of-words-korpuksen, jossa asiakirjojen sanat korvataan sanakirjan antamilla vastaavilla id:llä.

Jos saat tulevaisuudessa uusia asiakirjoja, on myös mahdollista päivittää olemassa oleva sanakirja sisältämään uudet sanat.

Miten luoda sanakirja yhdestä tai useammasta tekstitiedostosta?

Sanakirjan voi luoda myös tekstitiedostosta tai tekstitiedostojen hakemistosta.

Alhaalla oleva esimerkki lukee tiedoston rivi riviltä ja käyttää gensimin simple_preprocess:tä käsittelemään tiedoston yhtä riviä kerrallaan.

Tässä on se etu, että voit lukea koko tekstitiedoston ilman, että lataat tiedostoa kerralla muistiin.

Käytetään esimerkkitiedostoa sample.txt havainnollistamaan tätä.

Loimme sanakirjan yhdestä tekstitiedostosta. Hienoa!

Nyt, miten luetaan yksi rivi kerrallaan useammasta tiedostosta?

Jos oletetaan, että kaikki tekstitiedostot ovat samassa hakemistossa, täytyy määritellä luokka, jolla on __iter__-metodi. Metodin __iter__() pitäisi käydä läpi kaikki tiedostot tietyssä hakemistossa ja tuottaa käsitelty lista sanamerkkejä.

Määritellään yksi tällainen luokka nimellä ReadTxtFiles, joka ottaa sisään polun hakemistoon, joka sisältää tekstitiedostot. Käytän syötteenä tätä hakemistoa, jossa on urheiluruuan asiakirjat.

Tämä blogikirjoitus antaa hyvän yleiskatsauksen iteraattoreiden ja generaattoreiden käsitteen ymmärtämiseen.

Miten luodaan sanapussikorpus gensimissä?

Nyt tiedät, miten sanakirja luodaan listasta ja tekstitiedostosta.

Seuraava tärkeä objekti, johon sinun täytyy tutustua työskennellessäsi gensimissä, on korpus (a Bag of Words). Se on siis korpus-objekti, joka sisältää sanan id:n ja sen frekvenssin jokaisessa dokumentissa. Voit ajatella sitä gensimin vastineena Document-Term-matriisille.

Kun sinulla on päivitetty sanakirja, sinun ei tarvitse tehdä muuta kuin välittää tokenisoitu sanaluettelo Dictionary.doc2bow()

Luotaan s Corpus yksinkertaiselle listalle (my_docs), joka sisältää 2 lausetta.

Miten tulkita yllä olevaa korpusta?

Rivillä 1 oleva (0, 1) tarkoittaa, että sana, jolla on id=0, esiintyy kerran 1. dokumentissa.
Viisinkertaisesti toisen listan kohdassa oleva (4, 4) tarkoittaa, että sana, jolla on id 4, esiintyy 4 kertaa toisessa dokumentissa. Ja niin edelleen.

Noh, tämä ei ole ihmisen luettavissa. Jos haluat muuntaa id:t sanoiksi, tarvitset sanakirjan tekemään muunnoksen.

Katsotaanpa, miten saat alkuperäiset tekstit takaisin.

word_counts = , count) for id, count in line] for line in mycorpus]pprint(word_counts)#> , ]

Huomaa, että sanojen järjestys katoaa. Vain sana ja sen frekvenssitiedot säilyvät.

6. Miten luodaan bag of words -korpus tekstitiedostosta?

Sanojen lukeminen python-luettelosta on melko suoraviivaista, koska koko teksti oli jo muistissa.
Voi kuitenkin olla, että sinulla on suuri tiedosto, jota et halua ladata koko tiedostoa muistiin.

Voit tuoda tällaiset tiedostot rivi kerrallaan määrittelemällä luokan ja __iter__-funktion, joka iteratiivisesti lukee tiedoston rivi kerrallaan ja tuottaa korpusobjektin. Mutta miten korpusobjekti luodaan?

BoWCorpus:n __iter__() lukee tiedoston rivin, käsittelee sen sanaluetteloksi simple_preprocess():n avulla ja välittää sen dictionary.doc2bow():lle. Voitko liittää tähän, miten tämä on samanlainen ja erilainen kuin aiemmin luomamme ReadTxtFiles-luokka?

Huomaa myös, että käytän smart_open() paketista smart_open, koska, sen avulla voit avata ja lukea suuria tiedostoja rivi riviltä eri lähteistä, kuten S3:sta, HDFS:stä, WebHDFS:stä, HTTP:stä tai paikallisista ja pakatuista tiedostoista. Se on muuten aika mahtavaa!

Vaikka, jos olisit käyttänyt open() tiedostoa järjestelmässäsi, se toimii täydellisesti myös tiedostona.

Miten tallennat gensim-sanakirjan ja korpuksen levylle ja lataat ne takaisin?

Tämä on melko suoraviivaista. Katso alla olevat esimerkit.

Olemme tallentaneet sanakirja- ja korpusobjektit. Ladataan ne takaisin.

Miten luodaan TFIDF-matriisi (korpus) gensimissä?

Term Frequency – Inverse Document Frequency(TF-IDF) on myös sanasäkkimalli, mutta toisin kuin tavallisessa korpuksessa, TFIDF painottaa alaspäin tokeneita (sanoja), jotka esiintyvät usein eri dokumenteissa.

Miten TFIDF lasketaan?

Tf-Idf lasketaan kertomalla paikallinen komponentti, kuten termifrekvenssi (term frequency, TF), globaalilla komponentilla, eli käänteisellä dokumenttifrekvenssillä (inverse document frequency, IDF), ja valinnaisesti normalisoimalla tulos yksikköpituuteen.

Tämän tuloksena sanat, jotka esiintyvät usein eri dokumenteissa, saavat pienemmän painoarvon.

Tf-Idf:n ja IDF:n kaavoista on olemassa useita muunnelmia. Gensim käyttää SMART-tiedonhakujärjestelmää, jota voidaan käyttää näiden variaatioiden toteuttamiseen. Voit määrittää, mitä kaavaa käytetään määrittelemällä TfidfModel-parametrin smartirs. Katso lisätietoja kohdasta help(models.TfidfModel).

Miten TFIDF-painot saadaan?

Kouluttamalla korpus models.TfidfModel():llä. Sitten sovelletaan korpusta koulutetun tfidf-mallin hakasulkujen sisällä. Katso esimerkki alla.

Huomaa ero sanojen painoissa alkuperäisen korpuksen ja tfidf-painotetun korpuksen välillä.

Sanat ’on’ ja ’the’ esiintyvät kahdessa dokumentissa ja niitä painotettiin. Kaikissa kolmessa asiakirjassa esiintyvä sana ’this’ poistettiin kokonaan. Yksinkertaisesti sanottuna sanat, jotka esiintyvät useammin asiakirjoissa, saavat pienemmät painotukset.

Miten käyttää gensim downloader API:ta tietokokonaisuuksien lataamiseen?

Gensim tarjoaa sisäänrakennetun API:n, jonka avulla voi ladata suosittuja tekstitietokokonaisuuksia ja sanojen upotusmalleja.

Täällä ylläpidetään kattavaa luetteloa saatavilla olevista dataseteistä ja malleista.

Asiointirajapinnan käyttäminen datasetin lataamiseen on yhtä yksinkertaista kuin kutsua api.load()-metodia oikealla datan tai mallin nimellä.

Alhaalla olevassa esimerkissä näytetään, miten ladataan malli ’glove-wiki-gigaword-50’.

Miten luodaan bigrammeja ja trigrammeja Phraser-mallien avulla?

Nyt tiedät, miten voit ladata datasetteja ja valmiiksi treenattuja malleja gensimillä.

Ladataan text8-datasetti, joka ei ole mitään muuta kuin ”Ensimmäiset 100 000 000 tavua pelkkää tekstiä Wikipediasta”. Sitten generoimme siitä bigrammeja ja trigrammeja.

Mutta mitä bigrammeja ja trigrammeja ovat ja miksi niillä on väliä?

Kappaleissa tietyillä sanoilla on aina taipumus esiintyä pareittain (bigrammeja) tai kolmen hengen ryhmissä (trigrammeja). Koska nämä kaksi sanaa yhdessä muodostavat varsinaisen kokonaisuuden. Esim: Sana ”ranskalainen” viittaa kieleen tai alueeseen ja sana ”vallankumous” voi viitata planeettojen vallankumoukseen. Mutta yhdistämällä ne, ’Ranskan vallankumous’, viitataan johonkin aivan muuhun.

On melko tärkeää muodostaa bigrammeja ja trigrammeja lauseista, varsinkin kun työskennellään sanapussimallien (bag-of-words) kanssa.

Miten siis muodostetaan bigrammeja?

Se on melko helppoa ja tehokasta gensimin Phrases-mallin avulla. Luotu Phrases-malli mahdollistaa indeksoinnin, joten siirrä vain alkuperäinen teksti (luettelo) rakennettuun Phrases-malliin bigrammien muodostamiseksi. Alla on esimerkki:

Bigrammit ovat valmiina. Arvaatko, miten trigrammi luodaan?

Noh, yksinkertaisesti huuhtele ja toista sama menettely bigrammimallin tulosteelle. Kun olet luonut bigrammit, voit siirtää ulostulon uuden Phrases mallin kouluttamiseen. Sovella sitten bigrammikorpusta koulutettuun trigrammimalliin. Oletko hämmentynyt? Katso alla oleva esimerkki.

Miten luodaan teemamalleja LDA:lla?

Temamallien tavoitteena on poimia taustalla olevat aiheet annetusta tekstidokumenttikokoelmasta. Jokaista tekstidokumenttia pidetään aiheiden yhdistelmänä ja jokaista aihetta pidetään toisiinsa liittyvien sanojen yhdistelmänä.

Topiikkamallinnus voidaan tehdä algoritmeilla, kuten Latent Dirichlet Allocation (LDA) ja Latent Semantic Indexing (LSI).

Kummassakin tapauksessa sinun on annettava syötteenä aiheiden määrä. Aihepiirimalli puolestaan antaa aihepiirin avainsanat kullekin aihepiirille ja aihepiirien prosentuaalisen osuuden kussakin asiakirjassa.

Aihepiirien laatu riippuu suuresti tekstinkäsittelyn laadusta ja algoritmille annettavasta aihepiirien määrästä. Aiemmassa postauksessa parhaiden aihepiirimallien rakentamisesta kerrotaan menettelystä tarkemmin. Suosittelen kuitenkin ymmärtämään perusvaiheet ja tulkinnan alla olevassa esimerkissä.

Vaihe 0: Lataa tarvittavat paketit ja tuo stopwords.

Vaihe 1: Tuo dataset. Käytän text8-datasettiä, jonka voi ladata gensimin downloader API:n avulla.

# Step 1: Import the dataset and get the text and real topic of each news articledataset = api.load("text8")data = 

Vaihe 2: Valmistele ladattu data poistamalla stop-sanat ja lemmatisoimalla se. Lemmatisointia varten gensim tarvitsee pattern-paketin. Muista siis tehdä pip install pattern terminaalissa tai kehotteessa ennen tämän suorittamista. Olen asettanut lemmatisoinnin siten, että vain substantiivit (NN), adjektiivit (JJ) ja pronominit (RB) säilytetään. Koska pidän parempana, että vain tällaiset sanat menevät aiheen avainsanoiksi. Tämä on henkilökohtainen valinta.

data_processed käsitellään nyt sanaluettelona. Sen avulla voidaan nyt luoda Dictionary ja Corpus, joita käytetään sitten LDA-mallin syötteinä.

Meille on luotu sanakirja ja korpus. Rakennetaan LDA-teemamalli, jossa on 7 aihetta, käyttäen LdaMulticore(). 7 aihealuetta on toistaiseksi mielivaltainen valinta.

lda_model.print_topics näyttää, mitkä sanat vaikuttivat mihinkin seitsemästä aihealueesta, sekä sanan osuuden painotuksen kyseiseen aihealueeseen.

Voidaan nähdä, että sanat kuten ’myös’, ’monet’ tulevat eri aihealueisiin. Joten lisäisin tällaiset sanat stop_words-luetteloon poistaakseni ne ja virittäisin edelleen aihealuemallin optimaalista aiheiden määrää varten.

LdaMulticore() tukee rinnakkaista käsittelyä. Vaihtoehtoisesti voisit myös kokeilla, mitä aiheita LdaModel() antaa.

Miten tulkitaan LDA-aihekuvamallin tulosta?

Objekti lda_model tukee indeksointia. Eli jos annat dokumentin (sanaluettelon) lda_model:lle, se antaa 3 asiaa:

  1. The topic(s) that document belongs to along with percentage.
  2. The topic(s) each word in that document belongs to.
  3. Aihealue(t), johon kukin sana kyseisessä asiakirjassa kuuluu JA phi-arvot.

Mikä on siis phi-arvo?

Phi-arvo on todennäköisyys, että sana kuuluu kyseiseen aihealueeseen. Ja tietyn sanan phi-arvojen summa summautuu siihen, kuinka monta kertaa kyseinen sana esiintyi kyseisessä asiakirjassa.

Esimerkiksi alla olevassa 0. asiakirjan tulosteessa sana, jonka id=0 on, kuuluu aihealueeseen numero 6 ja phi-arvo on 3.999. Tämä tarkoittaa, että sana, jolla on id=0, esiintyi 4 kertaa 0. asiakirjassa.

Miten luodaan LSI-teemamalli käyttäen gensimiä?

Syntaksi LSI-mallin käyttämiseen on samanlainen kuin LDA-mallin rakentamisessa, paitsi että käytämme LsiModel().

Miten koulutetaan Word2Vec-malli käyttäen gensimiä?

Sanan upotusmalli on malli, joka voi antaa numeerisia vektoreita tietylle sanalle. Käyttämällä Gensimin latausliittymää voit ladata valmiita sanan upotusmalleja, kuten word2vec, fasttext, GloVe ja ConceptNet. Nämä on rakennettu suurten, yleisesti esiintyvien tekstidatan korpusten, kuten wikipedian, google newsin jne. perusteella.

Jos kuitenkin työskentelet erikoistuneella alalla, kuten teknisissä asiakirjoissa, et välttämättä saa sanojen upotuksia kaikille sanoille. Joten tällaisissa tapauksissa on suotavaa kouluttaa oma malli.

Gensimin Word2Vec toteutuksen avulla voit kouluttaa oman sanojen upotusmallin tietylle korpukselle.

Olemme kouluttaneet ja tallentaneet Word2Vec-mallin dokumentillemme. Kun tulee kuitenkin uusi datasetti, haluamme päivittää mallin niin, että se ottaa huomioon uudet sanat.

Miten päivitämme olemassa olevan Word2Vec-mallin uudella datalla?

Olemassa olevalla Word2Vec-mallilla kutsumme build_vocab() uudella datasetillä ja sen jälkeen kutsumme train()-metodia. build_vocab() kutsutaan ensin, koska mallin on tiedettävä, mitä uusia sanoja saapuvassa korpuksessa on odotettavissa.

Miten poimia sanavektorit käyttämällä valmiiksi koulutettuja Word2Vec- ja FastText-malleja?

Katsoimme äsken, miten saamme juuri koulutetun Word2Vec-mallin sanavektorit. Gensim antaa kuitenkin mahdollisuuden ladata uusimpia esivalmennettuja malleja downloader API:n kautta. Katsotaanpa, miten saadaan poimittua sanavektorit parista tällaisesta mallista.

Meillä on 3 erilaista upotusmallia. Voit arvioida, kumpi niistä suoriutuu paremmin käyttämällä kunkin mallin evaluate_word_analogies() vakiomuotoista analogia-aineistoa.

Miten luodaan dokumenttivektoreita Doc2Vecin avulla?

Toisin kuin Word2Vec, Doc2Vec-malli tarjoaa vektoroidun esityksen sanaryhmästä, joka on otettu yhdessä yhtenä kokonaisuutena. Se ei ole pelkkä keskiarvo lauseen sanojen sanavektoreista.

Käytetään text8-aineistoa Doc2Vec:n harjoitteluun.

import gensimimport gensim.downloader as api# Download datasetdataset = api.load("text8")data = 

Doc2Vec:n harjoitteludatan pitäisi olla lista TaggedDocument:sta. Luodaksemme sellaisen, annamme listan sanoja ja yksilöivän kokonaisluvun syötteenä models.doc2vec.TaggedDocument().

Syöttö on valmis. Mallin kouluttamiseksi on alustettava Doc2Vec-malli, muodostettava sanasto ja lopuksi koulutettava malli.

Lauseen dokumenttivektorin saamiseksi välitetään se sanaluettelona infer_vector()-menetelmälle.

Miten lasketaan samankaltaisuusmetriikat, kuten kosinin samankaltaisuus ja pehmeä kosinin samankaltaisuus?

Pehmeän kosinin samankaltaisuus on samankaltainen kuin kosinin samankaltaisuus, mutta ottaa lisäksi huomioon sanojen välisen semanttisen suhteen vektoriesityksensä kautta.

Pehmeän kosinin laskemiseen tarvitaan sanojen upotusmalli, kuten Word2Vec tai FastText. Laske ensin similarity_matrix. Muunna sitten syöttölauseet bag-of-words-korpukseksi ja välitä ne softcossim() yhdessä samankaltaisuusmatriisin kanssa.

Alhaalla on joitakin hyödyllisiä samankaltaisuus- ja etäisyysmittareita, jotka perustuvat sanojen upotusmalleihin, kuten fasttext ja GloVe. Olemme jo ladanneet nämä mallit downloader API:n avulla.

Miten tiivistää tekstidokumentteja?

Gensim toteuttaa textrank-yhteenvedon käyttämällä summarization-moduulin summarize()-funktiota. Sinun tarvitsee vain välittää tet-merkkijono sekä joko tuloksen tiivistäminen ratio tai tiivistetyn tuloksen sanojen enimmäismäärä count.

Lausetta ei tarvitse jakaa tokenisoiduksi listaksi, koska gensim tekee jakamisen käyttämällä gensim.summarization.texcleaner-moduulin sisäänrakennettua split_sentences()-metodia gensim.summarization.texcleaner.

Tehdään tiivistelmä uuden artikkelin katkelmasta sample.txt.

Lisätietoa tiivistämisestä gensimillä saat tästä opetusohjelmasta.

Loppupäätelmä

Olemme käsitelleet paljon gensimin eri ominaisuuksia ja päässeet hyvään käsitykseen tekstien kanssa työskentelystä ja niiden käsittelystä. Yllä olevien esimerkkien pitäisi toimia mukavina malleina, joiden avulla pääset alkuun ja joiden pohjalta voit rakentaa erilaisia NLP-tehtäviä. Toivottavasti löydät niistä apua ja tunnet olosi mukavaksi käyttää gensimiä useammin NLP-projekteissasi.

Vastaa

Sähköpostiosoitettasi ei julkaista.