serhii.net

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

02 Feb 2024

Human baselines creation for Masterarbeit

Goals/reqs:

  • sth easy so I can send a link to people, ideally w/o registration, and they can immediately label stuff
  • CBT & some lmentry-static: model as document classification
    • needs to be able to show the tasks in pretty multiline formatted format
  • ideally python, or at least docker

Shortlist of my options:

label-studio

<View>
  <Header value="Context"/>
  <Text name="text_context" value="$context"/>
  <Header value="Question"/>
  <Text name="text_question" value="$question"/>
  <Text name="options" value="$options"/>
  <View style="box-shadow: 2px 2px 5px #999;                padding: 20px; margin-top: 2em;                border-radius: 5px;">
    <Header value="Яке слово має бути замість '____' ?"/>
    <Choices name="answers" toName="text_question" choice="single" showInLine="true">
    <Choice value="A" html="&lt;b&gt;A&lt;/b&gt;"/><Choice value="B" html="&lt;b&gt;B&lt;/b&gt;"/><Choice value="C" html="&lt;b&gt;C&lt;/b&gt;"/>
      <Choice value="D" html="&lt;b&gt;D&lt;/b&gt;"/>
    </Choices>
    <Choices name="answers2" toName="text_question" choice="single" showInLine="false">
      <Choice value="unknown" html="невідомо/неможливо"/>
      <Choice value="bad_story" html="погана казка"/>
    </Choices>
  </View>
</View>

Problem: options are shown like a list of str, because it doesn’t parse the csv column as a list, but as a str.

I’ll try to get around this by using JSON as input

.. and I can’t, it ignores whatever json i provide to it.

Worst case scenario I’ll generate a string with all options as STR to show it.

  • ah, it’s still STR

I think I have it!

<View>
  <Header value="Context"/>
  <Text name="text_context" value="$context"/>
  <Header value="Question"/>
  <Text name="text_question" value="$question" />
  <Text name="options" value="$options"/>
  <View style="box-shadow: 2px 2px 5px #999;                padding: 20px; margin-top: 2em;                border-radius: 5px;">
    <Header value="Яке слово має бути замість '____' ?"/>
    <Choices name="answers" toName="text_question" choice="single-radio" showInLine="true" value="$options_forls">
 
    </Choices>
     <Header value="Проблеми"/>

    <Choices name="answers2" toName="text_question" choice="multiple" showInLine="false">
      <Choice value="unknown" html="невідомо/неможливо"/>
      <Choice value="bad_story" html="погана казка"/>
    </Choices>
   <TextArea name="comments" toName="text_question" editable="true" placeholder="Інше" />
 </View>
</View>


<!-- {
  "data": {
    "context": "Колись давним-давно, у маленькому селі, що лежало на краю великого лісу, жила сильна Кішка. Вона була відома своєю мудрістю та справедливістю серед усіх мешканців лісу. Її сусідами були Лисиця та Заєць, які жили поруч у своїх затишних домівках.\n\nОдного дня до села прийшли два вовки, які шукали нове місце для життя. Вони були великі та могутні, але їхній характер був жорстоким і хитрим. Вовки вирішили, що дім Лисиці стане ідеальним місцем для їхнього нового житла, і почали примушувати Лисицю покинути свій дім.\n\nЛисиця, зневірена та перелякана, звернулася до Кішки з проханням допомогти вирішити цю справу. Кішка, знаючи про свою відповідальність перед сусідами, погодилася допомогти.\n\nКішка зустрілася з вовками і спробувала переконати їх залишити Лисицю у спокої. Вона говорила про важливість миру та гармонії у лісовій громаді, але вовки лише сміялися з її слів. Вони не бажали слухати розумні доводи, адже їхнє бажання влади було ненаситним.\n\nЗаєць, який був свідком цієї розмови, запропонував Кішці влаштувати змагання між вовками та Лисицею, де переможець отримає дім. Кішка, хоч і сумнівалася в цій ідеї, вирішила спробувати, адже інших варіантів не було.\n\nЗмагання полягало в тому, щоб знайти найрідкіснішу квітку в лісі. Лисиця, знаючи ліс як свої п'ять пальців, швидко знайшла квітку. Вовки ж, не зважаючи на правила, вирішили просто вкрасти квітку у Лисиці.\n\nКоли Кішка дізналася про їхню підступність, вона з гнівом заявила, що вовки програли змагання через свою нечесність.",
    "question": "Але вовки не зважали на ______ Кішки. Вони вирішили взяти те, що хотіли, силою, і напали на Лисицю та Зайця.\n\nКішка намагалася захистити своїх сусідів, але вовки були занадто сильні. Вони вигнали Лисицю та Зайця з їхніх домівок і захопили їхні території.\n\nСело, яке колись було мирним та щасливим, тепер було охоплене страхом та беззаконням. Кішка, зі зламаним серцем, зрозуміла, що навіть найсильніші та наймудріші не завжди можуть перемогти зло, яке не бажає слухати розуму. І так, село залишилося в тіні вовків, які прийшли туди не за миром, а за владою.",
    "options": [
      "село",
      "слова",
      "змагання",
      "місця"
    ],
    "answer": "слова",
    "storyId": 10,
    "additionalMetadata_repl_type": "COMMON_NOUN",
    "additionalMetadata_context_sents_n": 17,
    "additionalMetadata_context_sents_tokens": 278,
    "additionalMetadata_question_sents_tokens": 557,
    "additionalMetadata_question_sents_share": 0.3,
    "additionalMetadata_num_repl_opts_from_text": 4,
    "additionalMetadata_label": 1,
    "options_forls": [
      {
        "value": "село",
        "html": "село"
      },
      {
        "value": "слова",
        "html": "слова"
      },
      {
        "value": "змагання",
        "html": "змагання"
      },
      {
        "value": "місця",
        "html": "місця"
      }
    ],
    "options_show_str": "А: село\nБ: слова\nВ: змагання\nГ: місця"
  }
} -->

(If I’ll need example again, the LLM comparison example layout is helpful, esp. how to format the data dict during layout creation for it to actually work instead of quietly failing)

2024-02-02-154605_1298x787_scrot.png

I like this. I think I’ll use label-studio for my own filtering of bad stories/tasks as well maybe?

Ones I’ll manually check.

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

Клавіши:
- 1..n для вибору правильного варіанту
- 9 для "невідомо/неможливо", 0 для "погана казка"
- Ctrl+Enter для "зберегти і далі"
- Ctrl+Space для "пропустити"


ДЯКУЮ ВАМ!

Default dir locations:

  • ~/.local/share/label-studio
> poetry run label-studio init --data-dir=../../data/human_baselines/CBT/ --username=me --password=xxx
  • Settings
    • Random sampling to attempt to get around the fact that the stories are the same

Gotchas & bits

Instructions for editing stories

Put them here: 240206-1619 CBT Story correction instructions

Nel mezzo del deserto posso dire tutto quello che voglio.