色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > 親手制作一個(gè)《哈利·波特》人物圖譜,原來羅恩和赫敏的姻緣從第一部就已注定?

          親手制作一個(gè)《哈利·波特》人物圖譜,原來羅恩和赫敏的姻緣從第一部就已注定?

          發(fā)布人:大數(shù)據(jù)文摘 時(shí)間:2021-08-07 來源:工程師 發(fā)布文章

          文摘菌記得小時(shí)候看《哈利·波特》小說的時(shí)候,最難記住的就是那些音譯的名字,又長又多,最后只能關(guān)注那幾個(gè)主要人物,跟著主要?jiǎng)∏橐宦愤^去,當(dāng)個(gè)爽文看完了。

          這就導(dǎo)致一些邊緣人物根本沒關(guān)注到,也錯(cuò)過了J·K·羅琳埋下的許多小伏筆。

          比如盧娜與韋斯萊其實(shí)是鄰居關(guān)系,這個(gè)在《火焰杯》中眾人出發(fā)去世界杯時(shí)有伏筆,但是很少有人第一遍看的時(shí)候能注意到。

          大概是為了從一開始就厘清人物關(guān)系,Medium上一位博主Tomaz Bratanic開發(fā)了一個(gè)小項(xiàng)目,用Selenium結(jié)合SpaCy來創(chuàng)建一個(gè)Neo4j哈利·波特人物圖譜,把《哈利·波特》第一部中所有的人物都納入一張網(wǎng)絡(luò)中,人物關(guān)系一目了然。

          從圖譜中我們似乎可以看到,三人小分隊(duì)中,哈利和赫敏的直接連接很少,這兩人出現(xiàn)時(shí)基本羅恩都在,而羅恩和赫敏二人卻連接很多,這讓人不禁聯(lián)想,難道從第一部開始,J·K·羅琳就安排好了羅恩和赫敏的姻緣了?

          1.png

          制作一個(gè)這樣的圖譜需要5步,動(dòng)手試試?

          八卦的事情我們先放在一邊,還是先來看看Tomaz Bratanic是如何制作這一圖譜的。

          總體來說,整個(gè)過程被分為了5步:

          爬取“哈利波特迷”網(wǎng)站數(shù)據(jù)

          書籍文本預(yù)處理

          基于 SpaCy 規(guī)則匹配的實(shí)體識別

          推斷字符之間的關(guān)系

          將結(jié)果存儲(chǔ)到 Neo4j 圖形數(shù)據(jù)庫中

          作者將整個(gè)過程記錄了一個(gè)Google Colab notebook,方便大家動(dòng)手試試,鏈接如下:

          https://github.com/tomasonjo/blogs/blob/master/harry_potter/HarryPotterNLP.ipynb

          第一步,爬取“哈利波特迷”網(wǎng)站數(shù)據(jù)

          “哈利波特迷”網(wǎng)站頁面包含了第一本書中的人物列表,其中還包括了各個(gè)人物最初出現(xiàn)在哪一章,這可以幫助進(jìn)一步消除字符的歧義,因此第一步就是去爬取“哈利波特迷”網(wǎng)站數(shù)據(jù)。

          作者選擇使用Selenium進(jìn)行Web頁面抓取,然后形成一個(gè)字符列表,其中包含人物最先出現(xiàn)的章節(jié)的信息,此外,每個(gè)角色都有一個(gè)網(wǎng)頁,上面有關(guān)于角色的詳細(xì)介紹。

          2.png

          例如,從赫敏·格蘭杰的頁面你可以觀察到一個(gè)結(jié)構(gòu)化的表格,其中包含了更多的信息,作者使用別名部分的實(shí)體提取然后添加其他字符細(xì)節(jié),如家族和血型來豐富最后的人物圖譜。

          3.png

          第二步,書籍文本預(yù)處理

          由于文本中人物往往散布于文本的不同位置,其中涉及到的人物通常可以有多種不同的表達(dá)方式,例如某個(gè)語義關(guān)系中的實(shí)體可能是以代詞形式(比如he和she)出現(xiàn)的,為了更準(zhǔn)確且沒有遺漏地從文本中抽取相關(guān)信息,必須要對文章中的指代現(xiàn)象進(jìn)行消解。

          在尋找合適的指代消解(Co-reference Resolution)模型時(shí),作者考慮了NeuralCoref和AllenNLP,這兩個(gè)模型都能提供指代消解功能。

          但是在試用AllenNLP模型輸入整個(gè)章節(jié)時(shí),作者的內(nèi)存不夠,把一個(gè)章節(jié)分割成一個(gè)句子列表又運(yùn)行得非常慢,所以作者最后還是使用了NeuralCoref,NeuralCoref很輕松地處理了整個(gè)章節(jié),并且工作得更快。

          準(zhǔn)備好了文本,是時(shí)候從文本中提取提到的字符了。

          第三步,基于SpaCy規(guī)則匹配的實(shí)體識別

          作者一開始試了幾個(gè)不同的命名實(shí)體識別(Named Entity Recognition,NER)模型,SpaCy、HuggingFace、Flair,甚至是 Stanford NLP。

          但是這些模型都不能很好地滿足我的要求。因此,作者決定使用SpaCy基于規(guī)則的模式匹配特性,而不是自己訓(xùn)練模型。

          根據(jù)第一步從網(wǎng)站上搜集的數(shù)據(jù),現(xiàn)在已經(jīng)知道我們需要在尋找哪些角色,下面只需要找到一種方法,在文本中盡可能完美地匹配他們。

          首先必須為每個(gè)字符定義文本模式。這需要添加全名作為我們正在尋找的模式,然后我們使用空格將名稱分開,并創(chuàng)建一個(gè)模式,將這個(gè),名字中的每個(gè)單詞分開。舉個(gè)例子,如果我們定義了matcher模式,我們最終會(huì)得到3個(gè)不同的文本模式來表示給定的字符:

          全名: 阿不思·鄧不利多(Albus Dumbledore)

          名: 阿不思(Albus)

          姓: 鄧布利多(Dumbledore)

          當(dāng)然,還會(huì)有許多特例,比如“天狼星布萊克”(Sirius Black),為了不將所有“黑色”(Black)和人物搞混,作者定義只有當(dāng)“布萊克”是標(biāo)題格式的,才會(huì)假設(shè)“小天狼星布萊克”被引用。

          另外,還需要考慮當(dāng)只提到姓時(shí),如何匹配到正確的人,比如這句話,“Weasley, get over here!”,這里面的Weasley可能指向羅恩的任何一個(gè)兄弟姐妹,這時(shí)必須為實(shí)體消歧提出一個(gè)通用的解決方案。

          第四步,推斷字符之間的關(guān)系

          解決了實(shí)體識別問題,其實(shí)就已經(jīng)完成了整個(gè)工作中最難的部分。

          推斷角色之間的關(guān)系則非常簡單,首先,需要定義相互作用的距離閾值或兩個(gè)字符之間的關(guān)系。

          作者將距離閾值定義為14,也就是說,如果兩個(gè)字符在14個(gè)單詞的距離內(nèi)共同出現(xiàn),那么我們假設(shè)它們一定是相互作用的。

          此外,作者還合并了一些實(shí)體以避免扭曲結(jié)果,比如“哈利今天過得很愉快。他下午去找鄧布利多談話了?!?/p>

          如果簡單分析這句話,會(huì)讓“哈利”和“鄧布利多”發(fā)生兩次互動(dòng),因此需要按照引用單個(gè)實(shí)體的相同字符的順序合并實(shí)體,來解決重復(fù)統(tǒng)計(jì)的問題。

          第五步,將結(jié)果存儲(chǔ)到Neo4j圖形數(shù)據(jù)庫中

          提取了字符之間的交互網(wǎng)絡(luò)后,剩下的唯一工作就是將結(jié)果存儲(chǔ)到圖形數(shù)據(jù)庫中。

          導(dǎo)入查詢非常簡單,因?yàn)檫@里處理的是單向網(wǎng)絡(luò),如果使用的 是作者準(zhǔn)備的Colab Notebook,那么創(chuàng)建一個(gè)免費(fèi)的Neo4j Sandbox 或者免費(fèi)的Aura數(shù)據(jù)庫實(shí)例來存儲(chǔ)結(jié)果將是最簡單的。

          最后,可視化結(jié)果,我們就能得到最終的人物關(guān)系圖譜。

          4.png

          靈感來自《權(quán)利的游戲》人物圖譜,下一步要分析哈利·波特宇宙

          在文章中,作者表示,這一項(xiàng)目的靈感來源于此前Andrew Beveridge建立的《權(quán)利的游戲》人物圖譜。

          5.png

          相比于《哈利·波特》,《權(quán)力的游戲》擁有更多的人物和劇情,生成的網(wǎng)絡(luò)也更加復(fù)雜。

          除了對整個(gè)1-8季進(jìn)行分析,Andrew Beveridge還對每一季做了人物圖譜分析,看看每一季中誰和誰是盟友,誰跟誰又是敵人。感興趣的讀者可以查看項(xiàng)目鏈接:

          https://networkofthrones.wordpress.com/

          相比而言,Tomaz Bratanic的《哈利·波特》人物圖譜項(xiàng)目更容易上手,讀者可以用第二部或第三部嘗試這種方法,唯一需要稍微調(diào)整的是實(shí)體消除歧義過程。

          《哈利·波特》人物圖譜GitHub鏈接:

          https://github.com/tomasonjo/blogs/blob/master/harry_potter/HarryPotterNLP.ipynb

          Tomaz Bratanic表示,下一步他將著手整個(gè)哈利·波特宇宙的分析,將《神奇動(dòng)物在哪里》的部分也囊括進(jìn)去,感興趣的小伙伴可以持續(xù)關(guān)注。

          參考鏈接:

          https://medium.com/neo4j/turn-a-harry-potter-book-into-a-knowledge-graph-ffc1c45afcc8

          https://networkofthrones.wordpress.com/

          https://harrypotter.fandom.com/wiki/Main_Page

          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



          關(guān)鍵詞: AI

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉