日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【NLP实战】基于ALBERT的文本相似度计算

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP实战】基于ALBERT的文本相似度计算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實戰是學習一門技術最好的方式,也是深入了解一門技術唯一的方式。因此,NLP專欄推出了實戰專欄,讓有興趣的同學在看文章之余也可以自己動手試一試。

ALBERT是一個比BERT要輕量,效果更好的模型,本篇實踐介紹如何用ALBERT計算兩個文本的相似度。

作者&編輯 | 小Dream哥

1 ALBERT介紹?

ALBERT利用詞嵌入參數因式分解和隱藏層間參數共享兩種手段,顯著減少了模型的參數量的同時,基本沒有損失模型的性能。筆者在下面的文章中詳細介紹了ALBERT的理論,感興趣的同學可以戳進去了解:

【NLP】ALBERT:更輕更快的的預訓練

albert_tiny模型,能夠顯著提高模型的推理速度,但是效果依然很棒,這里介紹如何基于albert_tiny模型進行文本相似度計算。

2? BERT4KERAS

本來自己寫了個基于tensorflow的ALBERT模型,后來看到蘇劍林老師的bert4keras,覺得確實實現簡潔,易懂。遂決定分享給大家。

感興趣的同學可以看看蘇劍林老師的網站:

https://spaces.ac.cn/archives/6915

BERT4KERAS是蘇老師基于kears實現的幾個BERT模型,包括BERT,ALBERT和ROBERTA,基于BERT4KERAS可以快速的使用這些模型,也能夠快速的實現對BERT改進的想法。

快速安裝:

pip install git+https://www.github.com/bojone/bert4keras.git

3 如何獲取ALBERT-zh??

從如下的github中能夠獲取訓練好的ALBERT-zh 模型:

https://github.com/brightmart/albert_zh

4? 開始實戰

ALBERT輸出的第一個向量,可以用來表征整體的輸入文本,在本篇實戰中,利用這個向量來計算文本之間的相似度。

相似度的計算大致可以分為這么幾個步驟:

1. 構建模型,加載ALBERT預訓練模型。

2. 構建分詞器,處理輸入。

3. 利用模型,計算輸入文本的向量表征。

4. 利用文本向量,計算兩個文本之間距離或者相似度。

1)構建模型,加載ALBERT預訓練模型

# 加載預訓練模型
bert = build_bert_model(
config_path=config_path,
checkpoint_path=checkpoint_path,
? ?with_pool=True,
albert=True,
? ?return_keras_model=False,
)

這里直接調用bert4keras的build_bert_model接口,構建albert模型,并直接加載albert的中文模型的權重。

config_path用來指定模型的配置文件路徑;

checkpoint_path用來指定模型權重文件的路徑;

albert表示指定用albert模型;

2) 構建分詞器,處理輸入

#構建分詞器

tokenizer = Tokenizer(dict_path)

#格式化輸入

token_ids1, segment_ids1 = tokenizer.encode(u'我想去北京')
token_ids2, segment_ids2 = tokenizer.encode(u'我想去香港')
token_ids3, segment_ids3 = tokenizer.encode(u'目前的局勢,止暴制亂,刻不容緩')

首先構建分詞器這里直接用了bert4keras定義的分詞器Tokenizer。

然后用分詞器處理輸入,獲得輸入文本在詞典中的序號表示及分段信息表示。這里解釋下為什么要將輸入文本轉化成這兩個表示:

1.albert模型的輸入與bert類似,需要接受詞、分段以及位置三個輸入,位置信息由模型內的代碼處理;

2.將詞轉化為詞在詞典中的序號便于后續的詞嵌入操作。

3) 利用模型,計算輸入文本的向量表征

#計算文本的向量表征,獲取albert的第一個位置的輸出

sentence_vec1 = model.predict([np.array([token_ids1]), np.array([segment_ids1])])[0]
sentence_vec2 = model.predict([np.array([token_ids2]), np.array([segment_ids2])])[0]
sentence_vec3 = model.predict([np.array([token_ids3]), np.array([segment_ids3])])[0]

因為我們本次是直接利用預訓練模型的知識,直接計算文本的向量表征,因此沒有訓練過程,直接predict即可獲得文本的向量表征。這里,獲取albert的第一個位置的輸出作為輸入文本的向量表征。

4) 計算文本相似度

# 引入兩個相似度計算包,歐氏距離和余弦距離

from sklearn.metrics.pairwise import euclidean_distances
from sklearn.metrics.pairwise import cosine_similarity

#定義相似度計算函數
def similarity_count(vec1, vec2, mode='cos'):
? ?if mode == 'eu':
? ? ? ?return euclidean_distances([vec1,vec2])[0][1]
? ?if mode == 'cos':
? ? ? ?return cosine_similarity([vec1, vec2])[0][1]

#相似度計算

#余弦距離

similarity_count(sentence_vec1, sentence_vec2)

#歐式距離
similarity_count(sentence_vec1, sentence_vec2, mode='eu')

這里引入sklearn中的兩個計算歐氏距離和余弦距離的包來計算文本之間的距離。具體過程相對簡單,直接看上面的代碼吧。

5 結果展示

如上圖所示,計算了“我想去北京”和“我想去香港”兩句話的余弦距離和歐式距離;計算了“我想去北京”和“目前的局勢,止暴制亂,刻不容緩”兩句話的余弦距離和歐式距離。兩句表達意思相近的話,相似度較高,距離較短。但是區隔度不是特別大,所以,在生產中,在一些特別的領域,需要用特別的語料,進行fintune,會有更好的效果。

至此,介紹了如何利用bert4keras搭建albert模型進行文本相似度計算,代碼在我們有三AI的github可以下載:https://github.com/longpeng2008/yousan.ai/tree/master/natural_language_processing

找到albert文件夾,執行python3 similarity.py就可以運行了。

總結

ALBERT利用詞嵌入參數因式分解和隱藏層間參數共享兩種手段,顯著減少了模型的參數量的同時,基本沒有損失模型的性能,是一個不錯的工作。

除了使用它,更關鍵的是albert模型的實現和理論。我們會在知識星球討論相關的內容,感興趣的話可以掃描下面的二維碼了解。

讀者們可以留言,或者加入我們的NLP群進行討論。感興趣的同學可以微信搜索jen104,備注"加入有三AI NLP群"。

下期預告:命名實體識別實踐

知識星球推薦

掃描上面的二維碼,就可以加入我們的星球,助你成長為一名合格的自然語言處理算法工程師。

知識星球主要有以下內容:

(1) 聊天機器人??紤]到聊天機器人是一個非常復雜的NLP應用場景,幾乎涵蓋了所有的NLP任務及應用。所以小Dream哥計劃以聊天機器人作為切入點,通過介紹聊天機器人的原理和實踐,逐步系統的更新到大部分NLP的知識,會包括語義匹配,文本分類,意圖識別,語義匹配命名實體識別、對話管理以及分詞等。

(2) 知識圖譜。知識圖譜對于NLP各項任務效果好壞的重要性,就好比基礎知識對于一個學生成績好壞的重要性。他是NLP最重要的基礎設施,目前各大公司都在著力打造知識圖譜,作為一個NLP工程師,必須要熟悉和了解他。

(3) NLP預訓練模型?;诤A繑祿?#xff0c;進行超大規模網絡的無監督預訓練。具體的任務再通過少量的樣本進行Fine-Tune。這樣模式是目前NLP領域最火熱的模式,很有可能引領NLP進入一個全新發展高度。你怎么不深入的了解?

轉載文章請后臺聯系

侵權必究

往期精選

  • 【完結】 12篇文章帶你完全進入NLP領域,掌握核心技術

  • 【NLP-詞向量】詞向量的由來及本質

  • 【NLP-詞向量】從模型結構到損失函數詳解word2vec

  • 【NLP-NER】什么是命名實體識別?

  • 【NLP-NER】命名實體識別中最常用的兩種深度學習模型

  • 【NLP-NER】如何使用BERT來做命名實體識別

  • 【NLP-ChatBot】我們熟悉的聊天機器人都有哪幾類?

  • 【NLP-ChatBot】搜索引擎的最終形態之問答系統(FAQ)詳述

  • 【NLP-ChatBot】能干活的聊天機器人-對話系統概述

  • 【知識圖譜】人工智能技術最重要基礎設施之一,知識圖譜你該學習的東西

  • 【NLP實戰】tensorflow詞向量訓練實戰

  • 【NLP實戰系列】樸素貝葉斯文本分類實戰

  • 【NLP實戰系列】Tensorflow命名實體識別實戰

  • 【NLP實戰】如何基于Tensorflow搭建一個聊天機器人

  • 【每周NLP論文推薦】從預訓練模型掌握NLP的基本發展脈絡

  • 【每周NLP論文推薦】 NLP中命名實體識別從機器學習到深度學習的代表性研究

  • 【每周NLP論文推薦】 介紹語義匹配中的經典文章

  • 【每周NLP論文推薦】 對話管理中的標志性論文介紹

  • 【每周NLP論文推薦】 開發聊天機器人必讀的重要論文

  • 【每周NLP論文推薦】 掌握實體關系抽取必讀的文章

  • 【每周NLP論文推薦】 生成式聊天機器人論文介紹

  • 【每周NLP論文推薦】 知識圖譜重要論文介紹

總結

以上是生活随笔為你收集整理的【NLP实战】基于ALBERT的文本相似度计算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。