Algemeen: http://pad.constantvzw.org/p/certainty
Logbook: http://pad.constantvzw.org/p/certainty_logbook
modality.py close reading: http://pad.constantvzw.org/p/certainty_modality.py_close_reading
Modality paper notes: http://pad.constantvzw.org/public_pad/certainty_notes_Modality-and-Negation
Vragen
- analyse van Pattern's modality.py: modality.py is geschreven in de stijl van het betere krantenartikel: we vinden een aantal referenties terug, het legt een aantal variabelen uit, maar expliciteert niet hoe de grijze zones grijs zijn geworden, maw, welke beslissingen hij heeft genomen om de waarde van 'k' te bepalen, en hoe hij heeft beslist welk gewicht aan 'weight' in dict-type te geven, hoe de verschillende groepen zijn aangemaakt, waarom weaseling een aparte categorie is en een apart gewicht krijgt, wat de functie is van modifiers en de beslissing over de impact van nummers, en uiteindelijk ook, wat hij onder 'modaliteit' verstaat.
Bij wijze van debugging, ontdekten we dat de lemma-functie voor (werk)woorden niet werkt op lijn 432.
Hoe is er besloten om de negatie van modaliteit nog te vermenigvuldigen met 0.5?
Onderaan het modality.py staat beschreven dat de modality() function is getest of Bioscope data & Wikipedia training data. Welke data is waarvoor gebruikt?
Kan de modaliteits functie gebruikt worden voor het meten van modaliteit in de engelse taal in het algemeen? Of is de modaliteit context gevoelig?
Kunnen we modality.py gebruiken als lowest baseline voor onze classifier?
* modality.py
- wat werd gebruikt als trainingset?
*- bioscope dataset:
*- geannoteerde artikelen op speculation en negation
*- geannoteerde zinnen op certain en uncertain (+ cues)
*--> hoe zijn deze datasets gebruikt?
*- wikipedia weaseling dataset, hoe is deze dataset gebruikt?
- hoe zijn de percentages aangemaakt? op basis waarvan selectie van woorden (bv belief, faith, perception, speculation = -0.25 of 'neutral, slightly negative')
* modaliteit: tussen 1 en -1: waar staat 1 voor (zekerheid/fact) en -1 (niet zeker zijn?)
* Indeling data
- 1000 teksten
- 80% trainingdata + 20% testdata
- vraag:
*op basis waarvan maak je je golden standard? 1000 artikels/zinnen, 20% test en 80% trainingdata, 10-fold cross validation techniek om gemiddelde foutmarge te berekenen
* hoe annoteer je: op basis van zinnen/artikels? experimenteren
* kunnen we bestaande geannoteerde corpora gebruiken (Automatic Content Extraction 2008, Penn Discourse Treebank, ...) ook al hebben ze ander bronmateriaal (geen wetenschappelijke artikels)? En hoe?
* Testfase
- hoe check je 'precision': manueel nagaan wat juist is? steekproeven nemen?
- 10-fold cross validation gebruik je om je golden standard te creëren!
* specifieke modality.py vragen
- welke beslissingen hij heeft genomen om de waarde van 'k' te bepalen en hoe hij heeft beslist welk gewicht aan 'weight' in dict-type te geven?
- hoe de verschillende groepen zijn aangemaakt?
- waarom weaseling een aparte categorie is en een apart gewicht krijgt?
- wat de functie is van modifiers?
- hoe is de beslissing over de impact van nummers gemaakt?
- en uiteindelijk ook, wat wordt onder 'modaliteit' verstaan?
- Hoe is er besloten om de negatie van modaliteit nog te vermenigvuldigen met 0.5?
- Onderaan het modality.py staat beschreven dat de modality() function is getest of Bioscope data & Wikipedia training data. Welke data is waarvoor gebruikt?
- Kan de modaliteits functie gebruikt worden voor het meten van modaliteit in de engelse taal in het algemeen? Of is de modaliteit context gevoelig? -> An: dit lijkt me een goeie onderzoeksvraag voor ons project :-)
- Kunnen we modality.py gebruiken als lowest baseline voor onze classifier?
---------------------------------------
email antwoord Walter Daelemans: (12-04-2016) & Tom De Smedt (13-4-16)
On 13 Apr 2016, at 12:32, Daelemans Walter <walter.daelemans@uantwerpen.be> wrote:
W: Ik zet Tom in cc, zodat hij mij kan corrigeren als ik onzin vertel:
* Onderaan het modality.py staat beschreven dat de modality() function is getest met Bioscope data & Wikipedia training data:
Wat werd gebruikt als trainingset? hoe werden deze datasets gebruikt?
- Bioscope dataset:
- geannoteerde artikelen op speculation en negation
- geannoteerde zinnen op certain en uncertain (+ cues)
W: Ik denk alleen als test data: de resultaten (68% F1) zijn gebaseerd op het evalueren van het grotendeels lexicon-gebaseerd systeem op die ‘gold standard’ data. (Als die data ook werd gebruikt om de lijsten samen te stellen is dat percentage wellicht wat te optimistisch).
T: Modality in Pattern werkt met woordenlijsten (many scientists, migh indicate that, strong evidence, ...) en kijkt naar werkwoorden (could, should, would) waar scores aan toegekend worden. Er wordt dus geen gebruik gemaakt van trainingdata. De data van de CoNLL shared task diende dus enkel als test.
Onderaan staat ook een referentie naar werk van Roser Morante & Walter Daelemans, het kan nuttig zijn om ook met Roser contact op te nemen, die veel intensiever met modality is bezig geweest dan ik.
W: Onze aanpak was gebaseerd op machine learning en niet alleen op detectie van cue words maar vooral op het bepalen van de scope van de negatie en modaliteit (op welk deel van de zin is de modaliteit van toepassing), en is totaal niet te vergelijken met die van Tom. Je kan modality.py zeker als baseline gebruiken. Voor de theoretische achtergrond heb ik al verwezen naar achtergrondartikel over modaliteit in Computational Linguistics van Morante & Sporleder (zie de cursuswebsite). Zie ook de CLiPS publicaties hierover. Roser Morante werkt trouwens in Amsterdam, niet Spanje: r.morantevallejo@vu.nl
- Wikipedia weaseling dataset, hoe is deze dataset gebruikt?
W: Niet in de code gevonden. Misschien heb ik een oude versie?
T: Geen idee, wordt die ergens vermeld? In ieder geval is het Wikipedia-artikel over weasel words ook interessant om inspiratie uit te halen.
* Hoe zijn de percentages aangemaakt?
- welke beslissingen zijn genomen om de waarde van 'k' te bepalen?
W: Volgens mij is k alleen gebruikt als variabelenaam voor key in een dictionary
T: modality() geeft een getal tussen -1 en +1, de gemiddelde score van alle woorden die het in een tekst herkende. Met testdata waarvan vooraf geweten is wat feitelijke / onzekere uistpraken zijn kan je dan een threshold zoeken waarop het systeem het beste werkt. In dit geval is > 0.5 over het algemeen feitelijke tekst.
- welke beslissingen zijn genomen om gewicht aan 'weight' in dict-type te geven?
- hoe zijn de verschillende groepen woorden zijn aangemaakt?
W: zie commentaar code. Sommige woorden hebben effect op gewicht van voorgaande / volgende woorden
T: De groepen woorden zijn bij elkaar gesprokkeld uit papers, artikels en wat interessant leek. Een goeie aanpak is om te beginnen met woorden die veel voorkomen, dus op een heel groot aantal teksten de frequentie van elk woord / woordcombinatie tellen en scores beginnen toekennen aan de meest frequente. Of een machine learning algoritme trainen op vooraf geannoteerde teksten, zoals de CoNLL data.
De scores of gewichten voor elk woord zijn door mezelf toegekend. Een betere aanpak is verschillende mensen dezelfde woorden laten scoren en een gemiddelde te nemen (wisdom of the crowd) of de gewichten door een machine learning algoritme laten berekenen.
- waarom is weaseling een aparte categorie die een apart gewicht krijgt?
W: Goeie vraag weaseling is type van modaliteit, maar in die lijst staan ook niet-modale woorden (“researchers” scientists” …)
T: Eén van de meest complexe problemen in software is het bedenken van goeie, zinvolle namen voor functies, variabelen, ... Als je een betere omschrijving hebt mag je altijd een pull request sturen
- wat de functie is van modifiers? we zien enkel een verschil in 'weight'
T: Modifiers passen de scores aan van daaropvolgende woorden: interesting <=> extremely interesting (tweede geval is meer weaseling).
- waarom hebben nummers zo'n impact ivg met andere, bijv werkwoorden?
T: Nummers duiden erop dat iemand exacte aantallen aan het geven is, wat ik beschouw als een teken van meer zekerheid. Je kan met de gewichten in het algoritme spelen en zien of het accurater of minder accuraat wordt.
- waarom wordt de negatie van modaliteit nog vermenigvuldigd met 0.5?
T: Als je "promising" als weaseling beschouwt, dan is "not promising" al feitelijker, maar dat wil niet zeggen dat het plots het extreme andere uiterste is. Ik keer de score dus om, maar verzwak ze een beetje. Je kan ook hier weer met de vermenigvuldigingsfactor spelen om te zien of het accurater wordt of niet.
* Wat wordt hier onder 'modaliteit' verstaan?
T: Modality in Pattern tracht uncertainty weer te geven als een getalwaarde, en gebruikt een combinatie van epistemic modality en weasel words. Roser heeft een uitgebreide overzichtspaper die verschillende soorten modaliteit oplijst.
En dan nog eentje specifiek voor ons onderzoek:
* Kunnen we modality.py gebruiken als lowest baseline voor onze classifier?
T: Dat lijkt me een goed idee. De score van de modality() is niet zo slecht als je ze vergelijkt met andere systemen in de CoNLL task, en de intuïtie zit vrij goed (m.a.w. woorden zoals "promising" verlagen zekerheid). Volgens mij ga je met een machine learning algoritme zeker een betere classifier kunnen bouwen.
Afhankelijk van het doel (niet-commercieel?) zou je aan alle onderzoekers die op het onderwerp bezig zijn hun data kunnen vragen om mee te trainen. Als je zo'n supercorpus een beetje goed aanpakt en voorziet van een paper met een historisch overzicht en statistieken zal je vast wel geïnteresseerden vinden.
W: Misschien kan Tom toch beter antwoorden
T: Ik heb voorlopig al verkennend mijn best proberen doen om hopelijk misschien een iets duidelijker inzicht te geven in (een deel van) de broncode maar ik vermoed dat het waarschijnlijk ook erg veelbelovend zou kunnen zijn om eventueel in de nabije toekomst enkele andere en/of meer toonaangevende wetenschappers hun uiterst betrouwbare mening te gaan vragen
Ik kan jullie technisch helpen als je een lexicon wil bouwen zoals in Pattern, of een classifier wil trainen. Voor de theorie kan je zoals gezegd best Roser Morante aanspreken.