Простая в использовании среда редактирования знаний для больших языковых моделей.
Установка • Краткое руководство • Документ • Бумага • Демо • Тестирование • Участники • Слайды • Видео • Рекомендовано AK
23 октября 2024 г. EasyEdit объединяет методы ограниченного декодирования, от рулевого редактирования до уменьшения галлюцинаций в LLM и MLLM, а подробная информация доступна в DoLa и DeCo.
26 сентября 2024 г., ?? Наша статья «WISE: переосмысление памяти знаний для редактирования больших языковых моделей на протяжении всей жизни» была принята NeurIPS 2024 .
20 сентября 2024 г., ?? наши статьи: «Механизмы знаний в больших языковых моделях: обзор и перспективы» и «Редактирование концептуальных знаний для больших языковых моделей» были приняты EMNLP 2024 Findings .
29 июля 2024 г. в EasyEdit добавлен новый алгоритм редактирования модели EMMET, который обобщает ROME для пакетной настройки. По сути, это позволяет выполнять пакетное редактирование с использованием функции потери ROME.
23 июля 2024 г. мы выпускаем новую статью: «Механизмы знаний в больших языковых моделях: обзор и перспективы», в которой рассматривается, как знания приобретаются, используются и развиваются в больших языковых моделях. Этот опрос может предоставить фундаментальные механизмы для точного и эффективного манипулирования (редактирования) знаниями в LLM.
04.06.2024, ?? EasyEdit Paper был принят на демонстрационную программу системы ACL 2024 .
3 июня 2024 г. мы выпустили документ под названием «WISE: переосмысление памяти знаний для непрерывного редактирования моделей больших языковых моделей» , а также представили новую задачу редактирования: непрерывное редактирование знаний и соответствующий метод непрерывного редактирования под названием WISE.
24 апреля 2024 г. компания EasyEdit объявила о поддержке метода ROME для Llama3-8B . Пользователям рекомендуется обновить пакет трансформеров до версии 4.40.0.
29 марта 2024 г. EasyEdit представила поддержку отката для GRACE . Подробное описание см. в документации EasyEdit. Будущие обновления постепенно будут включать поддержку отката для других методов.
22 марта 2024 г. была выпущена новая статья под названием «Детоксикация больших языковых моделей посредством редактирования знаний» , а также новый набор данных под названием SafeEdit и новый метод детоксикации под названием DINM.
12 марта 2024 г. был выпущен еще один документ под названием «Редактирование концептуальных знаний для больших языковых моделей» , в котором представлен новый набор данных под названием ConceptEdit.
01 марта 2024 г. в EasyEdit добавлена поддержка нового метода под названием FT-M . Этот метод включает в себя обучение определенного слоя MLP с использованием перекрестной энтропийной потери целевого ответа и маскировки исходного текста . Он превосходит реализацию FT-L в ROME. Автору выпуска №173 выражается благодарность за советы.
27 февраля 2024 г. в EasyEdit добавлена поддержка нового метода под названием InstructEdit, технические подробности которого представлены в документе «InstructEdit: редактирование знаний на основе инструкций для больших языковых моделей» .
Accelerate
.Комплексное исследование редактирования знаний для больших языковых моделей [бумага][тестовый показатель][код]
Учебное пособие по IJCAI 2024 Google Диск
Учебное пособие по COLING 2024 Google Диск
Учебное пособие по AAAI 2024 Google Диск
Учебное пособие по AACL 2023 [Google Диск] [Baidu Pan]
Идет демонстрация редактирования. GIF-файл создается Terminalizer.
Мы предоставляем удобный блокнот Jupyter! Это позволяет вам редактировать знания магистра права о президенте США, переключаясь с Байдена на Трампа и даже обратно на Байдена. Сюда входят такие методы, как WISE, AlphaEdit, AdaLoRA и редактирование на основе подсказок.
Развернутые модели по-прежнему могут совершать непредсказуемые ошибки. Например, LLM, как известно, галлюцинируют , увековечивают предвзятость и фактически распадаются , поэтому мы должны иметь возможность корректировать определенное поведение предварительно обученных моделей.
Редактирование знаний направлено на корректировку базовой модели.
Оценка работоспособности модели после однократного редактирования. Модель перезагружает исходные веса (например, LoRA отбрасывает веса адаптера) после однократного редактирования. Вы должны установить sequential_edit=False
Это требует последовательного редактирования , а оценка производится после применения всех обновлений знаний:
Он выполняет настройку параметров для sequential_edit=True
: README (подробнее).
Не влияя на поведение модели на несвязанных выборках, конечная цель — создать отредактированную модель.
Задача редактирования для подписей к изображениям и визуальных ответов на вопросы . ЧИТАЙТЕ
Предлагаемая задача представляет собой предварительную попытку отредактировать личности LLM, редактируя их мнения по конкретным темам, учитывая, что мнения человека могут отражать аспекты его личностных качеств. Мы опираемся на устоявшуюся теорию «Большой пятерки» в качестве основы для построения нашего набора данных и оценки личностных проявлений студентов-магистров. ЧИТАЙТЕ
Оценка
на основе логитов
На основе поколений
А для оценки Acc и TPEI вы можете скачать обученный классификатор отсюда.
Процесс редактирования знаний обычно влияет на прогнозы для широкого набора входных данных , которые тесно связаны с примером редактирования, называемым областью редактирования .
Успешное редактирование должно скорректировать поведение модели в области редактирования, сохраняя при этом несвязанные входные данные:
Reliability
: вероятность успеха редактирования с заданным дескриптором редактирования.Generalization
: вероятность успеха редактирования в пределах области редактирования.Locality
: изменяется ли вывод модели после редактирования несвязанных входных данных.Portability
: вероятность успеха редактирования для рассуждения/приложения (один переход, синоним, логическое обобщение).Efficiency
: потребление времени и памяти. EasyEdit — это пакет Python для редактирования больших языковых моделей (LLM), таких как GPT-J
, Llama
, GPT-NEO
, GPT2
, T5
(поддерживаются модели от 1B до 65B ), целью которого является эффективное изменение поведения LLM в пределах конкретной области без негативного влияния на производительность других входных данных. Он спроектирован так, чтобы его было легко использовать и легко расширять.
EasyEdit содержит унифицированную структуру для Editor , Method и Evaluate , соответственно представляющую сценарий редактирования, технику редактирования и метод оценки.
Каждый сценарий редактирования знаний состоит из трех компонентов:
Editor
: например, BaseEditor (редактор фактических знаний и генерации ) для LM, MultiModalEditor ( многомодальные знания ).Method
: конкретный используемый метод редактирования знаний (например, ROME , MEND , ..).Evaluate
: метрики для оценки эффективности редактирования знаний.Reliability
, Generalization
, Locality
, Portability
В настоящее время поддерживаются следующие методы редактирования знаний:
Примечание 1. Из-за ограниченной совместимости этого набора инструментов некоторые методы редактирования знаний, включая T-Patcher, KE, CaliNet, не поддерживаются.
Примечание 2. Аналогично, метод MALMEN поддерживается лишь частично по тем же причинам и будет продолжать совершенствоваться.
Вы можете выбрать различные методы редактирования в соответствии с вашими конкретными потребностями.
Метод | Т5 | ГПТ-2 | ГПТ-J | ГПТ-НЕО | ЛлаМА | Байчуань | ЧатGLM | СтажерLM | Квен | Мистраль |
---|---|---|---|---|---|---|---|---|---|---|
FT | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
АдаЛора | ✅ | ✅ | ||||||||
СЕРАК | ✅ | ✅ | ✅ | ✅ | ||||||
АЙК | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ИСПРАВИТЬ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
КН | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
РИМ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
р-РИМ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
МЭМИТ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
ЭММЕТ | ✅ | ✅ | ✅ | |||||||
МИЛОСТЬ | ✅ | ✅ | ✅ | |||||||
МЕЛО | ✅ | |||||||||
ПМЕТ | ✅ | ✅ | ||||||||
ИнструктироватьПравить | ✅ | ✅ | ||||||||
ДИНМ | ✅ | ✅ | ✅ | |||||||
МУДРЫЙ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||
АльфаПравить | ✅ | ✅ | ✅ |
❗️❗️ Если вы собираетесь использовать Мистраль, обновите библиотеку
transformers
до версии 4.34.0 вручную. Вы можете использовать следующий код:pip install transformers==4.34.0
.
Работа | Описание | Путь |
---|---|---|
ИнструктироватьПравить | InstructEdit: редактирование знаний на основе инструкций для больших языковых моделей | Быстрый старт |
ДИНМ | Детоксикация больших языковых моделей посредством редактирования знаний | Быстрый старт |
МУДРЫЙ | WISE: Переосмысление памяти знаний для непрерывного редактирования больших языковых моделей | Быстрый старт |
КонцепцияПравить | Редактирование концептуальных знаний для больших языковых моделей | Быстрый старт |
ММЕредактировать | Можем ли мы редактировать мультимодальные модели большого языка? | Быстрый старт |
ЛичностьПравить | Редактирование личности для больших языковых моделей | Быстрый старт |
БЫСТРЫЙ | Методы редактирования знаний на основе PROMPT | Быстрый старт |
Тест: KnowEdit [Обнимающее лицо][WiseModel][ModelScope]
❗️❗️ Следует отметить, что KnowEdit создан путем реорганизации и расширения существующих наборов данных, включая WikiBio , ZsRE , WikiData Counterfact , WikiData Recent , consent , Sanitation, чтобы провести комплексную оценку редактирования знаний. Особая благодарность создателям и сопровождающим этих наборов данных.
Обратите внимание, что Counterfact и WikiData Counterfact — это не один и тот же набор данных.
Задача | Вставка знаний | Модификация знаний | Стирание знаний | |||
---|---|---|---|---|---|---|
Наборы данных | Вики недавнее | ЗсРЕ | ВикиБио | Контрафакт WikiData | Согласие | Санитария |
Тип | Факт | Вопрос Ответ | Галлюцинация | Контрафакт | Настроение | Нежелательная информация |
# Тренироваться | 570 | 10 000 | 592 | 1455 | 14 390 | 80 |
# Тест | 1266 | 1301 | 1392 | 885 | 800 | 80 |
Мы предоставляем подробные сценарии , позволяющие пользователю легко использовать KnowEdit, см. примеры.
knowedit
├── WikiBio
│ ├── wikibio-test-all.json
│ └── wikibio-train-all.json
├── ZsRE
│ └── ZsRE-test-all.json
├── wiki_counterfact
│ ├── test_cf.json
│ └── train_cf.json
├── convsent
│ ├── blender_test.json
│ ├── blender_train.json
│ └── blender_val.json
├── convsent
│ ├── trivia_qa_test.json
│ └── trivia_qa_train.json
└── wiki_recent
├── recent_test.json
└── recent_train.json
набор данных | ОбниматьЛицо | Мудраямодель | МодельОбъем | Описание |
---|---|---|---|---|
CЗнатьПравить | [Обнимающее лицо] | [МудраяМодель] | [Объект модели] | набор данных для редактирования знаний китайского языка |
CKnowEdit — это высококачественный набор данных на китайском языке для редактирования знаний, который в значительной степени характеризуется китайским языком, причем все данные получены из китайских баз знаний. Он тщательно разработан для более глубокого понимания нюансов и проблем, присущих пониманию китайского языка нынешними студентами LLM, предоставляя надежный ресурс для совершенствования знаний, специфичных для китайского языка, в рамках LLM.
Описания полей для данных в CKnowEdit следующие:
"prompt" : query inputed to the model ( str )
"target_old" : the incorrect response previously generated by the model ( str )
"target_new" : the accurate answer of the prompt ( str )
"portability_prompt" : new prompts related to the target knowledge ( list or None )
"portability_answer" : accurate answers corresponding to the portability_prompt ( list or None )
"locality_prompt" : new prompts unrelated to the target knowledge ( list or None )
"locality_answer" : accurate answers corresponding to the locality_prompt ( list or None )
"rephrase" : alternative ways to phrase the original prompt ( list )
CknowEdit
├── Chinese Literary Knowledge
│ ├── Ancient Poetry
│ ├── Proverbs
│ └── Idioms
├── Chinese Linguistic Knowledge
│ ├── Phonetic Notation
│ └── Classical Chinese
├── Chinese Geographical Knowledge
└── Ruozhiba
набор данных | Гугл Диск | БайдуНетДиск | Описание |
---|---|---|---|
ЗсРЕ плюс | [Google Диск] | [БайдуНетДиск] | Набор данных «Вопрос-ответ» с использованием перефразирования вопросов |
Контрфакт плюс | [Google Диск] | [БайдуНетДиск] | Набор данных контрфакта с использованием замены Entity |
Мы предоставляем наборы данных zsre и контрфактов для проверки эффективности редактирования знаний. Вы можете скачать их здесь. [Google Диск], [BaiduNetDisk].
editing-data
├── counterfact
│ ├── counterfact-edit.json
│ ├── counterfact-train.json
│ └── counterfact-val.json
├── locality
│ ├── Commonsense Task
│ │ ├── piqa_valid-labels.lst
│ │ └── piqa_valid.jsonl
│ ├── Distracting Neighbor
│ │ └── counterfact_distracting_neighbor.json
│ └── Other Attribution
│ └── counterfact_other_attribution.json
├── portability
│ ├── Inverse Relation
│ │ └── zsre_inverse_relation.json
│ ├── One Hop
│ │ ├── counterfact_portability_gpt4.json
│ │ └── zsre_mend_eval_portability_gpt4.json
│ └── Subject Replace
│ ├── counterfact_subject_replace.json
│ └── zsre_subject_replace.json
└── zsre
├── zsre_mend_eval.json
├── zsre_mend_train_10000.json
└── zsre_mend_train.json
spouse
набор данных | Гугл Диск | Набор данных HuggingFace | Описание |
---|---|---|---|
КонцепцияПравить | [Google Диск] | [Набор данных HuggingFace] | набор данных для редактирования концептуальных знаний |
data
└──concept_data.json
├──final_gpt2_inter.json
├──final_gpt2_intra.json
├──final_gptj_inter.json
├──final_gptj_intra.json
├──final_llama2chat_inter.json
├──final_llama2chat_intra.json
├──final_mistral_inter.json
└──final_mistral_intra.json
Метрики оценки конкретной концепции
Instance Change
: фиксация тонкостей этих изменений на уровне экземпляра.Concept Consistency
: семантическое сходство сгенерированных определений понятий. набор данных | Гугл Диск | БайдуНетДиск | Описание |
---|---|---|---|
Э-ИК | [Google Диск] | [БайдуНетДиск] | набор данных для редактирования подписей к изображениям |
E-VQA | [Google Диск] | [БайдуНетДиск] | набор данных для редактирования визуальных ответов на вопросы |
editing-data
├── caption
│ ├── caption_train_edit.json
│ └── caption_eval_edit.json
├── locality
│ ├── NQ dataset
│ │ ├── train.json
│ │ └── validation.json
├── multimodal_locality
│ ├── OK-VQA dataset
│ │ ├── okvqa_loc.json
└── vqa
├── vqa_train.json
└── vqa_eval.json
набор данных | Набор данных HuggingFace | Описание |
---|---|---|
БезопасныйПравить | [Набор данных HuggingFace] | набор данных для детоксикации LLM |
data
└──SafeEdit_train.json
└──SafeEdit_val.json
└──SafeEdit_test.json
Конкретные показатели оценки детоксикации
Defense Duccess (DS)
: показатель успешной детоксикации отредактированного LLM для состязательного ввода (подсказка к атаке + вредный вопрос), который используется для модификации LLM.Defense Generalization (DG)
: показатель успешной детоксикации отредактированного LLM для вредоносных входных данных за пределами домена.General Performance
: побочные эффекты при выполнении несвязанных задач. Метод | Описание | ГПТ-2 | ЛлаМА |
---|---|---|---|
АЙК | Контекстное обучение (ICL) Править | [Колаб-gpt2] | [Колаб-лама] |
РИМ | Найдите и отредактируйте нейроны | [Колаб-gpt2] | [Колаб-лама] |
МЭМИТ | Найдите и отредактируйте нейроны | [Колаб-gpt2] | [Колаб-лама] |
Примечание. Используйте Python 3.9+ для EasyEdit. Чтобы начать, просто установите conda и запустите:
git clone https://github.com/zjunlp/EasyEdit.git
conda create -n EasyEdit python=3.9.7
...
pip install -r requirements.txt
Все наши результаты основаны на конфигурации по умолчанию.
Лама-2-7Б | чатглм2 | gpt-j-6b | gpt-xl | |
---|---|---|---|---|
FT | 60 ГБ | 58 ГБ | 55 ГБ | 7 ГБ |
СЕРАК | 42 ГБ | 32 ГБ | 31 ГБ | 10 ГБ |
АЙК | 52 ГБ | 38 ГБ | 38 ГБ | 10 ГБ |
ИСПРАВИТЬ | 46 ГБ | 37 ГБ | 37 ГБ | 13 ГБ |
КН | 42 ГБ | 39 ГБ | 40 ГБ | 12 ГБ |
РИМ | 31 ГБ | 29 ГБ | 27 ГБ | 10 ГБ |
МЭМИТ | 33 ГБ | 31 ГБ | 31 ГБ | 11 ГБ |
АдаЛора | 29 ГБ | 24 ГБ | 25 ГБ | 8 ГБ |
МИЛОСТЬ | 27 ГБ | 23 ГБ | 6 ГБ | |
МУДРЫЙ | 34 ГБ | 27 ГБ | 7 ГБ |
Редактирование больших языковых моделей (LLM) примерно за 5 секунд.
В следующем примере показано, как выполнять редактирование с помощью EasyEdit. Дополнительные примеры и руководства можно найти в примерах.
BaseEditor
— это класс для редактирования знаний языковой модальности. Вы можете выбрать подходящий метод редактирования в зависимости от ваших конкретных потребностей.
Благодаря модульности и гибкости EasyEdit
вы можете легко использовать его для редактирования модели.
Шаг 1: Определите PLM в качестве объекта для редактирования. Выберите PLM для редактирования. EasyEdit
поддерживает частичные модели (на данный момент T5
, GPTJ
, GPT-NEO
, LlaMA
), которые можно получить на HuggingFace. Соответствующий каталог файла конфигурации — hparams/YUOR_METHOD/YOUR_MODEL.YAML
, например hparams/MEND/gpt2-xl.yaml
. Установите соответствующее model_name
, чтобы выбрать объект для редактирования знаний.
model_name : gpt2-xl
model_class : GPT2LMHeadModel
tokenizer_class : GPT2Tokenizer
tokenizer_name : gpt2-xl
model_parallel : false # true for multi-GPU editing
Шаг 2. Выберите подходящий метод редактирования знаний.
## In this case, we use MEND method, so you should import `MENDHyperParams`
from easyeditor import MENDHyperParams
## Loading config from hparams/MEMIT/gpt2-xl.yaml
hparams = MENDHyperParams . from_hparams ( './hparams/MEND/gpt2-xl' )
Шаг 3. Укажите дескриптор редактирования и цель редактирования.
## edit descriptor: prompt that you want to edit
prompts = [
'What university did Watts Humphrey attend?' ,
'Which family does Ramalinaceae belong to' ,
'What role does Denny Herzig play in football?'
]
## You can set `ground_truth` to None !!!(or set to original output)
ground_truth = [ 'Illinois Institute of Technology' , 'Lecanorales' , 'defender' ]
## edit target: expected output
target_new = [ 'University of Michigan' , 'Lamiinae' , 'winger' ]
Шаг 4. Объедините их в BaseEditor
EasyEdit
предоставляет простой и унифицированный способ инициализации Editor
, например,huggingface: from_hparams .
## Construct Language Model Editor
editor = BaseEditor . from_hparams ( hparams )
Шаг 5. Предоставьте данные для оценки. Обратите внимание, что данные о переносимости и местоположении не являются обязательными (установите значение «Нет» только для базовой оценки успешности редактирования). Формат данных для обоих — dict , для каждого измерения измерения вам необходимо предоставить соответствующее приглашение и соответствующую основную информацию. Вот пример данных:
locality_inputs = {
'neighborhood' :{
'prompt' : [ 'Joseph Fischhof, the' , 'Larry Bird is a professional' , 'In Forssa, they understand' ],
'ground_truth' : [ 'piano' , 'basketball' , 'Finnish' ]
},
'distracting' : {
'prompt' : [ 'Ray Charles, the violin Hauschka plays the instrument' , 'Grant Hill is a professional soccer Magic Johnson is a professional' , 'The law in Ikaalinen declares the language Swedish In Loviisa, the language spoken is' ],
'ground_truth' : [ 'piano' , 'basketball' , 'Finnish' ]
}
}
В приведенном выше примере мы оцениваем эффективность методов редактирования «соседство» и «отвлечение».
Шаг 6: Редактирование и оценка завершены! Мы можем провести редактирование и оценку вашей модели для редактирования. Функция edit
вернет ряд показателей, связанных с процессом редактирования, а также измененные веса модели. [ sequential_edit=True
для непрерывного редактирования]
metrics , edited_model , _ = editor . edit (
prompts = prompts ,
ground_truth = ground_truth ,
target_new = target_new ,
locality_inputs = locality_inputs ,
sequential_edit = False # True: start continuous editing ✈️
)
## metrics: edit success, rephrase success, locality e.g.
## edited_model: post-edit model
Максимальная длина входных данных для EasyEdit — 512. Если эта длина будет превышена, вы столкнетесь с ошибкой «Ошибка CUDA: сработало подтверждение на стороне устройства». Вы можете изменить максимальную длину в следующем файле: ССЫЛКА.
Шаг 7: Откат . Если при последовательном редактировании вас не устраивает результат одного из ваших изменений и вы не хотите потерять предыдущие изменения, вы можете использовать функцию отката, чтобы отменить предыдущее редактирование. В настоящее время мы поддерживаем только метод GRACE. Все, что вам нужно сделать, это одна строка кода, используя клавишу edit_key, чтобы отменить редактирование.
editor.rolllback('edit_key')
В EasyEdit мы по умолчанию используем target_new в качестве ключа редактирования.
Мы указываем возвращаемые метрики в формате dict
, включая оценки прогнозов модели до и после редактирования. Для каждого редактирования будут включены следующие показатели:
rewrite_acc
rephrase_acc
locality
portablility