Woordenlijsten & sentimentanalyse

Pagina: 1
Acties:
  • 6.675 views

Vraag


Acties:
  • 0 Henk 'm!

  • Rotje333
  • Registratie: Maart 2010
  • Laatst online: 15:54
Hi,

Voor een hobbyprojectje ben ik op zoek naar lijsten met positieve en negatieve Nederlandse woorden.

Ik weet dat ik voor een project een paar jaar terug een keer zulke lijsten gehad heb welke best goed werkten, nu kan ik deze echter met geen mogelijkheid meer vinden. Ik heb nu een aantal Engelse lijsten vertaald naar het Nederlands maar dit werkt toch niet helemaal lekker.

Zijn er overigens ook nog andere goede technieken om sentiment te detecteren in geschreven teksten (in dit geval Tweets)? Op dit moment vergelijk ik alleen alle woorden met zowel een positieve als negatieve woordenlijst, samen met een klein aantal woordcombinaties.

Ik ben benieuwd wat jullie ervaringen hiermee zijn :)

Alle reacties


Acties:
  • +2 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 03-07 19:00
Ik weet niet in welke programmeertaal je werkt, maar voor bijvoorbeeld Python zijn er veel packages die te maken hebben met Natural Language Processing (NLP).

Je kunt inderdaad eenvoudigweg positieve en negatieve woorden tellen en op basis van hun frequentie een bericht een score geven. Dat is de meest eenvoudige methode, maar je houd dan geen rekening met de (zins)structuur van het bericht. Als iemand zegt dat iets "niet leuk" is, zou dan bijvoorbeeld +1 negatief ("niet") en +1 positief ("leuk") kunnen opleveren. Daarom wil je misschien wat dieper kijken naar de structuur.

Daarvoor heb je allerlei tools, bijvoorbeeld part of speech (POS) taggers die proberen te achterhalen wat het woord voor functie heeft in een zin (werkwoord, onderwerp, named entity, etc). Met die gegevens kun je proberen wat geavanceerdere modellen te bouwen.

Zeker als je de beschikking hebt over gelabelde teksten (waarvan je dus weet of ze positief of negatief zijn), zou je daar een model op kunnen maken.

Ik heb er zelf helaas nog te weinig tijd voor gehad, maar hier misschien nog wat nuttige (Python) resources:

http://ilk.uvt.nl/software/
https://languagemachines.github.io/frog/

Hoe dan ook, ik ga dit topic ook zeker volgen en wens je succes met je project!

Acties:
  • 0 Henk 'm!

  • Rotje333
  • Registratie: Maart 2010
  • Laatst online: 15:54
Morrar schreef op donderdag 14 april 2016 @ 23:45:
Ik weet niet in welke programmeertaal je werkt, maar voor bijvoorbeeld Python zijn er veel packages die te maken hebben met Natural Language Processing (NLP).

Je kunt inderdaad eenvoudigweg positieve en negatieve woorden tellen en op basis van hun frequentie een bericht een score geven. Dat is de meest eenvoudige methode, maar je houd dan geen rekening met de (zins)structuur van het bericht. Als iemand zegt dat iets "niet leuk" is, zou dan bijvoorbeeld +1 negatief ("niet") en +1 positief ("leuk") kunnen opleveren. Daarom wil je misschien wat dieper kijken naar de structuur.

Daarvoor heb je allerlei tools, bijvoorbeeld part of speech (POS) taggers die proberen te achterhalen wat het woord voor functie heeft in een zin (werkwoord, onderwerp, named entity, etc). Met die gegevens kun je proberen wat geavanceerdere modellen te bouwen.

Zeker als je de beschikking hebt over gelabelde teksten (waarvan je dus weet of ze positief of negatief zijn), zou je daar een model op kunnen maken.

Ik heb er zelf helaas nog te weinig tijd voor gehad, maar hier misschien nog wat nuttige (Python) resources:

http://ilk.uvt.nl/software/
https://languagemachines.github.io/frog/

Hoe dan ook, ik ga dit topic ook zeker volgen en wens je succes met je project!
Dat was ik inderdaad nog vergeten te vermelden, ik werk zelf graag in NodeJS.

Dat was inderdaad ook waar ik tegen aan liep, vandaar dat ik was begonnen om zinnen op te delen in woordcombinaties, om echter een complete lijst bij elkaar te krijgen met positieve en negatieve woordcombinaties is helaas geen doen.

Thanks voor de linkjes, ik zal ze morgen eens uitgebreid bekijken! :)

Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Leuk onderwerk. Heb hierover op JFall een kort praatje gegeven en een blog post geschreven.

Ik kan je helaas niet helpen aan woordenlijsten. Het samenstellen van deze dingen is erg veel werk en kan eigenlijk maar op 2 manieren: met de hand (extreem veel werk) of via machine learning (geeft helaas relatief slechte resultaten). Wat je denk ik 't beste nog kan doen is een woordenlijst hiervandaan pakken en deze door google translate halen. Is natuurlijk absoluut gezien een slechte oplossing maar een lijst met de hand samenstellen is gewoon te veel werk.

De meeste oplossingen houden geen enkele rekening met zinsverbanden (zoals inversies, "niet goed" is natuurlijk het tegenovergestelde van "goed") dus het is idd een kwestie van individuele woorden tegen een lijst aanhouden.

Laat maar weten als je nog vragen hebt.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • hatsa
  • Registratie: April 2010
  • Laatst online: 03-07 19:14
Pattern (Python) heeft basic sentiment-analyse voor het Nederlands: http://www.clips.ua.ac.be/pages/pattern-nl

Het is open source, dus als het goed is moet je ergens kunnen vinden hoe zij het oplossen. Aan de resultaten te zien gebruiken ze waarschijnlijk voornamelijk woordenlijsten, dus die zou je misschien wel uit de source kunnen toveren.

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Hydra schreef op maandag 18 april 2016 @ 12:46:
Ik kan je helaas niet helpen aan woordenlijsten. Het samenstellen van deze dingen is erg veel werk en kan eigenlijk maar op 2 manieren: met de hand (extreem veel werk)
Daar hebben ze mechanical turk voor uitgevonden ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +1 Henk 'm!

  • HamuNaptra
  • Registratie: April 2002
  • Niet online
Maak even een gratis IBM Bluemix account aan. Deploy je NodeJS naar Bluemix en integreer met de IBM Watson tone analyzer REST API. Ook al heeft deze nog het beta label, toch levert hij al uitstekende resulaten op.

Ik gebruik het zelf om een tone analysis uit te voeren in een conversatie tussen een gebruiker en een chatbot. Wanneer de toon eerder negatief wordt laat ik de bot voorstellen of de gebruiker een echte persoon wenst te spreken.

info: https://www.ibm.com/smart...rcloud/doc/tone-analyzer/
demo: https://tone-analyzer-demo.mybluemix.net/
API tester: https://watson-api-explor...pis/tone-analyzer-v3-beta

Acties:
  • 0 Henk 'm!

  • Rotje333
  • Registratie: Maart 2010
  • Laatst online: 15:54
Interessante links en ideeën allemaal, bedankt!

Wat mij voornamelijk opvalt is dat er bij dit onderwerp erg veel gebruik gemaakt wordt van Python, heeft dit een bepaalde reden? Wat zou bijvoorbeeld het voordeel zijn ten opzichte van NodeJS?
Ik zou uiteindelijk de data willen verwerken in een interactieve webapplicatie.
HamuNaptra schreef op maandag 18 april 2016 @ 14:01:
Maak even een gratis IBM Bluemix account aan. Deploy je NodeJS naar Bluemix en integreer met de IBM Watson tone analyzer REST API. Ook al heeft deze nog het beta label, toch levert hij al uitstekende resulaten op.

Ik gebruik het zelf om een tone analysis uit te voeren in een conversatie tussen een gebruiker en een chatbot. Wanneer de toon eerder negatief wordt laat ik de bot voorstellen of de gebruiker een echte persoon wenst te spreken.

info: https://www.ibm.com/smart...rcloud/doc/tone-analyzer/
demo: https://tone-analyzer-demo.mybluemix.net/
API tester: https://watson-api-explor...pis/tone-analyzer-v3-beta
Dit is een erg mooi systeem inderdaad, helaas op het moment alleen beschikbaar in het Engels :-(

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 03-07 19:00
Alleen zitten daar weinig Nederlanders op...

Verder wordt er inderdaad veel gebruik gemaakt van Python als het om data analyse gaat; Python en R zijn toch wel de standaard voor het doen van statistische analyses. R is wellicht wat uitgebreider qua statistische modellen en Python is wat breder inzetbaar als programmeertaal. Python gaat daarbij ook nog goed samen met bijvoorbeeld Spark, voor als je echt grote datasets wilt crunchen :-)

[ Voor 42% gewijzigd door Morrar op 18-04-2016 15:53 ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Moet je eerst mensen vinden die zo gek zijn dat werk ook daadwerkelijk uit te voeren. ;)
Rotje333 schreef op maandag 18 april 2016 @ 14:17:
Interessante links en ideeën allemaal, bedankt!

Wat mij voornamelijk opvalt is dat er bij dit onderwerp erg veel gebruik gemaakt wordt van Python, heeft dit een bepaalde reden? Wat zou bijvoorbeeld het voordeel zijn ten opzichte van NodeJS?
Node.js wordt relatief weinig gebruikt buiten web dev (want jeuj zelfde code op front- en back-end) en python wordt relatief veel gebruikt in de wetenschap omdat er redelijk wat goeie statistische (en dergelijke) libraries voor zijn.

Maar simpel word-matchen is geen enkel probleem voor welke taal dan ook.
HamuNaptra schreef op maandag 18 april 2016 @ 14:01:
Maak even een gratis IBM Bluemix account aan. Deploy je NodeJS naar Bluemix en integreer met de IBM Watson tone analyzer REST API. Ook al heeft deze nog het beta label, toch levert hij al uitstekende resulaten op.
Voor Nederlands?

[ Voor 67% gewijzigd door Hydra op 18-04-2016 16:44 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

  • HamuNaptra
  • Registratie: April 2002
  • Niet online
Dit is een erg mooi systeem inderdaad, helaas op het moment alleen beschikbaar in het Engels :-(
Ah, klopt inderdaad. De beta versie in de public cloud ondersteund alleen Engels. Ondersteuning voor andere talen (inclusief NL) komt er wel snel.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Hydra schreef op maandag 18 april 2016 @ 16:41:
[...]


Moet je eerst mensen vinden die zo gek zijn dat werk ook daadwerkelijk uit te voeren. ;)
Dat is nou net het hele idee erachter; er zitten daar hordes mensen die voor anderhalve cent een klusje ("kies alle apen uit deze 5 foto's") doen. Van captcha's oplossen tot website(design)s scoren, van supermarktbonnetjes adressen overtypen tot sterren classificeren. Het zijn vaak de geestdodende bulkklusjes (duizenden tot honderdduizenden of meer) die daar en-masse door 'workers' worden gedaan waar je machinaal vaak (nog) geen goed alternatief voor hebt.

Nederlanders zullen er misschien niet héél veel zitten, dat weet ik eigenlijk niet...

[ Voor 14% gewijzigd door RobIII op 18-04-2016 18:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 03-07 19:00
RobIII schreef op maandag 18 april 2016 @ 18:16:
[...]

Nederlanders zullen er misschien niet héél veel zitten, dat weet ik eigenlijk niet...
Vrijwel niet, want het is best lastig om je te laten uitbetalen als je niet in de VS zit. Je moet een geldig VS adres en CC opgeven. Tenminste dat is zo voor als je er een klus op zet. Natuurlijk kun je wel een adres van een ander opgeven, maar dat gaat recht tegen de EULA in en kan je een ban opleveren. Wij gebruikten MTURK wel eens voor onderzoek, maar voor Nederlands onderzoek werkte het niet.

Verder even gekeken naar pattern.nl en dat ziet er wel aardig uit. Zitten een paar leuke tools bij. Sentiment wordt inderdaad uitgerekend op basis van een woordenlijst met polariteit (-1.0 t/m 1.0) en subjectiviteit (0 t/m 1). De lijst is te vinden in pattern/text/nl/nl-sentiment.xml.

Ik heb er een aantal tweets doorheen laten stromen, maar was nog niet heel erg blij met het eindresultaat. Ik ga nog even verder kijken naar het opschonen van de teksten en / of het maken van een meer relevante lijst.

[ Voor 10% gewijzigd door Morrar op 18-04-2016 22:21 ]


Acties:
  • 0 Henk 'm!

  • hatsa
  • Registratie: April 2010
  • Laatst online: 03-07 19:14
Er is hoe dan ook geen kant-en-klare oplossing. Pattern is eenvoudig te implementeren en kan phrases als "leuk boek" wel als positief classificeren, en is daarom een leuk tooltje. POS-tagging op tweets wil je waarschijnlijk ook niet proberen, het doet het beter op iets langere net grammaticaal correcte zinnen als krantenberichten en wikipediapagina's. Frog kan wat beter omgaan met slordige/korte taal, maar daar zit zover ik weet geen sentimentanalyse in.

Verder is sentimentanalyse erg domeinspecifiek (iets dat in het ene domein een positieve uiting is, kan in een ander domein zomaar negatief zijn). Daarnaast zijn uitingen ook nog heel persoonsafhankelijk. Zeker met tweets, omdat die ook heel erg op contextinformatie hangen. Exact dezelfde tweet kan getweet worden door Geert Wilders of Marianne Thieme, maar het sentiment is totaal verschillend. Mensen kunnen interpreteren welke bedoeling erachter zit, dat het een steek onder water is, of gewoon sarcasme. En dan heb je ook nog uitingen waar wel sentiment in zit, maar nooit door woordenlijsten zal worden gevonden. "Dat mens moet terug naar de basisschool" is duidelijk negatief, maar er zit geen negatief woord in.

Nog los van het feit dat je makkelijk in niet al teveel woorden veel sentimenten kunt uiten: "Mooie film, maar wel een verschrikkelijk traag begin. Ondanks dat [acteur x] enorm slecht heeft geacteerd, was het wel de moeite waard om doorheen te kijken". Welke range neem je dan? Hele tekst, zin, zinsdeel, woord?

Je eigen teksten labelen en daar een model op trainen zou iig wel al een beter resultaat moeten opleveren dan pattern, maar is wel meer werk.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
RobIII schreef op maandag 18 april 2016 @ 18:16:
Nederlanders zullen er misschien niet héél veel zitten, dat weet ik eigenlijk niet...
Laat dat nou het het probleem zijn.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Rotje333
  • Registratie: Maart 2010
  • Laatst online: 15:54
hatsa schreef op dinsdag 19 april 2016 @ 08:01:
Er is hoe dan ook geen kant-en-klare oplossing. Pattern is eenvoudig te implementeren en kan phrases als "leuk boek" wel als positief classificeren, en is daarom een leuk tooltje. POS-tagging op tweets wil je waarschijnlijk ook niet proberen, het doet het beter op iets langere net grammaticaal correcte zinnen als krantenberichten en wikipediapagina's. Frog kan wat beter omgaan met slordige/korte taal, maar daar zit zover ik weet geen sentimentanalyse in.

Verder is sentimentanalyse erg domeinspecifiek (iets dat in het ene domein een positieve uiting is, kan in een ander domein zomaar negatief zijn). Daarnaast zijn uitingen ook nog heel persoonsafhankelijk. Zeker met tweets, omdat die ook heel erg op contextinformatie hangen. Exact dezelfde tweet kan getweet worden door Geert Wilders of Marianne Thieme, maar het sentiment is totaal verschillend. Mensen kunnen interpreteren welke bedoeling erachter zit, dat het een steek onder water is, of gewoon sarcasme. En dan heb je ook nog uitingen waar wel sentiment in zit, maar nooit door woordenlijsten zal worden gevonden. "Dat mens moet terug naar de basisschool" is duidelijk negatief, maar er zit geen negatief woord in.

Nog los van het feit dat je makkelijk in niet al teveel woorden veel sentimenten kunt uiten: "Mooie film, maar wel een verschrikkelijk traag begin. Ondanks dat [acteur x] enorm slecht heeft geacteerd, was het wel de moeite waard om doorheen te kijken". Welke range neem je dan? Hele tekst, zin, zinsdeel, woord?

Je eigen teksten labelen en daar een model op trainen zou iig wel al een beter resultaat moeten opleveren dan pattern, maar is wel meer werk.
Dit zijn inderdaad sterke punten. Op zich zijn een paar verkeerde interpretaties niet heel erg. Zeker wanneer het om tweets gaat en er 500.000 per keer doorheen gaan. Het gaat in mijn geval eigenlijk ook meer om de verhouding van de sentiment van tweets tot elkaar.

Ik bedoel hiermee dat ik, even als voorbeeld, zou kunnen zien dat op maandagochtend tussen 8:00 en 10:00 mensen gemiddeld 20% bozer zijn dan op zondagmiddag.

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 03-07 19:00
hatsa schreef op dinsdag 19 april 2016 @ 08:01:
Er is hoe dan ook geen kant-en-klare oplossing. Pattern is eenvoudig te implementeren en kan phrases als "leuk boek" wel als positief classificeren, en is daarom een leuk tooltje. POS-tagging op tweets wil je waarschijnlijk ook niet proberen, het doet het beter op iets langere net grammaticaal correcte zinnen als krantenberichten en wikipediapagina's. Frog kan wat beter omgaan met slordige/korte taal, maar daar zit zover ik weet geen sentimentanalyse in.
Merk bij tweets vooral dat een enkel woord enorm zwaar weegt, uiteraard omdat tweets zo kort zijn. Als je naar de resultaten kijkt snap je dus wel waar de sentiment score op gebaseerd is, maar het komt vaak niet overeen met het gevoel dat je zelf hebt bij de tweet. Verder heb je best wat stappen nodig om de tekst een beetje op te schonen (verwijderen van links, series van tags, afkortingen, etc).
Verder is sentimentanalyse erg domeinspecifiek (iets dat in het ene domein een positieve uiting is, kan in een ander domein zomaar negatief zijn). Daarnaast zijn uitingen ook nog heel persoonsafhankelijk. Zeker met tweets, omdat die ook heel erg op contextinformatie hangen. Exact dezelfde tweet kan getweet worden door Geert Wilders of Marianne Thieme, maar het sentiment is totaal verschillend. Mensen kunnen interpreteren welke bedoeling erachter zit, dat het een steek onder water is, of gewoon sarcasme. En dan heb je ook nog uitingen waar wel sentiment in zit, maar nooit door woordenlijsten zal worden gevonden. "Dat mens moet terug naar de basisschool" is duidelijk negatief, maar er zit geen negatief woord in.
Qua domein: hiervoor zou je eigenlijk een corpus moeten hebben van het domein waar je in geinteresseerd bent, maar ik heb nog niet uitgevogeld hoe je zo'n corpus op kunt bouwen. Pattern gebruikt (Senti)WordNet, dus daar maar eens naar kijken.

Dat je nuances zoals ironie of sarcasme mist valt denk ik niet te voorkomen, maar als je maar genoeg tweets hebt is het de vraag of dat echt impact heeft. Het gaat dan meer om de grote lijnen. Wel is het lastig de 'impact' te schatten. Bijvoorbeeld 'mijn examen economie ging echt goed' vs 'De economie gaat weer de goede kant op'. De eerste tweet is persoonlijk en waarschijnlijk minder relevant dan de tweede, maar probeer dat maar eens te achterhalen.
Nog los van het feit dat je makkelijk in niet al teveel woorden veel sentimenten kunt uiten: "Mooie film, maar wel een verschrikkelijk traag begin. Ondanks dat [acteur x] enorm slecht heeft geacteerd, was het wel de moeite waard om doorheen te kijken". Welke range neem je dan? Hele tekst, zin, zinsdeel, woord?
Als je de hele tekst erin gooit, krijg je een score voor de hele tekst. Uiteraard zou je ook op zinnen kunnen scoren. Het liefste zou je natuurlijk op onderwerp scoren (film, acteur), maar dat lijkt me nogal lastig (zelfs met POS tagging). Bij deze tekst zou er waarschijnlijk een min of meer neutrale score uit komen; dat is misschien niet eens heel onterecht in dit geval.
Je eigen teksten labelen en daar een model op trainen zou iig wel al een beter resultaat moeten opleveren dan pattern, maar is wel meer werk.
Hier heb ik ook over nagedacht, maar wat zou dan een goede optie zijn. Zelf dacht ik aan:

- Filteren van rommel (tags, links, etc)
- Woorden in de tweet als features (na omzetten van vervoegingen / meervoud)
- Woordparen (of n-grams) maken als features (bv voor 'niet leuk')
- Neuraal netwerk trainen op basis van die features

Nadeel is dat je een enorme bak gelabelde data nodig hebt hiervoor, gezien het forse aantal features. Uiteraard zou je het aantal woord-features kunnen beperken door een selectielijst te maken, maar dat is dan wel weer een beperking van je model...

Acties:
  • 0 Henk 'm!

  • Rotje333
  • Registratie: Maart 2010
  • Laatst online: 15:54
Nu jullie het over filteren hebben schiet mij nog iets te binnen, op dit moment filter ik alle emoji's er zomaar uit.

Ik denk dat emoji's misschien nog wel meer zeggen over de toon van een tweet dan de tekst zelf, ik denk dat hier nog wel een hoop winst te behalen is. Nu verschilt het best aanzienlijk per onderwerp hoe veel emoji's er gebruikt worden, maar ik denk dat het wel een mooi middel is om bijvoorbeeld sarcasme te herkennen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Rotje333 schreef op dinsdag 19 april 2016 @ 11:42:
Nu jullie het over filteren hebben schiet mij nog iets te binnen, op dit moment filter ik alle emoji's er zomaar uit.

Ik denk dat emoji's misschien nog wel meer zeggen over de toon van een tweet dan de tekst zelf, ik denk dat hier nog wel een hoop winst te behalen is. Nu verschilt het best aanzienlijk per onderwerp hoe veel emoji's er gebruikt worden, maar ik denk dat het wel een mooi middel is om bijvoorbeeld sarcasme te herkennen.
Je bent niet goed wijs ;)

Of

Je bent niet goed wijs :(

[ Voor 82% gewijzigd door Guillome op 19-04-2016 16:30 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Rotje333 schreef op dinsdag 19 april 2016 @ 09:32:
Ik bedoel hiermee dat ik, even als voorbeeld, zou kunnen zien dat op maandagochtend tussen 8:00 en 10:00 mensen gemiddeld 20% bozer zijn dan op zondagmiddag.
Dat is dus o.a. wat ik gedaan heb in de blog post die ik linkte. Als je het over erg grote aantallen hebt dan werken gewone woordenlijsten best prima. Je voornaamste probleem is gewoon het maken van Nederlandse lijsten.

Als je gaat 'filteren' e.d. zijn je resultaten waardeloos omdat je dan aan moet zien te tonen dat het niet door je filteren komt dat je een bepaalde uitslag hebt.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • hatsa
  • Registratie: April 2010
  • Laatst online: 03-07 19:14
Morrar schreef op dinsdag 19 april 2016 @ 11:22:
[...]


Merk bij tweets vooral dat een enkel woord enorm zwaar weegt, uiteraard omdat tweets zo kort zijn. Als je naar de resultaten kijkt snap je dus wel waar de sentiment score op gebaseerd is, maar het komt vaak niet overeen met het gevoel dat je zelf hebt bij de tweet. Verder heb je best wat stappen nodig om de tekst een beetje op te schonen (verwijderen van links, series van tags, afkortingen, etc).


[...]


Qua domein: hiervoor zou je eigenlijk een corpus moeten hebben van het domein waar je in geinteresseerd bent, maar ik heb nog niet uitgevogeld hoe je zo'n corpus op kunt bouwen. Pattern gebruikt (Senti)WordNet, dus daar maar eens naar kijken.

Dat je nuances zoals ironie of sarcasme mist valt denk ik niet te voorkomen, maar als je maar genoeg tweets hebt is het de vraag of dat echt impact heeft. Het gaat dan meer om de grote lijnen. Wel is het lastig de 'impact' te schatten. Bijvoorbeeld 'mijn examen economie ging echt goed' vs 'De economie gaat weer de goede kant op'. De eerste tweet is persoonlijk en waarschijnlijk minder relevant dan de tweede, maar probeer dat maar eens te achterhalen.


[...]


Als je de hele tekst erin gooit, krijg je een score voor de hele tekst. Uiteraard zou je ook op zinnen kunnen scoren. Het liefste zou je natuurlijk op onderwerp scoren (film, acteur), maar dat lijkt me nogal lastig (zelfs met POS tagging). Bij deze tekst zou er waarschijnlijk een min of meer neutrale score uit komen; dat is misschien niet eens heel onterecht in dit geval.


[...]


Hier heb ik ook over nagedacht, maar wat zou dan een goede optie zijn. Zelf dacht ik aan:

- Filteren van rommel (tags, links, etc)
- Woorden in de tweet als features (na omzetten van vervoegingen / meervoud)
- Woordparen (of n-grams) maken als features (bv voor 'niet leuk')
- Neuraal netwerk trainen op basis van die features

Nadeel is dat je een enorme bak gelabelde data nodig hebt hiervoor, gezien het forse aantal features. Uiteraard zou je het aantal woord-features kunnen beperken door een selectielijst te maken, maar dat is dan wel weer een beperking van je model...
Ik heb niet zoveel kaas gegeten van neurale netwerken (moet ik nog wel eens doen), dus geen idee of dat goed werkt. Je zou het wel denken, aangezien het de bedoeling is dat ze ons eigen brein nabootsen, en dat juist een vrij belangrijk onderdeel is van het interpreteren van sentiment. Maar geen idee wat je er in zou moeten stoppen om er iets bruikbaars uit te krijgen :P Nadeel van tweets is en blijft dat ze kort zijn, en dat ook stemmers (tooltjes om vervoegingen/meervoud om te zetten) daardoor nog wel eens struikelen over woordsoort (infinitief heeft regelmatig dezelfde vorm als meervoud).

Nadeel van woordparen is dat je alweer zit met dingen als "niet heel erg leuk". Dan kun je wel syntactische parsers gaan gebruiken om erachter te komen dat het allemaal bij elkaar hoort, maar dan kom je weer bij het nadeel dat ze struikelen over tweets. En in mijn droombeeld van neurale netwerken zit dat een neuraal netwerk in staat is om hier automatisch achter te komen, zonder het expliciet als feature erin te stoppen. Maar zoals ik zei, ik heb geen kaas gegeten van neurale netwerken.

Ik zou gewoon zo simpel mogelijk beginnen, zonder al teveel aan je data te doen, en dan lekker experimenteren wat wel en niet werkt. Blijft het probleem van data labelen over.

Waar je ook nog naar zou kunnen kijken is OpeNER: http://www.opener-project.eu/documentation/ dat ook webservices biedt http://www.opener-project.eu/webservices/ Nadeel daarvan is dat het voornamelijk is bedoeld voor (hotel/restaurant/etc) reviews, en de kans vrij groot is dat het niet heel goed werkt voor tweets.


Zou trouwens idd heel goed kunnen dat voor TS woordenlijsten een goed genoeg beeld geven. In Pattern gebruiken ze deze: https://github.com/clips/.../text/nl/nl-sentiment.xml

Acties:
  • 0 Henk 'm!

  • gaurdian
  • Registratie: December 2006
  • Laatst online: 03-07 23:49
Sorry voor het heropenen van een oud topic, maar ik ben zelf eigenlijk ook van plan hier aan te werken (sentiment analysis in nodejs) en ik vroeg me af of hier nog wat uit is gekomen. Het zou niet al te moeilijk zijn om bijv deze woordenlijst (https://github.com/clips/.../text/nl/nl-sentiment.xml) met een project als speakeasy (https://github.com/nhunzaker/speakeasy) te combineren.

  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 00:04
Dat is letterlijk 10 min werk. Al geprobeerd?

  • Rotje333
  • Registratie: Maart 2010
  • Laatst online: 15:54
gaurdian schreef op woensdag 21 december 2016 @ 22:25:
Sorry voor het heropenen van een oud topic, maar ik ben zelf eigenlijk ook van plan hier aan te werken (sentiment analysis in nodejs) en ik vroeg me af of hier nog wat uit is gekomen. Het zou niet al te moeilijk zijn om bijv deze woordenlijst (https://github.com/clips/.../text/nl/nl-sentiment.xml) met een project als speakeasy (https://github.com/nhunzaker/speakeasy) te combineren.
Hmm nee ik ben door tijdsgebrek eigenlijk nooit verder gegaan hiermee. Die woordenlijst ziet er wel goed uit moet ik zeggen. Mijn opzet van dit topic was toentertijd echter om Tweets te crawlen en hiermee een bepaald sentiment over merken en onderwerpen te bepalen, ik heb dus verder ook niets gedaan met spraak.

Succes ermee!

Acties:
  • 0 Henk 'm!

  • Slivv
  • Registratie: Juni 2012
  • Laatst online: 05-10-2023

Slivv

The One and Only

Kent iemand een goed overzicht van welke lexicon passend is voor welk doeleinde? (qua onderwerpen)

[ Voor 172% gewijzigd door Slivv op 29-02-2020 16:02 ]

IGN: FlyingBroccoli / Sarthari0n


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:50

MueR

Admin Tweakers Discord

is niet lief

Deze oude koe hoeft hiervoor niet uit de sloot. Als je vragen hebt, kun je een eigen topic openen, volgens de Quickstart. Let daarbij ook nog even op Softwareontwikkeling Beleid.

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1

Dit topic is gesloten.