«Это 13-й день моего участия в ноябрьском испытании обновлений. Подробную информацию об этом событии см.:Вызов последнего обновления 2021 г."
Мастер ведет дверь
【ECAI 2020.09.04】Встраивание графов знаний: от теории к практикевоооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо
1. Теория КГЭ
1.1 Введение
- Введение, связанное с KG
- Введение в CWA и OWA: предположения о закрытом и открытом мире
- Основные задачи KG на ML: предсказание соединения/тройная классификация (акцент), совместная классификация узлов/кластеризация ссылок, сопоставление сущностей
- Сосредоточьтесь на [предсказание соединения (задача поиска информации — задача сортировки), тройная классификация (задача классификации — задача бинарной классификации)]
- Реляционный метод обучения в традиционном режиме: на основе ограничений правил, на основе графовых моделей (CRF, PRM, RMN, RDN) Недостатком является то, что размер метода KG не дифференцируем, а мощность модели ограничена.
- Опираясь на идею обучения представлению, методы обучения отношениям, основанные на обучении представлению графа: представление узлов (PRA, LINE, DeepWalk, node2vec), нейронные сети графов (GNN, GCN, сети внимания графов), встраивания графов знаний (TransE, DistMult, ComplEX, ConvE)
- Краткий обзор опыта KGE
1.2 KGE model
- Общая структура (оптимизатор, уровень ранжирования, функция оценки, функция потерь, отрицательная выборка)
- Функция подсчета очков
- Функции оценки на основе перевода Модель перевода {TransE, RotatE}
- Функции оценки на основе факторизации {RESCAL, DistMult, ComplEx (комплексное пространство)} модель факторизации
- Deeper Scoring Functions (ConvE, ConvKB) глубокие модели
- Другие последние модели (HolE, SimpleE, QuatE, MurP, ...)
- функция потерь
- Функция потери пары интервал-шарнир Hing Loss (из мягкого интервала SVM)
- Отрицательная выборка — функция правдоподобия/перекрестная энтропия
- Двоичная перекрестная энтропия
- Функция состязательных потерь
- ...
- метод регуляризации
- Л1, Л2, Л3
- Dropout(ConvE)
- метод инициализации
- Случайное (равномерное, нормальное) инициализируется различными функциями распределения.
- Glorot
- отрицательная выборка
- Локальное предположение ClosedWorld
- Он предполагает, что отношение уникально, выбирая разные s и o как неправильные (вырожденные) объекты.
- Метод: Равномерная выборка (случайная), Completeset (полный набор), 1-n подсчет (партия)
- Шаги обучения и оптимизатор
- Оптимизатор: SGD (Адам, ...)
- Взаимные тройки
- выбор модели
- поиск по сетке
- случайный поиск
- Квази-поиск + байесовский
1.3 Оценка и оценка
- Evaluation Metrics
- Чем меньше средний ранг (MR), тем лучше
- Чем больше средний обратный ранг (MRR), тем лучше
- Hits@N чем больше, тем лучше
- Benchmark Datasets
- FB15K - 237
- WNI18RR
- YAGO3-10
- SOTA Results
- ...
1.4 Продвинутые темы KGE
- Калибровка
- В основном используется в сценариях, требующих высокой интерпретируемости модели, таких как открытие лекарств, прогнозирование белков и контроль финансовых рисков.
- Мультимодальные графики знаний
- Графики временных знаний
- Неопределенные графики знаний
- Надежность (безопасная ориентация, защита от возмущений)
- КГЭ и нейросимволическое мышление КГЭ и нейросимволическое мышление
- Нейронные средства доказательства теорем (NTP) Нейронные средства доказательства теорем
- Аналогия
- Ответ на сложные запросы Ответ на сложную проблему (Query2Vec использует вложения блочного типа)
1.5 Направление будущих исследований
- БОЛЕЕ ВЫРАЗИТЕЛЬНЫЕ МОДЕЛИ Более выразительные модели
- ПОДДЕРЖКА МУЛЬТИМОДАЛЬНОСТИ ПОДДЕРЖКА МУЛЬТИМОДАЛЬНОСТИ
- НАДЕЖНОСТЬ И ИНТЕРПРЕТИРУЕМОСТЬ Надежность и интерпретируемость
- ЛУЧШИЕ СТАНДАРТЫ Лучший эталон
- Помимо прогноз связи за пределы статуса существующих прогнозов ссылок
- НЕЙРОСИМВОЛИЧЕСКАЯ ИНТЕГРАЦИЯ
2. Приложение КГЭ
- Pharmaceutical Industry
- Human Resources
- Products
- Food & Beverage
3. Введение библиотеки зависимостей программного обеспечения KGE
- OpenKE
- AmpliGraph
- DGL-KE
4. Практика КГЭ
Используемое ПО: AmpliGraph среда python: python3.7 >= 3.7 Среда глубокого обучения: тензорный поток >= 1.15.2
5. Боевой код TransE
TransE — это новаторская работа KGE (2013), в которой используется идея «семантического перевода без деформации» из статьи word2vec, и перенос инвариантности перевода на тройку через ||h+ rt||==0 для определения отношений и векторного представления графа знаний. Многие последующие модели KGE были усовершенствованы на базе TrasnE.
Недостатком TransE является то, что он не может решать отношения «один ко многим» и «многие ко многим».
Как понять «один к одному», «один ко многим» и «многие ко многим»? На станции b есть подъем, который очень хорошо это объясняет.Ссылка на сайт
- Если просто рассматривать только h+r==t, то векторы наложниц Сыма И будут очень похожи, и возникнет ситуация, когда госпожа Чжан равна госпоже Фу.
- Рефлексивная связь (Цао Цао - Оценка - Цао Цао), тогда оценка равна 0. Когда (Цао Цао ценит Сыма И), это эквивалентно Цао Цао равно Сыма И. Конечно, в реальной итерации этого не будет. , потому что это похоже на реальную среду (Цао Цао оценивает Сыма И). Большинство примеров, поэтому (Цао Цао - Оценка - Цао Цао) будут рассматриваться как шум, чтобы повлиять на эффект модели.
Способ 1 легкийКГ
Введение в lightKG
- lightKG – это фреймворк для глубокого обучения на основе графов знаний, основанный на Pytorch и torchtext. Он охватывает некоторые простые алгоритмы в области графов знаний. Он легкий и простой и подходит для начинающих в области графов знаний.гитхаб-адрес
- При использовании сначала импортируйте модель алгоритма из lightKG, создайте соответствующий объект модели, затем вызовите метод обучения объекта модели для обучения модели и сохраните обученную модель; при тестировании сначала загрузите обученную модель, а затем протестируйте, с x Возьмем модель Y в каталоге в качестве примера:
from lightkg.x import Y # 导入算法模型
Ymodel = Y() # 创建模型对象
Ymodel.train(...) # 训练模型和保存
Ymodel.load(...) # 加载训练好的模型
Ymodel.test(...) # 测试模型
- Обзор метода:
TransE рассматривает отношение как передачу между сущностями, то есть: если выполняется тройка (головная сущность, связь, хвостовая сущность), то вектор головной сущностиhс вектором отношенияrСуммарный и хвостовой вектор объектаtблизко, иначе далеко.
детали миссии
- Знания в графах знаний обычно выражаются в виде троек (головной объект, отношение, хвостовой объект).
- Прогнозирование связи направлено на то, чтобы, учитывая любые два элемента в триплете, предсказать третий элемент, а именно (?, отношение, хвостовой объект), (головной объект, отношение,?) и (головной объект,?, хвостовой объект), in? Представляет прогнозируемые элементы, называемые прогнозированием головного объекта, прогнозированием хвостового объекта и прогнозированием отношения соответственно.
- набор данных:Набор данных прогнозирования ссылок из github, доступный по адресуздесьскачать. В каждой строке есть три поля, разделенные символом ",", которые представляют головной объект, связь и хвостовой объект соответственно. Пример данных выглядит следующим образом:
科学,包涵,自然、社会、思维等领域
科学,外文名,science
科学,拼音,kē xué
科学,中文名,科学
科学,解释,发现、积累的真理的运用与实践
требуемые зависимости
测试环境 Python 3.6.8 Pytorch 1.4.0
# 所需依赖---
torchtext>=0.4.0
tqdm>=4.28.1
torch>=1.0.0
pytorch_crf>=0.7.0
scikit_learn>=0.20.2
networkx>=2.2
revtok
jieba
regex
---------------
# 运行前需要按如下方式安装lightKG库
!pip install -i https://pypi.douban.com/simple/ lightKG。
ТрансЕ обучение
Основываясь на приведенных выше предположениях о переходе, функция оценки тройки дизайна TransE выглядит следующим образом:
готовые к использованию
Смоделируйте положительные тройки и соответствующие им отрицательные тройки в графе знаний на основе вышеуказанных принципов, подобно машинам опорных векторов, минимизируйте потери, основанные на марже, и сделайте оценку положительного примера как минимум на одну маржу выше, чем оценку отрицательный пример
в,
# 查看数据集
import pandas as pd
train = pd.read_csv('datasets/train.sample.csv',header=None)
train.head(20)
import os
from lightkg.krl import KRL
from lightkg.krl.config import DEFAULT_CONFIG
# 修改epoch,默认1000
DEFAULT_CONFIG['epoch']=10
# 数据路径
dataset_path = 'datasets/train.sample.csv'
model_type = 'TransE'
# 初始化实例
krl = KRL()
if not os.path.exists('./temp/models'):
os.makedirs('./temp/models')
# 训练
krl.train(dataset_path,
model_type=model_type,
dev_path=dataset_path,
save_path='./temp/models/LP_{}'.format(model_type))
предсказывать
# 读取 模型
krl.load(save_path='./temp/models/LP_{}'.format(model_type), model_type=model_type)
krl.test(dataset_path)
После прочтения модели вызовите соответствующие функции predict_head, predict_tail, predict_rel, чтобы предсказать сущности или отношения начала и окончания.
# 打印函数
def topk_print(l,name):
print("{}预测:".format(name))
for i in l:
print(i)
print()
# 头实体预测
head_pred = krl.predict_head(rel='外文名', tail='science', topk=3)
# 尾实体预测
tail_pred = krl.predict_tail(head='科学', rel='外文名', topk=3)
# 关系预测
relation_pred = krl.predict_rel(head='科学', tail='science', topk=3)
print("三元组:科学 - 外文名 - science \n")
topk_print(head_pred,"头实体")
topk_print(tail_pred,"尾实体")
topk_print(relation_pred,"关系")
Метод 2 Амплиграф
ECAI 2020 дает хорошее видеообъяснение и руководство по ноутбуку Jupyter.
Примечание: для амплиграфа требуется tensorflow 1.14.0 и выше.
ECAI_2020_KGE_Tutorial_Hands_on_Session.ipynb
Метод 3 dgl-ke (тренировка командной строки)
dgl-ke – это инструмент KGE, созданный Amazon. Он основан на фреймворке dgl. dgl теперь совместим с фреймворками глубокого обучения pytorch, mxnet и tensorflow, но в настоящее время dgl-ke совместим только с pytorch и может использоваться только на Системы Ubuntu или maxOS через командную строку Execute, вы можете повторно пройти обучение colab, в любом случае, просто выполните Embedding.
# 使用colab加载dgl-ke训练KGE
# 使用命令行创建data文件夹,手动或者request获取文件
# 参考https://github.com/MaastrichtU-IDS/KGRulEm/blob/7a696485f9506ba6af886b6cc86658a5fa6c696b/embeddings/Train_embeddings.ipynb
!mkdir my_task
# 处理自定义文件
import os
import numpy as np
import pandas as pd
triples_path = "./data/freebase-237-merged-and-remapped.csv"
df = pd.read_csv(triples_path, names=['sub', 'pred', 'obj'])
triples = df.values.tolist()
print(len(triples))
# Please make sure the output directory exist.
seed = np.arange(num_triples)
np.random.seed(666)
np.random.shuffle(seed)
train_cnt = int(num_triples * 0.9)
valid_cnt = int(num_triples * 0.05)
train_set = seed[:train_cnt]
train_set = train_set.tolist()
valid_set = seed[train_cnt:train_cnt+valid_cnt].tolist()
test_set = seed[train_cnt+valid_cnt:].tolist()
with open("./data/FB15K237_train.tsv", 'w+') as f:
for idx in train_set:
f.writelines("{}\t{}\t{}\n".format(triples[idx][0], triples[idx][1], triples[idx][2]))
with open("./data/FB15K237_valid.tsv", 'w+') as f:
for idx in valid_set:
f.writelines("{}\t{}\t{}\n".format(triples[idx][0], triples[idx][1], triples[idx][2]))
with open("./data/FB15K237_test.tsv", 'w+') as f:
for idx in test_set:
f.writelines("{}\t{}\t{}\n".format(triples[idx][0], triples[idx][1], triples[idx][2]))
# 使用命令行
!DGLBACKEND=pytorch dglke_train --dataset FB15K237 --data_path ./data --data_files FB15K237_train.tsv FB15K237_valid.tsv FB15K237_test.tsv --format 'raw_udd_hrt' --model_name TransE_l2 --dataset FB15K237 --batch_size 1000 \
--neg_sample_size 200 --hidden_dim 400 --gamma 19.9 --lr 0.25 --max_step 500 --log_interval 100 \
--batch_size_eval 16 -adv --regularization_coef 1.00E-09 --test --num_thread 1 --num_proc 8
Другие ссылки на реализацию кода
[1] Подробное объяснение бумаги TransE и воспроизведение кода
[2] Завершение графа знаний transE, набор данных FB15K-237 (реализация Python)
[3] Анализ базовой идеи кода технологии встраивания графа знаний
[4] [Примечания KG] 10. Встраивание сети знаний (встраивание KG)
НЛП новое, талант и обучение поверхностны, есть ошибки или несовершенства, прошу критиковать и исправлять! !