«Это 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)
НЛП новое, талант и обучение поверхностны, есть ошибки или несовершенства, прошу критиковать и исправлять! !