Machine learning for Text processing

AI-programmet på MIT stod i første omgang på en uge med ”Advanced machine learning for big data and text processing” fra tidlig morgen til sen aften.

I denne første artikel vil jeg fokusere på den del af machine learning, der benyttes til text processing, da jeg, netop indenfor dette område, for nylig fik mulighed for at tage en stor del af min læring i brug i forbindelse med en Sentiment Analysis-POC for Egmont.

Hvad fik jeg så med af interessant og brugbar viden om machine learning til text processing?

Noget af det første var machine learning til ”natural language processing” (NLP), det vil sige modeller, som har til formål at forstå menneskets naturlige sprog. De første eksempler, vi blev præsenteret for, forholdt sig til, hvordan NLP kan benyttes til at forbedre behandlingen af kræftpatienter ved at gennemlæse teksterne, i tusindvis af kræftpatient journaler, for på et tidligere tidspunkt at kunne forudsige den korrekte behandling. 

Her kan NLP blandt andet bruges til at skabe databaser bestående af “features”, typisk enkelte ord reduceret til deres grundform, udtrukket fra tekst-dokumenter. 

På MIT arbejder man med Machine Learning ud fra følgende definition på begrebet:

”Machine learning as a discipline tries to design, understand, and use computer programs that learn from experience (i.e., data) for the purpose of modeling, prediction or control.”

Et andet godt eksempel herpå, som blev gennemgået, er såkaldte “Recommender”-systemer, som f.eks. Netflix benytter til at anbefale film og serier til den enkelte bruger.

Foruden de fede eksempler fra den virkelige verden, forholdt vi os også til, hvordan vi opbygger og forbedrer denne type af modeller. F.eks. Hvordan klassificerer vi korrekt, samtidig med at vi får “fitted” vores model uden at gøre den for kompleks?

Altså, hvordan får vi den rigtige balance mellem overfitting og underfitting? Det vil sige balancen mellem tab af information ved en for simpel model og risikoen for at overfitte således, at dataene kun matcher vores træningsdata men ikke den virkelige verden.

Dette lærte vi blandt andet at gøre via “optimization”-algoritmer som “gradient descent” og “stochastic gradient descent”. Uden at kede nogen for meget med de matematiske detaljer, kommer her lidt eksempler fra undervisningen og mine noter.

Lad os hoppe videre fra matematikken over til noget lidt lettere fordøjeligt, som de fleste nok kan forholde sig til - ølsmagning!

Som afslutning på dag 1, gennemgik vi, hvordan man kan lave en sentiment analysis på ølsmagnings-reviews. Formålet var, ved brug af scikit learn (sklearn), at forudsige ud fra tekstindholdet, om et review scorede: okay, godt eller dårligt. Her lavede vi blandt andet en såkaldt “bag of words” til feature extraction, hvilket betyder, at vi repræsenterede hvert review som en vektor, således at alle reviews blev til én stor matrix.

Det kan f.eks. betyde, at hvis vores review indeholder "best beer ever", så bliver dette til følgende vektor [1, 1, 1, 0, 0, 0] hvor 1 repræsenterer ord fra vores bibliotek/ordbog, som var til stede, og 0 indikerer ord som ikke var til stede. Således blev input tekster til en matrix af tokens. Vi testede herpå forskellige model-typer for så at vælge den bedste og tune denne med regularization, hvorefter vi generaliserde vores “bag of words” til n-grams - altså sammensætte ordkombination. F.eks. er et bi-gram to ord sammen og tri-gram tre ord. Ved at sammensætte disse kan en model kende forskel på betydningen af forskellige kombinationer af ord, som for eksempel ”god smag, bare der var mere” vs. ”dårlig smag, godt der ikke er mere”.

Afslutningsvis testede vi de forskellige n-gram-modeller for at afgøre hvilke, som klarede sig bedst.
Der er muligt selv at prøve denne sentiment-analyse af ved at følge dette link.

…men hvad kan det så bruges til?

Jo, det fik jeg i juli lov til at demonstrere for Egmont. Her brugte vi føromtalte tilgang til at lave en sentiment-analysis-POC på deres survey data. Egmont indsamler surveys fra blandt andet deres service desk til at evaluere, hvordan organisationen rater de forskellige services. Disse ratings har Egmont naturligvis brug for at kunne se og evaluere udviklingen af. Derfor lavede vi en POC-model, hvor vi hentede survey-data fra Microsoft forms, læste det ind i Azure machine learning studio. For at lave POC på så kort tid som muligt, tilpassede vi en eksisterende sentiment analysis-template i machine learning studio, som heldigvis passede til den konkrete data.

Uden at det bliver for teknisk, så brugte vi første del af modellen til at pre-proccessere data, hvorefter vi kategoriserede data og skabte et n-grams feature bibliotek/ordbog, som vi benyttede til at score modellen med.

Fordi det kun var en POC, leverede vi output data som CSV-filer, som vi læste ind i Power BI, hvor man ellers nok ville have sendt output til en Azure-service.

I Power BI byggede vi et lille dashboard, så man kunne følge med i survey-respons og ratings over tid. Vi benyttede en wordcloud på de emner, som havde høj effekt på en positiv score.

POC’en kunne laves og gennemføres indenfor meget kort tid, fordi vi gjorde brug af en præbygget og trænet template fra Azure Machine Learning Studio, som vi tilpassede til survey-dataen og Egmonts behov.

Der findes allerede mange model-templates i Azure Machine Learning Studio og endnu flere i deres gallery. Derfor er det nemt at finde ud af, om der allerede ligger en model, som kan matche behovet og data.

Herefter er det hurtigt at lave en POC og dermed teste potentialet for at bruge machine learning.

Så hvis du godt kunne tænke dig at få lavet en hurtig machine learning POC og dermed få testet, om der er potentiale for brug af machine learning i jeres virksomhed, så skal du være mere end velkommen til at tage fat i mig eller én af mine kollegaer. Vi synes nemlig, det er både sjovt og spændende at få lov til at lave den slags projekter.

Tak fordi du læste med og rigtig god weekend, når du kommer dertil.