Google maakt SyntaxNet en Parsey McParseface voor taalbegrip open source

Google heeft de code van zijn platform voor het begrip van natuurlijke taal vrijgegeven onder de naam SyntaxNet. Het framework is te gebruiken om taal te analyseren en systemen via machine learning enig begrip te geven waar teksten over gaan.

De opensourcerelease bevat alle code die ontwikkelaars nodig hebben om nieuwe modellen te trainen. Daarnaast is Parsey McParseface onderdeel van de publicatie. Deze parser is al door Google met zijn zelflerende TensorFlow-software getraind en gebruikers kunnen deze inzetten om Engelstalige teksten te analyseren. Volgens Google is Parsey McParseface op dit moment het meest accurate model ter wereld. Google geeft zijn parser vrij zodat onderzoekers en ontwikkelaars deze kunnen gebruiken voor onder andere vertalingen. Google hoopt uiteindelijk tot nieuwe methoden te komen voor kennisverwerving door systemen en begrip van alle talen.

Google is een van de organisaties die flinke stappen hebben gemaakt bij de ontwikkeling van taalbegrip door systemen. Die ontwikkeling is al tientallen jaren gaande, maar is in de afgelopen jaren in een stroomversnelling gekomen door vorderingen op het gebied van machine learning.

Een van de moeilijkheden bij het ontleden is dat de betekenis van menselijke uitdrukkingen vaak ambigu is. Voor mensen vormt dit geen probleem, maar voor computers neemt het aantal combinaties van mogelijke structuren explosief toe. "De meerderheid van deze structuren is onwaarschijnlijk, maar ze zijn niettemin mogelijk en moeten op de een of andere manier uitgesloten worden door de parser", schrijft Google. Het bedrijf zet hier neurale netwerken voor in, waarbij zinnen van links naar rechts worden geanalyseerd. Elke keer geeft SyntaxNet scores aan beslissingen, gebaseerd op waarschijnlijkheid. In plaats van simpelweg de beslissing met de hoogste score te nemen, blijven delen van hypothesen bij elke stap in overweging, totdat er meerdere alternatieve hypothesen hoger op de ranglijst staan.

Begrip van natuurlijke taal speelt onder andere een centrale rol bij persoonlijke assistenten zoals Google Now, Microsofts Cortana, Apples Siri en Amazons Echo. Daarnaast worden de technieken voor taalbegrip ingezet voor chatbots, waar veel ontwikkelaars aan werken en die kunnen inspelen op chatconversaties door relevante diensten aan te bieden op basis van gesprekken.

Google SyntaxNet

Door Olaf van Miltenburg

Nieuwscoördinator

13-05-2016 • 13:15

25

Submitter: kwakzalver

Reacties (25)

25
25
18
5
0
6
Wijzig sortering
Gaaf, ik heb voor mijn afstuderen gebruik gemaakt van Alpino. Met dit soort API's kun je hele mooie dingen doen. In mijn geval had ik als opdracht om onderzoek te doen hoe ik een meer "intelligente" chatbot kon maken, die op basis van zinnen kon reageren. Hiervoor was ik bijvoorbeeld het onderwerp en de zelfstandige naamwoorden voor nodig.

Puik werk! :) _/-\o_
Op dit moment gebruik ik ook Alpino bij mijn afstudeeropdracht. Van de Nederlandse dependency parsers de meeste documentatie en ook het makkelijkst om aan de praat te krijgen.

Bij mij is de toepassing het verminderen van dubbele administratie: via een Smartwatch wordt spraak opgenomen en omgezet naar tekst, vervolgens wordt dit via Bluetooth naar de gekoppelde telefoon gesynchroniseerd en ten slotte vanaf de telefoon een API call naar de server waar de tekst wordt geanalyseerd.

Zat er aan te denken om een Tweakblogje over te schrijven, gezien dit artikel nog wel relevanter.
Ik zou zeggen doen! Je hebt al één volger. Succes met afstuderen _/-\o_
Er was in het eerste dot-com tijdperk, rond het jaar 2000, een dienst die in elk geval de spraakherkenning al deed. Je belde je geregistreerde nummer, sprak daar je bericht in, en je kreeg een E-mail met vrij nette tekst, met stopwoordjes weggefilterd en eventuele annotaties verwerkt.

Af en toe ging er wel wat mis met de grammatica natuurlijk. Ze gebruikten tenslotte een call-center in India om de speech-to-text te doen. :+
Dat gifje is voor mij echt Chinees :+ Ik vind het altijd wel interessant dat mensen dit soort dingen begrijpen en kunnen ontwikkelen. Maar echt, al die pijltjes, en gekke termen en alle andere dingetjes die bewegen.... als ik dat zie voel ik me echt dom 8)7
Stap voor stap wordt de zin die er staat ontleed in de verschillende onderdelen van een zin zoals onderwerp, lijdend voorwerp, lidwoorden, zelfstandig naamwoorden, etc.
Alleen op die manier kan er aan een zin door een algoritme een juiste betekenins gehangen worden.
Omdat zinnen vaak gedeeltijk in andere volgordes te zetten zijn, of helemaal niet maar toch gedaan, hebben de makers van zo'n algoritme een extra uitdaging om dit soort gevallen ook juist te laten interpreteren.
Wanneer mensen dan ook nog eens spelfouten maken, zonsconstructies bouwen die niet mogen, woorden aan elkaar plakken, letters omdraaien, enzovoort wordt het een heel avontuur om te bepalen wat er nou wordt bedoeld (net als tussen mensen trouwens erg vaak gebeurt).
Zonsconstructies... Expres?

En inderdaad, betekenis uit taal halen is erg lastig voor een computer.
Die begrippen an sich zijn niet zo complex maar je moet ze wel kennen ja. Ik begrijp dan weer niks van het deel dat eronder staat.

Als je een college generatieve syntax volgt gaat de helft tegenwoordig over ambiguiteit. Syntactische ambiguiteit is bijvoorbeeld "Hij slaat de geit met het touw". Slaat hij met een touw de geit, of slaat hij de geit die een touw om zijn nek heeft?

Context biedt mensen de mogelijkheid om dit juist te begrijpen, hetzij omdat ze bijv de geit zien of weten wat een logischere mogelijkheid is. Daar zit hem de moeilijkheid in; welke mogelijkheden zijn plausibel?

Het van links naar rechts principe komt omdat dit (bijna zeker) de manier is waarop mensen dat ook doen. Google maar eens garden path sentences voor voorbeelden van zinnen die de menselijke parser misleiden.
Anoniem: 289295 @SomerenV13 mei 2016 13:24
Taalwetenschap wordt niet voor niks de bèta van de geesteswetenschappen genoemd.
Anoniem: 221563 @SomerenV13 mei 2016 13:26
Heel kort door de bocht gezegd, het laat het proces zien wat het algoritme doorloopt om de verschillende relaties tussen de woorden te vinden (als ik het goed begrijp).
Je bent niet dom hoor. Het plaatje is door Tweakers uit zijn context gehaald en wordt hier zonder verdere uitleg bij het artikel geplaatst. Tenzij je toevallig taalwetenschapper bent, kan je hooguit gissen waar het over gaat.
Gaat volgens mij om de stappen die doorlopen worden in een grammatica voor het parsen van natuurlijke taal. Wat in de stack zit wordt geanalyseerd aan de hand van bepaalde regels en uitgebreid met content uit de buffer tot er een zinnige conclusie over één van de delen getrokken kan worden. De eerste stap heeft "I <huppeldepup>" in de stack waaruit de parser al snel kan afleiden dat "I" het onderwerp is. Die relatie wordt dan geregistreerd en het woord is dan geparsed.

Shift slaat op het uitbreiden van de stack en LEFT of RIGHT_ARC voor het deel van de boomstructuur waar een regel op wordt toegepast. Dat laatste weet ik niet zeker.

Zo begrijp ik het in ieder geval met mijn achtergrond in IT. Zal wel kort door de bocht zijn en leg termen niet echt uit, maar misschien geeft het wat aanknooppunten.

Even snel een linkje naar de locatie waar ze de animatie vandaan hebben en tevens meer uitleg staat: https://github.com/tensor...-transition-based-parsing

[Reactie gewijzigd door XxRenéxX op 22 juli 2024 14:14]

Ik neem aan dat deze tool alleen maar toepasbaar is op langere teksten? Ik probeer namelijk een stel tweets te classifiseren in een 16 categorieën, waarbij 1 tweet ook in meerdere categorieën kan horen, maar zelfs bij mijn 'ground' truth (set van woorden die horen bij een bepaalde categorie) krijg ik ook geen overtuigende resultaten.

Ik heb al verschillende lemmatizers en stemmers gebruikt, in combinatie met verschillende classifiers van sklearn. Wert iemand toevallig of deze tool of een ander soort tooltje hier handig voor toepasbaar is?

Ik ben niet gelimiteerd tot een bepaald platform, taal of tooltje; ben bereid van alles te leren. Tevens worden verwijzingen naar iedere andere soorten bronnen (fora, papers, etc) ook zeer gewaardeerd Mijn enig wens is dat het draait op core ix, maar dat is ook geen harde eis...

[Reactie gewijzigd door moh.moh op 22 juli 2024 14:14]

Waarom neem je aan dat dit alleen toepasbaar is op langere teksten?
Jouw probleem is anders dan het probleem wat dit algoritme oplost.
Dit algoritme ontleedt alle delen van de zin en geeft aan elk deel het correpsonderende " type" (persoonsvorm, onderwerp, lijdend voorwerp, etc). Dit is een erg mooie ontwikkeling en de accuracy is ook buitengewoon goed.

Ik ben benieuwd in hoeverre de concepten van dit model toe te passen zijn op andere talen en of dat dit ook binnen afzienbare tijd geimplementeerd gaat worden.

---------

Wat jij wil doen is elke tweet onderverdelen in een categorie, dus een hele zin/tweet (classification/Clustering), dit is eigenlijk een hele andere taak. Dit kun je op heel veel manieren aanpakken.
Heb je een (gelabelde) dataset? Dan zou je met machine learning technieken een model kunnen trainen voor de classificatie. Heb je die niet, dan moet je eerder naar andere oplossingen kijken (clustering/rule-based).

Het zou natuurlijk leuk zijn als je de syntactische analyse van dit model kan gebruiken voor jouw semantische analyse, door bijvoorbeeld bepaalde zinsgedeeltes zwaarder te laten wegen. Echter zijn tweets niet altijd hele goede geformuleerde zinnen en haal je misschien nog wel de meeste informatie uit de hashtags.

Misschien heb je hier wat aan:
http://www.slideshare.net...using-naive-bayes-and-svm
http://mark-kay.net/2013/...upervised-classification/
Je zou ook eens naar WEKA kunnen kijken, meer point en click dan het zelf programmeren in Python met sklearn. Documentatie is niet geweldig maar je kan er een heel eind mee komen.
Verder is voor achtergrondinformatie de Coursera class van Stanford University over Machine Learning erg interessant. :-)
Heb zelf ooit een vergelijkbaar POC in elkaar gezet. Waar je zou naar kunnen kijken is op basis van een trainingsset een relatief simpel bayes model in elkaar zetten, op basis van bags of words genormeerd met TF-IDF. Je zou zo'n parser juist perfect kunnen gebruiken om alleen bijvoorbeeld zelfstandige naamwoorden en adjectieven (of relaties daartussen) te tellen!
Deze parser werkt waarschijnlijk vrij slecht op het twitter domein. Kijk eens naar de tweeboparser als je ontleding van tweets nodig hebt.
http://www.cs.cmu.edu/~ark/TweetNLP/#tweeboparser_tweebank

Bronnen kan je vinden door zoekwoorden als:
Twitter topic detection
Twitter topic classification
Is dit in de verte een beetje verwant aan een Levenshtein algoritme? Waarbij er per letter gekeken wordt naar een puntensysteem?
Anoniem: 221563 @JustMitchie13 mei 2016 13:36
Dat heeft een andere doel, namelijk kijken hoe dicht woorden bij elkaar liggen.

Dit gaat om betekenis geven aan natuurlijke zinnen. Zoals in het voorbeeld wordt aangegeven is het voor de code van belang om te weten dat booked en ticket bij elkaar horen, maar ook ticket en google.

Dat gaat behoorlijk ver. Zo wordt ook herkent wat voor soort woord het is.

Voor iemand die er serieus meer in wilt verdiepen, deze jongeman heeft een redelijke reeks tutorials (ik zeg redelijk gezien hij behoorlijk in depth gaat en met termen komt aanzetten die je als leek aanvankelijk niet veel zullen zeggen) op youtube geplaatst over hoe je NLTK kunt gebruiken. (Overigens heeft die jongeman wel meer leuke tutorials staan, zoals Machine Learning etc)
Mis de referentie naar boaty mcboatface niet ;)

Maar ben benieuwd of het goed bruikbaar is voor derden! Al is het sowieso goed dat ze het opensource maken :)

[Reactie gewijzigd door :murb: op 22 juli 2024 14:14]

Mis de referentie naar boaty mcboatface niet ;)
Tja, je hebt een punt. Denk dat Google voornamelijk punten wil scoren door wel grappige namen te accepteren/implementeren terwijl die boot echt tot in den treure ondertussen besproken is. :)

Denk dat voor sommigen de stap van SyntaxNet naar SkyNet ook niet heel groot is; zeker niet als je zometeen kan gaan afkorten als je S.Net code gaat afleveren en machine learning gaat implementeren :)

[Reactie gewijzigd door MAX3400 op 22 juli 2024 14:14]

Anoniem: 221563 13 mei 2016 13:18
Hmmz, paar maanden terug nog met NLTK gewerkt, maar die was te langzaam voor mijn toepassing. Ben eigenlijk wel benieuwd naar Google zn variant :)
Wat zou er gebeuren als je deze 'tool' wetteksten laat lezen. Wellicht kan je daarmee juridische scenaro's verzinnen die nog niet in de wet zijn opgenomen.
Of debatteren tegen de computer. Of.. etc

Interessant gedachten voer :)
Mooi dat Google dit doet, hier ga ik me lekker in verdiepen. Ook leuk om te zien dat er zoveel Tweakers met Taalkunde bezig zijn, trouwens.

Op dit item kan niet meer gereageerd worden.