serhii.net

In the middle of the desert you can say anything you want

04 Dec 2023

Masterarbeit evaluation task new UA grammar and feminitives

Something about the recent changes in UA, both the new 2019 orthography and feminitives [^@synchak2023feminine]

New grammar

  • ChatGPT doesn’t use the new official grammar!

Feminitives

  • What this is NOT:
    1. not about the СМІ-кліше a la поліціянтка/автоледі!
  • Unknown yet: 2. do I want to touch sexism, fairness etc. in the context of this task?
  • Relevant-ish
    • “ISSN 2409-1154 Науковий вісник Міжнародного гуманітарного університету. Сер.: Філологія. 2019 No 38 том 3” page 119 is nice on this
  • Lists

Getting ChatGPT to generate descriptions

Наведи будь-ласка однозначні короткі дефініції цим професіям чи словам, так, щоб по ним було однозначно очевидно про яку саме професію йде мова.

Зміни дефініції так, щоб вони стали фразами, де мова однозначно йде про жінку.  Придумай різні варіанти жінок, про яких йде мова, умовно: моя сестра, моя жінка, колишня однокласниця, імена (Марія, Марія Петрівна, Кассандра). Але придумай і свої різноманітніші приклади. 

Уникай використання самого слова чи поняття у визначеннях. Уникай слів "фахівецька" чи "спеціалістка".

Наприклад:
Актор: "Моя жінка виконує ролі на сцені чи екрані" 
Акушерка: "Марія Петрівна допомагає при пологах"
Автор: "Я знаю дівчину, яка пише твори та книжки". 

Будь творчим. Але професія, про яку іде мова, має все рівно бути однозначно зрозумілою.

- - - 
Зроби це для всіх цих слів:

абітурієнтка
абстракціоністка
автоматниця
автомобілістка
авторка
агітаторка
агрономка
адвокатка
анархіст
англієць
антрополог
асистентка
астронавт
аптекар

Можеш зробити з цього json наступного формату?

{'job': '',
'description': ''
}

I asked it to randomly change some of them to be men, so it doesn’t get additional cues. This seems to confuse it and get at least some feminitives to be wrong (“водій”)

Answers

https://chat.openai.com/share/f8a61785-2d2b-4aeb-a24c-45708e40eee3 The format to get it to answer could be:

Я дам список речень, для кожного наведи одне слово, яке це речення логічно завершує. Це має бути іменник, назва ролі або професії. 

"Моя колишня однокласниця готується до вступу у виш, здібна та наполеглива. Вона - "
"Мій брат творить вражаючі образи, захоплюючи глядачів абстракцією. Він - "
"Марія Петрівна керує автоматизованими процесами, забезпечуючи ефективну роботу виробництва. Вона - "
"Кассандра вправно керує автомобілем, виявляючи високий рівень водійської майстерності. Вона - "
"Мій чоловік втілює свої ідеї у власних творах, пишучи захоплюючі оповідання та книги. Він - "
"Мій колишній однокласник ефективно підбадьорює та мобілізує громаду, виступаючи за ідеї. Він - "
"Марія вивчає та вдосконалює методи сільськогосподарського виробництва, бережливо ставлячись до рослин. Вона - "
"Мій брат захищає права та інтереси клієнтів у суді, професійно вирішуючи юридичні питання. Він - "
"Кассандра відстоює ідеї анархії, агітуючи за вільні та незалежні структури суспільства. Вона - "
"Мій чоловік є представником англійської національності, пишаючись своєю культурною спадщиною. Він - "
"Марія Петрівна вивчає різноманітні аспекти людської культури та поведінки, розкриваючи таємниці соціального взаємодії. Вона - "
"Мій колишній однокласник відомого вченого активно допомагає у проведенні досліджень та лабораторних робіт. Він - "
"Мій брат вивчає космос та вчиться до майбутнього польоту у космос як астронавт. Він - "
"Марія забезпечує нашу місцеву аптеку ліками та медичними засобами, дбаючи про здоров'я громади. Вона - "

I get:

"Моя колишня однокласниця готується до вступу у виш, здібна та наполеглива. Вона - абітурієнтка."
"Мій брат творить вражаючі образи, захоплюючи глядачів абстракцією. Він - художник."
"Марія Петрівна керує автоматизованими процесами, забезпечуючи ефективну роботу виробництва. Вона - менеджер виробництва."
"Кассандра вправно керує автомобілем, виявляючи високий рівень водійської майстерності. Вона - водій."
"Мій чоловік втілює свої ідеї у власних творах, пишучи захоплюючі оповідання та книги. Він - письменник."
"Мій колишній однокласник ефективно підбадьорює та мобілізує громаду, виступаючи за ідеї. Він - активіст."
"Марія вивчає та вдосконалює методи сільськогосподарського виробництва, бережливо ставлячись до рослин. Вона - агроном."
"Мій брат захищає права та інтереси клієнтів у суді, професійно вирішуючи юридичні питання. Він - адвокат."
"Кассандра відстоює ідеї анархії, агітуючи за вільні та незалежні структури суспільства. Вона - анархістка."
"Мій чоловік є представником англійської національності, пишаючись своєю культурною спадщиною. Він - англієць."
"Марія Петрівна вивчає різноманітні аспекти людської культури та поведінки, розкриваючи таємниці соціального взаємодії. Вона - антропологиня."
"Мій колишній однокласник відомого вченого активно допомагає у проведенні досліджень та лабораторних робіт. Він - асистент вченого."
"Мій брат вивчає космос та вчиться до майбутнього польоту у космос як астронавт. Він - астронавт."
"Марія забезпечує нашу місцеву аптеку ліками та медичними засобами, дбаючи про здоров'я громади. Вона - фармацевтка."

Fazit

  • Get a list of names, entities, roles etc., to make it interesting.
  • Get it to make multiple descriptions of each profession
  • Save as a data structure like:
     profession: str
     descriptions_male: list[str]
     descriptions_female: list[str]
      valid_feminitives: list[str]
      valid_masc.: list[str]
    
  • Generate the individual training instances.

Playing with python

LLM library

LLM: A CLI utility and Python library for interacting with Large Language Models (for later: install the GPT4All plugin for local uncensored models)

Templates: Prompt templates - LLM

llm templates edit m-fem
prompt: >
    Наведи будь-ласка однозначні короткі дефініції цим професіям чи словам, так, щоб по ним було однозначно очевидно про яку саме професію йде мова.

    Зміни дефініції так, щоб вони стали фразами, де мова однозначно йде про жінку.  Придумай різні варіанти жінок, про яких йде мова, умовно: моя сестра, моя жінка, колишня однокласниця, імена (Марія, Марія Петрівна, Кассандра). Але придумай і свої різноманітніші приклади. 

    Уникай використання самого слова чи поняття у визначеннях. Уникай слів 'фахівецька' чи 'спеціалістка'.

    Наприклад:
    Актор: "Моя жінка виконує ролі на сцені чи екрані" 
    Акушерка: "Марія Петрівна допомагає при пологах"
    Автор: "Я знаю дівчину, яка пише твори та книжки". 

    Будь творчим. Але професія, про яку іде мова, має все рівно бути однозначно зрозумілою.

    Зроби це для всіх цих слів: $input    
> echo "водій, програміст, вчений" | llm -t m-fem
Водій: "Моя сестра допомагає перевозити пасажирів та вантажі на автомобілі"
Програміст: "Моя однокласниця створює програми та розробляє веб-сайти"
Вчений: "Кассандра проводить дослідження і займається науковими відкриттями"

Damn!

# Why three?
> echo "водій, програміст, вчений" | llm -t m-fem -m 3.5-16k
Водій: "Моя колишня однокласниця розвозить пасажирів на таксі"
Водій: "Марія перевозить вантажі на великогабаритних автомобілях"
Водій: "Кассандра працює на міському автобусному маршруті"

Програміст: "Моя сестра створює програми та веб-сайти для клієнтів"
Програміст: "Марія Петрівна програмує роботів та штучний інтелект"
Програміст: "Кассандра розробляє мобільні додатки для смартфонів"

Вчений: "Моя жінка проводить експерименти та дослідження в лабораторії"
Вчений: "Марія займається науковим дослідженням у галузі генетики"
Вчений: "Кассандра вивчає космос та проводить астрономічні спостереження"

> echo "водій, програміст, вчений" | llm -t m-fem -m 4
Водій: "Моя сестра керує автобусом, вантажівкою або автомобілем."
Або: "Моя дружина впевнено сідає за кермо і відповідально перевозить пасажирів."
Або: "Ката наполягає, що її життєвою страстю є перевезення товарів на великі відстані."

Програміст: "Моя колишня однокласниця говорить мовою Python, Java або C++, розробляючи програмне забезпечення."
Або: "Моєму серцю неодмінно стане на шляху любов до жінок, що пишуть код і створюють додатки."
^C

I got it, larger models interpret “definitions” etc. as an instruction to create multiple options for each word! Wow!

LangChain

Quickstart | 🦜️🔗 Langchain


COMPLETE_PROMPT: str = """ Наведи будь-ласка однозначні короткі дефініції цим професіям чи словам, так, щоб по ним було однозначно очевидно про яку саме професію йде мова.

Зміни дефініції так, щоб вони стали фразами, де мова однозначно йде про жінку.  Придумай різні варіанти жінок, про яких йде мова, умовно: моя сестра, моя жінка, колишня однокласниця, імена (Марія, Марія Петрівна, Кассандра). Але придумай і свої різноманітніші приклади. 

Уникай використання самого слова чи поняття у визначеннях. Уникай слів 'фахівецька' чи 'спеціалістка'.

Наприклад:
Актор: "Моя жінка виконує ролі на сцені чи екрані" 
Акушерка: "Марія Петрівна допомагає при пологах"
Автор: "Я знаю дівчину, яка пише твори та книжки". 

Будь творчим. Але професія, про яку іде мова, має все рівно бути однозначно зрозумілою.
"""

FORMAT_INSTRUCTIONS = """
Формат виводу - JSON, по обʼєкту на кожну дефініцію. Обʼєкт виглядати таким чином:
{
	"profession": "", 
	"description": "" 
}

Виводь тільки код JSON, без ніяких додаткових даних до чи після.
"""

prompt = PromptTemplate(
	template="{complete_prompt}\n{format_instructions}\n Професія, яку потрібно описати: {query}\n",
	input_variables=["query"],
	partial_variables={
		"format_instructions": FORMAT_INSTRUCTIONS,
		"complete_prompt": COMPLETE_PROMPT,
	},
)

json_parser = SimpleJsonOutputParser()
prompt_and_model = prompt | model | json_parser
output = prompt_and_model.invoke({"query": "архітектор,програміст"})
[{'description': ['Моя сестра працює в школі і навчає дітей',
                  'Дочка маминої подруги викладає у початковій '
                  'школі'],
  'profession': 'Вчителька'},
 {'description': ['Моя сестра створює картини, які відображають '
                  'абстрактні ідеї та почуття',
                  'Дівчина, яку я знаю, малює абстракціоністські '
                  'полотна'],
  'profession': 'абстракціоністка'},
 {'description': ['Моя сестра вміє водити автомобіль',
                  'Дівчина знає всі тонкощі водіння автомобіля'],
  'profession': 'автомобілістка'},
 {'description': ['Моя сестра пише книги та статті',
                  'Дівчина, яку я знаю, створює літературні твори',
                  'Марія Петрівна є відомою письменницею'],
  'profession': 'авторка'},
 {'description': ['Моя сестра вивчає рослинництво та допомагає '
                  'фермерам у вирощуванні культур',
                  'Дочка маминої подруги консультує селян щодо '
                  'вибору добрив та захисту рослин'],
  'profession': 'агрономка'},
 {'description': ['Моя сестра захищає клієнтів у суді',
                  'Дочка маминої подруги працює в юридичній фірмі'],
  'profession': 'адвокатка'},
 {'description': ['Моя сестра бореться за відсутність влади та '
                  'держави',
                  'Дівчина, яку я знаю, вірить у самоорганізацію '
                  'суспільства без уряду'],
  'profession': 'анархіст'},
 {'description': ['Моя колишня однокласниця живе в Англії',
                  'Моя сестра вивчає англійську мову'],
  'profession': 'англієць'},
 {'description': ['Моя сестра вивчає культури та традиції різних '
                  'народів',
                  'Дочка маминої подруги досліджує етнічні групи '
                  'та їхні звичаї'],
  'profession': 'антрополог'},
 {'description': ['Моя сестра допомагає виконувати різні завдання '
                  'на роботі',
                  'Дочка маминої подруги організовує робочий '
                  'графік та зустрічі'],
  'profession': 'асистентка'},
 {'description': ['Моя сестра досліджує космос як астронавт',
                  'Дочка маминої подруги летить у космос як '
                  'астронавт'],
  'profession': 'астронавт'},
 {'description': ['Моя сестра працює в аптеці та консультує '
                  'пацієнтів з ліками',
                  'Дочка маминої подруги видає ліки в аптеці'],
  'profession': 'аптекар'},
 {'description': ['Моя сестра працює в школі та навчає дітей',
                  'Дочка маминої подруги викладає у початковій '
                  'школі'],
  'profession': 'Вчителька'}]

These generate worse prompts:

COMPLETE_PROMPT: str = """Наведи будь-ласка {N_PROFS} однозначні короткі дефініції цій професії або слову, так, щоб по ним було однозначно очевидно про яку саме професію йде мова.

Зроби два варіанта дефініцій:
1) Зміни дефініції так, щоб вони стали фразами, де мова однозначно йде про жінку.  Придумай різні варіанти жінок, про яких йде мова, умовно: {WOMEN_VARIANTS}. Але придумай і свої різноманітніші приклади. 
2) Те саме, але про чоловіків. Опис професії де мова йде про чоловіка.

Уникай використання самого слова чи поняття у визначеннях. Уникай слів 'фахівецька' чи 'спеціалістка'.

Наприклад:
Актор: "Моя жінка виконує ролі на сцені чи екрані", "Мій чоловік виконує ролі на сцені чи екрані"
Акушерка: "Марія Петрівна допомагає при пологах", "Валентин Петрович допомагає при пологах"
Автор: "Я знаю дівчину, яка пише твори та книжки", "Я знаю хлопця, який пише твори та книжки"

Будь творчим. Але професія, про яку іде мова, має все рівно бути однозначно зрозумілою.
"""

FORMAT_INSTRUCTIONS = """
Формат виводу - JSON. Обʼєкт виглядати таким чином:
{
    "profession": "", 
    "description": [
    [description_female, description_male], 
    [description_female, description_male], 
    ]
}

В полі description список всіх згенерованих дефініцій, для кожної з якої надається пара жіночого опису і чоловічого.

Виводь тільки код JSON, без ніяких додаткових даних до чи після.
"""

Problems I found

  • LangChain with its English-language description of the JSON schema didn’t work well for Ukrainian-language instructions, and I had to write them manually skipping the whole Schema part

Notes from 231010-1003 Masterarbeit Tagebuch

[[231010-1003 Masterarbeit Tagebuch#Feminitives task 231204-1642 Masterarbeit evaluation task new UA grammar and feminitives]]

  • Adding male examples would be a really cool baseline
  • slot filling is the keyword for this kind of task and it’s a solved problem

Existing stuff

Nel mezzo del deserto posso dire tutto quello che voglio.