Skip to content

ololo123321/nlu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TODO:

  • если loss_coef по какому-то таску ровно ноль, то не учитывать скор по этому таску в усреднённом скоре

  • написать скрипты по обучению и инференсу на разных датасетах

  • положить некоторые ноутбуки под гит

  • инференс на спанах с перекрытиями

  • базовые тесты моделей (с замоканными экстракторами)

  • оценка качества end2end

  • train, validation, test в докерах

  • тесты функций из src.model.utils

  • качество мерить на уровне документов, а не кусочков.
    Пусть:

  • w - размер кусочка (в предложениях);

  • r(a, b) - отношение между сущностями a и b;

  • i - индекс предложения сущности a;

  • j - индекс предложения сущности b.
    Тогда в кусочках не будет таких r, что abs(i - j) >= w.

  • актуализировать папку bin

  • возможность создавать инстансы класса Example из сырого текста (без файлов .ann)

  • хранить в model_dir vocab.txt (для bpe токенизации)

  • feed_dict строить в зависимости от мода, который может принимать три значения: {"train", "valid", "test"}: "train" - очевидно, "valid" - нужны лейблы для лоса, но не нужны дропауты, "test" - истинные лейблы неизвестны, дропауты не нужны

  • - реалзиовать случай window > 1 в инференсе всех моделей (пока сделано только для BertForCoreferenceResolutionV2)

  • - фикс sent_candidates в src.data.preprocessing.split_example_v2 с учётом того, что разделение на предложения может проходить через токен

  • - сделать возможность тестить разные типы аггрегации pieces -> word. сейчас есть только одна опция - pieces[0]. попробовать также max_pool(pieces), mean_pool(pieces). https://arxiv.org/pdf/2010.07522.pdf - здесь в сноске на второй странице авторы указали, что у них max-pooling лучше зашёл на ner+re, но насколько - хз. https://arxiv.org/pdf/1906.02437.pdf - здесь в таблице 8 представлено сравнение разных видов аггрегации (ссылка на эту статью взята из статьи выше).

  • класть под гит лучшие версии моделей

  • в каждой функции evaluate требуется фильтровать куски по длине. как сделать по-нормальному? мб всё же логику фильтрации кусков по длине вынести в batches_gen?

  • постпроцессинг предиктов модели BertForCoreferenceResolutionV2:

  • петли (head != dep);

  • циклы (удалять стрелки "->" в случае циклов);

  • несколько исходящих рёбер (использовать логиты);

  • несколько входящих рёбер (хз).

  • получение компонент связности (+ присовение атрибуты сущности id_chain)

  • метрики для coreference resolution (чистый код сохранения в conll)

  • нарисовать в draw.io процесс обучения и инференса (становится сложна все этапы в голове держать)

Идеи для улучшения модели разрешения кореференций:

  • увеличить ширину окна
  • увеличить куски до максимально возможного размера (512 bpe-pieces). тогда скорей всего придётся учить с аккумуляцией градиентов (в случае берта).
  • более умная кластеризация. например, если есть большая компонента связности, которую никак не ухватить моделью, и модель её разбила на k компонент, то можно их попробовать объединить по группам существительного. Например, интуитивно понятно, что компоненты {"Иван Иванов", "он"}, {"Ивану"} можно объединить в одну: {"Иван Иванов", "он", "Ивану"}.
  • markov clustering: https://micans.org/mcl/. наверное, это лучше пробовать на логитах модели, которая училась на таргете, описанном в пунтке ниже.
  • попробовать поменять таргет: label(i, j) = {1, если сущности i и j принадлежат одной компоненте, 0 - иначе}
  • linking pairs -> agglomerative clustering (https://arxiv.org/pdf/1606.01323.pdf)
  • dropout на BertForCoreferenceResolutionV3.w (ибо эта матрица содержит большинство обучаемых параметров)

About

some experiments with different nlp tasks

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published