есть модели NER, которые вытягивают три типа гипотетических сущностей (в реальности у меня другие сущности): авто, самокаты и велосипеды. Я прошелся этими моделями по текстам и назначил каждому тексту класс в зависимости от того, какой тип сущности наиболее упоминаем, e.g. есть тексты, где больше всего говорят о специфичных моделях велосипедов, значит этот текст имеет класс велосипед и т.п.
Теперь же я хочу научиться выделять значимые кластеры внутри классов, e.g. в классе авто найти, например, кластер текстов, где упоминаются спорткары или в классе велосипедов найти кластер про шоссейники. Для этого я хочу сделать как это делалось тут или тут, используя Сиамские сети. Основной вопрос это как сформировать датасет, чтобы вектора текстов из encoder Сиамской сети после тренировки формировали кластеры лучше всего?
Сейчас пока что я думаю частично формировать датасет типа anchor-positive-negative как-то так: внутри каждого класса мэтчить пары текстов anchor-positive по наибольшему совпадению именнованных сущностей, которые я выделил на стадии NER разметки, то есть два текста с такими сущностями {порш, бугатти, мазерати, лада, седан} и {порш, ламборджини, мазерати} станут парой anchor-positive. А что стоит брать в negative? Текст из другого класса или текст из того-же класса но где нет оверлэпов? Также если я использовал тексты в anchor-positive их можно задействовать для создания других пар с другими текстами?
про NER+metric learning это довольно интересная идея, которая мне тоже как-то приходила в голову и которую я потом видел уже реализованной в этой статье у Микрософта https://openreview.net/forum?id=9EAQVEINuum , но все нет времени проверить. в целом чем более разнообразные negative будут тем лучше, поэтому ответы на вопросы - и из другого класса, и с оверлэпами. и можно использовать пары anchor-positive для создания других пар, там имхо в целом логика следующая , задача чтобы семантически сущности positive попали в кластер к anchors, таким образом в жадном случае надо показать combinations(anchor+positives, 2) пар, что конечно нереально, поэтому нужно выбирать такие edge кейсы,после изучения которых сетке, много других пар показывать не надо. поэтому в целом задача по каким-то признакам сгруппировать(как в блокинге в entity resolutions, это если вы знакомы с ER) , и в этих группках найти такие кейсы, которые заведомо не матчи. поскольку тут NER, то я бы сначала запустил обычную модель, сделал бы error analysis , классифицировал типы ошибок и исходя из них, делал бы такие кейсы. например подозреваю что overlap будет в меньшей степени иметь значение, скорее всего стоит подумать про контекст (т.е. есть подозрение что сиамская сетка обученная на понимание схожести description и entity аля entity-linking , будет лучше работать - но надо проверять, эксперементировать)
Обсуждают сегодня