신경 임베딩을 사용한 지식 그래프 추론
지식 그래프란 무엇입니까?
간단히 말해서, 지식 그래프는 두 개의 엔터티와 관계(e1, r, e2)의 형태로 된 사실의 모음입니다. 예를 들어, "톰 크루즈가 미션 임파서블에서 연기했다"라는 개념의 표현은 다음과 같이 표현됩니다.
('톰 크루즈', 'acted_in', '미션 임파서블')
사진 크레디트: 미션 임파서블
다음은 영화, 장르 및 배우를 나타낼 수 있는 지식 그래프의 예입니다.
장르, 영화, 배우 지식 그래프
링크 추론
이제 지식 그래프가 있으므로 데이터를 보강하고 존재해야 하는 새로운 관계를 예측할 수 있습니다. 위의 지식 그래프에서 우리는 장르와 영화, 영화와 배우의 관계를 인코딩합니다. 위의 지식 그래프를 가늘게 뜨고 보면 배우가 일반적으로 같은 장르의 영화에 출연한다는 것을 학습할 수 있는 모델을 그럴듯하게 상상할 수 있습니다. Tom Cruise는 보통 액션 영화에 출연하고 Ben Stiller는 보통 코미디에 출연합니다.
위의 지식 그래프에서 Ben Stiller와 Tropic Thunder 사이에 링크가 있어야 합니다. (Ben Stiller는 Tropic Thunder에서 연기했습니다). 또한 각 배우가 연기하는 경향이 있는 장르 유형을 추론할 수 있어야 합니다. Tom Cruise는 액션 영화에서 연기하는 경향이 있는 반면 Jack Black과 Ben Stiller는 코미디에 출연하는 경향이 있습니다. 이 정보에서 우리는 Ben Stiller와 Tropic Thunder 사이에 'acted_in' 관계가 있을 가능성이 있음을 추론할 수 있어야 합니다.
학습
이 정보를 추론하기 위해 어떤 학습 알고리즘을 사용할 수 있습니까? word embeddings이 어떻게 훈련되었는지 기억하십시오. 여기서도 비슷한 전략을 적용할 수 있습니다. 각 엔터티 및 각 관계 유형에 대한 벡터 임베딩을 생성하고 다음과 같이 임베딩을 훈련할 수 있습니다.
다음과 같은 적절한 임베딩 세트를 상상할 수 있습니다.
이 경우 벡터 Ben Stiller + 'acted_in'에 가장 가까운 영화는 dodgeball이지만 두 번째로 가까운 영화는 Tropic Thunder입니다.
사진 제공: 피구
모델 교육에 관해서는 존재하지 않는 관계의 점수 사이의 차이를 최대화하려고 시도할 수 있습니다. 예를 들어 관계(Tom Cruise, is_genre, Ben Stiller)와 다음과 같은 관계(Ben Stiller, ' acted_in', Dodgeball), 네거티브 샘플링이라고 합니다. 이는 단어 벡터가 훈련되는 방식이기도 합니다. 구체적으로:
구체적으로 이것은 양수 점수가 음수 점수보다 약간의 MARGIN 금액만큼 낮아지도록 장려합니다. 예를 들어 가능한 솔루션은 다음과 같습니다.
positive = 0
negative = MARGIN
loss = positive - negative + MARGIN = 0
구축하자
나는 이것을 PyTorch와 posted the code here에서 만들었습니다. 그러나 교육을 보다 안정적으로 만드는 데 도움이 되는 구현의 더 흥미로운 측면 중 일부를 지적하겠습니다.
네거티브 샘플링
네거티브 샘플링의 목표는 잘못된 사실을 생성하는 것입니다. 예를 들어(“Ben Stiller”, 'acted_in', “Oblivion”). 내 의사 코드는 다음과 같습니다
def generate_negative_sample():
while (entity_1, relation, entity_2) in graph:
entity_1 = random_entity()
relation = random_relation()
entity_2 = random_entity()
올바른 사실의 수에 비해 부정적인 샘플이 과도하게 샘플링되었을 때 학습이 더 안정적이라는 것을 알았습니다.
def train(fact, embedding_model, optimizer):
# Oversample negative entries
avg_loss = 0
for i in range(40):
embedding_model.zero_grad()
loss = embedding_model(fact)
loss.backward()
optimizer.step()
avg_loss += loss.data[0]
return avg_loss / 10
트레이닝 손실
이 모델의 목표는 벤 스틸러가 미션 임파서블이나 오블리비언보다 트로픽 썬더에서 활동했을 가능성이 더 높다는 것을 추론하는 것입니다. 결과는 다음과 같습니다(저희 공식에 따르면 점수가 낮을수록 가능성이 높음을 기억하십시오).
score(('ben stiller', 'acted_in', 'dodgeball')) = 1.5305
score(('ben stiller', 'acted_in', 'tropic thunder')) = 2.5801
score(('ben stiller', 'acted_in', 'mission impossible')) = 3.4038
score(('ben stiller', 'acted_in', 'oblivion')) = 3.3958
그래서 이 모델은 Ben Stiller가 액션 영화보다 코미디인 Tropic Thunder에 출연했을 가능성이 높다는 것을 알아낼 수 있었고 그래프의 링크를 통해 모델링하여 이를 학습할 수 있었습니다.
사진 제공: 망각
Reference
이 문제에 관하여(신경 임베딩을 사용한 지식 그래프 추론), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mage_ai/knowledge-graph-inference-with-neural-embeddings-5d59텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)