Challenge Project

Campax

KI für informierte Bürger / AI for informed citizens

📂 Demo

REC von Campax

Demo chatbot 🤖

Image detail from Politischer Atlas der Schweiz (BFS, 2012)

Wir entwickeln einen Chatbot / Conversational Agent, der die Fragen der Wählerinnen und Wähler auf der Grundlage sachlicher politischer Daten und nicht auf der Grundlage von Propaganda beantwortet (z. B. Smartvote-Data). Eine Beispielfrage lautet: "Welche Partei hat in der letzten Legislaturperiode im Kanton Zürich am meisten für die Gleichstellung der Geschlechter getan?" Wir haben festgestellt, dass out-of-the-box-Technologien wie ChatGPT zwar gut darin sind, allgemeine Fragen zu beantworten, aber da sie mit Texten aus den Medien trainiert wurden, können sie irreführende Ergebnisse (watson.ch) liefern.

Campax möchte die neueste Forschung im Bereich NLP / ML / AI nutzen und gleichzeitig klare, datengestützte Ergebnisse liefern, die von zuverlässigen Quellen wie die parliament.ch open data web services bereitgestellt werden. Um dies zu erreichen, fordern wir die Community auf, Projekte vorzuschlagen, die den Bürgerinnen und Bürgern ein Produkt anbieten, das politische Informationen auf der Grundlage faktenbasierter Daten bietet.

Skills: KI, Chatbots, Online-Schnittstellen, politische Daten der Schweiz


AI for informed citizens

We are developing a chatbot / conversational agent that answers voters' questions based on factual political data, not based on propaganda (i.e., smartvote data). An example question is “Which party did the most for gender equality in Kanton Zurich in the last legislative session?" We have found out-of-the-box technology like ChatGPT is good at answering generic questions, but as it was trained using text from the media, it can create misleading results (watson.ch)

Campax would like to make use of the latest research in the NLP / ML / AI, and, at the same time, include clear, data-driven results provided by reliable sources like the open data web services of the Swiss Parliament (parlament.ch) To achieve this, we challenge the community to come up with projects that would offer citizens a product offering political information based factually correct data.

Skills: AI, chatbots, online interfaces, political data

Resources

Screenshot of Telegram demo bot

About

This is the Election chat box

Scructure (folder == service | module)

  • chatbot service - so far telegram bot and then more
  • data storage - temp location for the data
  • nlp cloud (this includes experiments with chatbot, text generation etc)
  • scraper - scraper using scrapy to scrape pariament.ch data

Deployed as telegram chatbot here

Using Telegram bot

Run it

cd chatbot
python3 bot.py

Make sure you set the variables from .env and then: commands and respective handlers: vote - reads the votes from the scraped data parl - send request

Within the telegram bot the commands are

/parl YOUR QUERY /vote NAME OF THE POLITICIAL

Using scraper

For examples - you can relate to:

/scraper/Collect_data_for_Elections.ipynb /scraper/README.md

The basic approach would be ``` scrap = Scraper() df_party = scrap.get('ENTITY NAME')

or

dftranscriptcount = scrap.count('Transcript') ```

Where ENTITY NAME is taken from here Name of the collection

see or run pythin3 craper/test_scraper.py It will save data to the data directory With this data we then can decide - how do we make use of it to contrinute to make the chatbot smarter.

NLP cloud

In this section we find the scripts we used to train, test and use the nlpcloud.com library We tried "summarize" "question" and "text appeoaches

The bot script uses finetuned-gpt-neox-20b model - and the method called "chatbot"

See /nlpcloud/main.py -> def speak() method

Actually you can refer to NLP cloud documentation. It's quite good and exensive.

Good luck with the challenge!

Challenge progess https://bd.hack4socialgood.ch/

  1. [Make progress] Swiss BERT model https://vamvas.ch/introducing-swissbert Things to be
  2. Build it up - Done
  3. Test it - Done
  4. Augment / Train with data - Partially Done / TBD

  5. [To research] Next - generate questions for the scraped data -> Build an index

Notes: - https://www.aicrowd.com/ - try to file a challenge

Notes

!pip install pytorch-pretrained-bert
import pytorch_pretrained_bert as ppb
assert 'bert-large-cased' in ppb.modeling.PRETRAINED_MODEL_ARCHIVE_MAP

Swiss BERT

'Original prompt'
('[Politische Partei] Im Jahr 2023 hat die <mask> massgeblich zur Abstimmung '
 'der Tamponsteuer-Initiative beigetragen.')
'Result from Swiss BERT'
[{'score': 0.3236805200576782,
  'sequence': 'Politische Partei Im Jahr 2023 hat die SVP massgeblich zur '
              'Abstimmung der Tamponsteuer-Initiative beigetragen.',
  'token': 741,
  'token_str': 'SVP'},
 {'score': 0.25119855999946594,
  'sequence': 'Politische Partei Im Jahr 2023 hat die SP massgeblich zur '
              'Abstimmung der Tamponsteuer-Initiative beigetragen.',
  'token': 1017,
  'token_str': 'SP'},
 {'score': 0.15169617533683777,
  'sequence': 'Politische Partei Im Jahr 2023 hat die Partei massgeblich zur '
              'Abstimmung der Tamponsteuer-Initiative beigetragen.',
  'token': 1028,
  'token_str': 'Partei'},
 {'score': 0.04907562583684921,
  'sequence': 'Politische Partei Im Jahr 2023 hat die GLP massgeblich zur '
              'Abstimmung der Tamponsteuer-Initiative beigetragen.',
  'token': 12794,
  'token_str': 'GLP'},
 {'score': 0.04162818193435669,
  'sequence': 'Politische Partei Im Jahr 2023 hat die Jungpartei massgeblich '
              'zur Abstimmung der Tamponsteuer-Initiative beigetragen.',
  'token': 46706,
  'token_str': 'Jungpartei'}]
'Original prompt'
('[Politikerin] Die <mask> ist eine der engagiertesten Politikerinnen für '
 'Gleichberechtigung und Feminismus')
'Result from Swiss BERT'
[{'score': 0.33690086007118225,
  'sequence': 'Politikerin Die Autorin ist eine der engagiertesten '
              'Politikerinnen für Gleichberechtigung und Feminismus',
  'token': 15310,
  'token_str': 'Autorin'},
 {'score': 0.21666944026947021,
  'sequence': 'Politikerin Die Schweizerin ist eine der engagiertesten '
              'Politikerinnen für Gleichberechtigung und Feminismus',
  'token': 14039,
  'token_str': 'Schweizerin'},
 {'score': 0.06902963668107986,
  'sequence': 'Politikerin Die Frau ist eine der engagiertesten Politikerinnen '
              'für Gleichberechtigung und Feminismus',
  'token': 622,
  'token_str': 'Frau'},
 {'score': 0.06879016757011414,
  'sequence': 'Politikerin Die Nationalrätin ist eine der engagiertesten '
              'Politikerinnen für Gleichberechtigung und Feminismus',
  'token': 20190,
  'token_str': 'Nationalrätin'},
 {'score': 0.03002847544848919,
  'sequence': 'Politikerin Die Deutsche ist eine der engagiertesten '
              'Politikerinnen für Gleichberechtigung und Feminismus',
  'token': 3748,
  'token_str': 'Deutsche'}]
'Original prompt'
('[Politische Kampagne] Gleichstellung  ist einer der grundlegenden Werte der '
 '<mask>')
'Result from Swiss BERT'
[{'score': 0.24675796926021576,
  'sequence': 'Politische Kampagne Gleichstellung ist einer der grundlegenden '
              'Werte der Frau',
  'token': 622,
  'token_str': 'Frau'},
 {'score': 0.18075180053710938,
  'sequence': 'Politische Kampagne Gleichstellung ist einer der grundlegenden '
              'Werte der Gesellschaft',
  'token': 2153,
  'token_str': 'Gesellschaft'},
 {'score': 0.16865766048431396,
  'sequence': 'Politische Kampagne Gleichstellung ist einer der grundlegenden '
              'Werte der Schweiz',
  'token': 214,
  'token_str': 'Schweiz'},
 {'score': 0.0794895812869072,
  'sequence': 'Politische Kampagne Gleichstellung ist einer der grundlegenden '
              'Werte der Frauen',
  'token': 573,
  'token_str': 'Frauen'},
 {'score': 0.05319949984550476,
  'sequence': 'Politische Kampagne Gleichstellung ist einer der grundlegenden '
              'Werte der Schweizerinnen',
  'token': 11577,
  'token_str': 'Schweizerinnen'}]

NLP before the training

Input:

transcript_76

Question: L'Association Exposition nationale est en discussion, et le Conseil fédéral soutient ses démarches, avec des cantons et des villes pour obtenir des montants supplémentaires

Speak: {'input': "L'Association Exposition nationale est en discussion, et le Conseil fédéral soutient ses démarches, avec des cantons et des villes pour obtenir des montants supplémentaires", 'response': "Oui, le Conseil fédéral soutient les efforts de l'Association Exposition nationale pour organiser des élections parlementaires dans les cantons et les villes. Les fonds supplémentaires demandés par l'Association Exposition nationale serviront à financer les élections et à fournir des informations aux électeurs."}]

Generate: "L'Association Exposition nationale est en discussion, et le Conseil fédéral soutient ses démarches, avec des cantons et des villes pour obtenir des montants supplémentaires pour étendre leur rayonnement et renforcer leurs

after the training

Speak

C'est très intéressant! Il est important que le Conseil fédéral soutienne ces démarches afin de garantir que les élections parlementaires se déroulent sans incident et dans le respect des règles démocratiques. Nous devons veiller à ce que le processus de vote soit sûr et sécurisé pour assurer la participation équitable de tous les citoyens.

Generate L'Association Exposition nationale est en discussion, et le Conseil fédéral soutient ses démarches, avec des cantons et des villes pour obtenir des montants supplémentaires pour l’association au cours des deux prochaines ann

L'Association Exposition nationale est en discussion, et le Conseil fédéral soutient ses démarches, avec des cantons et des villes pour obtenir des montants supplémentaires pour permettre à l’exposition de se dérouler d

L'Association Exposition nationale est en discussion, et le Conseil fédéral soutient ses démarches, avec des cantons et des villes pour obtenir des montants supplémentaires pour ses mérites et contribuer à la préservation

now a free form question

{'answer': 'An der Expo 2002 in der Schweiz wirkten zahlreiche Länder mit, darunter Deutschland, Frankreich, Italien, Spanien, Österreich, die Niederlande, das Vereinigte Königreich, Polen, die USA, China, Indien, Japan, Mexiko, Südkorea und Dänemark. Außerdem waren einige Unternehmen und Organisationen wie Microsoft, Unicef, Remax und Nestle anwesend.', 'score': 1, 'start': 0, 'end': 0} ➜ nlpcloud git:(vladimi/nlp-extra) ✗ python3 main.py {'response': 'Die Schweizer Regierung hat an der Expo 2002 in der Schweiz mitgewirkt. Zu den Teilnehmern gehörten der Schweizer Bundesrat, der Schweizer Parlamentarische Rat, der Schweizer Bundesrat für Auswärtige Angelegenheiten und der Schweizer Parlamentsausschuss für Wirtschaft und Abgaben.', 'history': [{'input': 'Wer hat an der Expo 2002 in der Schweiz mitgewirkt?', 'response': 'Die Schweizer Regierung hat an der Expo 2002 in der Schweiz mitgewirkt. Zu den Teilnehmern gehörten der Schweizer Bundesrat, der Schweizer Parlamentarische Rat, der Schweizer Bundesrat für Auswärtige Angelegenheiten und der Schweizer Parlamentsausschuss für Wirtschaft und Abgaben.'}]} ➜ nlpcloud git:(vladimi/nlp-extra) ✗ python3 main.py {'generatedtext': 'Wer hat an der Expo 2002 in der Schweiz mitgewirkt?\n\nAn der EXPO 2002 in der Schweiz beteiligten sich unter anderem: \n \n• Internationale Organisationen wie die W', 'nbgeneratedtokens': 65, 'nbinput_tokens': 28}

BEFORE traning

{'response': 'Laut parlament.ch stimmten die Parteien CVP, FDP, SVP und die Grünen für das Budget der Expo 2002.', 'history': [{'input': 'Welche Partei hat für das Budget der Expo 2002 gestimmt?', 'response': 'Laut parlament.ch stimmten die Parteien CVP, FDP, SVP und die Grünen für das Budget der Expo 2002.'}]}

after traninig {'response': 'Die Schweizerische Volkspartei (SVP) hat für das Budget der Expo 2002 gestimmt.', 'history': [{'input': 'Welche Partei hat für das Budget der Expo 2002 gestimmt?', 'response': 'Die Schweizerische Volkspartei (SVP) hat für das Budget der Expo 2002 gestimmt.'}]}

OR

{'response': 'Die Partei, die für das Budget der Expo 2002 gestimmt hat, war die Schweizerische Volkspartei (SVP).', 'history': [{'input': 'Welche Partei hat für das Budget der Expo 2002 gestimmt?', 'response': 'Die Partei, die für das Budget der Expo 2002 gestimmt hat, war die Schweizerische Volkspartei (SVP).'}]}

Transcript 30:

Before training:

q = "Wie hoch war der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999?"

Question (model) Der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica betrug im Jahr 1999 CHF 2.450.000.

Speak (model) ie hoch war der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999?', 'response': 'Der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999 betrug 2,3 Millionen Franken

After training:

Speak (model)

{'response': 'Der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999 betrug 2,2 Millionen Franken.', 'history': [{'input': 'Wie hoch war der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999?', 'response': 'Der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999 betrug 2,2 Millionen Franken.'}]}

[{'input': 'Wie hoch war der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999?', 'response': 'Im Jahr 1999 beantragte der Bundesrat einen Kredit von CHF 6,5 Millionen für die Stiftung Pro Helvetica.'}]} ➜ nlpcloud git:(vladimi/nlp-extra) ✗ python3 main.py {'response': 'Der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999 betrug 6 Millionen Schweizer Franken.', 'history': [{'input': 'Wie hoch war der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999?', 'response': 'Der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999 betrug 6 Millionen Schweizer Franken.'}]}

Question (model)

➜ nlpcloud git:(vladimi/nlp-extra) ✗ python3 main.py {'answer': 'Der Bundesrat beantragte im Jahr 1999 einen Kredit in Höhe von CHF 10 Millionen für die Stiftung Pro Helvetica.', 'score': 1, 'start': 0, 'end': 0} ➜ nlpcloud git:(vladimi/nlp-extra) ✗ python3 main.py {'answer': 'Der vom Bundesrat beantragte Kredit für die Stiftung Pro Helvetica im Jahr 1999 betrug 47,5 Millionen Schweizer Franken.', 'score': 1, 'start': 0, 'end': 0}

This content is a preview from an external site.
 

Event finished

Edited (version 42)

01.04.2023 13:04 ~ nooralamery

Project

Edited (version 39)

01.04.2023 13:04 ~ nooralamery

Edited (version 36)

01.04.2023 13:04 ~ nooralamery

Edited (version 33)

01.04.2023 13:03 ~ nooralamery

Edited (version 31)

01.04.2023 13:02 ~ nooralamery

Todo completed

Examples added

training added

Edited (version 29)

01.04.2023 10:46 ~ nooralamery

Project

Joined the team

01.04.2023 10:45 ~ nooralamery

Repository updated

01.04.2023 10:17 ~ oleg

The proto-chatbot is running again (search for Campax Elections in Telegram) and we are making it easier to use and smarter.

01.04.2023 10:17 ~ oleg

Edited (version 22)

01.04.2023 10:14 ~ oleg

swiss bert improved

swiss bert added

added test q

libs and readme, swiss bert script

Joined the team

31.03.2023 17:25 ~ oleg

Event started

Joined the team

31.03.2023 09:46 ~ valbonakarakaci

Edited (version 12)

30.03.2023 12:20 ~ dhevenstone

Edited (version 6)

29.03.2023 14:33 ~ stajilov

Dear community,

We open-sourced our prototype of the project https://github.com/Campax-org/election-chatbot .

Campax Team

28.03.2023 19:48 ~ stajilov

Joined the team

28.03.2023 19:30 ~ stajilov

Challenge

 
Alle Teilnehmer*innen, Sponsor, Partner, Freiwilligen und Mitarbeiter*innen unseres Hackathons sind verpflichtet, dem Hack Code of Conduct zuzustimmen. Die Organisatoren werden diesen Kodex während der gesamten Veranstaltung durchsetzen. Wir erwarten die Zusammenarbeit aller Teilnehmer*innen, um eine sichere Umgebung für alle zu gewährleisten. Weitere Einzelheiten zum Ablauf der Veranstaltung finden Sie unter Richtlinien in unserem Wiki.

Creative Commons LicenceDie Inhalte dieser Website stehen, sofern nicht anders angegeben, unter einer Creative Commons Attribution 4.0 International License.