五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

python算法學習雙曲嵌入論文代碼實現(xiàn)數(shù)據(jù)集介紹

發(fā)布日期:2021-12-14 07:09 | 文章來源:源碼中國

學習的文章:

Poincaré Embeddings for Learning Hierarchical Representations

主要參考的代碼:

poincare_embeddings

gensim – Topic Modelling in Python - poincare.py

由于有些代碼難以運行,有些比較難讀(封裝程度非常高)甚至有些代碼寫得存在一些問題。因此我們重新按照論文的設置,利用Python重現(xiàn)了對應的方法,并成功運行,同時進行繪圖展示。

1. 目標

我們有一些層級結(jié)構(gòu)的網(wǎng)絡類型數(shù)據(jù),如何能夠根據(jù)每個詞的上下結(jié)構(gòu)路徑,將每個詞語能夠用一個向量來替換,換句話說,就是將詞映射為實數(shù)域中的向量(詞嵌入,word embedding)。最簡單的想法是使用one-hot詞向量,其構(gòu)造起來很容易,但通常并不是一個好選擇。主要的原因是,one-hot詞向量無法準確表達不同詞之間的相似度,同時也不能刻畫詞語之間的層次結(jié)構(gòu)。而在另外的方法中,采用最多的是在歐式空間里進行嵌入(word2vec),這種方式的embedding可以有效表示出詞語間的相似性,但卻依舊難以刻畫出詞語之間的層次結(jié)構(gòu)。

這時候為了既能夠衡量詞與詞之間的相似性,又能衡量這種詞與詞之間的層次結(jié)構(gòu),引入了雙曲幾何的思想,在雙曲空間中進行嵌入。雙曲嵌入表征層級結(jié)構(gòu)的能力就要比歐氏空間嵌入的能力高得多,同時需要的維數(shù)卻更少。

Python 代碼依賴庫

為了能夠順利跑通后面的代碼,這里先展示出代碼需要依賴的庫:

import nltk
# nltk.download('wordnet') # 第一次運行需運行此命令,安裝wordnet數(shù)據(jù)集
from nltk.corpus import wordnet as wn
from math import *
import random
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
import networkx as nx

2. 數(shù)據(jù)集

訓練數(shù)據(jù)集采用wordnet中的數(shù)據(jù)進行實現(xiàn),相關的數(shù)據(jù)說明在上周的文檔中已經(jīng)進行了介紹,這里不再進行贅述。

由于整個的wordnet數(shù)據(jù)集比較大,為了測試代碼,我們只使用哺乳動物(mammal)及其相關的分支進行學習。首先我們看看數(shù)據(jù)集長什么樣。由于我們只需要用到層次結(jié)構(gòu)信息,因此我們只需將數(shù)據(jù)集里面每個哺乳動物相關名詞的子節(jié)點與父節(jié)點的關系進行讀取與構(gòu)建。

network = {} # 構(gòu)建層級網(wǎng)絡
last_level = 8 # 最深的層設置為8層
levelOfNode = {} # 數(shù)據(jù)的層級信息,0為哺乳動物(根節(jié)點),1為哺乳動物下一結(jié)構(gòu)
# 遞歸構(gòu)建network
def get_hyponyms(synset, level):
 if (level == last_level):
  levelOfNode[str(synset)] = level
  return
 if not str(synset) in network:
  network[str(synset)] = [str(s) for s in synset.hyponyms()]
  levelOfNode[str(synset)] = level
 for hyponym in synset.hyponyms():
  get_hyponyms(hyponym, level + 1)
# 構(gòu)建以哺乳動物為根節(jié)點的層次結(jié)構(gòu)數(shù)據(jù)集
mammal = wn.synset('mammal.n.01')
get_hyponyms(mammal, 0)
levelOfNode[str(mammal)] = 0
# 將終端葉子節(jié)點補到network字典中
for a in levelOfNode:
 if not a in network:
  network[a] = []

數(shù)據(jù)展示

運行完成上述代碼后,可以得到對應的節(jié)點層級,以及總體的網(wǎng)絡分支。

節(jié)點層級(數(shù)值表示層級數(shù),最深的層設置為6,0為根節(jié)點)

網(wǎng)絡分支情況

為了更清晰地將樹的結(jié)構(gòu)進行刻畫,用一個代碼進一步將相關的層次結(jié)構(gòu)直接進行展示。

def norm(x):
 return np.dot(x, x)
def traverse(graph, start, node):
 node_name = node.name().split(".")[0]
 graph.depth[node_name] = node.shortest_path_distance(start)
 for child in node.hyponyms():
  child_name = child.name().split(".")[0]
  graph.add_edge(node_name, child_name) # 添加邊
  traverse(graph, start, child) # 遞歸構(gòu)建
def hyponym_graph(start):
 G = nx.Graph() # 定義一個圖
 G.depth = {}
 traverse(G, start, start)
 return G
def graph_draw(graph):
 plt.figure(figsize=(10, 10)) # 展示整體的網(wǎng)絡
 # plt.figure(figsize=(3, 3)) # 展示大象網(wǎng)絡
 nx.draw(graph,
node_size = [10 * graph.degree(n) for n in graph],
node_color = [graph.depth[n] for n in graph],
alpha = 0.8,
font_size = 4,
width = 0.5,
with_labels = True)
 
def get_keys(d, value):
  return [k for k,v in d.items() if v == value]
 root_name = get_keys(graph.depth, 0)[0]
 plt.savefig("~/hyperE/fig/" + root_name + ".png", dpi = 300)
 
graph = hyponym_graph(mammal)
graph_draw(graph)

繪制出來的哺乳動物(mammal)全體的結(jié)構(gòu)如下(此時沒有空間信息,只有層級信息,為了展示才顯示為下圖所示的樣式):

其中,顏色越深,節(jié)點越大,表示節(jié)點的層級越接近根節(jié)點(哺乳動物)。

由于數(shù)據(jù)非常多,展示的不是很清楚,這里我們單純的提出出來大象(elephant)的結(jié)構(gòu),進一步看看數(shù)據(jù)集的情況。

elephant = wn.synset('elephant.n.01')
graph = hyponym_graph(elephant)
graph_draw(graph)

后面我們將利用這份數(shù)據(jù)集,進行方法的介紹,以及雙曲嵌入模型的訓練。

請見:python算法學習雙曲嵌入論文方法與代碼解析說明

以上就是python算法學習雙曲嵌入論文代碼實現(xiàn)數(shù)據(jù)集介紹的詳細內(nèi)容,更多關于python算法數(shù)據(jù)集雙曲嵌入論文代碼的資料請關注本站其它相關文章!

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信
頂部