From a02cdd275af75fa9e5e337188dfed8ae09b88a87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20W=C4=85troba?= <markowanga@gmail.com>
Date: Wed, 27 Apr 2022 07:47:27 +0200
Subject: [PATCH] Add LUNA processing

---
 .gitignore                                    |    2 +
 .idea/asr-benchmarks.iml                      |    2 +-
 .idea/misc.xml                                |    2 +-
 examples/import_dataset/luna/import_luna.py   |    7 +-
 examples/luna/__init__.py                     |    1 +
 examples/luna/load_datasource_luna.py         |    5 +
 .../luna/luna_gold_transcript_processor.py    |   33 +
 examples/luna/luna_main.py                    |   92 +
 examples/luna/luna_record_provider.py         |   35 +
 examples/luna/pos.ipynb                       | 4255 +++++++++++++++++
 examples/luna/pos_processing/__init__.py      |    0
 .../asr_spacy_token_pos_processing_task.py    |   24 +
 ...nscript_spacy_token_pos_processing_task.py |   24 +
 .../spacy_pos_wer_processing_task.py          |   85 +
 .../spacy_token_pos_processing_task.py        |   58 +
 poetry.lock                                   |   18 +-
 pyproject.toml                                |    1 +
 sziszapangma/.DS_Store                        |  Bin 6148 -> 6148 bytes
 ...ached_embedding_transformer.cpython-38.pyc |  Bin 1923 -> 1986 bytes
 .../__pycache__/asr_processor.cpython-38.pyc  |  Bin 1471 -> 2207 bytes
 .../experiment_manager.cpython-38.pyc         |  Bin 1211 -> 1362 bytes
 sziszapangma/integration/asr_processor.py     |   22 +-
 .../integration/experiment_manager.py         |    2 +
 .../experiment_repository.cpython-38.pyc      |  Bin 2351 -> 2151 bytes
 ...mongo_experiment_repository.cpython-38.pyc |  Bin 3189 -> 2958 bytes
 .../repository/experiment_repository.py       |    4 -
 .../repository/file_experiment_repository.py  |   13 -
 .../repository/minio_experiment_repository.py |   63 +
 .../repository/mongo_experiment_repository.py |    4 -
 .../multi_files_experiment_repository.py      |   61 +
 .../multiple_experiment_repository.py         |   39 +
 .../task/__pycache__/asr_task.cpython-38.pyc  |  Bin 1752 -> 2149 bytes
 .../classic_wer_metric_task.cpython-38.pyc    |  Bin 2835 -> 3429 bytes
 .../embedding_wer_metrics_task.cpython-38.pyc |  Bin 3078 -> 3627 bytes
 .../processing_task.cpython-38.pyc            |  Bin 1769 -> 2207 bytes
 .../integration/task/gold_transcript_task.py  |   35 +
 36 files changed, 4860 insertions(+), 27 deletions(-)
 create mode 100644 examples/luna/__init__.py
 create mode 100644 examples/luna/load_datasource_luna.py
 create mode 100644 examples/luna/luna_gold_transcript_processor.py
 create mode 100644 examples/luna/luna_main.py
 create mode 100644 examples/luna/luna_record_provider.py
 create mode 100644 examples/luna/pos.ipynb
 create mode 100644 examples/luna/pos_processing/__init__.py
 create mode 100644 examples/luna/pos_processing/asr_spacy_token_pos_processing_task.py
 create mode 100644 examples/luna/pos_processing/gold_transcript_spacy_token_pos_processing_task.py
 create mode 100644 examples/luna/pos_processing/spacy_pos_wer_processing_task.py
 create mode 100644 examples/luna/pos_processing/spacy_token_pos_processing_task.py
 create mode 100644 sziszapangma/integration/repository/minio_experiment_repository.py
 create mode 100644 sziszapangma/integration/repository/multi_files_experiment_repository.py
 create mode 100644 sziszapangma/integration/repository/multiple_experiment_repository.py
 create mode 100644 sziszapangma/integration/task/gold_transcript_task.py

diff --git a/.gitignore b/.gitignore
index 6ed7d72..10f676d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -109,3 +109,5 @@ ENV/
 
 debug_run/
 publish_to_theliver.sh
+
+.idea
diff --git a/.idea/asr-benchmarks.iml b/.idea/asr-benchmarks.iml
index 816680e..8e8eecc 100644
--- a/.idea/asr-benchmarks.iml
+++ b/.idea/asr-benchmarks.iml
@@ -4,7 +4,7 @@
     <content url="file://$MODULE_DIR$">
       <excludeFolder url="file://$MODULE_DIR$/venv" />
     </content>
-    <orderEntry type="jdk" jdkName="Poetry (asr-benchmarks) (2)" jdkType="Python SDK" />
+    <orderEntry type="jdk" jdkName="Python 3.8 (asr-benchmarks)" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
   <component name="PyDocumentationSettings">
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 060748f..65f24ff 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" project-jdk-name="Poetry (asr-benchmarks) (2)" project-jdk-type="Python SDK" />
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (asr-benchmarks)" project-jdk-type="Python SDK" />
 </project>
\ No newline at end of file
diff --git a/examples/import_dataset/luna/import_luna.py b/examples/import_dataset/luna/import_luna.py
index cd07f7d..3038632 100644
--- a/examples/import_dataset/luna/import_luna.py
+++ b/examples/import_dataset/luna/import_luna.py
@@ -1,3 +1,4 @@
+from pprint import pprint
 from typing import Tuple, List
 from xml.etree import ElementTree
 
@@ -167,7 +168,7 @@ class LunaAdapter:
 
 
 if __name__ == "__main__":
-    luna_directory = '/Users/marcinwatroba/Desktop/asr_datasets/LUNA/LUNA.PL'
+    luna_directory = '/Users/marcinwatroba/Desktop/LUNA/LUNA.PL'
     luna_record_provider = LunaRecordProvider(ExtensionPathFilter(
         root_directory=luna_directory,
         extension='wav'
@@ -177,4 +178,6 @@ if __name__ == "__main__":
         document = [itt for itt in relation_manager.get_all_items() if itt['type'] == 'Document'][0]
         document_words = [relation_manager.get_item_by_id(item_id)
                           for item_id in document['word_ids']]
-        print(document_words)
+        all_relations = relation_manager.get_all_relations_for_item(document_words[0]['id'])
+        ids = [it['second_id'] for it in all_relations if it['second_type'] in ['lemma', 'pos']]
+        pprint([relation_manager.get_item_by_id(it) for it in ids])
diff --git a/examples/luna/__init__.py b/examples/luna/__init__.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/examples/luna/__init__.py
@@ -0,0 +1 @@
+
diff --git a/examples/luna/load_datasource_luna.py b/examples/luna/load_datasource_luna.py
new file mode 100644
index 0000000..062a6c8
--- /dev/null
+++ b/examples/luna/load_datasource_luna.py
@@ -0,0 +1,5 @@
+from lhotse import AudioSource, SupervisionSegment
+
+
+def load_single_datasource(path: str) -> AudioSource:
+    return AudioSource('file', [1], path)
diff --git a/examples/luna/luna_gold_transcript_processor.py b/examples/luna/luna_gold_transcript_processor.py
new file mode 100644
index 0000000..b3d508a
--- /dev/null
+++ b/examples/luna/luna_gold_transcript_processor.py
@@ -0,0 +1,33 @@
+from typing import List, Dict
+
+# from examples.luna.luna_record_provider import LunaRecordProvider
+from examples.luna.luna_record_provider import LunaRecordProvider
+from sziszapangma.integration.gold_transcript_processor import GoldTranscriptProcessor
+from sziszapangma.model.relation_manager import RelationManager
+
+
+class LunaGoldTranscriptProcessor(GoldTranscriptProcessor):
+    _record_provider: LunaRecordProvider
+
+    def __init__(self, record_provider: LunaRecordProvider):
+        self._record_provider = record_provider
+
+    def parse_word(self, word, relation_manager: RelationManager):
+        # print(word)
+        all_relations = relation_manager.get_all_relations_for_item(word['id'])
+        pos_id = [it['second_id'] for it in all_relations if it['second_type'] in ['pos']][0]
+        return {
+            'id': word['id'],
+            'word': word['text'],
+            'pos': relation_manager.get_item_by_id(pos_id)['value']
+        }
+
+    def get_gold_transcript(self, record_id: str) -> List[Dict[str, any]]:
+        relation_manager = self._record_provider.get_relation_manager(record_id)
+        document = [itt for itt in relation_manager.get_all_items() if itt['type'] == 'Document'][0]
+        document_words = [relation_manager.get_item_by_id(item_id)
+                          for item_id in document['word_ids']]
+        return [
+            self.parse_word(word, relation_manager)
+            for word in document_words
+        ]
diff --git a/examples/luna/luna_main.py b/examples/luna/luna_main.py
new file mode 100644
index 0000000..98684c5
--- /dev/null
+++ b/examples/luna/luna_main.py
@@ -0,0 +1,92 @@
+from examples.luna.luna_gold_transcript_processor import LunaGoldTranscriptProcessor
+from examples.luna.luna_record_provider import LunaRecordProvider
+from examples.luna.pos_processing.asr_spacy_token_pos_processing_task import \
+    AsrSpacyTokenPosProcessingTask
+from examples.luna.pos_processing.gold_transcript_spacy_token_pos_processing_task import \
+    GoldTranscriptSpacyTokenPosProcessingTask
+from examples.luna.pos_processing.spacy_pos_wer_processing_task import SpacyPosWerProcessingTask
+from sziszapangma.integration.asr_processor import AsrPathCacheClient
+from sziszapangma.integration.experiment_manager import ExperimentManager
+from sziszapangma.integration.path_filter import ExtensionPathFilter
+from sziszapangma.integration.repository.experiment_repository import ExperimentRepository
+from sziszapangma.integration.repository.multi_files_experiment_repository import \
+    MultiFilesExperimentRepository
+from sziszapangma.integration.task.asr_task import AsrTask
+from sziszapangma.integration.task.classic_wer_metric_task import ClassicWerMetricTask
+from sziszapangma.integration.task.gold_transcript_task import GoldTranscriptTask
+
+LUNA_DIRECTORY = '/Users/marcinwatroba/Desktop/LUNA/LUNA.PL'
+GOLD_TRANSCRIPT = 'gold_transcript'
+TECHMO_POLISH_ASR = 'techmo_polish_asr'
+TECHMO_POLISH_CLASSIC_WER_METRIC = 'techmo_polish_classic_wer_metric'
+TECHMO_POLISH_CLASSIC_ALIGNMENT = 'techmo_polish_classic_alignment'
+TECHMO_SPACY = 'techmo_spacy'
+GOLD_TRANSCRIPT_SPACY = 'gold_transcript_spacy'
+POS_ALIGNMENT_WER = 'pos_alignment_wer'
+POS_METRICS_WER = 'pos_metrics_wer'
+
+
+def run_luna_experiment(experiment_repository: ExperimentRepository):
+    record_provider = LunaRecordProvider(ExtensionPathFilter(
+        root_directory=LUNA_DIRECTORY,
+        extension='wav'
+    ))
+    experiment_processor = ExperimentManager(
+        record_id_iterator=record_provider,
+        processing_tasks=[
+            GoldTranscriptTask(
+                task_name='gold_transcript_task',
+                gold_transcript_processor=LunaGoldTranscriptProcessor(record_provider),
+                gold_transcript_property_name=GOLD_TRANSCRIPT,
+                require_update=False
+            ),
+            AsrTask(
+                task_name='techmo_polish_task',
+                # asr_processor=AsrWebClient('http://192.168.0.124:4999/process_asr', 'test1234'),
+                asr_processor=AsrPathCacheClient(),
+                asr_property_name=TECHMO_POLISH_ASR,
+                require_update=False,
+                record_path_provider=record_provider
+            ),
+            ClassicWerMetricTask(
+                task_name='classic_wer_metric_task',
+                asr_property_name=TECHMO_POLISH_ASR,
+                gold_transcript_property_name=GOLD_TRANSCRIPT,
+                metrics_property_name=TECHMO_POLISH_CLASSIC_WER_METRIC,
+                require_update=False,
+                alignment_property_name=TECHMO_POLISH_CLASSIC_ALIGNMENT
+            ),
+            GoldTranscriptSpacyTokenPosProcessingTask(
+                task_name='gold_transcript_spacy_task',
+                input_property_name=GOLD_TRANSCRIPT,
+                spacy_property_name=GOLD_TRANSCRIPT_SPACY,
+                require_update=True
+            ),
+            AsrSpacyTokenPosProcessingTask(
+                task_name='techmo_spacy_task',
+                input_property_name=TECHMO_POLISH_ASR,
+                spacy_property_name=TECHMO_SPACY,
+                require_update=True
+            ),
+            SpacyPosWerProcessingTask(
+                task_name='PosWerProcessor',
+                require_update=False,
+                gold_transcript_pos_property_name=GOLD_TRANSCRIPT_SPACY,
+                asr_pos_property_name=TECHMO_SPACY,
+                pos_alignment_wer=POS_ALIGNMENT_WER,
+                pos_metrics_wer=POS_METRICS_WER
+            )
+        ],
+        experiment_repository=experiment_repository,
+        relation_manager_provider=record_provider
+    )
+    experiment_processor.process()
+
+
+def example_run():
+    experiment_repository = MultiFilesExperimentRepository('experiment_data', 'asr_benchmark_luna')
+    run_luna_experiment(experiment_repository)
+
+
+if __name__ == '__main__':
+    example_run()
diff --git a/examples/luna/luna_record_provider.py b/examples/luna/luna_record_provider.py
new file mode 100644
index 0000000..aa0f30a
--- /dev/null
+++ b/examples/luna/luna_record_provider.py
@@ -0,0 +1,35 @@
+from typing import Dict, Set
+
+from sziszapangma.integration.path_filter import PathFilter
+from sziszapangma.integration.record_id_iterator import RecordIdIterator
+from sziszapangma.integration.record_path_provider import RecordPathProvider
+from sziszapangma.integration.relation_manager_provider import RelationManagerProvider
+from sziszapangma.model.relation_manager import RelationManager, FileRelationManager
+
+
+class LunaRecordProvider(RecordIdIterator, RecordPathProvider, RelationManagerProvider):
+    _path_by_id: Dict[str, str]
+
+    def __init__(self, path_filter: PathFilter):
+        self._path_by_id = dict({
+            self._get_id(it): it
+            for it in path_filter.get_list_of_files()
+        })
+
+    def get_all_records(self) -> Set[str]:
+        return set(self._path_by_id.keys())
+
+    def get_path(self, record_id: str) -> str:
+        return self._path_by_id[record_id]
+
+    def get_item_file_path(self, record_id: str, file) -> str:
+        return self._path_by_id[record_id]
+
+    def get_relation_manager(self, record_id: str) -> RelationManager:
+        basic_path = self.get_path(record_id)[:-4]
+        return FileRelationManager(f'{basic_path}_ab_relations.csv', f'{basic_path}_ab_items.json')
+
+    @staticmethod
+    def _get_id(record_file_path: str) -> str:
+        path = record_file_path.replace('.wav', '')
+        return '/'.join(path.split('/')[-6:]).replace('/', '__')
diff --git a/examples/luna/pos.ipynb b/examples/luna/pos.ipynb
new file mode 100644
index 0000000..b744f9f
--- /dev/null
+++ b/examples/luna/pos.ipynb
@@ -0,0 +1,4255 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "id": "4256d3f1-62cd-44c2-b4c9-3eb9df2c751d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from luna_record_provider_new import LunaRecordProvider\n",
+    "from sziszapangma.integration.experiment_manager import ExperimentManager\n",
+    "from sziszapangma.integration.repository.multi_files_experiment_repository import MultiFilesExperimentRepository\n",
+    "from sziszapangma.integration.path_filter import ExtensionPathFilter\n",
+    "from pymongo import MongoClient\n",
+    "from spacy.tokens.doc import Doc\n",
+    "import pandas as pd"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "id": "bbe2a7bf-bb6d-42ee-b5ce-48e6ec7fcd94",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "luna_directory = '/Users/marcinwatroba/Desktop/LUNA/LUNA.PL'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "4dec626b-02e4-4c78-a238-04ef2f090ea5",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "experiment_repository = MultiFilesExperimentRepository('experiment_data', 'asr_benchmark_luna')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "id": "98c6ff1d-4fbd-4b68-9e23-ecea33852b12",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "record_provider = LunaRecordProvider(ExtensionPathFilter(\n",
+    "    root_directory=luna_directory,\n",
+    "    extension='wav'\n",
+    "))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "id": "d7dd603d-2335-4bc5-9a26-bd7efa916c96",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "record_id = list(record_provider.get_all_records())[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "id": "0ca138ff-199d-4018-84a6-758ebdfa4ffa",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'classic_wer': 0.19727891156462585}"
+      ]
+     },
+     "execution_count": 25,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "experiment_repository.get_property_for_key(record_id, 'pos_metrics_wer')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "id": "1426bc16-1598-47a6-bdfc-3e2d59b80331",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pos_alignment_wer = experiment_repository.get_property_for_key(record_id, 'pos_alignment_wer')\n",
+    "gold_transcript_spacy = experiment_repository.get_property_for_key(record_id, 'gold_transcript_spacy')\n",
+    "gold_trnascript_spacy_word_dict = {it['id']: it['word'] for it in gold_transcript_spacy}\n",
+    "asr_spacy = experiment_repository.get_property_for_key(record_id, 'techmo_spacy')\n",
+    "asr_spacy_word_dict = {it['id']: it['word'] for it in asr_spacy}"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "id": "60269a31-2d10-4cfa-9153-f2b1979941ec",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>143</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>144</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>145</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>146</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>147</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>148 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    DELETION               PRON                 xxx                       \n",
+       "1     CORRECT               NOUN               dzień                NOUN   \n",
+       "2     CORRECT                ADJ               dobry                 ADJ   \n",
+       "3     CORRECT               NOUN               dzień                NOUN   \n",
+       "4     CORRECT                ADJ               dobry                 ADJ   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "143  DELETION               NOUN            widzenia                       \n",
+       "144   CORRECT               VERB              proszÄ™                VERB   \n",
+       "145   CORRECT                ADV              bardzo                 ADV   \n",
+       "146  DELETION                ADP                  do                       \n",
+       "147   CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                         \n",
+       "1                  dzień  \n",
+       "2                  dobry  \n",
+       "3                  dzień  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "143                       \n",
+       "144               proszÄ™  \n",
+       "145               bardzo  \n",
+       "146                       \n",
+       "147             widzenia  \n",
+       "\n",
+       "[148 rows x 5 columns]"
+      ]
+     },
+     "execution_count": 27,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "arr = [\n",
+    "    {\n",
+    "        'step_type': it['step_type'],\n",
+    "        'reference_word_pos': it['step_words']['reference_word']['text'] if 'reference_word' in it['step_words'] else '',\n",
+    "        'reference_word_text': gold_trnascript_spacy_word_dict[it['step_words']['reference_word']['id']] \n",
+    "        if 'reference_word' in it['step_words'] else '',\n",
+    "        'hypothesis_word_pos': it['step_words']['hypothesis_word']['text'] if 'hypothesis_word' in it['step_words'] else '',\n",
+    "        'hypothesis_word_text': asr_spacy_word_dict[it['step_words']['hypothesis_word']['id']] \n",
+    "        if 'hypothesis_word' in it['step_words'] else ''\n",
+    "\n",
+    "    }\n",
+    "    for it in pos_alignment_wer\n",
+    "]\n",
+    "pd.DataFrame(arr)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 47,
+   "id": "74bf17ba-8572-4758-8116-794708b6ea08",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_gold_transcript_for(record_id: str) -> str:\n",
+    "    gold_trnascript_property = experiment_repository.get_property_for_key(record_id, 'gold_transcript')\n",
+    "    return ' '.join([it['word'] for it in gold_trnascript_property])\n",
+    "\n",
+    "def get_asr_transcript_for(record_id: str) -> str:\n",
+    "    gold_trnascript_property = experiment_repository.get_property_for_key(record_id, 'techmo_polish_asr')\n",
+    "    return gold_trnascript_property['full_text']\n",
+    "\n",
+    "def get_pos_alignment_df(record_id: str) -> pd.DataFrame:\n",
+    "    pos_alignment_wer = experiment_repository.get_property_for_key(record_id, 'pos_alignment_wer')\n",
+    "    gold_transcript_spacy = experiment_repository.get_property_for_key(record_id, 'gold_transcript_spacy')\n",
+    "    gold_trnascript_spacy_word_dict = {it['id']: it['word'] for it in gold_transcript_spacy}\n",
+    "    asr_spacy = experiment_repository.get_property_for_key(record_id, 'techmo_spacy')\n",
+    "    asr_spacy_word_dict = {it['id']: it['word'] for it in asr_spacy}\n",
+    "    \n",
+    "    arr = [\n",
+    "        {\n",
+    "            'step_type': it['step_type'],\n",
+    "            'reference_word_pos': it['step_words']['reference_word']['text'] if 'reference_word' in it['step_words'] else '',\n",
+    "            'reference_word_text': gold_trnascript_spacy_word_dict[it['step_words']['reference_word']['id']] \n",
+    "            if 'reference_word' in it['step_words'] else '',\n",
+    "            'hypothesis_word_pos': it['step_words']['hypothesis_word']['text'] if 'hypothesis_word' in it['step_words'] else '',\n",
+    "            'hypothesis_word_text': asr_spacy_word_dict[it['step_words']['hypothesis_word']['id']] \n",
+    "            if 'hypothesis_word' in it['step_words'] else ''\n",
+    "\n",
+    "        }\n",
+    "        for it in pos_alignment_wer\n",
+    "    ]\n",
+    "    return pd.DataFrame(arr)\n",
+    "    \n",
+    "    \n",
+    "def show_report_for(record_id: str):\n",
+    "    print(f'gold transcript: {get_gold_transcript_for(record_id)}')    \n",
+    "    print()\n",
+    "    print(f'asr transcript: {get_asr_transcript_for(record_id)}')\n",
+    "    print()\n",
+    "    print(f\"word wer {experiment_repository.get_property_for_key(record_id, 'techmo_polish_classic_wer_metric')}\")\n",
+    "    print()\n",
+    "    print(f\"pos wer {experiment_repository.get_property_for_key(record_id, 'pos_metrics_wer')}\")\n",
+    "    print()\n",
+    "    display(get_pos_alignment_df(record_id))\n",
+    "    print('--------------------------------------------------------------')\n",
+    "    print('--------------------------------------------------------------')\n",
+    "    print('--------------------------------------------------------------')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 48,
+   "id": "3395e091-3488-4b49-aede-af15a0055a8b",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "gold transcript: xxx dzień dobry dzień dobry proszę pana mam takie pytanie jestem emerytką i chcę se kupić miesięczny bilet to ile za jakie muszę czy sto procent płacić czy połówkę a nie ma pani jeszcze siedemdziesięciu lat no nie mam proszę pani jeśli jest pani emerytką to na podstawie legitymacji emery~ emeryta i rencisty i dokumentu tożsamości jest ulga czterdzieści osiem procent czterdzieści osiem procent tak a teraz niech pan mi powie jak ja chcę kupić sobie bilet miesięczny na tą eskaemkę to ile ale pani chce tylko na eskaemkę ? na eskaemkę i na tramwaje aha a będzie pani jeździła eskaemką dokąd ? z Pruszkowa do Warszawy aha czyli musiałaby pani se taki na trzydzieści dni by kosztował panią czterdzieści sześć osiemdziesiąt czterdzieści sześć osiemdziesiąt to taki bilet bym tak to się nazywa bilet sieciowy imienny bilet sieciowy dziękuję bardzo do widzenia proszę bardzo do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry dzień dobry proszę pana ja mam takie pytanie jestem emerytką i chcę se kupić miesięczny bilet to ile za jakie muszę czy co czy połówkę a nie ma pani jeszcze siedemdziesięciu lat no nie mam proszę pani jeśli jest pani emerytką to na podstawie legitymacji emery emeryta i rencisty i dokumentu tożsamości jest ulga 48 procent tak a teraz niech pan mi powie jak ja chcę kupić sobie bilet miesięczny na tą skm kiedy ile ale pani chce tylko na skm na tramwaje aha a będzie pani jeździła skm konto kont z pruszkowa do warszawy aha czyli musiałaby pani se taki na 30 dni by kosztował panią 40 46 800 taki bilet bym tak to się nazywa bilet sieciowy imienny bilet sieciowy dziękuję bardzo proszę bardzo widzenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.2328767123287671}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.19727891156462585}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>143</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>144</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>145</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>146</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>147</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>148 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    DELETION               PRON                 xxx                       \n",
+       "1     CORRECT               NOUN               dzień                NOUN   \n",
+       "2     CORRECT                ADJ               dobry                 ADJ   \n",
+       "3     CORRECT               NOUN               dzień                NOUN   \n",
+       "4     CORRECT                ADJ               dobry                 ADJ   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "143  DELETION               NOUN            widzenia                       \n",
+       "144   CORRECT               VERB              proszÄ™                VERB   \n",
+       "145   CORRECT                ADV              bardzo                 ADV   \n",
+       "146  DELETION                ADP                  do                       \n",
+       "147   CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                         \n",
+       "1                  dzień  \n",
+       "2                  dobry  \n",
+       "3                  dzień  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "143                       \n",
+       "144               proszÄ™  \n",
+       "145               bardzo  \n",
+       "146                       \n",
+       "147             widzenia  \n",
+       "\n",
+       "[148 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx słucham dzień dobry ja się chciałem zapytać o autobus sto dwadzieścia trzy z przystanku Meissnera w kierunku Ronda Wiatraczna dobrze już momencik sto dwadzieścia trzy chwileczkę dobrze przystanek Meissnera kierunek Wiatraczna już panu podaję kiedy pan życzy dzisiaj ? tak teraz proszę bardzo proszę pana to mamy tak dwudziesta zero dziewięć i dwadzieścia dziewięć dobrze dziękuję bardzo dziękuję uprzejmie do widzenia do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry słucham dzień dobry ja się chciałem zapytać o autobus 123 z przystanku meissnera w kierunku ronda wiatraczna dobrze już momencik 100 chwileczkę dobrze przystanek meissnera kierunek wiatraczna już panu podaję kiedy pan życzy dzisiaj tak teraz proszę bardzo proszę pana to mamy tak dwudziesta 0 9 i 29 dobrze dziękuję bardzo dziękuję uprzejmie do widzenia do widzenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.25757575757575757}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.22727272727272727}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>61</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>62</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>63</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>64</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>65</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>66 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    CORRECT               NOUN               dzień                NOUN   \n",
+       "1    CORRECT                ADJ               dobry                 ADJ   \n",
+       "2   DELETION               NOUN                 xxx                       \n",
+       "3    CORRECT               VERB             słucham                VERB   \n",
+       "4    CORRECT               NOUN               dzień                NOUN   \n",
+       "..       ...                ...                 ...                 ...   \n",
+       "61   CORRECT                ADV           uprzejmie                 ADV   \n",
+       "62   CORRECT                ADP                  do                 ADP   \n",
+       "63   CORRECT               NOUN            widzenia                NOUN   \n",
+       "64   CORRECT                ADP                  do                 ADP   \n",
+       "65   CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "   hypothesis_word_text  \n",
+       "0                 dzień  \n",
+       "1                 dobry  \n",
+       "2                        \n",
+       "3               słucham  \n",
+       "4                 dzień  \n",
+       "..                  ...  \n",
+       "61            uprzejmie  \n",
+       "62                   do  \n",
+       "63             widzenia  \n",
+       "64                   do  \n",
+       "65             widzenia  \n",
+       "\n",
+       "[66 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dobry wieczór xxx słucham dzień dobry ja mam takie pytanie bo dowiedziałam się właśnie jestem w sumie doktorantką że obowiązuje mnie czterdziestoośmioprocentowa zniżka na MZK i teraz mam takie pytanie bo ja właściwie ukończyłam studia doktoranckie dostanę świadectwo ukończenia tych studiów ale praktycznie zostało mi pisanie pracy doktorskiej i teraz mi już legitymacji nie podbijają czy dalej mogę korzystać z tej zniżki ? znaczy proszę pani ta zniżka przysługuje uczestnikom studiów doktoranckich ona przysługuje właśnie na podstawie legitymacji jeśli nie ma pani legitymacji to niestety czyli jeżeli mam po prostu nie podbijaną bo już studia ukończyłam ale jeszcze piszę pracę doktorską to już chyba raczej nie to już nie przysługuje niestety aha no to dziękuję ślicznie do widzenia bardzo proszę do usłyszenia\n",
+      "\n",
+      "asr transcript: dobry wieczór słucham dzień dobry ja mam takie pytanie bo dowiedziałam się właśnie jestem w sumie doktorantką że oboje zajmie czterdziestu ośmiu procentową edytka i teraz mam takie pytanie bo ja właściwie ukończyłam studia doktoranckie dostanę świadectwo ukończenia tych studiów ale praktycznie zostało mi pisanie pracy doktorskiej i teraz sojusz czy nie podbijałem czy dalej mogę korzystać z tej zniżki znaczy proszę pani ta zniżka przysługuje uczestnikom studiów doktoranckich ona przysługuje właśnie na podstawie legii temu nie ma pani legitymacji to niestety czyli jeżeli mam po prostu nie podbijane bo już studia ukończyłam ale jeszcze piszę pracę doktorską to już chyba raczej nie to już nie przysługuje niestety aha no to dziękuję ślicznie nadzoru nie\n",
+      "\n",
+      "word wer {'classic_wer': 0.1721311475409836}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.13114754098360656}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>119</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>nadzoru</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>120</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>121</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>122</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>123</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>usłyszenia</td>\n",
+       "      <td>PART</td>\n",
+       "      <td>nie</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>124 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "        step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0         CORRECT                ADJ               dobry                 ADJ   \n",
+       "1         CORRECT               NOUN             wieczór                NOUN   \n",
+       "2        DELETION               PRON                 xxx                       \n",
+       "3         CORRECT               VERB             słucham                VERB   \n",
+       "4         CORRECT               NOUN               dzień                NOUN   \n",
+       "..            ...                ...                 ...                 ...   \n",
+       "119       CORRECT               NOUN            widzenia                NOUN   \n",
+       "120      DELETION                ADV              bardzo                       \n",
+       "121      DELETION               VERB              proszÄ™                       \n",
+       "122      DELETION                ADP                  do                       \n",
+       "123  SUBSTITUTION               NOUN          usłyszenia                PART   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dobry  \n",
+       "1                wieczór  \n",
+       "2                         \n",
+       "3                słucham  \n",
+       "4                  dzień  \n",
+       "..                   ...  \n",
+       "119              nadzoru  \n",
+       "120                       \n",
+       "121                       \n",
+       "122                       \n",
+       "123                  nie  \n",
+       "\n",
+       "[124 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx w czym mogę pomóc ? dzień dobry panu chciałam zapytać się czy na Dolnym Mokotowie jest taka ulica Kostrzewskiego ? jest jest taki przystanek nawet Kostrzewskiego czy tamtędy jeździ autobus sto sześćdziesiąt sześć przez Kostrzewskiego ? tak tutaj przez ten przystanek ? tak przejeżdża jeździ to dobrze niech mi pan teraz powie jutro a czy jest przystanek w drugą stronę w stronę Ursynowa tam gdzieś naprzeciwko tak Kostrzewskiego w stronę Ursynowa tak jest jest czyli mniej więcej naprzeciwko jest tak ? tak dokładnie tak i ten z tego przystanku Kostrzewskiego w kierunku Ursynowa jakiś autobus jutro około ósmej rano w kierunku Ursynowa tak ? tak tak bo córka musi dojechać jutro stamtąd aż na Kabaty na Kabaty tak ona będzie jechała tak po imprezie proszę panią to te sto sześćdziesiąt sześć będzie ósma osiem ósma zero osiem tak a później ósma czterdzieści pięć nie nie to ósma zero osiem rozumiem a przed ósmą jeszcze o której ? siódma czterdzieści cztery no dobra to ten ósma zero osiem będzie musiała pojechać na dziewiątą dojedzie tak tutaj to będzie na na na na nie będzie tego nie będzie chyba korków nie o tej porze to na tak dziękuję panu uprzejmie do widzenia proszę bardzo do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry w czym mogę pomóc dzień dobry panu chciałam zapytać się czy na dolnym mokotowie jest taka ulica kostrzewskiego jest taki pod kostrzewskiego czy tamtędy jeździ autobus 166 przez kostrzewskiego tak tutaj przez ten przystanek tak przejeżdża jeździ to dobrze niech mi pan teraz powie jutro a przestanę w drugą stronę w stronę ursynowa tam gdzieś naprzeciwko tak kostrzewskiego w stronę ursynowa tak jest czyli mniej więcej naprzeciwko jest tak tak dokładnie tak i ten sam po kostrzewskiego w kierunku ursynowa jakiś autobus jutro około ósmej rano w kierunku ursynowa tak tak bo córka musi dojechać jutro stamtąd aż na kabaty na kabaty ta będzie jechała tak broń bo razie to te 160 8 ósma 0 8 tak a później ósma 45 nie nie to ósma 0 8 rozumiem a przed ósmą jeszcze o której siódma 40 no dobra 0 8 będzie musiała pojechać na dziewiątą dojedzie tak tutaj to mydlana leonarda dyrektora nie będzie tego nie będzie korków nie raty i powtarzać dziękuję panu uprzejmie nie\n",
+      "\n",
+      "word wer {'classic_wer': 0.37681159420289856}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.33816425120772947}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>X</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>202</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>panu</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>203</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>204</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>205</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>206</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>PART</td>\n",
+       "      <td>nie</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>207 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "        step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0         CORRECT               NOUN               dzień                NOUN   \n",
+       "1         CORRECT                ADJ               dobry                 ADJ   \n",
+       "2        DELETION                  X                 xxx                       \n",
+       "3         CORRECT                ADP                   w                 ADP   \n",
+       "4         CORRECT               PRON                czym                PRON   \n",
+       "..            ...                ...                 ...                 ...   \n",
+       "202       CORRECT               NOUN            widzenia                NOUN   \n",
+       "203      DELETION               VERB              proszÄ™                       \n",
+       "204       CORRECT                ADV              bardzo                 ADV   \n",
+       "205      DELETION                ADP                  do                       \n",
+       "206  SUBSTITUTION               NOUN            widzenia                PART   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dzień  \n",
+       "1                  dobry  \n",
+       "2                         \n",
+       "3                      w  \n",
+       "4                   czym  \n",
+       "..                   ...  \n",
+       "202                 panu  \n",
+       "203                       \n",
+       "204            uprzejmie  \n",
+       "205                       \n",
+       "206                  nie  \n",
+       "\n",
+       "[207 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: xxx dzień dobry dzień dobry jak się dostać z Ochoty na Książęcą ? jakim środkiem lokomocji ? z Ochoty na Książęcą ? tak z Ochoty a z którego miejsca z Ochoty by pani jechała ? z o to tutaj koło Hotelu Sobieskich z tego miejsca do szpitala konkretnie na Książęcą a pani chodzi do tego Szpitala Orłowskiego ? tak ? na Książęcą tak proszę pani na samą Książęcą od szpitala od Hotelu Sobieskiego nic nie ma od Centralnego ma pani sto osiemnaście aha ale sto osiemnaście i co i idzie na Książęcą ? on jedzie Książęcą albo jak pani podjedzie do Centrum to jest jeszcze sto siedemdziesiąt jeden ile ? sto siedemdziesiąt jeden tutaj sto osiemnaście a tam sto siedemdziesiąt jeden tak ? tak dziękuję proszę\n",
+      "\n",
+      "asr transcript: dzień dobry dzień dobry jak się dostać z ochoty na książęcą jakim środkiem lokomocji z ochoty na książęcą tak z ochoty a z którego miejsca z ochoty by pani jechała tutaj koło hotelu sobieski z tego miejsca do szpitala konkretnie na książęcą a pani chodzi do tego szpitala orłowskiego tak na książęcą tak czy pani na samą książęcą od szczyt nic nie ma od centralnego ma pani 118 aha ale 118 i co i idzie na książęcą on jedzie książęcą albo jak pani podjedzie docent 171 171 tutaj 118 a tam 171 tak tak dziękuję proszę\n",
+      "\n",
+      "word wer {'classic_wer': 0.4365079365079365}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.29365079365079366}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>121</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>122</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PUNCT</td>\n",
+       "      <td>?</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>123</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>124</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>125</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>126 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    DELETION               PRON                 xxx                       \n",
+       "1     CORRECT               NOUN               dzień                NOUN   \n",
+       "2     CORRECT                ADJ               dobry                 ADJ   \n",
+       "3     CORRECT               NOUN               dzień                NOUN   \n",
+       "4     CORRECT                ADJ               dobry                 ADJ   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "121   CORRECT                ADV                 tak                 ADV   \n",
+       "122  DELETION              PUNCT                   ?                       \n",
+       "123   CORRECT                ADV                 tak                 ADV   \n",
+       "124   CORRECT               VERB            dziękuję                VERB   \n",
+       "125   CORRECT               VERB              proszÄ™                VERB   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                         \n",
+       "1                  dzień  \n",
+       "2                  dobry  \n",
+       "3                  dzień  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "121                  tak  \n",
+       "122                       \n",
+       "123                  tak  \n",
+       "124             dziękuję  \n",
+       "125               proszÄ™  \n",
+       "\n",
+       "[126 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dobry wieczór xxx słucham dobry wieczór chciałam się dowiedzieć o której godzinie odchodzi z przystanku przy ulicy Kosiarzy w stronę pętli w Wilanowie autobus linii sto osiemdziesiąt i pięćset dwadzieścia dwa chodzi mi o godzinę tak gdzieś czy będzie to za dziesięć siódma czy za pięć siódma tak przed siódmą dobrze czyli tak przystanek Kosiarzy w z kierunku którym pani mówiła ? do Wilanowa do pętli w Wilanowie to jest ostatni przystanek a do pętli w Wilanowie przed pętlą tak zgadza się proszę pani to mamy tak dzisiaj tak ? znaczy jutro rano przed a jutro rano jutro rano przed siódmą tak przed siódmą proszę bardzo proszę pani to mamy tak szósta czterdzieści trzy tak tylko momencik dobrze ja zobaczę czy nie będzie jutro zmiany rozkładu jazdy przypadkiem dobrze momencik dobrze momencik bo jeszcze na jutro nie mam ustawionego a na wszelki wypadek sprawdzę że panią w błąd nie wprowadzić dobrze mam już sto osiemdziesiąt kierunek Wilanów Kosiarzy i przed siódmą miało być ? tak proszę uprzejmie proszę pani to mamy tak szósta czterdzieści trzy tak bo potem jest siódma zero dwie aha a pięćset dwadzieścia dwa ? a pięćset dwadzieścia dwa proszę bardzo już podaję proszę pani mamy tak szósta trzydzieści jeden i pięćdziesiąt cztery i siódma zero dziewięć a jeszcze mam takie pytanie bo tam również staje autobus tylko właśnie nie pamiętam czy sto sześćdziesiąt trzy czy sto sześćdziesiąt cztery na Kosiarzy tak i jeśli już sprawdzamy tak to też o tą samą godzinę sto sześćdziesiąt cztery dobrze już sprawdzam dobrze mamy sto sześćdziesiąt cztery tutaj kierunek proszę pani to mamy tak dobrze mamy Kosiarzy proszę proszę pani to jest tak szósta dwadzieścia sześć i pięćdziesiąt jeden dziękuję pani uprzejmie dziękuję dobranoc dobranoc\n",
+      "\n",
+      "asr transcript: dobry wieczór słucham dobry wieczór chciałem się dowiedzieć o której godzinie odchodzi z przystanku przy ulicy kosiarzy w stronę pętli w wilanowie autobus linii 180 i 522 chodzi mi o godzinę tak gdzieś czy będzie to za 10 siódma czy za 5 siódma tak przed siódmą dobrze czyli tak przystanek kojarzy tak w kierunku którym pani mówiła do wilanowa do pętli fila do persowie dni przed pętlą tak tak zgadza się proszę pani to mamy tak dzisiaj tak znaczy jutro rano przed a jutro ra siódmą tak przed siódmą proszę bardzo proszę pani to mamy tak szósta 43 tak tylko momencik dobrze ja zobaczę czy nie będzie jutro zmiany rozkładu jazdy święta już momencik dobrze momencik jeszcze na jutro nie mam ustawionego a na wszelki wypadek sprawdzę że panią w błąd nie wprowadzić dobrze mam już 180 panów kosiarzy i przed siódmą miało być tak proszę uprzejmie proszę pani to mamy tak szósta 43 tak bo potem jest siódma 0 dwie aha a 502 a 522 proszę bardzo już podaję proszę pani mamy tak szósta 31 i 54 0 9 a jeszcze mam takie pytanie bo tam również staje autobus tylko właśnie nie pamiętam czy 163 czy 164 na kosiarzy tak i kreślone tak toteż tatę jeśli można właśnie nie pamiętam wulkan w końcu czy czwórkę 164 dobrze już sprawdzam dobrze mamy 164 tutaj kierunek proszę pani to mamy tak tak jarzy proszę proszę pani to jest tak szósta 26 i 51 dziękuję pani uprzejmie dziękuję dobranoc\n",
+      "\n",
+      "word wer {'classic_wer': 0.3298245614035088}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.28421052631578947}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>283</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>pani</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>pani</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>284</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>285</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>286</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>287</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>288 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0     CORRECT                ADJ               dobry                 ADJ   \n",
+       "1     CORRECT               NOUN             wieczór                NOUN   \n",
+       "2    DELETION               PRON                 xxx                       \n",
+       "3     CORRECT               VERB             słucham                VERB   \n",
+       "4     CORRECT                ADJ               dobry                 ADJ   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "283   CORRECT               NOUN                pani                NOUN   \n",
+       "284   CORRECT                ADV           uprzejmie                 ADV   \n",
+       "285   CORRECT               VERB            dziękuję                VERB   \n",
+       "286  DELETION               NOUN            dobranoc                       \n",
+       "287   CORRECT               NOUN            dobranoc                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dobry  \n",
+       "1                wieczór  \n",
+       "2                         \n",
+       "3                słucham  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "283                 pani  \n",
+       "284            uprzejmie  \n",
+       "285             dziękuję  \n",
+       "286                       \n",
+       "287             dobranoc  \n",
+       "\n",
+       "[288 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dobry wieczór xxx słucham dobry wieczór tramwaj Targowa Lubelska tutaj w stronę Gocławia a jaka linia dwadzieścia sześć co może jeszcze jeździć ósemka w stronę Gocławka szóstka w stronę Gocławia Gocławka Gocławka ? wie pan potrzebuję do Ronda Wiatraczna dojechać z jakiego przystanku na Targowej ? Lubelska to już jest na Grochowskiej Zamoyskiego Lubelska to będzie chyba nie ? no tu kończy się Zamoyskiego zaczyna Grochowska tak czy trójki to już nie będzie bo ona w teraz już wcześniej kończy szóstka ? szóstka może być dwudziesta trzecia trzy ostatnia szóstka ósemki też już nie będzie a dwadzieścia sześć ? dwudziesta druga pięćdziesiąt osiem dwudziesta trzecia osiemnaście trzydzieści osiem dobrze dziękuję uprzejmie proszę bardzo dobranoc dobranoc\n",
+      "\n",
+      "asr transcript: dobry wieczór słucham dobry wieczór tramwaj targowa lubelska tutaj w stronę gocławia a jaka linia 26 co może jeszcze jeździć ósemka w stronę gocławka rolska w stronę gocławia gocławka gocławka wie pan poczuły do ronda wiatraczna dojechać z jakiego przystanku na targowej lubelska to już jest na grochowskiej zamoyskiego lubelska to będzie chowania kończy się zamoyskiego zaczyna grochowska tak czy trójki to już nie będzie bo ona w teraz już wcześniej kończy szóstka szóstka może być dwudziesta trzecia 3 ostatnia szóstka ósemki też już nie będzie a 26 dwudziesta druga 58 dwudziesta trzecia 18 38 dobrze dziękuję dobranoc\n",
+      "\n",
+      "word wer {'classic_wer': 0.3652173913043478}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.28695652173913044}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>110</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>dobrze</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>111</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>112</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>113</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>114</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>115 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0     CORRECT                ADJ               dobry                 ADJ   \n",
+       "1     CORRECT               NOUN             wieczór                NOUN   \n",
+       "2    DELETION               PRON                 xxx                       \n",
+       "3     CORRECT               VERB             słucham                VERB   \n",
+       "4     CORRECT                ADJ               dobry                 ADJ   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "110   CORRECT                ADV           uprzejmie                 ADV   \n",
+       "111   CORRECT               VERB              proszÄ™                VERB   \n",
+       "112  DELETION                ADV              bardzo                       \n",
+       "113  DELETION               NOUN            dobranoc                       \n",
+       "114   CORRECT               NOUN            dobranoc                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dobry  \n",
+       "1                wieczór  \n",
+       "2                         \n",
+       "3                słucham  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "110               dobrze  \n",
+       "111             dziękuję  \n",
+       "112                       \n",
+       "113                       \n",
+       "114             dobranoc  \n",
+       "\n",
+       "[115 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dobry wieczór xxx w czym mogę pomóc ? dobry wieczór mam takie pytania chciałbym się dowiedzieć sto sześćdziesiąt dziewięć z przystanku Żuromińska w stronę Pragi i jutro tak gdzieś przed siódmą rano w stronę Wschodniego ? tak stronę Wschodniego tak przed siódmą siódma coś koło tego proszę pana szósta czterdzieści jeden lub siódma jedenaście szósta czterdzieści jeden lub ? siódma jedenaście siódma jedenaście dobrze dziękuję proszę bardzo dobranoc\n",
+      "\n",
+      "asr transcript: dobry wieczór w czym mogę pomóc dobry wieczór mam takie pytania chciałbym się dowiedzieć 169 z przystanku szoruj miejska s jutro tak gdzieś przed siódmą rano tak przez stronę wschodniego a zresztą wschodniego tak przed siódmą siódma coś podać proszę pana szósta 41 lub siódma 11 szósta 41 lub siódma 11 siódma 11 dobrze dziękuję proszę bardzo dobranoc\n",
+      "\n",
+      "word wer {'classic_wer': 0.39705882352941174}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.3382352941176471}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PROPN</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>64</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>dobrze</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>dobrze</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>65</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>66</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>67</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>68</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>69 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    CORRECT                ADJ               dobry                 ADJ   \n",
+       "1    CORRECT               NOUN             wieczór                NOUN   \n",
+       "2   DELETION              PROPN                 xxx                       \n",
+       "3    CORRECT                ADP                   w                 ADP   \n",
+       "4    CORRECT               PRON                czym                PRON   \n",
+       "..       ...                ...                 ...                 ...   \n",
+       "64   CORRECT                ADV              dobrze                 ADV   \n",
+       "65   CORRECT               VERB            dziękuję                VERB   \n",
+       "66   CORRECT               VERB              proszÄ™                VERB   \n",
+       "67   CORRECT                ADV              bardzo                 ADV   \n",
+       "68   CORRECT               NOUN            dobranoc                NOUN   \n",
+       "\n",
+       "   hypothesis_word_text  \n",
+       "0                 dobry  \n",
+       "1               wieczór  \n",
+       "2                        \n",
+       "3                     w  \n",
+       "4                  czym  \n",
+       "..                  ...  \n",
+       "64               dobrze  \n",
+       "65             dziękuję  \n",
+       "66               proszÄ™  \n",
+       "67               bardzo  \n",
+       "68             dobranoc  \n",
+       "\n",
+       "[69 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx słucham dzień dobry proszę pani chciałbym zapytać się o odjazdy autobusów sto dziewięćdziesiąt siedem tak z przystanku Perzyńskiego w kierunku Dworca Zachodniego teraz po osiemnastej dobrze proszę pana osiemnasta dwadzieścia jeden i pięćdziesiąt jeden dwadzieścia jeden i pięćdziesiąt jeden aha rozumiem a jeszcze gdyby mogła pani sprawdzić o której on jest na przystanku Duracza w tym sami kierunku na przystanku Duracza proszę pana przejazd jest trzy minuty trzy minuty aha tak to są dwa przystanki rozumiem rozumiem dobrze to dziękuję bardzo dziękuję uprzejmie do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry słucham dzień dobry proszę pani chciałbym zapytać się o odjazdy autobusów 197 tak to jest wierzyńskiego w kierunku dworca zachodniego teraz po osiemnastej dobrze proszę pana osiemnasta 21 i 51 21 i 51 aha rozumiem a jeszcze gdyby mogła pani sprawdzić o której on jest duracza w tym sami kierunku na przystanku duracza proszę pana przejazd jest 3 minuty 3 minuty aha to są 2 przystanki rozumiem dobrze to dziękuję bardzo dziękuję uprzejmie do widzenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.29545454545454547}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.23863636363636365}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>83</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>84</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>85</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>86</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>87</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>88 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    CORRECT               NOUN               dzień                NOUN   \n",
+       "1    CORRECT                ADJ               dobry                 ADJ   \n",
+       "2   DELETION               NOUN                 xxx                       \n",
+       "3    CORRECT               VERB             słucham                VERB   \n",
+       "4    CORRECT               NOUN               dzień                NOUN   \n",
+       "..       ...                ...                 ...                 ...   \n",
+       "83   CORRECT                ADV              bardzo                 ADV   \n",
+       "84   CORRECT               VERB            dziękuję                VERB   \n",
+       "85   CORRECT                ADV           uprzejmie                 ADV   \n",
+       "86   CORRECT                ADP                  do                 ADP   \n",
+       "87   CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "   hypothesis_word_text  \n",
+       "0                 dzień  \n",
+       "1                 dobry  \n",
+       "2                        \n",
+       "3               słucham  \n",
+       "4                 dzień  \n",
+       "..                  ...  \n",
+       "83               bardzo  \n",
+       "84             dziękuję  \n",
+       "85            uprzejmie  \n",
+       "86                   do  \n",
+       "87             widzenia  \n",
+       "\n",
+       "[88 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: xxx dzień dobry dzień dobry proszę pana na Karolin tutaj ze Świętokrzyskiej to sto pięćdziesiąt pięć jedzie prawda ? sto pięćdziesiąt pięć tylko chwileczkę czy dzisiaj jest zmiana trasy tak ze Świętokrzyskiej na Karolin może pani dobrze czy mógłby pan mi dwa najbliższe podać ? dobrze i powiedzieć ile się jedzie do Fortu Wola bo tam z Fortu Wola ja się potem chciałam na siedemset trzynaście przesiąść a pani będzie wsiadała tutaj przy metrze ? czy przy Nowym Świecie przy Nowym Świecie dobrze do Fort Wola to jest około pół godziny przejazd odjazdy są dziesiąta trzydzieści siedem jedenasta zero dwa najbliższe a bo tak bo jest dziesiąta tak bo się czas zmienił jeszcze stary zegarek dobrze a potem siedem to czy jedenasta zero dwa tak powiedzmy jedenasta czterdzieści no mniej więcej i stamtąd jest ojej jedenasta dwadzieścia albo dwunasta zero zero czyli musiałaby pani tym wcześniejszym jechać a a mógłby pan sprawdzić kombinację jakbym jechała na przykład co tam jedzie dwadzieścia nie dwadzieścia dwa nie jedzie dwadzieścia sześć od Bankowego a to nie ja muszę mieć coś z Alej z Alej tam jest ósemka ? ósemka ósemka tak to ósemka wyglądałoby tak ósemka jedzie godzinę dziesiąta czterdzieści dwa albo jedenasta dwanaście to na to samo wychodzi no tak wygląda że że jakby pani chciała zdążyć na ten dwunasta zero zero no to można jechać jedenasta dwanaście i z oczekiwanie albo dziesiąta ile jedzie ósemka ? tam do Fortu Wola przepraszam też też to jest w granicach pół godziny jazdy czyli na to samo wychodzi na to samo wychodzi dobrze a teraz jeszcze powrotne z Bronisz gdzieś w okolicach czternastej dobrze wiedziała jak tam mam potem celować czternasta jedenaście i pięćdziesiąt jeden a wcześniejszy jeszcze na trzynasta trzydzieści jeden trzydzieści jeden dobra dziękuję bardzo dziękuję do widzenia do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry dzień dobry proszę pana na karolin tutaj ze świętokrzyskiej to 155 jedzie prawda 150 tylko chwileczkę czy dzisiaj jest zmiana trasy tak ze świętokrzyskiej na karolin może pani dobrze to mogłem pan 2 najbliższe podać dobrze i powiedzieć ile się jedzie do fortu wola warto wola ja się potem chciałam na 713 przesiąść a pani będzie shella tutaj przy metrze 3 3 razem świecie przy nowym świecie dobrze dla to jest około pół godziny przejazd odjazdy są dziesiąta 37 jedenasta 0 2 najbliższe a bo tak bo jest dziesiąta tak bo się czas zmienił jeszcze stary zegarek dobrze a potem 7 to czy jedenasta 0 2 realne powiedzmy jedenasta 40 danny fala mniej więcej tamta nt jest ojej jedenasta 20 jest albo dwunasta 0 0 czyli musiałaby pani tym wcześniejszym nie kombinacja michała na przykład co tam jedzie 20 nie 22 nie jedzie 26 od bankowego a to nie ja muszę mieć coś z alej czemu kanka ósemka tak to ósemka wyglądałoby tak ósemka jedzie godzinę dziesiąta 42 albo jedenasta 12 to na to samo wychodzi no tak wygląda że że jakby pani chciała zdążyć na ten dwunasta 0 0 no tak jedenasta 12 i z oczekiwanie albo dziesiąta ile jedzie ósemka tam do fortu wola przepraszam też to jest w granicach pół godz kto i na to samo wychodzi na to samo dobrze a teraz jeszcze powrotne z bronisz gdzieś w okolicach czternastej dobrze wiedziała jak tam mam potem celować czternasta 11 i 51 a wcześniejszy jeszcze na trzynasta 31 31 dobrze dziękuję bardzo do widzenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.35570469798657717}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.31543624161073824}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>295</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>296</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>297</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>298</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>299</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>300 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "        step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0        DELETION               PRON                 xxx                       \n",
+       "1         CORRECT               NOUN               dzień                NOUN   \n",
+       "2         CORRECT                ADJ               dobry                 ADJ   \n",
+       "3         CORRECT               NOUN               dzień                NOUN   \n",
+       "4         CORRECT                ADJ               dobry                 ADJ   \n",
+       "..            ...                ...                 ...                 ...   \n",
+       "295       CORRECT               VERB            dziękuję                VERB   \n",
+       "296      DELETION                ADP                  do                       \n",
+       "297  SUBSTITUTION               NOUN            widzenia                 ADV   \n",
+       "298       CORRECT                ADP                  do                 ADP   \n",
+       "299       CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                         \n",
+       "1                  dzień  \n",
+       "2                  dobry  \n",
+       "3                  dzień  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "295             dziękuję  \n",
+       "296                       \n",
+       "297               bardzo  \n",
+       "298                   do  \n",
+       "299             widzenia  \n",
+       "\n",
+       "[300 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx słucham dzień dobry chodzi mi o Szybką Kolej Miejską tak mieszkam w Pruszkowie skończyłem siedemdziesiąt lat czy mam prawo do bezpłatnego przejazdu ? tak proszę pana ma pan prawo do bezpłatnych przejazdów od Pruszkowa do Warszawy na całej długości trasy linii Szybkiej Kolei Miejskiej dziękuję uprzejmie bardzo proszę do widzenia do usłyszenia\n",
+      "\n",
+      "asr transcript: dzień dobry słucham dzień dobry chodzi mi o szybką kolej miejską tak mieszkam w pruszkowie skończyłem 70 czy mam prawo do bezpłatnego przejazdu tak proszę pana ma pan prawo do bezpłatnych przejazdów 8 łóżkowa do warszawy na całej długości trasy linii szybkiej kolei miejskiej przechylenia do usłyszenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.36363636363636365}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.21818181818181817}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>6</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>chodzi</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>chodzi</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>7</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>mi</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>mi</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>8</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>o</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>o</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>9</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>SzybkÄ…</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>szybkÄ…</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>10</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>Kolej</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>kolej</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>11</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>MiejskÄ…</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>miejskÄ…</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>12</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>13</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>mieszkam</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>mieszkam</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>14</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>15</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>PROPN</td>\n",
+       "      <td>Pruszkowie</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>pruszkowie</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>16</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>skończyłem</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>skończyłem</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>17</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NUM</td>\n",
+       "      <td>siedemdziesiÄ…t</td>\n",
+       "      <td>NUM</td>\n",
+       "      <td>70</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>18</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>lat</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>19</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>CCONJ</td>\n",
+       "      <td>czy</td>\n",
+       "      <td>PART</td>\n",
+       "      <td>czy</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>20</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>mam</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>mam</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>21</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>prawo</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>prawo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>22</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>23</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>bezpłatnego</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>bezpłatnego</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>24</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>przejazdu</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>przejazdu</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>25</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PUNCT</td>\n",
+       "      <td>?</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>26</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>27</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>28</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>pana</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>pana</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>29</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>ma</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>ma</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>30</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>pan</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>pan</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>31</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>prawo</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>prawo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>32</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>33</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>bezpłatnych</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>bezpłatnych</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>34</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>przejazdów</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>przejazdów</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>35</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>od</td>\n",
+       "      <td>X</td>\n",
+       "      <td>8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>36</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>PROPN</td>\n",
+       "      <td>Pruszkowa</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>łóżkowa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>37</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>38</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>PROPN</td>\n",
+       "      <td>Warszawy</td>\n",
+       "      <td>PROPN</td>\n",
+       "      <td>warszawy</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>39</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>na</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>na</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>40</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>całej</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>całej</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>41</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>długości</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>długości</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>42</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>trasy</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>trasy</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>43</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>linii</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>linii</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>44</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>Szybkiej</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>szybkiej</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>45</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>Kolei</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>kolei</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>46</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>Miejskiej</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>miejskiej</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>47</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>48</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>uprzejmie</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>49</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>50</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>51</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>52</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>przechylenia</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>53</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>54</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>usłyszenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>usłyszenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "       step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0        CORRECT               NOUN               dzień                NOUN   \n",
+       "1        CORRECT                ADJ               dobry                 ADJ   \n",
+       "2       DELETION               NOUN                 xxx                       \n",
+       "3        CORRECT               VERB             słucham                VERB   \n",
+       "4        CORRECT               NOUN               dzień                NOUN   \n",
+       "5        CORRECT                ADJ               dobry                 ADJ   \n",
+       "6        CORRECT               VERB              chodzi                VERB   \n",
+       "7        CORRECT               PRON                  mi                PRON   \n",
+       "8        CORRECT                ADP                   o                 ADP   \n",
+       "9        CORRECT                ADJ              SzybkÄ…                 ADJ   \n",
+       "10       CORRECT               NOUN               Kolej                NOUN   \n",
+       "11       CORRECT                ADJ             MiejskÄ…                 ADJ   \n",
+       "12       CORRECT                ADV                 tak                 ADV   \n",
+       "13       CORRECT               VERB            mieszkam                VERB   \n",
+       "14       CORRECT                ADP                   w                 ADP   \n",
+       "15  SUBSTITUTION              PROPN          Pruszkowie                NOUN   \n",
+       "16       CORRECT               VERB          skończyłem                VERB   \n",
+       "17       CORRECT                NUM      siedemdziesiÄ…t                 NUM   \n",
+       "18      DELETION               NOUN                 lat                       \n",
+       "19  SUBSTITUTION              CCONJ                 czy                PART   \n",
+       "20       CORRECT               VERB                 mam                VERB   \n",
+       "21       CORRECT               NOUN               prawo                NOUN   \n",
+       "22       CORRECT                ADP                  do                 ADP   \n",
+       "23       CORRECT                ADJ         bezpłatnego                 ADJ   \n",
+       "24       CORRECT               NOUN           przejazdu                NOUN   \n",
+       "25      DELETION              PUNCT                   ?                       \n",
+       "26       CORRECT                ADV                 tak                 ADV   \n",
+       "27       CORRECT               VERB              proszÄ™                VERB   \n",
+       "28       CORRECT               NOUN                pana                NOUN   \n",
+       "29       CORRECT               VERB                  ma                VERB   \n",
+       "30       CORRECT               NOUN                 pan                NOUN   \n",
+       "31       CORRECT               NOUN               prawo                NOUN   \n",
+       "32       CORRECT                ADP                  do                 ADP   \n",
+       "33       CORRECT                ADJ         bezpłatnych                 ADJ   \n",
+       "34       CORRECT               NOUN          przejazdów                NOUN   \n",
+       "35  SUBSTITUTION                ADP                  od                   X   \n",
+       "36  SUBSTITUTION              PROPN           Pruszkowa                 ADJ   \n",
+       "37       CORRECT                ADP                  do                 ADP   \n",
+       "38       CORRECT              PROPN            Warszawy               PROPN   \n",
+       "39       CORRECT                ADP                  na                 ADP   \n",
+       "40       CORRECT                ADJ               całej                 ADJ   \n",
+       "41       CORRECT               NOUN            długości                NOUN   \n",
+       "42       CORRECT               NOUN               trasy                NOUN   \n",
+       "43       CORRECT               NOUN               linii                NOUN   \n",
+       "44       CORRECT                ADJ            Szybkiej                 ADJ   \n",
+       "45       CORRECT               NOUN               Kolei                NOUN   \n",
+       "46       CORRECT                ADJ           Miejskiej                 ADJ   \n",
+       "47      DELETION               VERB            dziękuję                       \n",
+       "48      DELETION                ADV           uprzejmie                       \n",
+       "49      DELETION                ADV              bardzo                       \n",
+       "50      DELETION               VERB              proszÄ™                       \n",
+       "51      DELETION                ADP                  do                       \n",
+       "52       CORRECT               NOUN            widzenia                NOUN   \n",
+       "53       CORRECT                ADP                  do                 ADP   \n",
+       "54       CORRECT               NOUN          usłyszenia                NOUN   \n",
+       "\n",
+       "   hypothesis_word_text  \n",
+       "0                 dzień  \n",
+       "1                 dobry  \n",
+       "2                        \n",
+       "3               słucham  \n",
+       "4                 dzień  \n",
+       "5                 dobry  \n",
+       "6                chodzi  \n",
+       "7                    mi  \n",
+       "8                     o  \n",
+       "9                szybkÄ…  \n",
+       "10                kolej  \n",
+       "11              miejskÄ…  \n",
+       "12                  tak  \n",
+       "13             mieszkam  \n",
+       "14                    w  \n",
+       "15           pruszkowie  \n",
+       "16           skończyłem  \n",
+       "17                   70  \n",
+       "18                       \n",
+       "19                  czy  \n",
+       "20                  mam  \n",
+       "21                prawo  \n",
+       "22                   do  \n",
+       "23          bezpłatnego  \n",
+       "24            przejazdu  \n",
+       "25                       \n",
+       "26                  tak  \n",
+       "27               proszÄ™  \n",
+       "28                 pana  \n",
+       "29                   ma  \n",
+       "30                  pan  \n",
+       "31                prawo  \n",
+       "32                   do  \n",
+       "33          bezpłatnych  \n",
+       "34           przejazdów  \n",
+       "35                    8  \n",
+       "36              łóżkowa  \n",
+       "37                   do  \n",
+       "38             warszawy  \n",
+       "39                   na  \n",
+       "40                całej  \n",
+       "41             długości  \n",
+       "42                trasy  \n",
+       "43                linii  \n",
+       "44             szybkiej  \n",
+       "45                kolei  \n",
+       "46            miejskiej  \n",
+       "47                       \n",
+       "48                       \n",
+       "49                       \n",
+       "50                       \n",
+       "51                       \n",
+       "52         przechylenia  \n",
+       "53                   do  \n",
+       "54           usłyszenia  "
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx w czym mogę pomóc ? moje uszanowanie panu proszę pana chcę się upewnić czy na ulicę Spartańską do szpitala to jeździ sto dziewiętnaście ? nie proszę pana sto osiemnaście sto osiemnaście sto osiemnaście bądź sto dwadzieścia dwa dojeżdża i sto dwadzieścia dwa tak proszę pana a sto osiemnaście czy on przejeżdża koło Dworca Ochota ? koło Dworca Ochota nie proszę pana skręca przy Chałubińskiego w Chałubińskiego to to gdybym jechał przy Dworcu Centralnym pociągiem z Milanówka to gdzie najlepiej w jaki a pan będzie jechał ? od Milanówka pociągiem elektrycznym ale czy wukadką czy Kolejami Mazowieckimi ? nie nie nie dużą koleją dużą czyli to najwygodniej by było wysiąść na Śródmieściu Śródmieście tak ? tak i tutaj wyjść na górę i naprzeciwko Hotelu Polonia jest przystanek dla sto osiemnaście aha na na Marszałkowskiej ? to znaczy przystanek sam jest zlokalizowany na w Alejach Jerozolimskich w Alejach Jerozolimskich tak bo on jedzie naprzeciwko po aha naprzeciwko Hotelu Polonia rozumiem rozumiem sto osiemnaście i on dojeżdża do pod sam Instytut Reumatologii rozumiem aha ma tam przystanek tam jest koniec tam pętla tak znaczy kończy kończy przystanek dalej ale ma przystanek Instytutu Reumatologii rozumiem rozumiem rozumiem bardzo panu a sto dwadzieścia dwa z Nowego Światu tak sto dwadzieścia dwa to musiałby pan z Powiśla i troszeczkę dojść to ja wiem to ja wiem tak dziękuję panu pięknie proszę bardzo\n",
+      "\n",
+      "asr transcript: dzień dobry proszę o pomoc moje uszanowanie panu proszę pana chcę się upewnić czy na ulicę spartańską do szpi to jeździ 119 nie proszę pana 118 118 118 bądź 122 dojeżdża i 122 tak proszę pana 118 czy on przejeżdża koło dworca ochota koło dworca ochota nie proszę pana skręca przy chałubińskiego chałbiński gdyby przy dworcu centralnym pociągiem z milanówka to gdzie najlepiej w jaki a pan będzie jechał od milanówka po słyszymy ale czy wkładką czego miałam nie dużą koleją dużą czyli to najwygodniej by było wysiąść na śródmieściu śródmieście tak i tutaj wejść i naprzeciwko hotelu polonia jest przystanek dla 118 aha na na marszałkowskiej to znaczy przystanek sam jest zlokalizowany na w alejach jarosz w alejach jerozolimskich ta albo religią dziwko bo ha naprzeciwko hotelu polonia rozumiem rozumiem 118 i on dojeżdża do pod tu traumatologii rozumiem aha ma tam przystanek tam jest koniec tora rent znaczy kończy kończy przystanek dalej ale ma monologi bardzo panu 20 tak 122 to musiałby pan z powiśla i troszeczkę dojść to ja wiem tak dziękuję panu również formie\n",
+      "\n",
+      "word wer {'classic_wer': 0.4759825327510917}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.3799126637554585}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>X</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>224</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>225</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>panu</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>panu</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>226</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>pięknie</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>227</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>PART</td>\n",
+       "      <td>również</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>228</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>formie</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>229 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "        step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0         CORRECT               NOUN               dzień                NOUN   \n",
+       "1         CORRECT                ADJ               dobry                 ADJ   \n",
+       "2        DELETION                  X                 xxx                       \n",
+       "3        DELETION                ADP                   w                       \n",
+       "4        DELETION               PRON                czym                       \n",
+       "..            ...                ...                 ...                 ...   \n",
+       "224       CORRECT               VERB            dziękuję                VERB   \n",
+       "225       CORRECT               NOUN                panu                NOUN   \n",
+       "226      DELETION                ADV             pięknie                       \n",
+       "227  SUBSTITUTION               VERB              proszÄ™                PART   \n",
+       "228  SUBSTITUTION                ADV              bardzo                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dzień  \n",
+       "1                  dobry  \n",
+       "2                         \n",
+       "3                         \n",
+       "4                         \n",
+       "..                   ...  \n",
+       "224             dziękuję  \n",
+       "225                 panu  \n",
+       "226                       \n",
+       "227              również  \n",
+       "228               formie  \n",
+       "\n",
+       "[229 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx słucham dzień dobry proszę pana mam pytanie jak dojadę do Nowego Światu i wsiądę tam w jakiś sto szesnaście czy tam dwa w stronę Żoliborza chciałbym wysiąść na Placu Zamkowym czy one tam przejeżdżają jak okrążają czy wracają na Plac Zamkowy ? tak aha czyli jakoś tam okrążają pewnie Mazowiecką albo coś tam i zawracają na Plac Zamkowy tak ? tak dobrze dziękuję bardzo bardzo proszę\n",
+      "\n",
+      "asr transcript: dzień dobry słucham dzień dobry proszę pana mam pytanie jak dojadę do nowego światu i wsiądę tam w jakiś proszę 62 w stronę żoliborza chciałbym wysiąść na placu zamkowym czy one tam przejeżdżają jak okrążają czy wracają na plac zamkowy tak aha czyli jakoś tam okrążają pewnie mazowiecką albo coś tam i zawracają na plac zamkowy tak tak dobrze dziękuję bardzo proszę\n",
+      "\n",
+      "word wer {'classic_wer': 0.2753623188405797}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.17391304347826086}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>64</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>dobrze</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>dobrze</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>65</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>66</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>67</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>68</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>69 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    CORRECT               NOUN               dzień                NOUN   \n",
+       "1    CORRECT                ADJ               dobry                 ADJ   \n",
+       "2   DELETION               NOUN                 xxx                       \n",
+       "3    CORRECT               VERB             słucham                VERB   \n",
+       "4    CORRECT               NOUN               dzień                NOUN   \n",
+       "..       ...                ...                 ...                 ...   \n",
+       "64   CORRECT                ADV              dobrze                 ADV   \n",
+       "65   CORRECT               VERB            dziękuję                VERB   \n",
+       "66  DELETION                ADV              bardzo                       \n",
+       "67   CORRECT                ADV              bardzo                 ADV   \n",
+       "68   CORRECT               VERB              proszÄ™                VERB   \n",
+       "\n",
+       "   hypothesis_word_text  \n",
+       "0                 dzień  \n",
+       "1                 dobry  \n",
+       "2                        \n",
+       "3               słucham  \n",
+       "4                 dzień  \n",
+       "..                  ...  \n",
+       "64               dobrze  \n",
+       "65             dziękuję  \n",
+       "66                       \n",
+       "67               bardzo  \n",
+       "68               proszÄ™  \n",
+       "\n",
+       "[69 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dobry wieczór xxx słucham ? dobry wieczór chciałabym zapytać o której godzinie będzie najbliższy tramwaj numer dziesięć z Dworca Centralnego w kierunku Woli już sprawdzam dwudziesta druga dwadzieścia sześć ale to za trzy minuty następny czterdzieści sześć aha a proszę mi powiedzieć a ósemka czy będzie jeszcze ? wątpię ale sprawdzę nie nie nie będzie nie dobrze to dziękuję bardzo dobranoc proszę bardzo dobranoc\n",
+      "\n",
+      "asr transcript: dobry wieczór słucham dobry wieczór chciałabym zapytać o której godzinie będzie najbliższy tramwaj numer 10 centralnego w kierunku woli już sprawdzam dwudziesta druga 26 ale to za 3 minuty następny 46 aha proszę mi powiedzieć a ósemka czy będzie jeszcze reala sprawdza nie nie nie będzie nie dobrze to dziękuję bardzo proszę bardzo dobranoc\n",
+      "\n",
+      "word wer {'classic_wer': 0.28125}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.21875}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PUNCT</td>\n",
+       "      <td>?</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>59</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>60</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>61</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>62</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>63</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dobranoc</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>64 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    CORRECT                ADJ               dobry                 ADJ   \n",
+       "1    CORRECT               NOUN             wieczór                NOUN   \n",
+       "2   DELETION               PRON                 xxx                       \n",
+       "3    CORRECT               VERB             słucham                VERB   \n",
+       "4   DELETION              PUNCT                   ?                       \n",
+       "..       ...                ...                 ...                 ...   \n",
+       "59   CORRECT                ADV              bardzo                 ADV   \n",
+       "60  DELETION               NOUN            dobranoc                       \n",
+       "61   CORRECT               VERB              proszÄ™                VERB   \n",
+       "62   CORRECT                ADV              bardzo                 ADV   \n",
+       "63   CORRECT               NOUN            dobranoc                NOUN   \n",
+       "\n",
+       "   hypothesis_word_text  \n",
+       "0                 dobry  \n",
+       "1               wieczór  \n",
+       "2                        \n",
+       "3               słucham  \n",
+       "4                        \n",
+       "..                  ...  \n",
+       "59               bardzo  \n",
+       "60                       \n",
+       "61               proszÄ™  \n",
+       "62               bardzo  \n",
+       "63             dobranoc  \n",
+       "\n",
+       "[64 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx w czym mogę pomóc ? a dzień dobry jedno pytanko tak czy matka z dzieckiem jak wchodzi do z wózkiem wchodzi do tramwaju czy autobusu czy płaci bilet ? jak to jest ? to znaczy jeżeli chodzi o dziecko które nie jeszcze nie chodzi do pierwszej klasy to jeździ bezpłatnie no dobrze ale w wózku w głębokim wózku to wózek jako bagaż nie podlega opłacie nie podlega nie a matka ? no tutaj jeżeli nie ma żadnych praw do ulg to niestety ale bilety normalne wtedy aha nie ma tam że też trza płacić po prostu no~ tak bilety tak aha no właśnie się zapytać czy to też jest ulga jakaś czy nie nie nie tutaj w tym przypadku nie to tylko wózek z dzieckiem ewentualnie a matka to płaci dokładnie tak aha no to dziękuję proszę bardzo do widzenia do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry w czym mogę pomóc a dzień dobry jedno pytanko tak czy matka z dzieckiem jak wchodzi do z wózkiem wchodzi do czy płaci bilet jak to jest to znaczy jeżeli chodzi o dziecko które nie jeszcze nie chodzi do pierwszej klasy to jeździ bezpłatnie no dobrze ale w wózku bokiem wózku to wózek jako nie podlega opłacie podlega a matka no tutaj jeżeli nie ma żadnych praw do ulg to niestety ale bilety normalne wtedy aha nie ma tam że też trza płacić po prostu tak tak na 20 lat zapytać czy to też jest ulga jakaś czy nie nie nie tutaj w tym przypadku nie to tylko wózek z dzieckiem ewentualnie a matka to płaci dokładnie tak to dziękuję proszę bardzo do widzenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.15862068965517243}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.19863013698630136}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>X</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>141</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>142</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>143</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>144</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>145</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>146 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0     CORRECT               NOUN               dzień                NOUN   \n",
+       "1     CORRECT                ADJ               dobry                 ADJ   \n",
+       "2    DELETION                  X                 xxx                       \n",
+       "3     CORRECT                ADP                   w                 ADP   \n",
+       "4     CORRECT               PRON                czym                PRON   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "141   CORRECT                ADV              bardzo                 ADV   \n",
+       "142  DELETION                ADP                  do                       \n",
+       "143  DELETION               NOUN            widzenia                       \n",
+       "144   CORRECT                ADP                  do                 ADP   \n",
+       "145   CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dzień  \n",
+       "1                  dobry  \n",
+       "2                         \n",
+       "3                      w  \n",
+       "4                   czym  \n",
+       "..                   ...  \n",
+       "141               bardzo  \n",
+       "142                       \n",
+       "143                       \n",
+       "144                   do  \n",
+       "145             widzenia  \n",
+       "\n",
+       "[146 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dobry wieczór xxx słucham dobry wieczór chciałam się zapytać o autobus sto siedemdziesiąt dwa w stronę Dworca Zachodniego z Sadyby z przystanku kurczę ja nie wiem jak się ten przystanek nazywa to jest przy Metrze Racławicka jakoś dwa najbliższe jeżeli jeszcze jeżdżą albo jeden proszę pani sto siedemdziesiąt dwa skrzyżowanie Odyńca tak tak tak tak Odyńca chyba Niepodległości to jest przystanek Odyńca jeździ jeszcze w ogóle ? tak z tym że będą to już zjazdy na zajezdnię czyli ? więc tylko do do przystanku Wołoska czyli do do skrzyżowania Wo~ Wołoskiej a nie to nie to nie to nic to nic to dziękuję bardzo proszę bardzo do widzenia do usłyszenia\n",
+      "\n",
+      "asr transcript: dobry wieczór słucham dobry wieczór chciałem się zapytać o autobus 172 w stronę od niego sadyby z przystanku kurczę ja nie mam się przystanek nazywa to jest przy metrze racławicka jakoś 2 najbliższe jeżeli jeszcze jeżdżą albo czy wyraża pani 172 skrzyżowanie odyńca tak tak tak tak odyńca chyba zaległości to jest przystanek odyńca wiesz gdzie jeszcze w ogóle tak z tym że będą to już zjazdy na zajezdnię czyli że tylko do do przystanku wołoska czyli do nie proszę bardzo proszę bardzo do usłyszenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.42727272727272725}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.3153153153153153}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>wieczór</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>słucham</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>107</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>108</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>109</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>110</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>111</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>usłyszenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>usłyszenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>112 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0     CORRECT                ADJ               dobry                 ADJ   \n",
+       "1     CORRECT               NOUN             wieczór                NOUN   \n",
+       "2    DELETION               PRON                 xxx                       \n",
+       "3     CORRECT               VERB             słucham                VERB   \n",
+       "4     CORRECT                ADJ               dobry                 ADJ   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "107   CORRECT                ADV              bardzo                 ADV   \n",
+       "108  DELETION                ADP                  do                       \n",
+       "109  DELETION               NOUN            widzenia                       \n",
+       "110   CORRECT                ADP                  do                 ADP   \n",
+       "111   CORRECT               NOUN          usłyszenia                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dobry  \n",
+       "1                wieczór  \n",
+       "2                         \n",
+       "3                słucham  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "107               bardzo  \n",
+       "108                       \n",
+       "109                       \n",
+       "110                   do  \n",
+       "111           usłyszenia  \n",
+       "\n",
+       "[112 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: xxx dzień dobry dzień dobry informacja ? tak proszę pana jestem rencistą KRUSu to jest Kasa Rolniczego Ubezpieczenia jaka mi zniżka obowiązuje w transporcie czy w ogóle nie płacę bo bo nie mogę podjąć żadnej pracy jak jestem a ma pan pierwszą grupę inwalidzką ? to znaczy tam w KRUSie nie ma grup ale rentę pan dostaje tak ? rentę dostaje czterysta zł~ czterysta trzydzieści złotych i nie mogę podjąć żadnej pracy bo w KRUSie po dostaniu renciści nie nie nie nie można podjąć żadnej pracy rozumiem momencik proszę pana jeśli chodzi o rencistów to jeśli to nie jest żadna grupa inwalidzka pierwsza no to wtedy tylko jest zniżka czterdzieści osiem procent na podstawie odcinka renty na podstawie na podstawie aha musi pan mieć odcinki renty ewentualnie no legitymację rencisty i czterdzieści osiem procent zniżki czterdzieści osiem procent zniżki tak legitymacja żadna niepotrzebna w znaczy może pan mieć legitymację ale to musi być jeszcze jakiś dokument ze zdjęciem albo odcinek jak pan dostaje odcinki to odcinek wtedy czterdzieści osiem procent a ja~ jak kupić gdzie kupić takie bilety ? proszę pana no na każdej poczcie może pan kupić tylko prosić z ulgą czterdziestu osiem procent aha dobrze dziękuję proszę\n",
+      "\n",
+      "asr transcript: dzień dobry dzień dobry informacja tak proszę pana jestem rencistą kruszcu to jest kasa rolniczego ubezpieczenia jaka mi zniżka obowiązuje w transporcie czy w ogóle nie płacę bo bo nie mogę podjąć żadnej pracy jak jestem a ma pan pierwszą grupę inwalidzką w głosie nie ma grup ale rentę pan dostaje tak rentę dostaje 400 złote 430 złotych i nie mogę podjąć żadnej pracy bo w krusie po dostaniemy nie nie można podjąć żadnej pracy rozumiem momencik proszę pana jeśli chodzi o rencistów to jeśli to nie jest żadna grupa inwalidzka pier w sza no to wtedy tylko jest zniżka 48 procent na podstawie odci kęty na nowodwory jeździ aha no to nie musi pan mieć odcinki renty ewentualnie no legitymację rencisty i 48 procent zniżki 48 procent zniżki tak legitymacja żadna niepotrzebna w tymże po czym może mieć legitymację ale to musi być jeszcze jakiś dokument ze zdjęciem albo odcinek jak pan dostaje odcinki wtedy 48 procent a ja jak kupić gdzie kupić takie bilety proszę pana no na każdej poczcie może pan kupić tylko prosić z ulgą czterdziestu ośmiu procent waha się zostałem skąd nie konto już mam zapłacić 151 120 złote 120 złotych to wtedy mogę zapłacić połowę tej sumy liga nie dostał pan karę to nie można już finansowania przestawiłem dokumenty renty nie dogadam przestali legitymację i dowód osobisty zęba nie wziął pod uwagę musimy i nawigacja wie pan co to von zadzwoni podam panu numer do działu windykacji trzeba by do nich zadzwonić 800 820 6 826 54 51 54 54 51 5 dziewięćdziesiąty 1000 dlatego sprawy a ja się uzyskać w kasie rolniczego ubezpieczenia społecznego pierwszą grupę a to nie wiem proszę pana wśród się tam nieład język jako opiekun opiekuńcze bez pierwsza grupa złymi opiekuna jeszcze była pierwsza grupa inwalidzka to wtedy opiekun bezpłatnie jeździ ale to już niezdolne do pracy i samodzielnej egzystencji no to też by to wtedy mogę jeździć bez w darmowo dach jeśli byłaby pierwsza grupa inwalidzka nieznany samodzielnej decyzji pierwszego żyje pierwsza grupa niezdolne do pracy i samodzielnej egzystencji pierwsza globalna tak aha dobrze proszę\n",
+      "\n",
+      "word wer {'classic_wer': 1.065326633165829}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.9751243781094527}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>357</th>\n",
+       "      <td>INSERTION</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>globalna</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>358</th>\n",
+       "      <td>INSERTION</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>tak</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>359</th>\n",
+       "      <td>INSERTION</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "      <td>PART</td>\n",
+       "      <td>aha</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>360</th>\n",
+       "      <td>INSERTION</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>dobrze</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>361</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>362 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0     DELETION               PRON                 xxx                       \n",
+       "1      CORRECT               NOUN               dzień                NOUN   \n",
+       "2      CORRECT                ADJ               dobry                 ADJ   \n",
+       "3      CORRECT               NOUN               dzień                NOUN   \n",
+       "4      CORRECT                ADJ               dobry                 ADJ   \n",
+       "..         ...                ...                 ...                 ...   \n",
+       "357  INSERTION                                                        ADJ   \n",
+       "358  INSERTION                                                        ADV   \n",
+       "359  INSERTION                                                       PART   \n",
+       "360  INSERTION                                                        ADV   \n",
+       "361    CORRECT               VERB              proszÄ™                VERB   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                         \n",
+       "1                  dzień  \n",
+       "2                  dobry  \n",
+       "3                  dzień  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "357             globalna  \n",
+       "358                  tak  \n",
+       "359                  aha  \n",
+       "360               dobrze  \n",
+       "361               proszÄ™  \n",
+       "\n",
+       "[362 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx w czym mogę pomóc ? proszę pana ja chciałam się dowiedzieć czy sto sześćdziesiąt siedem jeździ Ciołka czy nadal kursuje tą inną trasą to znaczy jeszcze ma trasę objazdową objazdową tak ? i jeszcze tak a to gdzie się zatrzymuje a zatrzymuje się przy jaki w stronę Wawelskiej czy zatrzymuje się przy rogu no naprzeciw Ciołka i na Górczewskiej tam się zatrzymuje ? to znaczy naprzeciw Ciołka i Górczewskiej aha czy się zatrzymuje jak on jedzie bo ja chciałam jechać na Wawelską do szpitala onkologicznego nie wiem gdzie tam można najbliżej z tego z nie tutaj z no z Górczewskiej proszę Górczewskiej przy Syreny gdzie najbliżej właśnie tam można no wsiąść przesiąść się proszę panią to autobus będzie jechał tak on jedzie ulicą Obozową potem skręca w Deotymy o zaraz to ja sobie zapiszę może dobrze ale gdzie się zatrzymuje pan mnie powie proszę panią to najlepiej to tutaj Obozowa gdzie ? proszę panią na Obozowej to byłby przystanek tutaj Koło bądź Dalibora Koło to jest na Kole tak ? tak potem on jak jak pętla tam przy działkach ? tak dokładnie tak ? tak ano to dobrze to tam może ewentualnie jak on wyjedzie z Deotymy ale to dopiero musiałaby pani przejść na ulicę Elekcyjną która odchodzi od Górczewskiej no to nie to to lepiej mnie tam podjadę tramwajem podejdę do rozumiem tramwaju podjadę tramwajem mi to znaczy przy na Księcia Janusza przy Księcia Janusza gdzieś tak tak niedaleko Księcia Janusza i on tam się zatrzymuje właśnie aha to tak znaczy ja to jest tym przy tym bazarze znaczy tak ? tak niedaleko właśnie tego bazaru tutaj byłby przystanek właśnie Dalibora wtedy to jest zaraz przy bazarze na przy bazarze bo przy bazarze jest taki przystanek tak dokładnie to tam tak ? tak to dziękuję proszę bardzo do widzenia do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry w czym mogę pomóc proszę pana ja chciałam się dowiedzieć czy 167 jeździ ciołka czy nadal kursuje tą ojej no tak czyli jeszcze ma trasę objazdową objazdową tak i jeszcze tak a to gdzie się zatrzymuje a zatrzymuje się przy jaki w stronę wawel czy zatrzymuje się przy rogu no naprzeciw ciołka jego na górczewskiej tam się zatrzymuje to znaczy naprzeciw ciołka aha czy się zatrzymuje jak on jedzie bo ja chciałam jechać na wawelską do szpitala onkologicznego nie wiem gdzie tam można grzegorz tu dojść do górczewskiej doroszewskiej przesrane gdzie najbliżej właśnie tam można na trasie się proszę panią to autobus będzie jechał tak on jedzie ulicą obozową potem skręca w deotymy zaraz to ja sobie zapiszę może dobrze ale przyjaciel to otrzymuje pan je bowiem proszę moją najlepiej święto tutaj no pozował gdzie proszę panią to byłby przystanek tutaj koło bądź dalibora koło to jest trudna ale to tak potem on jak ja k pętla tam na przydział tak dokładnie tak tak ano to dobrze to tam może ewentualnie jak on wyjedzie z deotymy ale to dopiero musiała pani przejść na ulicę elekcyjną która odchodzi od górczewskiej no to nie to miał tam podjadę tramwajem podejdę do tramwaju podjadę tramwajem mi do około to znaczy że przelew na księcia chciałem musiały gdzieś tak tak niedaleko księcia janusza nie on tam się zatrzymuje właśnie aha to tak znaczy ja jestem przy tym bazarze znaczy tak tak niedaleko właśnie tego bazaru tu taj byłby przystanek właśnie dalibora wtedy przy bazarze trzeba 2 przy bazarze jest taki przystanek tak dokładnie to tam tak tak to dziękuję proszę bardzo do widzenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.3377049180327869}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.2754098360655738}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>X</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>304</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>305</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>306</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>307</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>308</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>309 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0     CORRECT               NOUN               dzień                NOUN   \n",
+       "1     CORRECT                ADJ               dobry                 ADJ   \n",
+       "2    DELETION                  X                 xxx                       \n",
+       "3     CORRECT                ADP                   w                 ADP   \n",
+       "4     CORRECT               PRON                czym                PRON   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "304   CORRECT                ADV              bardzo                 ADV   \n",
+       "305  DELETION                ADP                  do                       \n",
+       "306  DELETION               NOUN            widzenia                       \n",
+       "307   CORRECT                ADP                  do                 ADP   \n",
+       "308   CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dzień  \n",
+       "1                  dobry  \n",
+       "2                         \n",
+       "3                      w  \n",
+       "4                   czym  \n",
+       "..                   ...  \n",
+       "304               bardzo  \n",
+       "305                       \n",
+       "306                       \n",
+       "307                   do  \n",
+       "308             widzenia  \n",
+       "\n",
+       "[309 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: xxx dzień dobry dzień dobry proszę pana ja potrzebuję dojechać z przystanku Młodzieńcza tak z Ronda Waszyngtona może pan mi podać podać jak mogę dojechać od przystanku Młodzieńcza ? tak do trzeba od Młodzieńczej wsiąść albo sto dziewięćdziesiąt pięćset dwanaście siedemset osiemnaście dojechać do Dworca Wileńskiego do Wileńskiego tak ? tak i z Wileńskiego najlepiej w tramwaj dwadzieścia pięć ewentualnie autobus sto jeden z pięćset dziewięć a czy z Wileńskiego już tramwajem tak ? tak tramwaj dwadzieścia pięć dwadzieścia pięć tak ? tak dobrze dziękuję bardzo proszę bardzo a proszę pana może pan mi jeszcze powiedzieć czy ulica Francuska jest w tych okolicach ? jeszcze raz pan powtórzy ? ulica Francuska ona odchodzi od Ronda Waszyngtona odchodzi tak ? tak a Francuska pięćdziesiąt to jest jeszcze trochę drogi ? a zaraz sprawdzę nie to będzie przy Rondzie Waszyngtona przy przy Rondzie dziękuję bardzo proszę do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry dzień dobry proszę pana ja potrzebuję dojechać z przystanku młodzieńcza tak z ronda waszyngtona może dać podać jak mogę dojechać młodzieńcza tak do trzeba od młodzieńczej wsiąść albo 190 512 718 dojechać do dworca wileńskiego do wileńskiego data wiesz wileńskiego najlepiej w tramwaj 25 ewentualnie autobus 101 z 509 a czy z wileńskiego już tramwajem tramwaj 25 25 tak tak dobrze dziękuję bardzo proszę bardzo a proszę pana może pan mi jeszcze powiedzieć czy ulica francuska okolicach jeszcze raz pan powtórzy ulica francuska ona odchodzi od ronda waszyngtona odchodzi tak a francuska 50 to jest jeszcze trochę drogi a za nie to będzie przy rondzie waszyngtona przy rondzie dziękuję bardzo do widzenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.4315068493150685}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.3424657534246575}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>141</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>142</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>bardzo</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>143</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>proszÄ™</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>144</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>145</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>146 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0    DELETION               PRON                 xxx                       \n",
+       "1     CORRECT               NOUN               dzień                NOUN   \n",
+       "2     CORRECT                ADJ               dobry                 ADJ   \n",
+       "3     CORRECT               NOUN               dzień                NOUN   \n",
+       "4     CORRECT                ADJ               dobry                 ADJ   \n",
+       "..        ...                ...                 ...                 ...   \n",
+       "141   CORRECT               VERB            dziękuję                VERB   \n",
+       "142   CORRECT                ADV              bardzo                 ADV   \n",
+       "143  DELETION               VERB              proszÄ™                       \n",
+       "144   CORRECT                ADP                  do                 ADP   \n",
+       "145   CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                         \n",
+       "1                  dzień  \n",
+       "2                  dobry  \n",
+       "3                  dzień  \n",
+       "4                  dobry  \n",
+       "..                   ...  \n",
+       "141             dziękuję  \n",
+       "142               bardzo  \n",
+       "143                       \n",
+       "144                   do  \n",
+       "145             widzenia  \n",
+       "\n",
+       "[146 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "gold transcript: dzień dobry xxx w czym mogę pomóc ? dzień dobry proszę pana chciałam uzyskać od pana taką informację proszę mi powiedzieć że chodzi mi o ulgi chodzi mi o ulgi czy jeżeli dziecko ma bezpłatne przejazdy autobusowe i tramwajowe czy na tą szybką emzetkę dziecko też ma musi płacić bilet ? to znaczy na Szybką Kolej Miejską ? tak nie proszę panią te i te bezpłatne przejazdy również przysługują i na ten środek transportu aha dobrze dobrze bo wie pan bo dziecko ma po prostu bezpłatnie jeździ autobusami i tramwajami ja jestem jako jego opiekun po prostu chciałam się tylko dowiedzieć czy przysługuje nam taka ulga jeżeli dziecko ma taką legitymację i po prostu czy dziecko będzie może czy dziecko może jeździć na tą szybką kolej na tą legitymację tak ? tak proszę panią ze względu na to że na Szybkiej Kolei Miejskiej obowiązuje ten sam regulamin co w pojazdach komunikacji miejskiej czyli autobusy tramwaje metro aha to jest ten sam rodzaj regulaminu i proszę mi powiedzieć ona w ogóle jeździ co pół godziny ? znaczy tutaj jest tak nieregularnie co pół godziny co co czterdzieści minut czasami to zależy tutaj od pory dnia szczerze mówiąc aha dobrze bardzo panu dziękuję życzę miłego proszę bardzo dnia do widzenia dziękuję wzajemnie do widzenia\n",
+      "\n",
+      "asr transcript: dzień dobry w czym mogę pomóc dzień dobry proszę pana chciałam uzyskać od pana taką informację proszę mi powiedzieć że chodzi mi o chodzi mi o ulgi czy jeżeli dziecko ma bezpłatne przejazdy autobusowe i tramwajowe czy na tą szybką klucz do em zetkę musi płacić bilet to znaczy na szybką kolej miejską tak nie proszę panią te i te bezpłatne przejazdy również przysługują i na ten środek transportu aha dobrze dobrze bo wie pan bo dziecko ma po prostu bezpłatnie jeździ autobusami i tramwajami ja jestem jako jego opiekun po prostu chciałam się czy przysługuje nam taka ulga jeżeli dziecko ma taką legitymację i po prostu czy dziecko będzie może czy dziecko może jeździć na tą szybką kolej na tą legitymację chyba nią ze względu na to że na szybkiej kolei miejskiej obowiązuje ten sam regulamin co w pojazdach komunikacji miejskiej czyli autobusy tramwaje metro aha to jest ten sam rodzaj regule i proszę mi powiedzieć ona w ogóle jeździ co pół godziny znaczy tutaj jest tak nieregularnie co pół godziny co co 40 minut czasami to zależy od pory dnia aż aha dobrze bardzo panu dziękuję życzę miłego dnia dobrze to ja wzajemnie do widzenia\n",
+      "\n",
+      "word wer {'classic_wer': 0.15566037735849056}\n",
+      "\n",
+      "pos wer {'classic_wer': 0.1179245283018868}\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>step_type</th>\n",
+       "      <th>reference_word_pos</th>\n",
+       "      <th>reference_word_text</th>\n",
+       "      <th>hypothesis_word_pos</th>\n",
+       "      <th>hypothesis_word_text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>dzień</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "      <td>ADJ</td>\n",
+       "      <td>dobry</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>DELETION</td>\n",
+       "      <td>X</td>\n",
+       "      <td>xxx</td>\n",
+       "      <td></td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>w</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>czym</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>207</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>AUX</td>\n",
+       "      <td>to</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>208</th>\n",
+       "      <td>SUBSTITUTION</td>\n",
+       "      <td>VERB</td>\n",
+       "      <td>dziękuję</td>\n",
+       "      <td>PRON</td>\n",
+       "      <td>ja</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>209</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>wzajemnie</td>\n",
+       "      <td>ADV</td>\n",
+       "      <td>wzajemnie</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>210</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "      <td>ADP</td>\n",
+       "      <td>do</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>211</th>\n",
+       "      <td>CORRECT</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "      <td>NOUN</td>\n",
+       "      <td>widzenia</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>212 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "        step_type reference_word_pos reference_word_text hypothesis_word_pos  \\\n",
+       "0         CORRECT               NOUN               dzień                NOUN   \n",
+       "1         CORRECT                ADJ               dobry                 ADJ   \n",
+       "2        DELETION                  X                 xxx                       \n",
+       "3         CORRECT                ADP                   w                 ADP   \n",
+       "4         CORRECT               PRON                czym                PRON   \n",
+       "..            ...                ...                 ...                 ...   \n",
+       "207  SUBSTITUTION               NOUN            widzenia                 AUX   \n",
+       "208  SUBSTITUTION               VERB            dziękuję                PRON   \n",
+       "209       CORRECT                ADV           wzajemnie                 ADV   \n",
+       "210       CORRECT                ADP                  do                 ADP   \n",
+       "211       CORRECT               NOUN            widzenia                NOUN   \n",
+       "\n",
+       "    hypothesis_word_text  \n",
+       "0                  dzień  \n",
+       "1                  dobry  \n",
+       "2                         \n",
+       "3                      w  \n",
+       "4                   czym  \n",
+       "..                   ...  \n",
+       "207                   to  \n",
+       "208                   ja  \n",
+       "209            wzajemnie  \n",
+       "210                   do  \n",
+       "211             widzenia  \n",
+       "\n",
+       "[212 rows x 5 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n",
+      "--------------------------------------------------------------\n"
+     ]
+    }
+   ],
+   "source": [
+    "for it in list(record_provider.get_all_records())[:20]:\n",
+    "    show_report_for(it)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "27797bad-c92a-45a6-87f2-071645c18150",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/examples/luna/pos_processing/__init__.py b/examples/luna/pos_processing/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/examples/luna/pos_processing/asr_spacy_token_pos_processing_task.py b/examples/luna/pos_processing/asr_spacy_token_pos_processing_task.py
new file mode 100644
index 0000000..1f6b11e
--- /dev/null
+++ b/examples/luna/pos_processing/asr_spacy_token_pos_processing_task.py
@@ -0,0 +1,24 @@
+from dataclasses import dataclass
+from typing import Any
+
+from examples.luna.pos_processing.spacy_token_pos_processing_task import SpacyTokenPosProcessingTask
+
+
+@dataclass
+class WordSpan:
+    text: str
+    index_start: int
+    index_end: int
+
+
+class AsrSpacyTokenPosProcessingTask(SpacyTokenPosProcessingTask):
+    _spacy_property_name: str
+    _nlp: Any
+    _input_property_name: str
+
+    def __init__(self, task_name: str, spacy_property_name: str, require_update: bool,
+                 input_property_name: str):
+        super().__init__(task_name, spacy_property_name, require_update, input_property_name)
+
+    def get_transcript_to_process(self, property_value: Any) -> str:
+        return property_value['full_text']
diff --git a/examples/luna/pos_processing/gold_transcript_spacy_token_pos_processing_task.py b/examples/luna/pos_processing/gold_transcript_spacy_token_pos_processing_task.py
new file mode 100644
index 0000000..52861da
--- /dev/null
+++ b/examples/luna/pos_processing/gold_transcript_spacy_token_pos_processing_task.py
@@ -0,0 +1,24 @@
+from dataclasses import dataclass
+from typing import Any
+
+from examples.luna.pos_processing.spacy_token_pos_processing_task import SpacyTokenPosProcessingTask
+
+
+@dataclass
+class WordSpan:
+    text: str
+    index_start: int
+    index_end: int
+
+
+class GoldTranscriptSpacyTokenPosProcessingTask(SpacyTokenPosProcessingTask):
+    _spacy_property_name: str
+    _nlp: Any
+    _input_property_name: str
+
+    def __init__(self, task_name: str, spacy_property_name: str, require_update: bool,
+                 input_property_name: str):
+        super().__init__(task_name, spacy_property_name, require_update, input_property_name)
+
+    def get_transcript_to_process(self, property_value: Any) -> str:
+        return ' '.join([it['word'] for it in property_value])
diff --git a/examples/luna/pos_processing/spacy_pos_wer_processing_task.py b/examples/luna/pos_processing/spacy_pos_wer_processing_task.py
new file mode 100644
index 0000000..23d4f57
--- /dev/null
+++ b/examples/luna/pos_processing/spacy_pos_wer_processing_task.py
@@ -0,0 +1,85 @@
+from typing import Any, List, Dict
+
+from sziszapangma.core.alignment.alignment_classic_calculator import AlignmentClassicCalculator
+from sziszapangma.core.alignment.alignment_step import AlignmentStep
+from sziszapangma.core.wer.wer_calculator import WerCalculator
+from sziszapangma.integration.mapper.alignment_step_mapper import AlignmentStepMapper
+from sziszapangma.integration.repository.experiment_repository import ExperimentRepository
+from sziszapangma.integration.task.processing_task import ProcessingTask
+from sziszapangma.model.model import Word
+from sziszapangma.model.relation_manager import RelationManager
+
+_CLASSIC_WER = "classic_wer"
+
+
+class SpacyPosWerProcessingTask(ProcessingTask):
+    _gold_transcript_pos_property_name: str
+    _asr_pos_property_name: str
+    _pos_alignment_wer: str
+    _pos_metrics_wer: str
+    _alignment_classic_calculator: AlignmentClassicCalculator
+    _wer_calculator: WerCalculator
+
+    def __init__(
+        self,
+        task_name: str,
+        gold_transcript_pos_property_name: str,
+        require_update: bool,
+        asr_pos_property_name: str,
+        pos_alignment_wer: str,
+        pos_metrics_wer: str
+    ):
+        super().__init__(task_name, require_update)
+        self._gold_transcript_pos_property_name = gold_transcript_pos_property_name
+        self._asr_pos_property_name = asr_pos_property_name
+        self._pos_alignment_wer = pos_alignment_wer
+        self._pos_metrics_wer = pos_metrics_wer
+        self._alignment_classic_calculator = AlignmentClassicCalculator()
+        self._wer_calculator = WerCalculator()
+
+    def run_single_process(
+        self,
+        record_id: str,
+        experiment_repository: ExperimentRepository,
+        relation_manager: RelationManager,
+    ):
+        gold_transcript_pos = [
+            Word(id=it['id'], type='Word', text=it['pos'])
+            for it in
+            experiment_repository.get_property_for_key(
+                record_id, self._gold_transcript_pos_property_name)
+        ]
+        asr_transcript_pos = [
+            Word(id=it['id'], type='Word', text=it['pos'])
+            for it in
+            experiment_repository.get_property_for_key(record_id, self._asr_pos_property_name)
+        ]
+        if gold_transcript_pos is not None and asr_transcript_pos is not None:
+            alignment_steps = self._get_alignment(gold_transcript_pos, asr_transcript_pos)
+            experiment_repository.update_property_for_key(
+                record_id,
+                self._pos_alignment_wer,
+                [AlignmentStepMapper.to_json_dict(it) for it in alignment_steps],
+            )
+            experiment_repository.update_property_for_key(
+                record_id, self._pos_metrics_wer, self.calculate_metrics(alignment_steps)
+            )
+
+    def _get_alignment(
+        self, gold_transcript: List[Word], asr_transcript: List[Word]
+    ) -> List[AlignmentStep]:
+        return self._alignment_classic_calculator.calculate_alignment(
+            reference=gold_transcript, hypothesis=asr_transcript
+        )
+
+    def calculate_metrics(self, alignment_steps: List[AlignmentStep]) -> Dict[str, Any]:
+        """Calculate all metrics for data sample."""
+        metrics = dict()
+        metrics[_CLASSIC_WER] = self._wer_calculator.calculate_wer(alignment_steps)
+        return metrics
+
+    def skip_for_record(self, record_id: str, experiment_repository: ExperimentRepository) -> bool:
+        return (
+            experiment_repository.get_property_for_key(record_id, self._pos_metrics_wer)
+            is not None
+        )
diff --git a/examples/luna/pos_processing/spacy_token_pos_processing_task.py b/examples/luna/pos_processing/spacy_token_pos_processing_task.py
new file mode 100644
index 0000000..2c8bb0b
--- /dev/null
+++ b/examples/luna/pos_processing/spacy_token_pos_processing_task.py
@@ -0,0 +1,58 @@
+import uuid
+from abc import abstractmethod, ABC
+from dataclasses import dataclass
+from typing import Any, Dict
+
+import spacy
+from spacy.tokens import Token
+
+from sziszapangma.integration.repository.experiment_repository import ExperimentRepository
+from sziszapangma.integration.task.processing_task import ProcessingTask
+from sziszapangma.model.relation_manager import RelationManager
+
+
+@dataclass
+class WordSpan:
+    text: str
+    index_start: int
+    index_end: int
+
+
+class SpacyTokenPosProcessingTask(ProcessingTask, ABC):
+    _spacy_model_name: str
+    _nlp: Any
+    _input_property_name: str
+    _spacy_property_name: str
+
+    def __init__(
+        self,
+        task_name: str,
+        spacy_property_name: str,
+        require_update: bool,
+        input_property_name: str
+    ):
+        super().__init__(task_name, require_update)
+        self._spacy_property_name = spacy_property_name
+        self._nlp = spacy.load("pl_core_news_lg")
+        self._input_property_name = input_property_name
+
+    def run_single_process(self, record_id: str, experiment_repository: ExperimentRepository,
+                           relation_manager: RelationManager):
+        test_property = experiment_repository.get_property_for_key(
+            record_id, self._input_property_name)
+        document = self._nlp(self.get_transcript_to_process(test_property))
+
+        spacy_result = [self.token_to_result_dict(token) for token in document]
+        experiment_repository.update_property_for_key(record_id, self._spacy_property_name,
+                                                      spacy_result)
+
+    @staticmethod
+    def token_to_result_dict(token: Token) -> Dict[str, str]:
+        return {'id': str(uuid.uuid4()), 'word': token.text, 'pos': token.pos_}
+
+    @abstractmethod
+    def get_transcript_to_process(self, property_value: Any) -> str:
+        pass
+
+    def skip_for_record(self, record_id: str, experiment_repository: ExperimentRepository) -> bool:
+        return experiment_repository.property_exists(record_id, self._spacy_property_name)
diff --git a/poetry.lock b/poetry.lock
index 67d2132..1a1aa4f 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -169,6 +169,18 @@ category = "main"
 optional = false
 python-versions = ">=3.6"
 
+[[package]]
+name = "minio"
+version = "7.1.6"
+description = "MinIO Python SDK for Amazon S3 Compatible Cloud Storage"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+certifi = "*"
+urllib3 = "*"
+
 [[package]]
 name = "more-itertools"
 version = "8.12.0"
@@ -470,7 +482,7 @@ developer = []
 [metadata]
 lock-version = "1.1"
 python-versions = "^3.8"
-content-hash = "bab8ca229cd4148ad31bc571be09a6da007f8c00cf95d0a4f52dc11ad1ad9887"
+content-hash = "5acab1de3fd0643e686d2b1ae70c5d63fa81315b0543d3608083c57b11a814cd"
 
 [metadata.files]
 appdirs = [
@@ -599,6 +611,10 @@ markupsafe = [
     {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
     {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
 ]
+minio = [
+    {file = "minio-7.1.6-py3-none-any.whl", hash = "sha256:1ed6d4df7bbd505be984657ecce81ac6b196f434acf23315227aa892c98f9531"},
+    {file = "minio-7.1.6.tar.gz", hash = "sha256:54a5e6eefcc958c88c493cf116ba86e52341efab88686163594f2e9410385124"},
+]
 more-itertools = [
     {file = "more-itertools-8.12.0.tar.gz", hash = "sha256:7dc6ad46f05f545f900dd59e8dfb4e84a4827b97b3cfecb175ea0c7d247f6064"},
     {file = "more_itertools-8.12.0-py3-none-any.whl", hash = "sha256:43e6dd9942dffd72661a2c4ef383ad7da1e6a3e968a927ad7a6083ab410a688b"},
diff --git a/pyproject.toml b/pyproject.toml
index 136e373..e95bac9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -20,6 +20,7 @@ pandas = "^1.2.4"
 pymongo = "^3.11.4"
 Flask = "^2.0.1"
 Flask-HTTPAuth = "^4.4.0"
+minio = "^7.1.6"
 
 [tool.poetry.dev-dependencies]
 pytest = "^5.2"
diff --git a/sziszapangma/.DS_Store b/sziszapangma/.DS_Store
index b4c1ad28389434242f75e13e11d1692bf083ec69..062879d567633535389664d2fc945e64a8d081de 100644
GIT binary patch
delta 330
zcmZoMXfc@J&nUPtU^g?P;A9>aO~$i8QfhJl3lE!M$)mUD_Dr6@A~U%Tnd=toz`?-4
zz`~Hskk3%WkeZwC;*yk;p9B=+c-vQQH)HQ%M^yO~yz&JZhQZ1CxdlKy3=GT@CL6Q*
zGUa`myn$6_@;p{9whKXBKqDuwW7R+~WhVb%<*jG_0MfzAkPCE23PUPGPEI<KNel)D
nQDu?cxq9ndm^+d5=jJ0^id_Y=TbUUc8a5U-Fm7h&_{$Ff`fgv-

delta 200
zcmZoMXfc@J&&azmU^g=(?_?epO~wmAQfhJl3lCeO#Z^ZEx5*P&WG2@kbKPQ@`571(
zSQwHS@)?R4QgicNT#|C~lYn9zc?pphZ>1h~M3qm$D_@Xd7@VA+TL9F<z`)Ef*_hRr
sspR(L4XiSg=dp6J1)M7c8aa6#s|JE8Gx-NAFC)vwLPn;|>>Pjj0f1FHLjV8(

diff --git a/sziszapangma/core/transformer/__pycache__/cached_embedding_transformer.cpython-38.pyc b/sziszapangma/core/transformer/__pycache__/cached_embedding_transformer.cpython-38.pyc
index d2655581e4ce34acb616f35c06fb8e4ec3d05ddb..0ce5df23cfc1255b9563c274caccbf4fb6fc0826 100644
GIT binary patch
delta 519
zcmYk2&ui2`6vyXBGRbC>O(+Go)fGf9VQaTg=|w9RR|JtFl!D|oyKidKZn9yLBD)ub
z7Qtf(-ugcXdhqU_;K9TE2mTfM(t79&^LX>VpZ8_noQFTd;4lb0g6q{cM;_F{fR5|o
z-CZ`bGm;2OfB>I4nVYzjyd+?OeL=uh?m167zz#?({<PgOGuAkrR>pdrmi2Pz*;ssr
zr~FiZ9ehxo6K{<iu{EMBU{8qRz%S{Qo0W8xP|k^a&49RM;DCE!CB6!jzz+MS-g-a>
z84tS1^uUJzoq7=BEd(E56q)tsa(b-bMK)0YY5uPM+-;uHFB|FTuvEGnWl~Sm{JpI7
zd?H6<Ri0M!VkArbaH8_*G0LaqcgB9RTesU01O`DE?&a>abNz9(d1I|N13T~gs1mxu
z?)+ukr4e1mH<{4gkExCjX@1#n>7W^k4HidDA|7ustQuZc+VH%njI%%9(^@VJ%M0Ti
z&E~S&d8B&?>6JF{=7-qc>$9HK=MOr%{o&X%qFNL<qHfJJ$6)OIEGriJew+JO`R0G-
SUR!GVj`Us3BIZ(``TQT|o_-1d

delta 391
zcmWlTze~eV5XaxUy!Vo(P5Og^w%Cd~NT}%GpdgBZpo4U&Mag9J#S&>lNutnBh4vo^
z4>t$@2S>%h#s9z|gP@yJS10Ss!5zna?)$xa%a8L$+c0z_WBUDmu^JmSyd5{{TS}Mq
zn9VRcLY#0qL7cj5tk^1t7P8n+s<0p-CtesO<j}i{nifvVVg%**v8WS?_hp8D{9KDa
z=MFM1bJZJ-vj^ZR*Cxc)-K@(h$d$e+xrPej8A)}Xl{Ck5+?XKS;HJEnPpaaTR>dX0
z$6fJ@YsIs6>vSU=dg0LNJAS9<JgvY76sze?CJO_Y0UGW~nI%RfEB2_rFfReZCD3OY
zh8e+R2B6^r)&c&+3vGxgJ;#gUn5`*I%M^EPXIYVoL<yrH0l#mnK6iq^83d*r2c@)t
x_+p#uB``@zsb>Q!XO@<*XwdikP5|jj>S0s=w$~p7OKC6Ks-vf07C?g>`3EJ9TxtLS

diff --git a/sziszapangma/integration/__pycache__/asr_processor.cpython-38.pyc b/sziszapangma/integration/__pycache__/asr_processor.cpython-38.pyc
index b70aca5ff61fb49ab62aded80d52d31f3990f1a8..1351c5e0615d469566e90382919de84c575aadf8 100644
GIT binary patch
literal 2207
zcmaJ?TW=gS6t+E{%WgJlC~0UZLK9U87TV;6#|pJgCEfy36+rVcogF*bY35ejt17GH
zX(RQCUqF#k@swYL<X4{f3rGmg@nkpM6k*9{eU3f8eCPYl?ys))3AC->4oANSg#3Zd
zyN!eM2)Z7F5k%0EB>2lpTCs#xUgA;oy^>dc;#WZuRACaj7%ihD`j!YT{4*ka$!1>C
z13wTU_@V59-v>VuJ@9+ZUlH^f8TS8#)5zYCS?}?aUAvZzv{6}ZDrv@z7<v${k1c;%
z<i<wdwWet5tjzJ7cbgB+Bk1}IFp?xxkc3H3a_K`44%i)d&l@I~@Xq**CZXVPwr>ZI
zwfbH)xzxH*7tHn!ic+R+X2v#9(o9sHGuUz7a7>}^Lf43wdjgvt_T$U8J5fs3raX?T
zMw_^(+D4hIhLMgB3R#NyIXth{xhh)oJbqP}aa<O#vN?#aCKlVhYLw913wQ5=z$Lks
z<$>zK@oHsm{@UN!*HY=7DpPq;zsihiM%m6&sgF$4?qpg$7|A*x!}O8f(bGatvo@;_
zt8AyJjXYEtB8%(Nc8<q(du-S8tSnO{^X9NFw8TTTLnN5qeHXj!<#l_*$VO>eXO&D-
z+fUP~5feZ*wSzQ$ImyayMtQKG^&sO4GpG<!bpy@fVclpAV<DIbx<fvqjJn8sT)<7R
z=^wz%xv)==4T3%-zzFXSfiZ)z*LlKw!(NjE>i9cI0*HsuBgdNncoT}~j3>R<gp;HX
z%;`Di{3u7eWdZ57Je{c0uB6$-j8oGb$r=fbvHn#k$Jfpqj^|x}3XUO$o{$+kXK#UH
zCooRE69$$G@{C;2J)o<vC#_U!1C}GaMO~OQRky%Zn_z~XTE+24Xl{eKpthH$d6{Vq
z>l~&I$-6LzA84op!00s^(CIBm=i))zi_H=6B@N&w*mt4p=U@aia9zP>te~fG;TIsj
zqn^5NKx~4e{|osQ=4Q0!hRw*SXS^2}_u+Y-@I~-5KjkO<Ja|h^eG`iC#K$jY6kzZH
z>}bz&)TL!=l&n4mh#OT*9bu>86PYQg;^HS@B~%L^7it@hWhOulHZ(;gn~9lj0=45y
zY8UlktfZclCI+7Jrj@nB&vN0)jFK-WQX6e~3nF&-TK+;ewe?#Cav264&Q5|cK%ln3
zSP%A0R&gB&Mz>83g1q9f10K1J;Om=U0C+F@XOr>2nZH3JNQ2YVRT7ppHC$2a@R9le
z4Suga1Y>WcX;#;bad=>wF*ynkxuz+*dP#*`f}}6$;O_ScE_U}rX5rQv)82<W4cKkp
z@hykIQd`LEYY5L}=0pTsIE#|y;tK+E;^Il@L=-_@1A7xo2o&4hEFa5GN;%fodBgES
zBzUi7k)SZt9S8&QKZYN59}PZzNV^QVmo4-DOPKCTSO@pD^Z$qWSog3@Ip!l$hMZHw
zPJrKnB46L)9~#@64z`ViQrm1J7vOH6!&=MBCKKu&4AlV5e=y?##Jj7lOt;>L=30#%
z_OA26B^^m|E%WND<pZzsjey}_W>-?#z;h4|2i=vuY?Lc}byueYbKHV-x+?AJwWHc+
mxBzRj<4Ko;tH&+Cx6#AyPv9HOszwYVx=uG(<gNGDH~$6P_2p9l

literal 1471
zcmZWp&2Aev5GJ|Y)k?M;H9u&L7KN??3JWND42q-*&>RAxKx(Ae3r#I4dENaBNx`rn
zpKKtfyg-pda`Y?l+EXumfSx)-IkJpU;4Ftj4rjjkM#uerkHDDy^w-J1jF7)k*&Q5|
zXE5z65Q->Tl8R=uVi}{Tvofl9#;Z7sgC3Phmi$T-SMfDbv8Gp1)&V_H9nd?v1A3~W
z*JPCb10KnU`RMsC6MrCQ))|?*O1slW!8U(YSm*hRB6rgqkM52HlxHyQ4<Izjs3IBD
zk>)zq3CPZz9g;%`_XAT*Mc4d_!m}Knjs5;}Yko6LuB~m%4fEZ3QEJgjcj^<P-O|)K
zAh8{|rZ6WkEyAHFxM8bBZ+JT<OJj8H%8OyuST`)HwlPlDu(HE>p-VM9fz)c7o1%3m
z!}G$O4ogUG*vyA_hON8v#wdHVRi`%y61TdXn-rcmSg;`e`(u1;wXx$$n!Kpbr8CV;
zj$df|r)%2ro8#BNkL{|kE7{6=QOWyCQ9Hdb(iKfTmez>&GbBgtg+It;Sqh``W>FVb
zcQN+>O0xQP7rvwW=cc2sPlc#urG@Z4A*x0#0bJqtg?PJ^<;G$n@aH2axIsWo98_6f
zm_Dl81UIXF+{1!*V1^2$jM1?31uxJO4*L?sXI>l=WQL+o;j7pO`i{)0iWI-z&tkA7
zx&t!3WlRi=L9+6!`;Ksu^^mH8GjH^4QWj8X&&AS|BkCjge8CmW4X6DEgd>iw$rby^
zJ^_i=uojUb;F3;9+{bp=YGWS3L4>WS3nzqm4C;uPJ@}X>Aa1Dd3Xzx6TCfIi0wiC9
z4ebFELJ#Qb36y3V<<Zt5;&v}gL<xbP;O!qlDC!_M#jaREFPWofY)#IhHFVB<b{Vas
zkNgw4<St%AA3++}M||ozHjZaz22jMfwxh)Jrq#7ijefh-*4d1=&=Vmi&(CaA`?xhg
zy-~bLFfjT%2*F22+pLdAfOocSYM}NV6GFzwjzf$Y_c7xEP2m?Pd6)NnN{;r-0US0D
zPz+Ff1;RfNLe_QT0{;<LMDvb~<{_&1p6}mcpKIudTl_;@SYH$3!UEz2i!ANYls)93
zsL&0OoaF{PXT$l#U9?5L*m>xCwBfyQV<+Qnp?&&v(?&nz-;hPb26VvEXt4J`;ZIH`

diff --git a/sziszapangma/integration/__pycache__/experiment_manager.cpython-38.pyc b/sziszapangma/integration/__pycache__/experiment_manager.cpython-38.pyc
index 878ec62a813cd95936980836e5a04d91728a0606..8da8726202ed5dd42b5b88d2119dad72d4773efa 100644
GIT binary patch
literal 1362
zcmZ`(-A)uS6mI8#h5?p85#kH%g*(?K#F&UNBudO8H<OsAZ0kBOKTA8PY}PAz3@^Yt
zUa7ZU@d_Ff&zV_Z1K4iAp7wM)=ljl?-JhS22sHY0co4dT{KCa-vtjW9hTa7bM9`cR
zG^G@6E4K<ewZXQ9lRJf*x{dATUg4*HV|#f}glS00Ya)CRoDmUxx6(+2d!!p(!JVW_
zjq@hcHO#B8zK*2I3R%{DIjVG4SL*bNwud@>IjEG_5j(Y196a#AdSB+e&Z_b)FZoca
zcdGiF35l)+um@7>tQ@}Q`e=Z!nr%R~CDsQ+l9URPTKh!W(h+ovNEc=cW>5MX1Z*4Z
z0A>ef8@%m)Alx60@PvQnq@f5zct(I+1mxz-(k+{5c;*q4Hw>A&p=efMf#g^QzbQSl
z#6~w1SPdMs*@SZ~VOF$^@k~qEF>4QBzWl)5oqJbr{P*SoN_E}PwqU%3p`QRu=!7sb
zu>k4B2DBy)pe@KAxum;YM}=@oVU?*lgczXf8b{0gqngK^1%yR}4!|W*D=_^|lYK3f
zP71CDS^0(6syg7ww$w*;HA=WvPY+}{_yq1Fo#=6<$9%-gVZoEEtmP0&1nMH0kz}e^
zZ**z`#<DW28N(Oq0D$-&#XjD=m$lyY;Q?0Sbwd$67>y7;Fec=XoYM<J(XzJ5hsWRO
zgr0*Whakuy?z$K7u^e|$8npzEbiGC#6JanJ&ody58X13@o>sO-F-t9jCtbXgxJIiM
zR>7~<0Wd8ZMI|(X?zH{yc;h~`>214EuAoWD3(1&?7%M7qlA|3nc6`F~)}!#>z$`Mx
z%d)B)fi+_aYeJzO%11y|)EWW?GZP@DRW(tf;#d(HR}l@M$24#(YC#IDKXI(^1V-i6
zrz7};o9oT9*);cN(%ifKmU=T8zuj#jZwsx77W3W&ny%uP)w`=|Lj+@ZD0~xawfa2A
Og3w4Lwx9!t*!~CBja}FP

delta 573
zcmZuuyG|T26!o<|FEhKmQ9^=*lu!&QqKF101Ob9Vwao@0ZG>QiCuqpBfDH}eQLsO-
zaf`%K@(p}I`jk_XE?*Euh<hhNqKL2Vnd|#Fb8P=mw^4PqQc(=ox2xODpQ2NJ35%UK
zQ$rt__I1!^I=JACP=|GvM4hvRPBE?|cE3lrD^9}XE0KAbp9RmEmX|_%+HXr72z1zH
zjYvm0sN83$%S05z?f^#I9ZbB~B9g~NF-KoQw<B(z4^L}WXE#twgb6WeA_9_`$U@qz
z`Ni~5CMKvL+%VIJpWo~5l8^PTt=2!iwa2+VPWRK+_HOFF^O>G1Hdr5l`K}_~oqHIS
zf1JeNgzc~{Tr;4Ee_-oFr*HyYfjddHYYyz7k5n1rNxV{5L*=dfFi)Gg%}RMiuy6LZ
zGHXl42{*mi-01z6%v;+VhpGKqYJFXz>Bj~$i0};E(t#K#G)Z>veu*(qPRZpJQf>wa
zsQd3Qo%sn(fLppLOL+w$S}Zwm@c+chP_>pst}APPd2yb*m!s1qFV+4>S%kB@d-|xE
O%>nV!Tf`g<V(|dZ*k}9z

diff --git a/sziszapangma/integration/asr_processor.py b/sziszapangma/integration/asr_processor.py
index 83cecdb..9adc99c 100644
--- a/sziszapangma/integration/asr_processor.py
+++ b/sziszapangma/integration/asr_processor.py
@@ -1,3 +1,4 @@
+import json
 from abc import ABC, abstractmethod
 from typing import Any, Dict, Optional
 
@@ -32,5 +33,24 @@ class AsrWebClient(AsrProcessor):
         )
         res = requests.post(self._url, files=files, headers=headers, timeout=600)
         json_response = res.json()
-        print(json_response)
+        print(f'asr processing result {json_response}')
         return json_response
+
+
+class AsrPathCacheClient(AsrProcessor):
+
+    def __init__(self):
+        super(AsrPathCacheClient, self).__init__()
+
+    def call_recognise(self, file_path: str) -> Dict[str, Any]:
+        # files = {"file": open(file_path, "rb")}
+        # headers = (
+        #     dict({"Authorization": f"Bearer {self._auth_token}"})
+        #     if self._auth_token is not None
+        #     else dict()
+        # )
+        # res = requests.post(self._url, files=files, headers=headers, timeout=600)
+        # json_response = res.json()
+        # print(f'asr processing result {json_response}')
+        # return json_response
+        return json.load(open(f'{file_path}.techmo.json'))
diff --git a/sziszapangma/integration/experiment_manager.py b/sziszapangma/integration/experiment_manager.py
index 85566e0..7732d7c 100644
--- a/sziszapangma/integration/experiment_manager.py
+++ b/sziszapangma/integration/experiment_manager.py
@@ -18,10 +18,12 @@ class ExperimentManager:
         experiment_repository: ExperimentRepository,
         record_id_iterator: RecordIdIterator,
         processing_tasks: List[ProcessingTask],
+        relation_manager_provider: RelationManagerProvider
     ):
         self._experiment_repository = experiment_repository
         self._record_id_iterator = record_id_iterator
         self._processing_tasks = processing_tasks
+        self._relation_manager_provider = relation_manager_provider
 
     def process(self):
         self._experiment_repository.initialise()
diff --git a/sziszapangma/integration/repository/__pycache__/experiment_repository.cpython-38.pyc b/sziszapangma/integration/repository/__pycache__/experiment_repository.cpython-38.pyc
index 6cb018db21eee03da8a9dd6115dbd67446c02b87..b79c46b62439be55b5efe5a33cc28b01ffd877c8 100644
GIT binary patch
delta 171
zcmZ24^jv^1l$V!_0SFq-rY9X>naKByamB>1b^3g%Y?2Hq%ySr11XF}sSehB5_)}R@
z5u(B=B4AO06sBMXP0`I;82wo$Z(yrol%1^0zMfHW@?CZlM#0HK9EsfQK+}uFL4?HQ
u{~Y3zXK`@p$N{+=j4Vt{i~`I|j3Q7h1f(UP>>>`J5<gAOBALloIHCa&D<h8p

delta 345
zcmaDZuwIBSl$V!_0SM+Q3MMMDPUL&WxNG9qI!Cq?!8wd6LMg&6EX|Bje5ov{{Hbh`
z3@OY&QIQl;u&4lvs91_PSX3~DDVRZ1V)G(Kf0lYp##;ipsU=03$;I&nMfnA(MJ1KV
zOd$K90K{elVrL*OW&si@3_#tCenlWhX)+b@0I4Ez5CIZ^5WGOvEs6Bhl6aWWMXAN5
zIVJHW`SB@fvOw8luoX;Idb+L^Ksz&YQ}arKQVa5nGfVP|D)n$_o&1rthEZ{H9@~0G
z)yZ<~CX7OpgV_@WBtSN^g9u3wAvJkFyCS2~<cI9CLITW8j3Pi>!~vA?)8s6Yo6N%z
F4FHXyQmX&}

diff --git a/sziszapangma/integration/repository/__pycache__/mongo_experiment_repository.cpython-38.pyc b/sziszapangma/integration/repository/__pycache__/mongo_experiment_repository.cpython-38.pyc
index 32f957c9503ef7ba409a19f25cb4578e649b51e8..8d4fa80ffa121e22f40d31c19a0a38dad8cde621 100644
GIT binary patch
delta 505
zcmYk2!D|yi6vpSxOtza%vQ4MSHX9X7t&$k5cvDbl#X~RZq4v;%En9c3!MIIl_hQ&+
z!Gbp-eFwqzkemfCf~bFi9t1sj*`t3zPc0Nr&MY1}10Ns1_wjh|9oODW*~_JpMbz8*
zvAJ>29M~^xwh%r~&HLTBy%l<$!TuV29sJ$BHSSLyfM4;eyL`1AOawWXWW@2O6cMLL
z&36@<d`&o6tt^pdJ$3i;F8+bf5aK>PXM2&nvJr%jo;>s9(+I!QMJS_SJEf``B%*p8
z=*{ls>mR=`6RI^$vmwFEKBv8=s^SShglYU{G|)9Zz^rn=CmK3zWG#wNr@c8H{5j^}
zJ97o*@W{OT@}{cB<Q3^dLWVFRcgVv=pDIsBB%v-DvW$s7OJK+o7OPc90Azb++fHDK
z$Z^%6X{0O);#6z~@w(UPtas&BH;{2Vh~!ySPx<3^=%>u{eR*EzxfB|YN&J+*Ev_m5
ze<uTqPyvBM>mpvY=HW7St(ja)1+L>;>jqTum-WDr`YiI2mJ3>#mL|>@YS6-!LhDRX
gfyhx}=^N2X&Sb(Ayv!W~-xn4k#iK%!qZ~N<2YyX;p8x;=

delta 672
zcmZ`$&1(}u6rVRUyWLImvH8x{q?Ibw^dq7O+JjKAU_eDAEkZ=&(p^iS&ByF|=&~t_
z1ur7RxfKr$c<`bK9xQkgJb2KPw;cK>c<Z4k)|vGKFV4V^_kQzxZ{E!BNq)Z&Uyj8h
zNG!AZ?#?;AAKy%9*E(La-Llq(^h(q9`rEhRWB*|5vSO#7ft|6lTeO~V3_B;Xyj>7k
z(n&dri9*J-#{`r9hdE*w1(SJ%D5_^`s9YMF+#n|Z0=v-Vk8vq^W4X3;%JrMBZ*{EJ
z>bk|>;wmJclKYT*^MF*KWQqyhl$;Z^a8s;-dWZoZ`eo5=jPKE}`AMmYOBIen6fhF!
z2>;-()gs?lUcof~teoVZ)R$)EuTqi9U!5rND`BtaBe|nPW8LvsbH#0RSi9peZ({|^
z&c7Gt3uIg`V<v}U(|n+$rwXf%*Z5P#9QWRu*YMg6`|iBZxM4N+&&V78tK_>QH{k-$
zXjd<u7eyX=h<Xs99T=cRbnAEzix>}3fK8dFdL)1y5)hA?XaIn^<K1`wHN+C4xUBFO
z+C-9Aw#_DFPQzjAd{0}<E(pR6jR#eHfB`A+XT!%|*Q+qgxAjS7PG~Oi_xe2K_&0s&
z?2uTk4K^iMc1(hN5i3iWk)TQ_N}v)>OPJ%Ek(m=Q5xUZxi1ZF;6pf^GD!hwohAKP)
W^?P(QPWgvO73w@T8YqMUB|ic9!<Y2{

diff --git a/sziszapangma/integration/repository/experiment_repository.py b/sziszapangma/integration/repository/experiment_repository.py
index 8e1e67d..4e01d55 100644
--- a/sziszapangma/integration/repository/experiment_repository.py
+++ b/sziszapangma/integration/repository/experiment_repository.py
@@ -26,10 +26,6 @@ class ExperimentRepository(ABC):
     def get_property_for_key(self, record_id: str, property_name: str) -> Optional[Any]:
         """Method returns property for record."""
 
-    @abstractmethod
-    def get_metrics_result_to_df(self, metrics_property: str):
-        pass
-
     @abstractmethod
     def get_all_record_ids(self) -> Set[str]:
         """Methods returns all possible record ids."""
diff --git a/sziszapangma/integration/repository/file_experiment_repository.py b/sziszapangma/integration/repository/file_experiment_repository.py
index 93e9d96..a528aad 100644
--- a/sziszapangma/integration/repository/file_experiment_repository.py
+++ b/sziszapangma/integration/repository/file_experiment_repository.py
@@ -59,19 +59,6 @@ class FileExperimentRepository(ExperimentRepository):
         with open(self._metadata_file_path, "w") as f:
             f.write(json.dumps(json_content, indent=indent))
 
-    def get_metrics_result_to_df(self, metrics_property: str) -> pd.DataFrame:
-        list_of_dicts = list()
-        all_metadata = self._get_file_parsed_json()
-        for item_id in all_metadata.keys():
-            item_dict = dict()
-            item_dict["id"] = item_id
-            for metric_keys in all_metadata[item_id][metrics_property].keys():
-                item_dict[f"{metrics_property}.{metric_keys}"] = all_metadata[item_id][
-                    metrics_property
-                ][metric_keys]
-            list_of_dicts.append(item_dict)
-        return pd.DataFrame(list_of_dicts)
-
     def delete_property_for_key(self, record_id: str, property_name: str):
         json_content = self._get_file_parsed_json()
         if record_id not in json_content:
diff --git a/sziszapangma/integration/repository/minio_experiment_repository.py b/sziszapangma/integration/repository/minio_experiment_repository.py
new file mode 100644
index 0000000..6d53f3a
--- /dev/null
+++ b/sziszapangma/integration/repository/minio_experiment_repository.py
@@ -0,0 +1,63 @@
+import io
+import json
+from typing import Any, Optional, Set
+
+from minio import Minio
+
+from sziszapangma.integration.repository.experiment_repository import ExperimentRepository
+
+
+class MinioExperimentRepository(ExperimentRepository):
+    _bucket_name: str
+    _root_path: str
+    _experiment_name: str
+    _client: Minio
+
+    def __init__(self, client: Minio, bucket_name: str, root_path: str, experiment_name: str):
+        self._client = client
+        self._bucket_name = bucket_name
+        self._root_path = root_path
+        self._experiment_name = experiment_name
+
+    def initialise(self) -> None:
+        return
+
+    def property_exists(self, record_id: str, property_name: str) -> bool:
+        path = self._get_file_path(property_name, record_id)
+        return self._client.get_object(self._bucket_name, path).status < 400
+
+    def update_property_for_key(self, record_id: str, property_name: str, property_value: Any):
+        path = self._get_file_path(property_name, record_id)
+        content_bytes = json.dumps(property_value).encode('utf-8')
+        print(self._bucket_name, path)
+        self._client.put_object(self._bucket_name, path, io.BytesIO(content_bytes),
+                                len(content_bytes))
+
+    def delete_property_for_key(self, record_id: str, property_name: str):
+        path = self._get_file_path(property_name, record_id)
+        self._client.remove_object(self._bucket_name, path)
+
+    def get_property_for_key(self, record_id: str, property_name: str) -> Optional[Any]:
+        if self.property_exists(record_id, property_name):
+            path = self._get_file_path(property_name, record_id)
+            json_content = self._client.get_object(self._bucket_name, path).read().decode('utf-8')
+            return json.loads(json_content)
+        else:
+            return None
+
+    def get_all_record_ids(self) -> Set[str]:
+        ids = []
+        for property_name in self.get_all_properties():
+            path = f'{self._root_path}{self._experiment_name}/{property_name}/'
+            property_ids = set([obj.object_name.split('/')[-1].replace('.json', '') for obj in
+                                self._client.list_objects(self._bucket_name, path)])
+            ids.extend(property_ids)
+        return set(ids)
+
+    def get_all_properties(self) -> Set[str]:
+        experiment_path = f'{self._root_path}{self._experiment_name}/'
+        return set([obj.object_name.split('/')[-1] for obj in
+                    self._client.list_objects(self._bucket_name, experiment_path)])
+
+    def _get_file_path(self, property_name: str, record_id: str) -> str:
+        return f'{self._root_path}{self._experiment_name}/{property_name}/{record_id}.json'
diff --git a/sziszapangma/integration/repository/mongo_experiment_repository.py b/sziszapangma/integration/repository/mongo_experiment_repository.py
index 45e0d96..b169735 100644
--- a/sziszapangma/integration/repository/mongo_experiment_repository.py
+++ b/sziszapangma/integration/repository/mongo_experiment_repository.py
@@ -43,10 +43,6 @@ class MongoExperimentRepository(ExperimentRepository):
         else:
             return None
 
-    def get_metrics_result_to_df(self, metrics_property: str):
-        # TODO: implement
-        pass
-
     def _get_database(self) -> Database:
         return self._mongo_client[self._database_name]
 
diff --git a/sziszapangma/integration/repository/multi_files_experiment_repository.py b/sziszapangma/integration/repository/multi_files_experiment_repository.py
new file mode 100644
index 0000000..c6b5a23
--- /dev/null
+++ b/sziszapangma/integration/repository/multi_files_experiment_repository.py
@@ -0,0 +1,61 @@
+import json
+from pathlib import Path
+from typing import Any, Optional, Set
+
+from sziszapangma.integration.repository.experiment_repository import ExperimentRepository
+
+
+class MultiFilesExperimentRepository(ExperimentRepository):
+    _root_directory: str
+    _experiment_name: str
+
+    def __init__(self, root_directory: str, experiment_name: str):
+        self._root_directory = root_directory
+        self._experiment_name = experiment_name
+
+    def initialise(self) -> None:
+        if not Path(self._root_directory).exists():
+            Path(self._root_directory).mkdir()
+        return
+
+    def property_exists(self, record_id: str, property_name: str) -> bool:
+        return self._get_file_path(property_name, record_id).exists()
+
+    def update_property_for_key(self, record_id: str, property_name: str, property_value: Any):
+        path = self._get_file_path(property_name, record_id)
+        path.parent.mkdir(parents=True, exist_ok=True)
+        json.dump(property_value, open(path, 'w'))
+
+    def delete_property_for_key(self, record_id: str, property_name: str):
+        self._get_file_path(property_name, record_id).unlink()
+
+    def get_property_for_key(self, record_id: str, property_name: str) -> Optional[Any]:
+        if self.property_exists(record_id, property_name):
+            path = self._get_file_path(property_name, record_id)
+            return json.load(open(path, 'r'))
+        else:
+            return None
+
+    def get_all_record_ids(self) -> Set[str]:
+        ids = []
+        for property_name in self.get_all_properties():
+            path = Path(self._root_directory).joinpath(self._experiment_name)\
+                .joinpath(property_name)
+            property_ids = set([children.name.replace('.json', '') for children in path.iterdir()])
+            ids.extend(property_ids)
+        return set(ids)
+
+    def get_all_properties(self) -> Set[str]:
+        experiment_path = Path(self._root_directory).joinpath(self._experiment_name)
+        return set([it.name for it in experiment_path.iterdir()])
+
+
+    def _get_file_path(self, property_name: str, record_id: str) -> Path:
+        return Path(self._root_directory) \
+            .joinpath(self._experiment_name) \
+            .joinpath(property_name) \
+            .joinpath(f'{record_id}.json')
+
+
+if __name__ == '__main__':
+    print(list(Path('./').iterdir()))
diff --git a/sziszapangma/integration/repository/multiple_experiment_repository.py b/sziszapangma/integration/repository/multiple_experiment_repository.py
new file mode 100644
index 0000000..b8e1d35
--- /dev/null
+++ b/sziszapangma/integration/repository/multiple_experiment_repository.py
@@ -0,0 +1,39 @@
+from typing import Any, Optional, Set, List
+
+from sziszapangma.integration.repository.experiment_repository import ExperimentRepository
+
+
+class MultipleExperimentRepository(ExperimentRepository):
+    _repositories: List[ExperimentRepository]
+    _index_to_read: int
+
+    def __init__(self, repositories: List[ExperimentRepository], index_to_read: int):
+        self._repositories = repositories
+        self._index_to_read = index_to_read
+
+    def initialise(self) -> None:
+        for it in self._repositories:
+            it.initialise()
+
+    def get_read_repository(self) -> ExperimentRepository:
+        return self._repositories[self._index_to_read]
+
+    def property_exists(self, record_id: str, property_name: str) -> bool:
+        return self.get_read_repository().property_exists(record_id, property_name)
+
+    def update_property_for_key(self, record_id: str, property_name: str, property_value: Any):
+        for it in self._repositories:
+            it.update_property_for_key(record_id, property_name, property_value)
+
+    def delete_property_for_key(self, record_id: str, property_name: str):
+        for it in self._repositories:
+            it.delete_property_for_key(record_id, property_name)
+
+    def get_property_for_key(self, record_id: str, property_name: str) -> Optional[Any]:
+        return self.get_read_repository().get_property_for_key(record_id, property_name)
+
+    def get_all_record_ids(self) -> Set[str]:
+        return self.get_read_repository().get_all_record_ids()
+
+    def get_all_properties(self) -> Set[str]:
+        return self.get_read_repository().get_all_properties()
diff --git a/sziszapangma/integration/task/__pycache__/asr_task.cpython-38.pyc b/sziszapangma/integration/task/__pycache__/asr_task.cpython-38.pyc
index c984f35f66feeb3525f85bbbeffc0f0f683a234b..d359f7e343c9c1b2e0cdcfeb83f3b0e5c1c3ae16 100644
GIT binary patch
literal 2149
zcmaJ?OK%)S5bmDW&aQXYj<GQbh=)MHBC^XB$+8Fpaf%h$_%Z^u#?$T1c<1Hr*%+_Z
zCtJ#yyASa(e}$jWS5Eu^4&eY*Ju}Waw&_;aRM+%Wb$#`iy<V?FU>yGaNBE>g$e*}b
z91d*0gQb1}!U?AdNohbS@>XJ{c3>OcPMp*YT*Etwm$rhI;oZbf+d<p#UeZaIf+b3R
zBD}@@bHaVmI<tc=Z|{;p=P$5822^(+Dfv|9kx(j^uwUH~Q7-w@uzUvM=P?&3UHkF3
zLdZB3S-B&MT*YNBPe9(UKaI2T&!L*UqIx-!A}j^V#4$StMQ~_&M<ihx=h>4m3&%o6
zXnJvY^+p{6BS=6w39LOLY~gUaNrVee3!WZ4ZS%B2=7|<}F5DO7fO406=iR^uSsSFS
z3!D4AeeMJuBU$1dzI5U6F7JV?`+_(m=m7|Q-2(6N;(DD)<2Nh7aaPox>plyW#BGI-
zUTyY(MtQ=rFckw=w@XlAHhS$=HNERv?$z5jN_1a}qiHM!n-(14iyBA}8RRiDY*^|u
zASF2?FX^1l-Ajv-xiu%un%h9_xdYVU1e~MWa5Gm;!HD)5i?g_7Ok)1YB_v%S15Z0j
zBnPsGl0K4UBr8bn0fB(F8H<uoDaKxr*L$NqC8Qdqp^W0}I4otpAC4XiH7WCA1a3Xt
z7g_WSUQg6W&0;kRi!d9f;V8~ZF_tC`MhF)kX2=YS6ZsC9LhH&0Li|4UV9r(^RlylH
zw;$NLUE>>by)LeD5`xzxrS_yKr!tEWt!5y4xPE}8z6LV4UJ}5M9MVhc)Gn=xpWA0p
zUvrz2Njv|F)44tI07+|G_evRNDw1)5c?|bh8;cV2q6*<bF4;t!7)-TWNN{%G$Tct|
z?<08tBxs|@&%<OY<OT{2c@H?ftR`{6P)X(8`yf;%185)SY@-3<t#jL8<VwF@k#(7|
zw5l_SdLs0@8K~2RWpMZ&7(l>e(j`5G%sI4PLIwfva>}i9GIzOspFAdKkZD+WfSO~F
zav}3fCjxYw?T9w|;c3A_le@4KA}|IczjjY)34ou`->oBOxAq-xGqAKZ{6<@G`8Ft>
z%_LT3l&8hkm#7PsdZ2zbY|xO?j49|miD)WxxS8Zpn5ZpanvdlNXvQ;{uYD6XC~;E*
zx(|mF1Nu0NmCzei_1zv=&~ZJY@?+2(tQ^E}frYXUIv8jv)HJ!_)auPUqY{M$N4zfW
z(s!vtEkMxvclO|JN1=5=O=J6EOm`Sdb3TPzFx_SBXc{Kf8;Lcbml+GQEH6#%K^aR7
zk+xMSwX>h+iK#w`@XC*nU=7MI@Jz2R{YU^xY#~7Fcmz{dwt?VM9|Gx6AE#r{dcI!i
zt+s0ZA9Hql(9@qUHiqFsV;CZESIxG%=fgV>FF=kTnO{}q@wfl;P17faw{{N$LvXjv
zs$o^X1IRqnz$8{w@X0ls5D$?I4Q1wsm`f$$k5BZcx176CxF!S$>jLI)+J(Pag?kI@
MPGKL%#HpwKAJBJ7EdT%j

delta 777
zcmY*Xzi-n(6uvv#=cKU{ezXZBp(-q3RZ503BBY8+44^J)1j=$4+et&5IJ!$fjf^@_
z2??=8w=yJS7XAS?{sT5-#K?-6ks!P?MG0r!=jZ45zI)$$_wB-GJKwbJ4Fv1Qn-5QF
zbegZ?gX!*G@jmhmpPnI~2IecRmGR96ax&Am&5Ea@*B3qi5N&w_H;ewpJL2bj>r8Lu
zULzf~EXcIw6n{Bg;6ukq3^5)CJjpQD9dt*GaT5r5MnM+9p@}Ynu+3FjJg2}?U@OQ2
zEO3%#%nMy17+av9kLyhla8d8O-0KcrxFa4tb?XO#=#8Rb{ZX@VR2P%3n7DN44my2T
zekZ%eMIf@}wsu_J1}i2r6yq2@!*lXdi!~qhvQbsO*D9wZ+3W-(Hslc$Jvw3Sh_haB
z^0!o-Us6?-6kGvlWnID9b2l6Zd`me~D1wy~M6Wwcvw7e}+%JPuq@5=^CP-iEWK!A}
z{Kyr(+A6l620LVRhNnU1zomnr+IJ7OxCH<j&<w|TjzI^RkyMoiUVUc7+8oa{jC|BU
zya2%tO?#hYQibm5Sk8>{O*Mpc97*1D!;q<ZJA<wWod4v?PsWzDu2TLst`~@fK@Mz+
z$&&n%HF^!(@*#b&uR6|Ey}YVm2OzP}=ja7+4qGF;tU^@ZxVl~HZipTEm6kRM^olGk
t3h!n5@6gFgYR=`JS&<*jtG83<8q;b5nLGW+ABVwRtmqV{h2bHV_6K)4ti=ET

diff --git a/sziszapangma/integration/task/__pycache__/classic_wer_metric_task.cpython-38.pyc b/sziszapangma/integration/task/__pycache__/classic_wer_metric_task.cpython-38.pyc
index afb1c1a779039fb604f524ec832bd68c10553e17..94827e74b006da359353ae07802d25af99e2a6f0 100644
GIT binary patch
literal 3429
zcma)9NpBp-6|U;;=~*}nm!U)%mP1>zl?kF5BMXw)f?$C%5(AcCh!zAiU=&*2MXJSK
zMpZpfNQ_Pr;8PB{<)DLj)IGl<KcTKZ<qrf%kVO7o&B`%lxCiy>)vN98ujYQM)nND@
z|LY&&2Q9|Fqrvj$VelE6{u@BdVxF>$2Rw5ECvyXr6U|AztP)f#?xucL4XPIR(ppvz
z>K3o0jchGgv$&r&vsTcucr|TjouFg!TDqQX1REBwr<>VUux0T^+Re6uZQyIcg+H>m
z8Mj`rxFtK!-QZ%}-e<keKfxXAxyHSf9~<v>5|zgLGSOv^n|E%d$zh(!yxdDet&?ak
zOrud6mW9G>Yd*VQ${`URNOfk#)|nM|!r@TT#_s2T29nUZ_vEn93C=qPz5SIcB8hwQ
z!>>bq1WJwi`(=^>_Z}1~M&G$7!9h~wcfve8lqy(@Cd`SaQbi=p@>iV>^xuI<7Vww_
z&V43b>BaoUq<5yhi@pN7hu%kDv2+(}=~s>Ym;SfxfXCIi_M#coK&yjVf9b}Jc<qH3
zG%RH;Zi3Q^+n_XMOSUhuIqY0waR;;O@djqsK?g-{VBh9}gSpL@PP`R&F}L+C^H|V@
zfwoO|s(q;Ujx1FYkygwFk=cP3LsdYZ<*~@aOqv}L&aAdF^PV^?(pZ!#%yp!aVYxDY
zd1>cNr_tQvrb7xA3qsE~^%9&+uD$%@XK#dBtz5T#KK~cr#(rDLC!<73F&f5UDWjQb
z$-;zFyt!!l6M&LEXRr8}kNs1Jv#~Q~!Wp}O?zjTzjXl6h=|5-at7Xmh^_cCm*Zgj;
zVJdnAotl~uNuHEKs0|!yHpLIbQ0tgb9Rd{sn*@j*wFS_t8c)mgKy`_-P2d87iv)HE
zTmpE_O<f49av@%`|HOm)S}HxrLKP+X)38*<!*Fn0>Z7t44#2|ohcb^IVfsi9^hu&m
z!eN*nX5k>oOL?elcnrukgP9%4bQ66GqW6c#>RsGSeCRd+tGBs7{nhx%<?~#wKT`&>
zMP11V@hFnmY|D8#3pI~t<11N?R34E@W*^~Xrad%Gni@N=7>vXo^HV2gNA-QC-T}Gi
znC_um^3Q`pi6ePz_1tsSdsw5c5V%U<{W<smnCa-FWGHCMgvp<SsA~YsX>#X{^XBC0
zx#F#C!#(pW%(|Lp9g$7aPDFCdKC(A8D_04mB<FKa`7;j^I#xpW)Ol7JdnBbAjw_Qs
z=Htqdk1=~iE?J5BC5ClAc2(>yKXzjG1snUf*>ir1qA{PTVowe3ZK>qAJ@2k*ErJ^v
zGU77^(K~45q5Ei>obV8?|4sWDx4iOG{#WOT2mO;WdyXP~1<kS$k9CoY7-a!Qarz${
zCn;AI-nfyXU_?bWy!k1ePO9;7;mN1x>RF9)K}kN9lo2T7_iv;H5{teGWOh=ouGWZ$
zZE}RC@HH(CRFO?>sy@P;x(s02f>zA4hPgP&4~uLwbDnvmnvGc&ld~k+tFAf~d5!6;
zWHr;E1fZlIrKRc2?-UvpP_L?G^Bh5OsHVVUeuKC94qxXUchH*u^D4j)9kn+n*M6ef
z;GrKAmu+HdVR`i-h;NTOQUf9mF$WKGV*VEgzT@2OIRS$DKq{mbX&R4?hei2F>O{jC
zC{%;3h0^AN&tj3-P`@E?HWt-&&~Bkk;?MOVBI57LxdNWGBd+}w9cYCi=be2n5NbBq
zC|gjje})YIm{X{oLZ}j@d`x2TlaKbM6-@4iX}UYDIlJ(QT~v{9SBKd!mHnP)JaTfI
zwS(3|R3uK*6nkIZ+TZ_TPdxbi-b`d-E~rk=TNQhN$v>fKAAmVN><msO@02rTyuY|<
zdK3yist%QMAxuMvtcXX56ag;8lTnyXXIxz>lw=X+c~RPguTiCJ38GA7yoW`R+8nRy
z7^`ap@Jwau*90g;Rg(a5Xw9TZsfskMh<($VmZV6gDUMzk_Gh$&GOeP@LGGk~3DDrR
z+0S#})YIR;*Ecq67XNRv>oXLY|2M04=iT0p@yp{OQo-a}%K&i}{C>Hr^-*bLf9`V&
zY*I3lXz5X6H4yybr){UGwekm7f4BjL?^D&B8K_XUtOvh6vvjH8_A~pyU1E>UN4=nD
zug$0C4{zPOD4hLs%c(VDaQ&_OCq;e!ezrwk(f^a++K=zCFSrq&*f!gmoinT9dot}?
tXr0AeIcIvcGEThgcevYHdC76C3z6fP+Kq`@-{ctCYScw-Uimqm`#rt%xO@Nr

literal 2835
zcma)8NpBoQ6t1pbJTo3|Nt|FHVSo^rD2#LAfUwMB2ZR(%6vwjE5-K{~WvAnw=}A?O
zf=82+E#;I0_Z;G*FC6$2-1q@?<-}izvhclb&*I5|=vKXcwY`4ttGCqF%uI#h`R&g?
ze!dUxFY1gw4mw|<>02NXi>!n-E#GQ#pIg-DiQRO3C+F?NZF;_!^G-6=Ecqqyu3wHk
zzw#Z6rlQgzi%PO|VEfZid6U&Ee?uy(bK~5Mb!MFPILzvnIk%PsTF2qGRBJ&Jc9I}V
z6^-Bcr7cz5l&$QxY^OTL@IJ<8Z>cnt*wNa(6X-pEIxO~!hf*2mVXC5#{xkY`CmsDe
z7|DDqVm{wu(w0tStrTC5uZzB&_ifDC(u<s@?qjxNMQ-FBR{bfAl`uN>)Q(C~`Oxvp
zG!j*w@@P7$qF<5IvWl^p9lpet7<xA7Y&3%%v(X$@%uQS|*psiEj~1|U{xNfyzX0UU
zjDqxo%v2nb>E^s><{d5CDg{{CzGwwaX)cM~G>Jr}f|d?d+|I`4FNhJ$L^wp<HRTL~
z3n>@>TgXD7)tKDH$?D81`JfXkDLU;a$Yj_*4muU$$?a@3eGMdI2ke>EvwH3koUX@v
zOz@r!YWEyaCvy)NzFx#O*|D`zpE9oQz;;s-B5uW*5Q?1KoDpy6r^=X6^fxsPQumCb
zWwN8HG%`bEmdG5Dd5~kvltlrR5XbEK?(&wFN-sA96~?WHL8j8X!ScG)ds*6E-rm~0
zv#h(Z?gs6kwc89%cj8ticU6$ZX=|A<ULHMy0yjb9jrP7ei=Qu`={#IZvzC{?-HXFe
z8G1pZZ+G1`WhFxdfQTcrC<oyq)F6J0r)1Vqt&s5UKg1I%YiODv=<#O^C&2DoM|_hh
zQUzgqZdZ;t(oU+xp4`tdt=no5Yt-9B-XZeVfGmMCb9ygs3))gB_#Osz350RS;>>y7
zy*$yhv2Are{KY8?Tu35uxdq>X8MWY%J?QZx{s<x8bM`#-4My$UO8C`%7e0oWB_z2g
z{K%%XhQPBo%*-%~aCCrSZY(TJg&a*u-AS^#r!L~}xd*Cq;LL@>=ZAqZikn&J$DZs*
za@`$=vPJ^mCo%@=8P#bCN`r|c@stxUW10Q{B*)cqUO9Gwuft0gI5eW(E9YhR<B5pB
zDHDfVgTO+Ccfp-P{*>>0f>~e*zlp4fAHs*$*?|?=InQ(6dBP)iiLmuHLJRBr4+ld|
zxQV6-x?PC+srm@1AVVhol|OLciUa{_fGf6tyuE(R4R2gGJkG|UsjMU@F=5(luYN)D
zNU+B^>#j~TT9DN!AA?kglh%!uB*pRQRWN;FZ)i;B=NePK$TcpJ#v|Gms$IeKn3AfF
zu@$s|c6II}fOn*ltx)=vd;9G)yC-$56#)h3r>y1A41ESF_d~CSsfk{)IMKMzuv}B#
zW3FdattuRazwBQ9|LB}@0)m%X9)6SrD2XHNibRf}>)9FVYtP29Tiq*bCk02=f+VS(
z)QlPeqlWSj)O65nC$fQb=0vz6sH+fYs$%Wt*PEN)uZis&x9d(3BsI+BM*CAIQpPd<
z5G%e!D{S>Va(~8OmpHT-TsuZ`=@8o!fvCMGEL2s6Fcl%1Y1Bcy2`D5Ubb{n$#@3lK
zb3z2IR+{BWUZW5ZCdRp&rb(XC6{RV4iO6Ll<noF<$k;(^-?%$Tikd>^D$?7`oD`o>
zCJCes!~Z-jp~R{v>CrLj>mU`YM6bgU;`#f0eimQYTXpe$T|G;cgukd(>05b`@7}0a
zjhF4Wkw=CK`PW7ZSpzjiHsEZHaCp@k#7e3PJ3l|QWu)9ShUKR*u_)!Zm{0$8e^C|(
sx4yhgD!Mo*x-h7Zh!7AX2<2GirKhw~9N8+xQ0@lv91hQ`s63AS59k=%PXGV_

diff --git a/sziszapangma/integration/task/__pycache__/embedding_wer_metrics_task.cpython-38.pyc b/sziszapangma/integration/task/__pycache__/embedding_wer_metrics_task.cpython-38.pyc
index fb121b6163c23215d419fc36220f227d69e09cb4..4918ee5191cb5b9f9f58c552c124e883bb704be7 100644
GIT binary patch
literal 3627
zcmbUjO>f-Bb@;j55ANz)j+^hKbvI2`0n!v`U<hd~HON6qVA(K0AQ;e`(S{PaT+eXf
zSfEcbkV`MQ<=}$^<f8wPQ;$8)wWt1pq9}^0?+tgk)Y=MyaKJZj=FP|ZeskaVTLiwN
zfBh}|VTq7`;Gq85F!&UH`8@zen30gw2n+*pGci*uurzKZcIpI<#_hyS8$m<kPU5A_
zps8^;X{GI;t?@?EN&UdrxR-R(UeMEcGg(TPgJq4kl9hBdSOvTttg%k8&ir8GGs3#8
z_l&R}@10t~CR;in{pEiGccgEqSO1j6!%@md`EL4<GZv4Acfur^Bw?Njpl??6gX}QB
zLb`b;jK1cq+ILTcBYBvKl;g&=Yv%n2TwFP3b$&z6$9v&;Jl+2dATe@wmya_U13ypT
z-0qhmi@21)=)F)L!;FXh{X9+p@7?9Vd7O>*!cjQnLU|I{rjG&h`Ak4Pv>#`JMW}`P
z=S>IluYhn87>oqweZnnnGvjvIo73Kc-hp`=dKY>J`Udna^d9sL=&h<Xd5d|^8{d*c
zgEd*}Stn=%t;3tF{oG<5=0CFoU(a+|7iM~F31)iV5}O3tVrsL}D5!9c=OT_Iimo<j
zT8`*gWT3SC2_1zgS2t)lGwuTAbvn!vMsu`SB;s+tK;NKqW$8twS=Af06Xz?U%3;*a
z+5)Zl8m)(Vr}K$^Lp5{Yzhw5cpXO*elwyI&^_NS%d7aQ*!5>Xx!Rcho!knx1xdb&C
zqnQh!Cm@aiZNV?^0m#WIIWr2QaL-MH6lOuFSy%wA!UkyPPSH3u0CV$3L5^IFdwH|M
zTY3AG0KHQ<0DVRd$c3@r?<z-5z;w!^G#<q{rD6rHQ!DfZxdmh$B9JSwiois$h5)$~
z>j+!~8wi#G^gU%uo*arzoVkJE6$CdC{0hOV2wnqlVW=jhQ4&f?=>_@EaO=M0LT;s@
zh~m-XFc;awaBGLl<2)O00dF5X<fG_oARo&uc@oQ$a2$??X}A@Say}F~7PrvKTXSur
z8_aBnq`~-!coQy1ek5{DT3y4{t!0>oed$^q!!u6a+?_@6)c_dGbk?_2Q}74^o5l?6
zTV)U`suZGJ!Sjh2MX0UWhd65V4*U`oUzleEtW1uKbCZ$d<^d6}!*t(NYeQa(7KjUa
z%%5nR^eyo=tP!^m{1(BlEASh@R8JnqV~Sf!CO?Epsol-&80MvUd2;JI2^V(4Rn;wO
zNlbGdP0OSgp(wMj3y1^17VYnV<mkZGx$)EnAx$l$b#6X&3L6C#KNe2eGox^hUGXEV
zw+kEAyBc$t@d|+vy0>%Y7H-ji-5!h@)d=0)J8KpmtZPm2Cg5#mGV2*Byd83CFk9nI
zjXTfHr=6lzw3!Q-51h3$XYHbM4)wAccM4yR$&r87JttW8pqe%Il|RpAko_ZLCO-5S
zAgF-@__cctAppPXJ~gx^jC12V^N|e(Mr&P|q5+-i<QYAZ*@&_@$}dc14n9<7oG)6m
zbvub=9%boxdk;@X#k+9f$@X=I6q6Cf+Ldt3W?0Aux04K#qTB{#cGxfGUkrc)fsVDn
zs`v=z_TeviG)(m6u1?WazErF87_BDzrs&{tK7f8t;NwTFV+>&Zl=M(!>C~OYd${f`
zT+l6vpu{ADXxB+et<F+EpBITTabe6We@=!iYO~DJ^PE2mHOy#b4#f1QoG9U;=yw-m
z?|mfp7K(~$VLBCDPLe!WUm%ve25Y!v?oCq(evh|)jG)p+uv{r=dZY~6nA^(p<$?v&
z%8R!D0~{zn1wh=E(KT)u08JN+V_w?Uw6{A(2l5|`F75xhZp*ZRZtE2lW}m$G^Bu0g
zj8z6-2$ZT8rD?_{;Eq&vD19^ulPSfLxllby!_g?qbsmS3P}Ut?axiD=LZj@5S(XS4
zF`dQ*rZn+81Z@P{0F*ziDiKc-I0j>_1n(e*=~46mpm8PU&K4y6TC+_k1XcU@(#DFX
zNB`Bk_WL)2PwLfY05yOQD)Y>-+Ph}vZkf;}H2C=E9kB4K(M9)Vm)D*YgGfJ=Yj@X(
zTBGWt7cZ}^8O-CdHmfzR-hFW=_}~EjuqGis2-H;xYXy3c>Q{G7O%k5sP)_hIUM9pp
zUb&{ecV1ctFD<y*9fA+8-Cw={sz*J=v1lT{w|;sLE~FE9_m@fOohz%ssd+M3tc=<r
zgC;%r;xG5;gWbD9m+tQUd3R^$^Zn2C*r5-;xVxjBs^+8GTXhNdZkN%rjRi*Hg9V~<
Ku|b4Fv;Geu`WMOo

literal 3078
zcma)8OK;mo5MC}RijpPy5yyekHg($|0sD}P=G4Lsio{M(Aa#N`h5-V_mf@~l+N7xL
zQb;VwCmYDAhu(9rd&@8Btv_IIMNj<+E!w0rD@&r~C@2Ze&dxsP^$j=c^(uj<{rj&!
z{8l6659|~l2Rh%tr=9`fgj)$ot-wlYKrQUk#7>>SF}$6WQa5l7?<D2a3p~S@l1f?)
zs)l!ysk9c<3|~&_X(MO=?*-Gm63p;wFngEqDPB7wye1llb}+~58^mw?38xdEYUf_8
za_y|fQSMv%^6fDCQSi0&vEV#z?L3lUOKoQ|6%t10C&(AJgd7gt4wI;pgn5Q5W?^I_
z+s@Aj=hvRKg^W|t${&h$rec`850e`YWEKgf@Z3=C1)hSH?5U7JT?{USUF|&0B#%&m
z;!{5Ds9%5)B(OLM=q3@iaJaS7Zz;4T=-be`&^pkTp)Hwl8|K==6BX{haG#THi<h}~
zR12ygof00eys&wdPaQcy4JEwxg7P|VK))^;Vj5&K+jNmE66o1LhY~&wD`)sD%$$8r
z91_fd3+D8tq0zuh--%qtkwVS&0!#Zn)|MIAD&J?VFcta=+sP8na`Z|h<90qazQ9I?
zGL!nQ(~D@f!dNu)k)Ah0#?m9H@9Ihp7wMn+-rEnI4V4_b$Hg~azahnwPAmoMw0W2d
zeesRAjRuZHe<F_=W5cKJ0LjTAIktLMuXF<W(xW}XXwL>}_Z*;3Uh27r7I1D}?vdR-
z@8y*tU*%+jytLN+DP2+>Fs}9(i(7Hdn5@GAdXAk_NJ1hLiT98VBrcL^BzQkL1H><D
zM~P%x&Z1-v$ps|yNG>8-0P@n(6~>|@REn{e<nP_(O(mpSPD2^Rt*2owv&Z4`s!)4*
z)?VJ)+<3ICy0Pkp?Xb0zhG#o*D;GO5%;T)JjNV!vnG@YT@Bt1r+xv16&c6(w!Yh$V
z!*cPZ?rX>P%-3C-5Rc7)fqYw6q=+E<Sj@qF!#rkkn8@0dBJapngf1IA$fNmg!>7=M
zJ$g*QiDcJ0p&LYA0ug}G{EjGuGz2f(6Z^*azAfK@IdTcf2S~0A$@{?RX|)%(87}Ex
zun9ut0U^|}C~;nQuTRo$Y^6^}r<_ru1e@WGMu`W&6qPuzhdp{i4*+s{&Yml8fz&pN
zLUityAW~su5m5dodSXNTLWCZdPY9wnK!Uxl>!aibzk*Gs$FfgXF+8PEoh0`?`4Qa1
z#H~c%>P!998s%frh<bLA;$jdTCZ2UEN<=9A(zuPU;pW$oj9Gh5c3KR9IuUpjqV^4#
zrmg}p2DhA7j@>uBLp=*P_>j7<oPQm!`|%`aoZlE+Kf1?<u>U!y3?pk5MiC$mY;JLS
z1QE7M4y^+;y>(0hAiy;okhy2)Pys;dj7gym^lWg1)4et*Sz;+nlBLsRS^{$}0d|E;
zDoopnXhs%leELvm@h%(inJn9ZGrq4K09@rz6@I2q9Ef!^B~-f-+q(a76&y^PpKBWD
z<0h`IBv6^7EN$Pshx_5iE}^9R^(51sb8d4b$v~)X0yEf4;)Ma<9S#-WAeXL>7Gia+
zu#Nk79<i;phX&$wgROmcYi)J)+x5FB97M^`C%SxU9K?ogAw??^W6DS$4qZbnP<i6I
z7NQR&^fk5UYmXNBuK&OF^DiKFV`XGaR~bt)-hqH*y2jX(PMDmI*eaKLnz69e%5npj
z0KR=RH$aXUuARqOmPkx-1C$aIU0y}<2@-UzL=@9@*xEPx==v#=M<PjJ!%>R7i<1$R
z<P?w#@F|3&s^tw{2lO7if6dGT54Nb4&>FRQv`zINvvwU+bo2c-WLn`0UlnUY6W~}h
z3)Q|EnSZ!Kxi1VFwe^j+Zy<($Tg8=Vo1l4qCB#f~((i?-lz~5a(b$iNsi*qOGxG~&
zt~n|*%{LYw<2L=-#P$7JIQ-3I*q0ShOn!j`F-(4n1RYoKsPV0-Gu}!+%5GvFnIxZ~
Nwf<{iizw&V{{aLtPy7G?

diff --git a/sziszapangma/integration/task/__pycache__/processing_task.cpython-38.pyc b/sziszapangma/integration/task/__pycache__/processing_task.cpython-38.pyc
index 46a1b9f7e3a486498a384e05811cafe91ee187cf..04380c866974537282bb2280d7f4cbf65d66aa7b 100644
GIT binary patch
literal 2207
zcmaJ?OK%)S5bmD$>>J0i9TCBzaA1Y(m5?}qA{0m>$N>u_L`g<LquK3_Gx0pu-EDAI
zvs~;ezaWWZAM+PDap1&}6Y49c`~eOT5>)j*VsE0%YHIu4RbPGe&FyBhM&Nn$&mYOT
zfRMkjbNX?ha|K>`9}FXmW+cLYE2Fs;S-BnA6#I7O<Zk4ewv&0eANi*3W<efCp=o<r
zEw4v)O1>t{XTcF+0k;nAsKMwh(hFa}4P?7#Y5U8suIg4YkV+&&m2>s5WId`oH~Fv>
z>;}7`xJXnfU~K&+&k~iE#kWb3>~Qg&D1S^D$Enrp2O}=hoEPdQAC)qN9gktWy|iVB
z*Peb{=v;wUW?(ppC?k<|n{b;uj9w<(g@4QZ+suAyF^9QFPULYPW&$2E@2PFVa}H@#
zn~mBmgwYzSAK_@7H(+IxHDIjCTClst+5kaEw;+HamohDOzE9+?ZpVV}?Wcmr`y-Yp
zu4}P^@wiBG4oHQIj&7Y@IJCj}`Gai>-mCD+4w%ZSNK7gU7NWaFo>RbGgfJtJ4n12t
zl4lP@9Y-2qo)giAznAy>w<Q;{pC@9N7C$9Ql!K&yjmuqCj{1odn*&}9AHwvm?8|W~
z$H^!ucJid37K-mc+8|eb^twM<L~26X8a>uQ9H&L9;<yEONu(a39v!cr1!Zf#3fv5Z
z;Y6G=eV#A!4WP{vt~+AJkT{=GWN6OCv*E!uh1Vd19YjMkp<&|fIRae~D`?K4S)EUr
zd4XW+6|rB$n6iw=v#4-`M97Ih{$R=d*H`!KS2t)+aJ4Ur*An<PH|=FNF<GZPY|Gtr
z6h9~hAcHmZ?!rB5{N9p#OG^Rdl?BLgIx9T`hQ6?jErxIE?+nODAY_sO`7dZFpx!Y(
zA%}G0C`;KD6vZLEMt=Bp;#MxB>*NV2%yj$-d1g<%%BkE7Wa3xkkyH7V#q3|KNdP?;
zRyvgj)~$S4>rTQd5D#I-6Td6J3J)nI<BOGj98~@ZozyCF9O4O8?F5wT4%z$DA*!}p
z6TeY10c{$uDW7>&{m`OB)sGt|z>hoRQy|8q{&W2<xd%J$lD!Q)8*cTVS$M<V1`?+i
zY`?%XjqPr~3k9{H&A8E>5d&D#eM!6Hjc<~IW!M8cY$}kcE*GK{pO5R^&CM<*VZ>Rl
zshup9O1F2oijypx<xgr?Kv{8ZXS@*WaHXkRQ^DFD2`Dzbid&WwB+kQH9bP{e@)4FI
zC<tgQA0)$F9h!YHKN$8JQ$B6r!G`u1pcU1pJdjXrGHT38Q80d>olzo`i5HXue2;=b
zB6*yZJEmf^4Z%(MXqair#-Bm*KAbH-1Vg+A?a(zEP={K?`p>i1XbpN6*cF(m(Tmo2
zZHcb4L$-Tuln>O!I0luB^OEgDJ;u5b$9wxpHk)w<WtoAj#z|3>%E*y~MK*kE#5>@E
zK&=!W8XpbfH3b;eLEyJRe1zszg)Jfy@Bt;LpYkF$!1KWBIF@Ze1lGT;z@n?}v~5=Q
zn&J|y({?f#3e*a7xBmFFY;K*B&8<1&>{S_}Q_&}H*)jb(&b4n*pC%Cf*;_Ww1$66;
rvT6|0m(J`5#CZlzp1pDkBO>!A$aHXdny4?ZZX_y2Ks#20nxFkYl?Fvp

literal 1769
zcmaJ>OK;mo5Z(u0vSnFuQ`@}+%8@8yoeLO6+PElkF^V`w0RqLA)^2RZ6iM%{kVK$*
zkxvDB=`{(E9Q_;mPxjhVZaoKm%}|mbN)Q5^<;)Iuzxn2IxVE-J;Q8y<KYrc|2>BD0
z>yHP@eR$0-2uUQ($&e;=$Pz|TXE`5wiPwDd+#d!>K*{$+deT29(pPlKlTZc+Bo5!f
z2_$BYfAj4F*GZ3z)#<<vl|3nCOkMYp8kAZ-ln<@asVz0wZh!Z@QaT%|!ah<}X)-Xs
z7~nbAA0L$a@R}14iX>E$gdGyal_%*gQ9i7!S-Iq|ScA<=0u{neBm=O7GCKFBG-=Ij
zip$n3E?4AgV_i|J;MWGfHQ71$lD1rjc)G6hgDwZkn5;N{oSIX&F0?uuWm<_*B~z>1
zim+f8MLJXvck5DdotusW4!{==elvI<z-zi7YE~0LY6=n}J0KTyKV~|F9UXy)x$}(5
zpXe4^Fq;=dufg(O^bd{Fraw&eAS<4wR+mR<e@~fHTUPxa4-X#q%{VjTv`UNPVR}=^
z3agGG4_R6C5qQ7447Q1Cr+VQcA+jQ~LbTyJgQY@fK*w7*dD&TbT>uBVNwUbK`&?b-
z7I?c%?lKh=4sEEw<1u`_3Li~?7hL1T`WA|fg|*qz9Z=nd9u)%9lPfWYkAxbemjvUx
zOE^FDj``K$F3`%3bn!v5K7mkw1{ci$VMb=C*3D^Fi6^Cou(9H|VP^s9&Jv_0SE!<m
zO9n+YZ<HqX8?dkxpqppJ{SF@%>gNr8OQv+fEwjAlQ#z%4<R?4vYUq+J@)CM^W`9Xu
z^NC;c+WUe`f|@+_>Y!$l|HdXEXg+v)HA=q@z}KHdb*N8ZC(ysxu#TpblA64U@UOQp
zCC;|d3jV=shI?n*n8rBVe}~MCd9UBon3i$7H%}5|toNSw#;d)1_j*V{rDWW4UY;52
z){m7HX`av7GtSpgzRK}j6?zlSX}Y5659e1J>R8_fYuuU@%NBZIu_UWACJhv$N!klq
z3#pzvuS&ITQV+ca_b1U&YLv*!<K<+AbI3h7(cA$+{5I{<O&U>;GRpo9yiK|ST0q%<
z0UvKJC3yb(e!Pa=gp)!Dm>XhP$`MqpaBU&ZMrl6Z@s7$ehe0FKq9|?Cod%pZ%u>A$
zmuqYvjRUa>dd3HKj=qbcDZ(p(O`@?*aE>(S5oyG_9^-)hpHA4Ul>Oalq2BoJ$C2ad
z(LiGtHTStMuaA+PYm;MV!K%C}Rz%~z`otfLQLyvT0Wk{>L4Pb77wyiN`x<M@pj(%<
HY1{iB7#Y6%

diff --git a/sziszapangma/integration/task/gold_transcript_task.py b/sziszapangma/integration/task/gold_transcript_task.py
new file mode 100644
index 0000000..d4cc6ba
--- /dev/null
+++ b/sziszapangma/integration/task/gold_transcript_task.py
@@ -0,0 +1,35 @@
+from sziszapangma.integration.gold_transcript_processor import GoldTranscriptProcessor
+from sziszapangma.integration.repository.experiment_repository import ExperimentRepository
+from sziszapangma.integration.task.processing_task import ProcessingTask
+from sziszapangma.model.relation_manager import RelationManager
+
+
+class GoldTranscriptTask(ProcessingTask):
+    _gold_transcript_processor: GoldTranscriptProcessor
+    _gold_transcript_property_name: str
+
+    def __init__(
+        self,
+        task_name: str,
+        gold_transcript_processor: GoldTranscriptProcessor,
+        gold_transcript_property_name: str,
+        require_update: bool,
+    ):
+        super().__init__(task_name, require_update)
+        self._gold_transcript_processor = gold_transcript_processor
+        self._gold_transcript_property_name = gold_transcript_property_name
+
+    def skip_for_record(self, record_id: str, experiment_repository: ExperimentRepository) -> bool:
+        return (
+            experiment_repository.get_property_for_key(
+                record_id, self._gold_transcript_property_name
+            )
+            is not None
+        )
+
+    def run_single_process(self, record_id: str, experiment_repository: ExperimentRepository, relation_manager: RelationManager,):
+        experiment_repository.update_property_for_key(
+            record_id,
+            self._gold_transcript_property_name,
+            self._gold_transcript_processor.get_gold_transcript(record_id),
+        )
-- 
GitLab