0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python自然語言處理實(shí)戰(zhàn):兩篇文章相似度清晰透明

lviY_AI_shequ ? 來源:電子發(fā)燒友網(wǎng) ? 作者:工程師譚軍 ? 2018-07-09 09:22 ? 次閱讀

此書專注于中文的自然語言處理,以Python及其相關(guān)框架為工具,以實(shí)戰(zhàn)為導(dǎo)向,詳細(xì)講解了自然語言處理的各種核心技術(shù)、方法論和經(jīng)典算法。三位作者在人工智能、大數(shù)據(jù)和算法領(lǐng)域有豐富的積累和經(jīng)驗(yàn),是阿里巴巴、前明略數(shù)據(jù)和七牛云的資深專家。同時(shí),本書也得到了阿里巴巴達(dá)摩院高級(jí)算法專家、七牛云AI實(shí)驗(yàn)室Leader等專家的高度評(píng)價(jià)和鼎力推薦

本節(jié)將利用訓(xùn)練好的詞向量和段落向量對(duì)兩篇關(guān)于天津全運(yùn)會(huì)的新聞進(jìn)行向量化,并計(jì)算兩篇新聞的相似度。如下是兩篇新聞:

新聞1:6日,第十三屆全運(yùn)會(huì)女子籃球成年組決賽在天津財(cái)經(jīng)大學(xué)體育館打響,中國(guó)籃協(xié)主席姚明到場(chǎng)觀戰(zhàn)。姚明在接受媒體采訪時(shí)表示,天津全運(yùn)會(huì)是全社會(huì)的體育盛會(huì),他稱贊了賽事保障與服務(wù)工作,并表示中國(guó)籃協(xié)將在未來的工作中挖掘天津籃球文化的價(jià)值。

本屆天津全運(yùn)會(huì)增加了包括攀巖、馬拉松、象棋在內(nèi)的19個(gè)大項(xiàng)的群眾體育比賽項(xiàng)目,普通群眾成為賽場(chǎng)“主角”。對(duì)此,姚明表示:“引入群眾性的體育項(xiàng)目,真正做到了全運(yùn)會(huì)的‘全’字,這不僅僅是專業(yè)運(yùn)動(dòng)員的盛會(huì),更是全社會(huì)的體育盛會(huì)?!闭劶氨緦萌\(yùn)會(huì)賽事籌備與保障服務(wù)時(shí),姚明說:“全運(yùn)會(huì)得到了天津市委市政府和各區(qū)、各學(xué)校的大力幫助,籃球項(xiàng)目比賽(順利舉辦)要感謝天津方方面面的支持。”此外,姚明還對(duì)全運(yùn)村內(nèi)的保障服務(wù)和志愿者工作表示贊賞。“很多熟悉的教練員和運(yùn)動(dòng)員都表示服務(wù)保障很不錯(cuò),志愿者態(tài)度很積極?!薄拔阌怪靡?,天津是中國(guó)籃球發(fā)源地,1895年,在籃球運(yùn)動(dòng)誕生4年的時(shí)候就漂洋過海從天津上岸,這是中國(guó)籃球具有歷史意義的地方?!币γ髟谡劶疤旖蚧@球文化和未來發(fā)展時(shí)說,“天津保留著迄今為止世界上最古老的室內(nèi)籃球場(chǎng),這都是非常重要的籃球文化遺產(chǎn),希望能在未來的工作中挖掘這些歷史遺產(chǎn)的價(jià)值?!币γ髡f:“天津是座美麗的城市,這次來天津能夠感到濃厚的體育文化元素,希望運(yùn)動(dòng)員和教練員在比賽賽得好的同時(shí),也能領(lǐng)略到天津的城市文化?!?/p>

新聞2:從開幕式前入住全運(yùn)村到奔波于全運(yùn)三座籃球場(chǎng)館之間,中國(guó)籃協(xié)主席姚明抵津已有10多天了。昨天在天津財(cái)大籃球館,姚明還饒有興致地談了對(duì)本次天津全運(yùn)會(huì)的看法,能夠讓群眾融入進(jìn)來,是他覺得最有亮點(diǎn)的地方。 “全運(yùn)會(huì)是一項(xiàng)很有傳統(tǒng)的運(yùn)動(dòng)會(huì),這次來到天津,得到市委、市政府的大力支持,天津各個(gè)區(qū)學(xué)校對(duì)于籃球比賽從人員到場(chǎng)館給予很大幫助,中國(guó)籃協(xié)作為競(jìng)委會(huì)的一員,受到總局的委派承辦籃球的比賽,真的非常感謝天津?qū)ξ覀兎椒矫婷娴闹С??!北M管之前多次到訪津城,不過這次因?yàn)槿\(yùn),還是給了姚明很多不一樣的感受,“天津是座非常美麗的城市,我之前來這里很多次了,這次來感受到了非常濃烈的體育文化元素,我們希望運(yùn)動(dòng)員、教練員在這座美麗的城市比賽賽得好,同時(shí)能夠領(lǐng)略到天津的城市文化。”本屆全運(yùn)的群眾項(xiàng)目的比賽,引起了姚明極大的興趣,“這次天津全運(yùn)會(huì)最突出的特點(diǎn)是引入了群眾性體育和群眾性的項(xiàng)目,同時(shí)設(shè)立了群眾性的獎(jiǎng)牌和榮譽(yù),是真的做到了一個(gè)‘全’字,這也符合體育融入社會(huì)的一個(gè)大趨勢(shì),全運(yùn)會(huì)不該只是專業(yè)運(yùn)動(dòng)員的盛會(huì),也是所有社會(huì)人的一個(gè)盛會(huì)?!睂?duì)于這段時(shí)間在天津的生活,姚明也是贊不絕口,“我們作為籃協(xié)的官員都住在技術(shù)官員村,這段時(shí)間的生活工作都在里面,聽到了很多熟悉的運(yùn)動(dòng)員、教練員對(duì)本次全運(yùn)會(huì)的夸贊,生活工作非常方便,保障非常齊全,我們?yōu)樘旖蚋械椒浅8吲d。很多場(chǎng)館都很新,很多志愿者都很年輕,大家都積極奔波在各自的崗位上,這一點(diǎn)我們的運(yùn)動(dòng)員和教練員應(yīng)該是最有發(fā)言權(quán)的?!弊鳛橹袊?guó)最出色的籃球運(yùn)動(dòng)員,姚明也談了天津作為中國(guó)籃球故鄉(xiāng)的感受,“毋庸置疑,天津是中國(guó)籃球的發(fā)源地,是籃球傳入中國(guó)的第一故鄉(xiāng),在籃球1891年誕生之后4年就漂洋過海來到中國(guó),在天津上岸,這是對(duì)中國(guó)籃球具有歷史意義的地方,并且我們也知道這里保留了迄今為止世界上最古老的室內(nèi)籃球館,這些都是我們非常重要的文化遺產(chǎn)。我希望我們?cè)谖磥淼墓ぷ髦校梢宰屵@樣越來越多的歷史故事被重新挖掘出來。

1. word2vec計(jì)算網(wǎng)頁(yè)相似度

word2vec計(jì)算網(wǎng)頁(yè)相似度的基本方法是:抽取網(wǎng)頁(yè)新聞中的關(guān)鍵詞,接著將關(guān)鍵詞向量化,然后將得到的各個(gè)詞向量相加,最后得到的一個(gè)詞向量總和代表網(wǎng)頁(yè)新聞的向量化表示,利用這個(gè)總的向量計(jì)算網(wǎng)頁(yè)相似度。包括的步驟是:1)關(guān)鍵詞提取,2)關(guān)鍵詞向量化,3)相似度計(jì)算。

首先是關(guān)鍵詞提取,這里我們采用jiebag工具包中tfidf關(guān)鍵詞提取方法,如下圖7-14所示,函數(shù)KeyWord_Extract的功能就是提取句子的關(guān)鍵詞,并將關(guān)鍵詞保存在txt文件中。

def Word_cut(sentence, file_name):words = pseg.cut(sentence)for word in words:with open(file_name, "a") as f:f.write(str(word.word.encode("utf-8")) + " ")with open(file_name, "a") as f:f.write("\n")def KeyWord_Extract(data, file_name):tfidf = analyse.extract_tagskeywords = tfidf(data)for keyword in keywords:with open(file_name, "a") as f:f.write(str(word.word.encode("utf-8")) + " ")with open(file_name, "a") as f:f.write("\n")if __name__ == "__main__":DataFile = codes.open("P2.txt", "r")DataSet = DataFile.readlines()for data in DataSet:data = data[:len(data)-1]words = Word_cut(data, "P22.txt")KeyWord_Extract(data, "P22_keyword.txt")

圖7-14

圖7-15的函數(shù)word2vec便是從txt文件中讀取關(guān)鍵詞,利用上兩節(jié)訓(xùn)練好的詞向量獲取關(guān)鍵詞的詞向量。需要注意的是,由于本文訓(xùn)練詞向量的語料不是特別大(大約1.5G的純文本)無法包括所有的漢語詞語,所以在獲取一個(gè)詞語的詞向量時(shí),最好使用代碼25行所示的方式判斷模型是否包含該詞語,如果包含再獲取詞向量,否則會(huì)報(bào)錯(cuò)。

def word2vec(file_name, model):DataFile = codes.open(file_name, "r")DataSet = DataFile.readlines()word_vec_all = numpy.zeros(wordvec_size)for data in DataSet:data = data.decode("utf-8")space_pos = get_char_pos(data, " ")first_word = data[0:space_pos[0]]if model.__contains__(first_word):word_vec_all = word_vec_all + model[first_word]for i in range(len(space_pos) - 1):word = data[space_pos[i]:space_pos[i+1]]if model.__contains__(word):word_vec_all = word_vec_all + model[word]return word_vec_all

圖7.15關(guān)鍵詞向量化代碼

如圖7.16所示的詞向量相似度計(jì)算代碼,通過余弦相似度計(jì)算兩個(gè)向量的相似度。根據(jù)圖7.16的代碼,計(jì)算出新聞1和新聞2的相似度為0.66.

def SimlarityCalu(Vector1, Vector2):Vector1Mod = np.sqrt(Vector1.dot(Vector1))Vector2Mod = np.sqrt(Vector2.dot(Vector2))if Vector2Mod != 0 and Vector1Mod != 0:simlarity = (Vector1.dot(Vector2))/(Vector1Mod*Vector2Mod)else:simlarity = 0return simlarityif __name == "__main__":model = gensim.models.Word2Vec.load("zhiwiki_news")p1_vec = word2vec("P11_keyword.txt", model)p2_vec = word2vec("P22_keyword.txt", model)print(SimlarityCalu(p1_vec, p2_vec))

圖7-16 word2vec詞向量相似度計(jì)算

2. doc2vec計(jì)算網(wǎng)頁(yè)相似度

跟word2vec計(jì)算網(wǎng)頁(yè)相似度一樣,doc2vec計(jì)算網(wǎng)頁(yè)相似度主要包括如下三個(gè)步驟:1)預(yù)處理,2)句子向量化,3)計(jì)算文本相似。

預(yù)處理就是對(duì)文本進(jìn)行分詞,每個(gè)詞用空格隔開,具體代碼如圖7-14的Word_cut函數(shù)所示,該函數(shù)完成文本的分詞,并把分詞結(jié)果按要求保存在txt文檔中。在預(yù)處理文本之后便是利用doc2vec對(duì)句子向量化,句子向量的訓(xùn)練方法見7.3.2[計(jì)算機(jī)1]節(jié),這里直接利用訓(xùn)練好的句子向量。代碼如圖7-17的doc2vec函數(shù)所示。同樣用余弦相似度計(jì)算文本的相似度,代碼入圖7-17所示的main函數(shù)。最后經(jīng)計(jì)算所得利用doc2vec計(jì)算新聞1和新聞2間的相似度為0.97。

def doc2vec(file_name, model):docs = [x.strip().split() for x in codecs.open(file_name, "r", "utf-8".readlines()]doc_vec_all = numpy.zeros(docvec_size)for d in docs:doc_vec_all = doc_vec_all + model.infer_vector(d, alpha=start_alpha,steps=infer_epoch)return doc_vec_allif __name__ == "__main__":model = g.Doc2Vec.load(model_path)P1_doc2vec = doc2vec("toy_data/P11.txt", model)p2_doc2vec = doc2vec("toy_data/P22.txt", model)print(SimlarityCalu(p1_doc2vec, p2_doc2vec)

圖7-17 doc2vec文本相似度計(jì)算代碼

3.兩種相似度計(jì)算方法分析

前文介紹了word2vec和doc2vec兩種計(jì)算網(wǎng)頁(yè)相似度的方法,結(jié)果顯示利用doc2vec方法計(jì)算的相似度為0.97高于word2vec計(jì)算的0.66,顯然通過閱讀前兩篇新聞,知道這兩篇新聞極為相似,因此可以判斷doc2vec計(jì)算文本相似度的方法更勝一籌。這是因?yàn)椋?)doc2vec不僅利用了詞語的語義信息而且還綜合了上下文語序信息,而word2vec則丟失了語序信息;2)word2vec方法中的關(guān)鍵詞提取算法準(zhǔn)確率不高,丟失了很多關(guān)鍵信息。

(1)三位作者資歷深厚,分別是阿里巴巴的數(shù)據(jù)架構(gòu)師和NLP專家、百煉智能的NLP專家(前明略數(shù)據(jù)的技術(shù)合伙人和科學(xué)家)、七牛云AI實(shí)驗(yàn)室NLP&OCR方向負(fù)責(zé)人

(2)以實(shí)戰(zhàn)為導(dǎo)向,繞開各種復(fù)雜數(shù)學(xué)公式與證明,確保讀者零基礎(chǔ)入門,詳細(xì)講解自然語言處理 的各種核心技術(shù)、方法論和經(jīng)典算法

(3)阿里巴巴達(dá)摩院高級(jí)算法專家、百煉智能CEO、七牛云AI LAB負(fù)責(zé)人、天善智能創(chuàng)始人聯(lián)袂推薦

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    29885

    瀏覽量

    268172
  • 人工智能
    +關(guān)注

    關(guān)注

    1791

    文章

    46705

    瀏覽量

    237220
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    8856

    瀏覽量

    137225
  • 阿里
    +關(guān)注

    關(guān)注

    6

    文章

    434

    瀏覽量

    32794

原文標(biāo)題:Python自然語言處理實(shí)戰(zhàn):計(jì)算兩篇文章的相似度

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    自然語言處理與機(jī)器學(xué)習(xí)的區(qū)別

    在人工智能的快速發(fā)展中,自然語言處理(NLP)和機(jī)器學(xué)習(xí)(ML)成為了個(gè)核心的研究領(lǐng)域。它們都致力于解決復(fù)雜的問題,但側(cè)重點(diǎn)和應(yīng)用場(chǎng)景有所不同。 1. 自然語言
    的頭像 發(fā)表于 11-11 10:35 ?263次閱讀

    圖像識(shí)別技術(shù)包括自然語言處理

    圖像識(shí)別技術(shù)與自然語言處理是人工智能領(lǐng)域的個(gè)重要分支,它們?cè)诤芏喾矫嬗兄芮械穆?lián)系,但也存在一些區(qū)別。 一、圖像識(shí)別技術(shù)與自然語言處理的關(guān)
    的頭像 發(fā)表于 07-16 10:54 ?593次閱讀

    Transformer架構(gòu)在自然語言處理中的應(yīng)用

    隨著人工智能技術(shù)的飛速發(fā)展,自然語言處理(NLP)領(lǐng)域取得了顯著的進(jìn)步。其中,Transformer架構(gòu)的提出,為NLP領(lǐng)域帶來了革命性的變革。本文將深入探討Transformer架構(gòu)的核心思想、組成部分以及在自然語言
    的頭像 發(fā)表于 07-09 11:42 ?677次閱讀

    nlp自然語言處理框架有哪些

    自然語言處理(Natural Language Processing,簡(jiǎn)稱NLP)是計(jì)算機(jī)科學(xué)和人工智能領(lǐng)域的一個(gè)重要分支,它致力于使計(jì)算機(jī)能夠理解和處理人類語言。隨著技術(shù)的發(fā)展,NL
    的頭像 發(fā)表于 07-09 10:28 ?472次閱讀

    使用Python進(jìn)行自然語言處理

    在探討使用Python進(jìn)行自然語言處理(NLP)的廣闊領(lǐng)域時(shí),我們首先需要理解NLP的基本概念、其重要性、Python在NLP中的優(yōu)勢(shì),以及如何通過
    的頭像 發(fā)表于 07-04 14:40 ?378次閱讀

    自然語言處理技術(shù)有哪些

    自然語言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)分支,它致力于使計(jì)算機(jī)能夠理解、解釋和生成人類語言。自然語言
    的頭像 發(fā)表于 07-03 14:30 ?910次閱讀

    自然語言處理模式的優(yōu)點(diǎn)

    自然語言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)重要分支,它致力于使計(jì)算機(jī)能夠理解、生成和處理人類語言。隨著技術(shù)的發(fā)展,
    的頭像 發(fā)表于 07-03 14:24 ?636次閱讀

    自然語言處理技術(shù)的核心是什么

    自然語言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)重要分支,其核心目標(biāo)是使計(jì)算機(jī)能夠理解、生成和處理人類語言。NLP技術(shù)的發(fā)展已經(jīng)取
    的頭像 發(fā)表于 07-03 14:20 ?526次閱讀

    自然語言處理是什么技術(shù)的一種應(yīng)用

    自然語言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能和語言學(xué)領(lǐng)域的一個(gè)分支,它涉及到使用計(jì)算機(jī)技術(shù)來處理、分析和生成
    的頭像 發(fā)表于 07-03 14:18 ?570次閱讀

    自然語言處理包括哪些內(nèi)容

    自然語言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)重要分支,它涉及到計(jì)算機(jī)與人類語言之間的交互。NLP的目標(biāo)是讓計(jì)算機(jī)能夠理解、生成和處理
    的頭像 發(fā)表于 07-03 14:15 ?686次閱讀

    自然語言列舉法描述法各自的特點(diǎn)

    自然語言文本。在自然語言處理中,列舉法和描述法是種常見的方法。 列舉法 列舉法是一種基于規(guī)則的方法,它通過列舉所有可能的情況來解決問題。在自然語言
    的頭像 發(fā)表于 07-03 14:13 ?929次閱讀

    自然語言處理屬于人工智能的哪個(gè)領(lǐng)域

    自然語言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能(Artificial Intelligence,簡(jiǎn)稱AI)領(lǐng)域的一個(gè)重要分支。它涉及到計(jì)算機(jī)與人類語言
    的頭像 發(fā)表于 07-03 14:09 ?1067次閱讀

    什么是自然語言處理 (NLP)

    自然語言處理(Natural Language Processing, NLP)是人工智能領(lǐng)域中的一個(gè)重要分支,它專注于構(gòu)建能夠理解和生成人類語言的計(jì)算機(jī)系統(tǒng)。NLP的目標(biāo)是使計(jì)算機(jī)能夠像人類一樣
    的頭像 發(fā)表于 07-02 18:16 ?991次閱讀

    自然語言處理技術(shù)的原理的應(yīng)用

    自然語言處理(Natural Language Processing, NLP)作為人工智能(AI)領(lǐng)域的一個(gè)重要分支,旨在使計(jì)算機(jī)能夠理解和處理人類自然語言。隨著互聯(lián)網(wǎng)的普及和大數(shù)據(jù)
    的頭像 發(fā)表于 07-02 12:50 ?410次閱讀

    神經(jīng)網(wǎng)絡(luò)在自然語言處理中的應(yīng)用

    自然語言處理(NLP)是人工智能領(lǐng)域中的一個(gè)重要分支,它研究的是如何使計(jì)算機(jī)能夠理解和生成人類自然語言。隨著人工智能技術(shù)的飛速發(fā)展,神經(jīng)網(wǎng)絡(luò)在自然語言
    的頭像 發(fā)表于 07-01 14:09 ?418次閱讀