GitHub brengt AI-programmer uit die helpt bij het schrijven van code, mag dat van de GPL?

| AE 12764 | Intellectuele rechten, Ondernemingsvrijheid | 10 reacties

GitHub heeft een technische preview uitgebracht van Copilot, een AI-gedreven pair programmer die ontwikkelaars helpt bij het schrijven van code. Dat las ik bij Tweakers. Copilot stelt contextgebonden code en functies voor, en helpt acties bij het oplossen van problemen door te leren van de code die iemand schrijft. De AI is getraind op een grote dataset van publieke broncode, en dat zal vast grotendeels open source zijn onder de GPL want dat is nu eenmaal de bulk van de “publieke” software. Maar de GPL vindt daar iets van, van hergebruik.

Copilot kan automatisch opmerkingen omzetten in code, repetitieve code aanvullen en een functie testen tijdens het schrijven. Het systeem leert en verbetert zichzelf. Het klinkt als een hele goede ontwikkeling, maar als je even doordenkt dan besef je dat dit alleen kan door een héle berg broncode door te akkeren en tot een machine learning model om te zetten. Dat zegt men zelf ook:

Trained on billions of lines of public code, GitHub Copilot puts the knowledge you need at your fingertips, saving you time and helping you stay focused.

Er is die merkwaardige gedachte dat als iets “publiek” is, dat je er dan wat mee mag. Misschien moeten we naast “data is niets” nog een juridisch mantra invoeren: “dat het publiek is, is geen argument”. Want het gaat hier om software, en die is zonder twijfel auteursrechtelijk beschermd. En wanneer die “publiek” online staat, dan weet ik vrij zeker dat het om open source gaat. En dan krijg je dus te maken met de licentie. Of niet?

Interessant genoeg zegt men in de FAQ dan:

GitHub Copilot is a code synthesizer, not a search engine: the vast majority of the code that it suggests is uniquely generated and has never been seen before. We found that about 0.1% of the time, the suggestion may contain some snippets that are verbatim from the training set. Here is an in-depth study on the model’s behavior.
Er is natuurlijk een ontzettend groot verschil tussen een lap code copypasten en heel goed kijken naar “billions of lines of code” om jezelf te trainen. Wie zei dat ook weer, kopiëren uit één bron is diefstal en kopiëren uit honderd is inspiratie? Dat lijkt me hier ook van toepassing.

Het komt neer op de algemene vraag of het maken van een machine learning model een kopie is van alle brondocumenten of -data. Als dat zo is, dan krijg je met de licentie te maken en daar zou dan in dit geval de GPL op van toepassing kunnen zijn. Dan zou alle code die Copilot suggereert, onder de GPL vallen, want dan is al die code afgeleid van de GPL code die erin ging. En dan is dus ook elk door Copilot mede geschreven project GPL.

Bewijstechnisch valt daar nog wel wat op aan te merken: de GPL auteur zal moeten bewijzen dat deze suggestie gedaan is op basis van haar code, want zonder kopie geen inbreuk. En dat zal niet meevallen. Maar dat terzijde.

Is een machine learning model inbreuk op de rechten van de brondocumenten? In de VS waarschijnlijk niet. In 2019 oordeelde de Second Ciruit (de hogerberoepsrechter voor New York, Connecticut en Vermont) dat het verwerken van stukjes uit boeken om een boekenzoekalgoritme te trainen géén inbreuk op auteursrechten is. De dataset die daarmee ontstaat, is dus niet onderworpen aan toestemming (of licentie) van de boekenrechthebbenden.

In Europa zijn er geen vergelijkbare zaken. We hebben wel de Infopaq-zaak, waarin werd bepaald dat het overnemen en verspreiden van 11 woorden (een snippet in zoekresultaten) onderworpen kan zijn aan auteursrechten, maar het ging daar om het publiceren van zoekresultaten in een nieuwsbrief. Dat is toch echt wat anders dan een statistisch model maken waarin staat dat codestukje X vaak samengaat met Y, of dat constructie A goed aansluit bij aanhef B. Ik volg dan ook de conclusie van professors Gotzen en Janssens:

Vooral de overwegingen in de arresten Infopaq I, in verband met bepaalde handelingen van ‘data capturing’ die onder het toepassingsgebied van de uitzondering kunnen vallen, verdienen aandacht. Maar de vijf voorwaarden die de uitzondering … oplegt, zijn cumulatief en, mede in het licht van de regel van de strikte interpretatie, zijn we niet geneigd om te concluderen dat alle gebruikshandelingen voor het trainen van AI-systemen die gebruik maken van beschermd materiaal, door deze uitzondering zullen worden afgedekt.
Die vijf voorwaarden zijn als volgt:
  1. deze handeling is tijdelijk;
  2. deze handeling is van voorbijgaande of incidentele aard;
  3. deze handeling vormt een integraal en essentieel onderdeel van een technisch procedé;
  4. dit procedé wordt toegepast met als enig doel de doorgifte in een netwerk tussen derden door een tussenpersoon of een rechtmatig gebruik van een werk of beschermd materiaal mogelijk te maken, en
  5. deze handeling bezit geen zelfstandige economische waarde.
Een machine learning dataset maken is een tijdelijke handeling, die essentieel en integraal nodig is om het neuraal netwerk mee te maken. Dat trainen is niet op zichzelf economisch waardevol (de exploitatie van het resultaat natuurlijk wel, maar dat bedoelt men hier niet). Punt 4 zou je dan naar analogie moeten interpreteren, wat het Hof van Justitie doet in punt 64 van het arrest:
wanneer de levensduur ervan is beperkt tot hetgeen noodzakelijk is voor de goede werking van het betrokken technische procedé, waarbij dit procedé geautomatiseerd moet zijn zodat deze handeling automatisch, zonder menselijke interventie, wordt gewist zodra de functie ervan om dit procedé mogelijk te maken is vervuld.
Oftewel in gewone taal “ik extraheer even de essentiële kenmerken om een statistisch model te maken, daarna gooi ik het weer weg” en dat zou dan mogen.

Arnoud

Keurig betaald met de parkeer-app en toch een bekeuring

| AE 12132 | Privacy | 30 reacties

Twee jaar geleden parkeerde rechtenhoogleraar Corien Prins haar auto in de Utrechtsestraat in het centrum van Tilburg, zo opende NRC een juridisch artikel. Ze betaalde met haar parkeer-app, die aangaf dat ze daar een uur mocht staan. Maar dat bleek niet te kloppen en ze kreeg een boete. Ja mevrouwtje, zo gaat het verhaal dan, die app is niet van de overheid dus dan blijft het uw eigen verantwoordelijkheid he. Maar de app wordt natuurlijk wel gevoed met informatie afkomstig van de gemeente, die bouwers gaan echt niet zelf elk verkeersbord nazoeken. Interessant genoeg geeft de Hoge Raad Prins gelijk.

Uit het arrest blijkt dat op de betreffende locatie alleen geparkeerd mocht worden met vergunning of dagticket, terwijl Prins via haar app voor een uur had betaald (€2,20 in plaats van een dagkaart van €16,50). Op een bord aan het begin van de straat stond dat ook aangegeven, maar de parkeer-app wist niet beter dan dat je per tijdseenheid kon parkeren.

Die informatie over waar je betaald moet parkeren, die haalt zo’n bedrijf natuurlijk niet zelf overal op. Die wordt door gemeenten aangeleverd, er is zelfs een Nationaal Parkeer Register (spatiefout in origineel) waarin deze informatie op te halen is. En daar ging het dus mis, de gemeente Tilburg had die informatie over die dagkaart niet correct in het NPR gezet. Wiens fout is dat nou?

Rechtbank en Gerechtshof legden de verantwoordelijkheid voor het op de juiste manier voldoen van de parkeerbelasting toch bij de burger neer. Je kiest er zelf voor om een app te gebruiken, je had ook het bord kunnen controleren en dan had je het kunnen weten. Dat de gemeente die informatie in het NPR stopt en de appbouwer daarop afgaat dat is niet het probleem van de handhaving, je moet daar altijd op bedacht blijven als je gaat parkeren.

Ja die vond ik ook niet heel sterk. En vooral de Hoge Raad niet, en die heeft er nog een juridisch argument voor ook. Volgens de Gemeentewet moet je duidelijk informeren hoe en waarvoor er parkeerbelasting moet worden betaald. Als je vervolgens als gemeente toelaat dat men via een app betaalt, dan moet je als gemeente zorgen dat ook in de app duidelijke informatie beschikbaar is over het betalen.

In cassatie staat vast dat belanghebbende bij het betalen door middel van de parkeerapp onjuiste gegevens omtrent de verschuldigde parkeerbelasting te zien kreeg. Daarmee staat ook vast dat de gemeente Tilburg niet heeft voldaan aan haar hiervoor in 2.4.1 omschreven informatieplicht ten aanzien van deze wijze van betaling. Aangezien de Verordening aan belanghebbende de keuze biedt tussen betaling door middel van een parkeerapp of een parkeerautomaat en tussen die wijzen van betaling geen onderscheid maakt, kan aan belanghebbende niet worden tegengeworpen dat hij is afgegaan op de tariefinformatie in de parkeerapp zonder ook tariefinformatie in de plaatselijke parkeerautomaat en/of op in de omgeving geplaatste borden te raadplegen.
De naheffingsaanslag wordt dan ook vernietigd. Hopelijk wordt de informatie nu ook snel aangepast; in het artikel wordt Tilburg geciteerd als dat ze hebben gezegd dat het wel vaker fout gaat. Maar nu er eindelijk een sanctie staat op die fouten, hoop je dat er een prikkel is om dit op te lossen. „Op het moment van de uitspraak van de Hoge Raad was de kaart al verbeterd en de gemeente Tilburg is bezig om de kaarten nog nauwkeuriger in te tekenen”, aldus de gemeente.

Arnoud

 

Van bak met data naar een werkende lawyerbot #ndalynnweek

| AE 12100 | Innovatie | 2 reacties

Weet je wat het idiootste is aan AI? Dat iedereen het maar over algoritmes heeft en hoe spannend of bedrijfsgeheim die zijn. Het labelen van je data, dát is waar de kwaliteit van je systeem mee staat of valt. Ik vind het dan ook erg raar dat je overal leest dat men een blik studenten opentrekt of via diensten als Mechanical Turk willekeurige mensen labels laat zetten. Of dat wij via reCaptcha en dergelijke diensten zeggen waar zebrapaden lopen of verkeerslichten te zien zijn. Data is de kern van je dienst, dus hoezo besteed je dat uit en pronk je vervolgens met je unieke algoritmes die uiteindelijk niet ter zake doen?

Natuurlijk, studenten inzetten is goedkoop maar waar vind je de rechtenstudent die in honderd NDA’s zinnen kan herkennen als zijnde overmacht, verlenging, aansprakelijkheid met boete enzovoorts? In een rechtenopleiding krijg je welgeteld nul contracten te lezen (ja, serieus) laat staan een specifiek document als een NDA.

Dus nee, er zit niets anders op dan het zelf te doen. Gelukkig vind ik het perfecte moment om dit te doen: mijn dochter van een paar maanden oud slaapt ’s nachts beter als ik in de kamer zit, dus ik leg mijn laptop klaar en ga labelen tot ze slaapt. Zo kom ik in een paar maanden tot een volgens mij keurig gelabelde dataset. Een paar steekproeven op de resultaten laat zien dat ik redelijk consistent label, ook al heb ik geen formele criteria opgesteld om clausules te categoriseren.

Dat is ergens ook wel een beetje de makke van zo’n systeem. Er zijn geen echte categorieën waar je op terug kunt vallen, je moet zelf maar iets bedenken. Zowel het soort clausule (is een vrijwaring een vorm van aansprakelijkheid of iets heel anders) als de smaakjes daarbinnen (is een ton aansprakelijkheid erger dan een boete van 10k per gelekt geheim). Dus ik doe maar wat. Bij elke zin bedenk ik een categorie, en na driehonderd zinnen ga ik categorieën samenvoegen en splitsen.

Hier, de tagger waarmee ik al die tijd heb gewerkt om zinnen van labeltjes te voorzien. Je ziet hoe het aantal categorieën is geëxplodeerd:

En de clauser, waarmee ik groepen zinnen (clausules dus) van een smaakje kon voorzien:

Dan heb je dus een berg zinnen en bijbehorende clausules, en daarmee kun je BigML gaan trainen. Dat had nog heel wat voeten in de aarde. Het eerste datasetje deed het goed, het voelt echt héél gaaf als je dan een test doet:

galactus@toad:~> php tagtest.php
input text: "Recipient shall use the same level of security as it uses for its own sensitive information to protect the Confidential Information against unauthorized use or disclosure, but at least a reaasonable level of security."
..... bigml says: security / standard
galactus@toad:~> 
En dat klopte helemaal. Maar er zaten genoeg fouten in. In het jargon: de F1-score was maar 0,64 en dat is niet genoeg om een commerciële dienst op te drijven. Terug naar de tekentafel dus, of beter gezegd de datatafel.

Allereerst viel me op dat ik toch wel wat foutjes had gemaakt. Dit haal je uit de confusion matrix, waarbij je kunt zien welke uitvoer op welke foute manier gelabeld wordt. Dan zie je bijvoorbeeld dat ‘parties’ clausules vaak als security clausules worden aangemerkt, zodat je specifiek daar extra voorbeelden van toe kunt voegen en foutcorrectie kunt doorvoeren.

Ook ontdekte ik dat ik de nodige categorieën had die ik zelf eigenlijk niet snapte. Overlap tussen categorieën maakt dat ML systemen slecht performen. Snoeien dus, en zorgen dat je per categorie duidelijk kunt aangeven wat erin hoort. Toch het nadeel van in halfslaap taggen wellicht?

De ingewikkeldste ingreep had te maken met dit soort clausules:

Recipient shall (a) treat all Confidential Information with the highest care; (b) only permit persons having a clear need to know access; (c) evaluate the Confidential Information at its own risk; (d) comply with relevant export regulations; (e) indemnify and hold harmless Discloser from any damages in connection with usage of the Confidential Information; and (f) waive its right to a jury trial.

Welke categorie plak je hier nu weer op? Het artikel regelt van alles, van security eisen tot wie het mag zien tot aansprakelijkheid en iets met juryrechtspraak. Daar kun je dus helemaal niets mee. Dat moest worden opgesplitst. Een hele vieze reguliere expressie (dit gaat een thema worden in het verhaal) splitste zo’n clausule in meerdere tegelijk, waarbij elke één van die zes bullet items bevatte.

En wat ook nog eens leuk bleek te werken, was bij elke zin mee te geven op welke plek hij in het document stond. Een zin over Florida aan het begin van een NDA gaat meestal over waar een partij gevestigd is. Staat hij aan het einde, dan is het waarschijnlijk de rechtskeuze. Dus kreeg elke zin als extra veld mee waar hij in het document stond. En hoe lang hij was (in woorden) want dat blijkt ook uit te maken. Grof gezegd, hoe langer een zin hoe strenger de bepaling. Soms is juridisch werk heel makkelijk.

Stiekem ook nog wat reguliere expressies bij de kwalificatie van clausules. Want sommige dingen zijn inschattingen (is dit streng of juist niet), anderen zijn gewoon simpel lezen. Een rechtskeuze voor Florida is geen inschatting, dat zie je gewoon letterlijk staan. Dus als je weet dat een clausule over rechtskeuze gaat (dat zegt de 1st stage classifier) dan kijk je gewoon welk land je ziet staan in die clausule en dat zal de rechtskeuze dan wel zijn.

Idem voor duur van het contract. Een AI heeft héél veel moeite met lezen of er staat dat een contract drie jaar duurt. Maar een reguliere expressie vindt hem zo. Deze oplossing is wat lomp, maar computers zijn snel en krachtig genoeg en het scheelt ontzéttend veel in de uitvoer. Mag ik zeggen, de regexp is de ducttape van de artificial intelligence?

Als laatste truc voegde ik vlaggetjes toe. Een machine learning systeem kijkt in principe naar losse woorden, maar juist in juridische teksten gebruikt men vaak vaste uitdrukkingen (“reasonable security measures”, “confidential information”, “receiving party”) en die moet je dus niet opsplitsen. De vlaggetjes werden toegevoegd met wéér een setje reguliere expressies, en dat gaf alles bij elkaar een hele mooie verbetering: een F1 van 0,86. Genoeg om de markt mee op te durven.

(Dit is de tweede van vijf vakantieberichten.)

Arnoud

Google-medewerkers luisteren Nederlandse gesprekken mee, is dat erg?

| AE 11388 | Informatiemaatschappij | 16 reacties

Medewerkers van Google luisteren gesprekken mee die Nederlanders voeren met hun slimme Google-assistent, zonder dat Google daar vooraf duidelijkheid over geeft. Dat meldde de NOS vorige week. Het gaat om fragmenten van gesprekken die door de AI-assistent niet werden verstaan; een mens maakt dan een transcriptie waar de AI van kan leren. Vanuit technisch perspectief… Lees verder

Facebook overtreedt mogelijk AVG door medewerkers posts te laten labelen

| AE 11265 | Ondernemingsvrijheid | 13 reacties

Facebook overtreedt mogelijk de Europese privacyverordening AVG door medewerkers van daarvoor aangestelde bedrijven te laten kijken naar posts om ze te labelen. Dat las ik bij Tweakers maandag. Een team van 260 mensen uit India leest al jaren alle berichten (inclusief foto’s) om die van labels te voorzien, zo ontdekte Reuters namelijk. Die labels classificeren… Lees verder

AIVD en MIVD maken rechtmatig gebruik van persoonsgegevens in bulkdownloads

| AE 10401 | Regulering | 25 reacties

De inlichtingendiensten AIVD en MIVD gaan “rechtmatig” om met datasets met persoonsgegevens die online worden aangeboden. Dat las ik vorige week bij Nu.nl. Deze conclusie volgt uit het rapport 55 over het verwerven van op internet aangeboden bulkdatasets van de Commissie van Toezicht op de Inlichtingen- en Veiligheidsdiensten. Dat “online aangeboden” moet je met aanhalingstekens… Lees verder

Mag je de Twitter API scrapen voor wetenschappelijk onderzoek?

| AE 8877 | Intellectuele rechten | 9 reacties

Een lezer vroeg me: Deze meneer heeft een mooie data-analyse gemaakt van Donald Trump zijn tweets: Trump zelf gebruikt een Android-apparaat en een ghostwriter nuanceert de boel vanaf een iPhone. Daarbij vroeg ik mij af of dit zomaar mocht. Twitter zegt van wel bij onderzoeksdoeleinden (onder bepaalde voorwaarden). Zoals dat je je dataset niet mag… Lees verder