Граф знаний, встраивающий технологические практики и данные

искусственный интеллект глубокое обучение

«Это 13-й день моего участия в ноябрьском испытании обновлений. Подробную информацию об этом событии см.:Вызов последнего обновления 2021 г."

Мастер ведет дверь

【ECAI 2020.09.04】Встраивание графов знаний: от теории к практикевоооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо

image.png

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 выглядит следующим образом:
f(h,r,t)=h+rtL1/L2f(h,r,t)=-{||\mathbf h +\mathbf r-\mathbf t ||}_{L_1/L_2}

готовые к использованиюL1L_1илиL2L_2Норма измеряет расстояние (в этом руководстве используетсяL1L_1норма). Функция оценки используется для измерения вероятности того, что тройка верна, чем выше оценка, тем больше вероятность того, что тройка действительна. Следовательно, положительные тройки имеют высокие баллы, а отрицательные тройки — низкие. Из-за относительно небольшого количества отношений отрицательные примеры получаются только заменой головных или хвостовых сущностей.

Смоделируйте положительные тройки и соответствующие им отрицательные тройки в графе знаний на основе вышеуказанных принципов, подобно машинам опорных векторов, минимизируйте потери, основанные на марже, и сделайте оценку положительного примера как минимум на одну маржу выше, чем оценку отрицательный примерγ\gamma,который:

L=(h,r,t)е (h',r,t')е'max(0,f(h,r,t)+γf(h',r,t'))L=\sum_{\left(h,r,t \right) \in \bigtriangleup}\ {\sum_{\left(h',r,t' \right) \in \bigtriangleup'}{\max \left(0, f\left(h, r, t \right) + \gamma-f\left(h', r, t' \right) \right)}}

в,\bigtriangleupмножество положительных троек в графе знаний,'\bigtriangleup'на основе\bigtriangleup, множество отрицательных троек, полученных заменой в нем головных или хвостовых сущностей положительных троек. Минимизация этой потери дает векторное представление сущностей и отношений.

# 查看数据集
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)

НЛП новое, талант и обучение поверхностны, есть ошибки или несовершенства, прошу критиковать и исправлять! !