170 похожих чатов

Здравствуйте. Подскажите, пожалуйста, есть словарь на английском языке с записями

(именованные сущности и словосочетания) + контекст употребления их в тексте ( предложения). В словаре нужно автоматически провести группировку одинаковых понятий, т.к. много дубликатов. Например, запись IT и information technologies, K. Smith c Kevin J Smith и т.п.
Как можно подойти к данной задаче? Может быть есть какие то предобученные модели, которые определяют "одинаковость" понятий написанных разным образом?

7 ответов

10 просмотров

А написанных разным образом - там просто порядок слов может быть другим или используются синонимы и тд?

таких моделей много. например, BERT. берете 2 вектора, считаете косинусное расстояние, чем ближе к 1 - тем похоже. есть модели "проще" bert. https://fasttext.cc/docs/en/unsupervised-tutorial.html

надо изучить данные и понять природу таких дубликатов, что превалирует, есть ли misspelling и т.п. если в общем, то задача сводится к задаче поиска похожего кандидата, у вас поскольку не только семантика , но лексическое сходство, то возможно и голый word2vec/fasttext/bert** могут даже после тренировки показать не самое лучшее качество (надо еще вам подумать а как вы качество мерять будете. условно говоря IT может расшифровываться и в какое-то другое словосочетание), поэтому можно скомбинировать лексическое сравнение и семантическое простым : (1-lambda)*lexical_score+lambda*semantic_score, для скоринга кандидатов и их сортировки , чтобы взять наиболее релевантную сущность. лексическое сходство , можно считать любым удобным вам способом, надо подобрать, да либо как выше написал через fuzzywuzzy , на уровне токенов (есть кстати более быстрый аналог rapidfuzzy) если миспеллингов почти нет, либо на уровне нграмм (jaccard-ом ли, либо tf-idf/bm25, последний особенно имеет смысл в случае длинных текстов), либо эвристиками какими-то. скажем левенштейн на уровне char не имеет смысла уже, поскольку K. Smith c Kevin J Smith даст скор большой и будет куча FP между 0 и этим distance. возможно стоит сначала сделать alignment и считать скор по токенам отдельно. (в идеале вообще посчитать EMD, но у вас эмбеддингов нет для этого подходящих) второй момент , это сокращение времени поиска и скоринга, если таких кандидатов много, то pairwise нереально посчитать , нужно сначала делать либо индекс либо блокинг. первое делается через эмбеддинги и потом KNN/ANN (faiss-ом например, получаете топ 100, потом эти 100 скорите и получаете своего лучшего кандидата). также для каких-то терминов или синонимов можно делать query expansion , например для information technologies добавлять аббревиатуру IT (либо синонимы взять из wikidata, но надо делать аккуратно там много шума, либо через wordnet) PS** на самом деле они вполне могут сработать если ебмеддинги еще дообучить на metric learning , какой-нибудь сиамской сетью или любым другим SSL

Если у вас есть контексты с этими сущностями, можно пробить их по корефу Даст кластеры с наименованиями, относящимся к одной и той же сущности Надо установить пакет pip install allennlp from allennlp.predictors.predictor import Predictor import allennlp_models.tagging predictor = Predictor.from_path("https://storage.googleapis.com/allennlp-public-models/coref-spanbert-large-2021.03.10.tar.gz") predictor.predict( document="Текст, текст, еще текст" )

Кстати, сделал еще (выше в чате уже была одна) репу для кореферентности на русском, модель должна работать намного лучше, учитывая, что данных при обучении было в ~10 раз больше: https://github.com/gleb-skobinsky/RuCo-BERT. +теперь никаких замен исходников, кринж почищен )

vpodgorsky
Для onnx не конвертили случайно?

Не конвертил Даже не знал что так можно

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта