Este un fapt obisnuit ca analiza documentelor text este o piulita greu de spart pentru computere. Sarcini simple, cum ar fi distingerea daca o propozitie are un sens pozitiv sau faptul ca doua cuvinte inseamna literalmente acelasi lucru, necesita o multime de esantioane si antreneaza diferite modele de invatare automata.

Acest articol va va arata cum puteti creste calitatea caracteristicilor generate si puteti obtine noi informatii despre datele dvs.

WordNet este un dictionar de limba engleza orientat semantic, similar cu un tezaur traditional, dar cu o structura mai bogata.

Array

Modulul NLTK include WordNet in limba engleza cu 155 287 de cuvinte si 117 659 seturi de sinonime care sunt in mod logic legate intre ele.

Este complet gratuit! In aceste experimente de mai jos, vom folosi versiunea Python 3.5 (care poate fi instalata cu usurinta cu PIP).

Incepeti cu importul modulului WordNet:

Primul concept care merita inteles este un „synset” :

Synset – „ set de sinonime ” – o colectie de cuvinte sinonime

Putem verifica care este synset-ul cuvantului motorcar :

Rezultatul inseamna ca cuvantul motorcar are doar un context posibil.

Array

Este identificat prin car.n.01 (il vom numi „numele codului lemmei”) – primul substantiv (litera n) sensul masinii.

Puteti sapati si sa vedeti care sunt alte cuvinte din acest synset special:

Toate cele 5 cuvinte au acelasi context – o masina (mai precis – masina.

Array

n.01).

Dar, dupa cum va asteptati, un cuvant ar putea fi ambiguu, de exemplu, o imprimanta :

Vedeti ca exista 3 contexte posibile.

Pentru a intelege semnificatia fiecaruia, putem vedea definitia si exemplele furnizate (daca sunt disponibile).

La fel ca in exemplele anterioare, putem vedea ce cuvinte (leme) sunt incluse in fiecare lema. Aici puteti vedea motivul pentru care numele de coduri ajuta la evitarea ambiguitatii. Retineti ca putem apela atat lemma_names (), cat si lemmas () pe synset.

Dupa cum puteti vedea, un WordNet creeaza un fel de ierarhie. Exista concepte foarte generale si abstracte (cum ar fi eveniment , entitate , lucru ) si un foarte specific ca o nava stelara .

NLTK faciliteaza navigarea intre concepte in directii diferite, folosind cativa termeni speciali.

Hyponym – un concept mai specific

De exemplu, sa vedem care sunt hiponimele lemei printer.n.03 care este definita ca „o masina care imprima” :

De asemenea, putem merge in sens opus – catre cel mai general concept.

Hypernim – un concept mai general.

Sa verificam valoarea pentru exemplul de mai sus:

In acest caz, un termen mai abstract de masina de imprimat este doar o masina .

De asemenea, putem obtine un hipernim de nivel superior (in acest caz entity.n.01) si o cale completa a cuvintelor necesare pentru a ajunge la el:

Ambele hyponyms si hypernyms sunt numite relatii lexicale . Ele formeaza asa-numita relatie „este-o” intre seturile de syns.

Exista, de asemenea, un alt mod de a naviga prin WordNet – de la componente ale articolelor ( meronimii ) sau la lucrurile in care sunt continute ( holonimele ).

Meronim – denota o parte din ceva

Pentru meronime putem profita de doua functii ale NLTK:

  • parte_meronime () – obtine parti,
  • substanta_meronime () – obtine substante

Sa o vedem in actiune pentru cuvantul copac .

Pe de alta parte, avem holonime :

Holonim – denota apartenenta la ceva

La fel ca mai sus aici avem, de asemenea, 2 functii disponibile – parte_holonime () si substanta_holonime ().

Puteti vedea cum functioneaza pentru cuvinte precum atom si hidrogen .

Exista , de asemenea , o relatie specifica verbeurmarile .

Enlegment – denota modul in care sunt implicate verbele

Le puteti obtine folosind functia entailments ().

Ati vazut ca cuvintele din WordNet sunt legate intre ele in moduri diferite. Avand in vedere un anumit synset, puteti parcurge intreaga retea pentru a gasi obiecte conexe.

Amintiti-va ca fiecare synset are unul sau mai multi parinti ( hipernimi ). Daca doua dintre ele sunt legate de aceeasi radacina, ar putea avea mai multe hipernimi in comun – acest fapt ar putea insemna ca sunt strans legate. Puteti ajunge la aceasta cu functia lower_common_hypernyms ().

Verificati ce cuvinte au camion si limuzina in comun:

De asemenea, puteti examina cat de specific este un anumit cuvant, analizand profunzimea acestuia intr-o ierarhie.

WordNet introduce, de asemenea, o metrica specifica pentru cuantificarea asemanarii a doua cuvinte, masurand cea mai scurta cale intre ele. Rezulta:

  • interval (0,1) → 0 daca nu este deloc similar, 1 daca este perfect similar
  • -1 → daca nu exista un hipernim comun

Sa incercam cateva exemple:

Ca intotdeauna, va recomand sa experimentati singur modulul NLTK si sa incercati sa incorporati cateva caracteristici in modelele dvs.

In primul rand puteti incerca sa:

  • utilizati nume de coduri de seturi de syns in loc de cuvinte,
  • adaugati sinonimele cuvantului la diferite caracteristici,
  • calculati cat de specific este fiecare cuvant (sau este mediu intr-o propozitie etc.)

Pentru mai multe informatii, puteti consulta „Procesarea limbajului natural cu Python” de Steven Bird, Ewan Klein si Edward Loper.