Zephyrnet-logo

Leg NLP-modellen uit met LIME

Datum:

By Ayaan Kundu, Data scientist

Het is erg belangrijk om te weten hoe LIME zijn uiteindelijke output bereikt om een ​​voorspelling voor tekstgegevens uit te leggen. In dit artikel heb ik dat concept gedeeld door de componenten van LIME te verlichten.

Leg NLP-modellen uit met LIME


Foto door Ethan Medrano on Unsplash


 

Een paar weken geleden schreef ik a blog over hoe verschillende interpreteerbaarheidstools kunnen worden gebruikt om bepaalde voorspellingen van de black-box-modellen te interpreteren. In dat artikel deelde ik de wiskunde achter LIME, SHAP en andere interpreteerbaarheidstools, maar ik ging niet veel in op details over het implementeren van die concepten op originele gegevens. In dit artikel dacht ik eraan om stap voor stap te delen hoe LIME werkt op tekstgegevens.

De gegevens die voor de hele analyse worden gebruikt, zijn afkomstig uit: hier . Deze gegevens zijn bedoeld om te voorspellen of een bepaalde tweet over een echte ramp gaat(1) of niet(0). Het heeft de volgende kolommen:


Leg NLP-modellen uit met LIME
bron

 

Aangezien de belangrijkste focus van deze blog is om te interpreteren LIMOEN en zijn verschillende componenten, dus we zullen snel een binair tekstclassificatiemodel bouwen met behulp van Random Forest en zullen ons voornamelijk concentreren op LIME-interpretatie.

Eerst beginnen we met het importeren van de benodigde pakketten. Vervolgens lezen we de gegevens en beginnen we met de voorbewerking, zoals het verwijderen van stopwoorden, kleine letters, lemmatisering, het verwijderen van leestekens, het verwijderen van witruimte enz. Alle opgeschoonde voorbewerkte tekst wordt opgeslagen in een nieuwe kolom 'opgeschoonde_tekst' die verder zal worden gebruikt voor analyse en de gegevens worden gesplitst in trein en validatie ingesteld in een verhouding van 80:20.

Daarna gaan we snel over naar het converteren van de tekstgegevens naar vectoren met behulp van TF-IDF vectorisator en passend a Willekeurig bos classificatiemodel daarop.


Leg NLP-modellen uit met LIME
Afbeelding door auteur

 

Laten we nu beginnen met de belangrijkste interesse van deze blog, namelijk hoe verschillende componenten van LIME moeten worden geïnterpreteerd.

Laten we eerst eens kijken wat de uiteindelijke uitvoer is van de LIME-interpretatie voor een bepaalde gegevensinstantie. Vervolgens gaan we stap voor stap diep in de verschillende componenten van LIME duiken om uiteindelijk de gewenste output te krijgen.


Leg NLP-modellen uit met LIME
Afbeelding door auteur

 

Hier wordt labels=(1,) doorgegeven als een argument dat betekent dat we de uitleg voor klasse 1 willen. De kenmerken (woorden in dit geval) die met oranje zijn gemarkeerd, zijn de belangrijkste kenmerken die een voorspelling van klasse 0 (geen ramp) veroorzaken met kans 0.75 en klasse 1 (ramp) met kans 0.25.

NOTITIE: char_level is een van de argumenten voor LimeTextExplainer, een boolean die aangeeft dat we elk teken behandelen als een onafhankelijke gebeurtenis in de string. De standaardwaarde is False, dus we beschouwen elk teken niet afzonderlijk en de functie IndexedString wordt gebruikt voor tokenisatie en indexering van de woorden in de tekstinstantie, anders wordt de functie IndexedCharacters gebruikt.

U moet dus geïnteresseerd zijn om te weten hoe deze worden berekend. Rechts?

Laten we dat eens zien.

LIME begint met het maken van enkele verstoorde monsters in de buurt van het gegevenspunt van belang. Voor tekstgegevens worden verstoorde steekproeven gemaakt door willekeurig enkele woorden uit de instantie te verwijderen en de cosinusafstand wordt gebruikt om de afstand tussen de originele en verstoorde steekproeven als standaardmetriek te berekenen.

Dit geeft de array van 5000 verstoorde steekproeven terug (elk verstoord steekproef heeft de lengte van de oorspronkelijke instantie en 1 betekent dat het woord op die positie van de originele instantie aanwezig is in de verstoorde steekproef), hun overeenkomstige voorspellingswaarschijnlijkheden en de cosinusafstanden tussen de originele en verstoorde monsters. Een fragment daarvan is als volgt:


Leg NLP-modellen uit met LIME
Afbeelding door auteur

 

Nu, na het maken van de verstoorde monsters in de buurt, is het tijd om gewichten aan die monsters te geven. Monsters die dicht bij de oorspronkelijke instantie liggen, krijgen een hoger gewicht dan de monsters die ver van de oorspronkelijke instantie verwijderd zijn. exponentiële kernel met kernelbreedte 25 wordt standaard gebruikt om die weightage te geven.

Daarna worden belangrijke kenmerken (volgens num_features: max. aantal uit te leggen kenmerken) geselecteerd door een lokaal lineair schaars model te leren van verstoorde gegevens. Er zijn verschillende methoden voor het kiezen van de belangrijke kenmerken met behulp van het lokale lineaire schaarse model, zoals 'auto'(standaard), 'forward_selection', 'lasso_path', 'highest_weights'. Als we 'auto' kiezen, wordt 'forward_selection' gebruikt als num_features≤6, anders wordt 'highest_weights' gebruikt.


Leg NLP-modellen uit met LIME
Afbeelding door auteur

 

Hier kunnen we zien dat de geselecteerde kenmerken [1,5,0,2,3] zijn, wat de indexen zijn van de belangrijke woorden (of kenmerken) in de oorspronkelijke instantie. Zoals hier num_features=5 en method='auto', wordt de 'forward_selection'-methode gebruikt voor het selecteren van de belangrijke functies.

Laten we nu eens kijken wat er zal gebeuren als we de methode als 'lasso_path' kiezen.


Leg NLP-modellen uit met LIME
Afbeelding door auteur

 

Dezelfde. Rechts?

Maar misschien vind je het interessant om dieper in dit selectieproces te duiken. Maak je geen zorgen, ik zal het je gemakkelijk maken.

Het maakt gebruik van het concept van Kleinste hoekregressie voor het selecteren van de topfuncties.

Laten we eens kijken wat er zal gebeuren als we de methode selecteren als 'highest_weights'.


Leg NLP-modellen uit met LIME
Afbeelding door auteur

 

Wacht even. We gaan dieper in het selectieproces.

Dus nu de belangrijke functies die we hebben geselecteerd met behulp van een van de methoden. Maar uiteindelijk zullen we een lokaal lineair model moeten passen om de voorspelling van het black-boxmodel te verklaren. Daarom Ridge regressie wordt standaard gebruikt.

Laten we eens kijken hoe de uitgangen er uiteindelijk uit zullen zien.

Als we de methode selecteren als auto, respectievelijk hoogste_gewichten en lasso_path, ziet de uitvoer er als volgt uit:


Leg NLP-modellen uit met LIME
Afbeelding door auteur

 

Deze retourneren een tuple (snijpunt van het lokale lineaire model, indices voor belangrijke kenmerken en de bijbehorende coëfficiënten, R²-waarde van het lokale lineaire model, lokale voorspelling door het verklaringsmodel op de oorspronkelijke instantie).

Als we de bovenstaande afbeelding vergelijken met:


Leg NLP-modellen uit met LIME
Afbeelding door auteur

 

dan kunnen we zeggen dat de voorspellingskansen in het meest linkse paneel de lokale voorspelling zijn die door het verklaringsmodel is gedaan. De kenmerken en de waarden in het middelste paneel zijn de belangrijke kenmerken en hun coëfficiënten.

NOTITIE: Wat betreft deze specifieke gegevensinstantie is het aantal woorden (of kenmerken) slechts 6 en we selecteren de top 5 van belangrijke kenmerken, alle methoden geven dezelfde set van top 5 belangrijke kenmerken. Maar het kan niet gebeuren voor langere zinnen.

Als je dit artikel leuk vindt, klik dan op aanbevelen. Dat zou geweldig zijn.

Ga voor de volledige code naar mijn GitHub opslagplaats. Voor mijn toekomstige blogs kun je me volgen op LinkedIn en Medium.

Conclusie

In dit artikel heb ik geprobeerd het uiteindelijke resultaat van LIME voor tekstgegevens uit te leggen en hoe het hele uitlegproces voor tekst stap voor stap verloopt. Soortgelijke verklaringen kunnen worden gegeven voor tabel- en afbeeldingsgegevens. Daarvoor zal ik het ten zeerste aanbevelen om door te gaan? dit.

Referenties

  1. GitHub-repository voor LIME: https://github.com/marcotcr/lime
  2. Documentatie over LARS: http://www.cse.iitm.ac.in/~vplab/courses/SLT/PDF/LAR_hastie_2018.pdf
  3. https://towardsdatascience.com/python-libraries-for-interpretable-machine-learning-c476a08ed2c7

 
 
Ayaan Kundu is een datawetenschapper met 2+ jaar ervaring op het gebied van bankieren en financieren en ook een gepassioneerde leerling om de gemeenschap zoveel mogelijk te helpen. Volg Ayan op LinkedIn en Medium.

Bron: https://www.kdnuggets.com/2022/01/explain-nlp-models-lime.html

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?