最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年11月05日 10:30:59   作者:Kanny廣小隸  
由于雙曲嵌入相關(guān)的文章已經(jīng)有了一系列的代碼。本篇博客主要目的實現(xiàn)最開始的雙曲嵌入論文,將論文中有些直接寫出來的內(nèi)容進行了細節(jié)的推導(dǎo),同時實現(xiàn)對應(yīng)的代碼

學(xué)習的文章:

Poincaré Embeddings for Learning Hierarchical Representations

主要參考的代碼:

poincare_embeddings

gensim – Topic Modelling in Python - poincare.py

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

1. 目標

我們有一些層級結(jié)構(gòu)的網(wǎng)絡(luò)類型數(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ù)集

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

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

network = {} # 構(gòu)建層級網(wǎng)絡(luò)
last_level = 8 # 最深的層設(shè)置為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ù)展示

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

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

網(wǎng)絡(luò)分支情況

為了更清晰地將樹的結(jié)構(gòu)進行刻畫,用一個代碼進一步將相關(guān)的層次結(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)絡(luò)
    # plt.figure(figsize=(3, 3)) # 展示大象網(wǎng)絡(luò)
    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ù)集,進行方法的介紹,以及雙曲嵌入模型的訓(xùn)練。

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

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

相關(guān)文章

  • django項目搭建與Session使用詳解

    django項目搭建與Session使用詳解

    這篇文章主要給大家介紹了關(guān)于django項目搭建與Session使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2018-10-10
  • 詳解Python對JSON中的特殊類型進行Encoder

    詳解Python對JSON中的特殊類型進行Encoder

    這篇文章主要介紹了詳解Python對JSON中的特殊類型進行Encoder,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-07-07
  • Python3爬蟲關(guān)于代理池的維護詳解

    Python3爬蟲關(guān)于代理池的維護詳解

    在本篇文章里小編給大家分享了關(guān)于Python3爬蟲關(guān)于代理池的維護詳解內(nèi)容,需要的朋友們可以參考下。
    2020-07-07
  • 部署Django到阿里云服務(wù)器教程示例

    部署Django到阿里云服務(wù)器教程示例

    這篇文章主要介紹了部署Django到阿里云服務(wù)器教程示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-06-06
  • python-pymysql獲取字段名稱-獲取內(nèi)容方式

    python-pymysql獲取字段名稱-獲取內(nèi)容方式

    這篇文章主要介紹了python-pymysql獲取字段名稱-獲取內(nèi)容方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python讀取預(yù)處理DICOM文件方式詳解

    Python讀取預(yù)處理DICOM文件方式詳解

    這篇文章主要介紹了Python讀取預(yù)處理DICOM文件方式,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Python實現(xiàn)快速排序的方法詳解

    Python實現(xiàn)快速排序的方法詳解

    這篇文章主要介紹了Python實現(xiàn)快速排序的方法,結(jié)合實例形式詳細分析了快速排序的思路、原理及Python具體實現(xiàn)技巧與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-10-10
  • 對Django url的幾種使用方式詳解

    對Django url的幾種使用方式詳解

    今天小編就為大家分享一篇對Django url的幾種使用方式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python面向?qū)ο蠓▽崿F(xiàn)圖書管理系統(tǒng)

    python面向?qū)ο蠓▽崿F(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python面向?qū)ο蠓▽崿F(xiàn)圖書管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python實現(xiàn)兩個list對應(yīng)元素相減操作示例

    Python實現(xiàn)兩個list對應(yīng)元素相減操作示例

    這篇文章主要介紹了Python實現(xiàn)兩個list對應(yīng)元素相減操作,結(jié)合具體實例形式分析了list對應(yīng)元素操作的簡單實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06

最新評論

文安县| 奎屯市| 柳州市| 鹤峰县| 鹤峰县| 济南市| 滁州市| 绥棱县| 石景山区| 射阳县| 凉城县| 金阳县| 长沙市| 和顺县| 理塘县| 西乌珠穆沁旗| 凌源市| 金阳县| 安新县| 泰和县| 比如县| 洮南市| 崇明县| 全椒县| 青阳县| 合江县| 浏阳市| 罗田县| 攀枝花市| 河北区| 侯马市| 林西县| 视频| 麻江县| 宜章县| 长兴县| 锡林浩特市| 东兴市| 巨野县| 望奎县| 习水县|