{"id":4091,"date":"2019-07-23T14:57:23","date_gmt":"2019-07-23T14:57:23","guid":{"rendered":"http:\/\/davinci.bydiorama.com\/home\/?p=4091"},"modified":"2020-06-19T09:50:13","modified_gmt":"2020-06-19T09:50:13","slug":"ai-bij-davinci-automatisch-gegevens-uit-documenten-halen-met-machine-learning","status":"publish","type":"post","link":"http:\/\/davinci.bydiorama.com\/home\/nl\/ai-bij-davinci-automatisch-gegevens-uit-documenten-halen-met-machine-learning\/","title":{"rendered":"AI bij Davinci: automatisch gegevens uit documenten halen met Machine Learning"},"content":{"rendered":"
S<\/span>tel je voor dat je een loonstrookje hebt waaruit je informatie moet halen, zoals de naam en geboortedatum van de werknemer, wie de werkgever is en hoeveel geld iemand verdient, wat vervolgens opgeslagen wordt in een database. En stel je nu voor dat er ook een identiteitskaart, een bankafschrift en een werkgeversverklaring is, die allemaal informatie bevatten die je moet ophalen en opslaan. En niet een, maar honderden, elke dag.<\/p>\n Een eerste aanpak om dit probleem aan te pakken zou het handmatig schrijven van een aantal regels kunnen zijn, zoals: ‘als je de achternaam nodig hebt, zoek naar de woorden: \u201cachternaam\u201d en neem dan de onderstaande woorden’, of ‘ als je het cumulatieve salaris nodig hebt, zoek dan een cijfer na een \u20ac en neem je vervolgens het hoogste getal ‘. Maar het probleem hierbij is dat deze type documenten in een oneindig aantal verschillende lay-outs komen: soms staat de achternaam links van de woorden “werknemersnaam” in plaats van onder “achternaam” en soms heeft het cumulatieve salaris helemaal geen \u20ac. Bovendien verandert de structuur van deze documenten in de loop van de tijd: een regel waaraan we vandaag veel handmatig werk besteden, kan volgende maand zinloos zijn.<\/p>\n Hoewel je kunt proberen om al deze obstakels met nog meer regels op te lossen (zoals we al jaren doen), begint dat wel erg veel op een tantaluskwelling te lijken; je probeert de regels tot in de eeuwigheid te verbeteren, altijd het gevoel te hebben dat je er bijna bent, maar nooit dat doel bereikt van 100% van alle belangrijke gegevens die correct zijn ge\u00ebxtraheerd. Met de Er zijn veel verschillende machine learning-algoritmes en manieren om deze te gebruiken. Na verschillende experimenten hebben we een systeem gekozen dat twee methodes combineert: het herkennen van inhoud<\/em> and het herkennen van positie<\/em>.<\/p>\n De eerste benadering, en misschien de meest voor de hand liggende, classificeert elk item (= woord, nummer, datum, etc.) op een document op basis van zijn karakters. Tijdens de trainingsfase hebben we het algoritme voorzien van honderden voorbeelden van items van het type waarin we ge\u00efnteresseerd zijn en enkele duizenden voorbeelden van andere items. Dit is een klein deel van de input die wordt gebruikt om het systeem te leren om geboortedata te herkennen:<\/p>\n De taak van het machine learning-algoritme is om te reproduceren of er ‘y’ of ‘n’ in de eerste kolom zou moeten zijn, gebaseerd op de andere kolommen. Om dit te doen, zal systeem het moeten uitzoeken welke karakters op welke positie goede indicatoren van geboortedata zijn. Het systeem kan bijvoorbeeld leren dat als u ’19’ of ’20’ op positie 7 en 8 vindt, het zeer waarschijnlijk is dat je naar een datum kijkt.<\/p>\n Het best presterende algoritme voor deze taak bleek k Nearest Neighbours<\/em>(kNN) te zijn. Terwijl je de eerste paragraaf aan het lezen was werd er in je browser een statistisch model van geboortedata opgebouwd, dus je kan nu met de resultaten spelen. Het percentage geeft aan hoe zeker het algoritme is dat de tekst in het tekstvak een geboortedatum is.<\/p>\n <\/p>\n <\/p>\n
\nrecente opkomst van zeer succesvolle machine learning algoritmes<\/a>, hebben we daarom ge\u00ebxperimenteerd met een nieuwe benadering waarbij we alleen het machine learning-algoritme een groot aantal voorbeelddocumenten tonen waarin mensen de belangrijke informatie hebben gemarkeerd. De taak van de algoritmes is dan om erachter te komen hoe het dezelfde informatie in ongeziene documenten volledig automatisch kan extraheren.<\/p>\nMethode 1: inhoud herkennen<\/h2>\n
\n\n
\n Birthdate?<\/th>\n 1<\/th>\n 2<\/th>\n 3<\/th>\n 4<\/th>\n 5<\/th>\n 6<\/th>\n 7<\/th>\n 8<\/th>\n 9<\/th>\n 10<\/th>\n<\/tr>\n \n y<\/td>\n 1<\/td>\n 5<\/td>\n \/<\/td>\n 0<\/td>\n 2<\/td>\n \/<\/td>\n 1<\/td>\n 9<\/td>\n 8<\/td>\n 6<\/td>\n<\/tr>\n \n y<\/td>\n 3<\/td>\n 0<\/td>\n –<\/td>\n 0<\/td>\n 3<\/td>\n –<\/td>\n 1<\/td>\n 9<\/td>\n 5<\/td>\n 8<\/td>\n<\/tr>\n \n y<\/td>\n 2<\/td>\n 5<\/td>\n <\/td>\n 0<\/td>\n 5<\/td>\n <\/td>\n 1<\/td>\n 9<\/td>\n 8<\/td>\n 9<\/td>\n<\/tr>\n \n y<\/td>\n 0<\/td>\n 8<\/td>\n <\/td>\n 1<\/td>\n 2<\/td>\n <\/td>\n 1<\/td>\n 9<\/td>\n 7<\/td>\n 6<\/td>\n<\/tr>\n \n y<\/td>\n 0<\/td>\n 4<\/td>\n .<\/td>\n 1<\/td>\n 0<\/td>\n .<\/td>\n 1<\/td>\n 9<\/td>\n 6<\/td>\n 3<\/td>\n<\/tr>\n \n n<\/td>\n 1<\/td>\n .<\/td>\n 4<\/td>\n 8<\/td>\n 5<\/td>\n ,<\/td>\n 6<\/td>\n 0<\/td>\n <\/td>\n <\/td>\n<\/tr>\n \n n<\/td>\n f<\/td>\n u<\/td>\n l<\/td>\n l<\/td>\n t<\/td>\n i<\/td>\n m<\/td>\n e<\/td>\n <\/td>\n <\/td>\n<\/tr>\n \n n<\/td>\n d<\/td>\n a<\/td>\n t<\/td>\n u<\/td>\n m<\/td>\n <\/td>\n <\/td>\n <\/td>\n <\/td>\n <\/td>\n<\/tr>\n \n n<\/td>\n s<\/td>\n a<\/td>\n l<\/td>\n a<\/td>\n r<\/td>\n i<\/td>\n s<\/td>\n s<\/td>\n p<\/td>\n e<\/td>\n<\/tr>\n \n n<\/td>\n l<\/td>\n o<\/td>\n o<\/td>\n n<\/td>\n h<\/td>\n e<\/td>\n f<\/td>\n f<\/td>\n i<\/td>\n n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n kNN birthday recognizer<\/h3>\n