日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python 教你三分鐘用Bert搭建問答搜索引擎

來源: 責編: 時間:2024-04-29 09:04:08 156觀看
導讀鼎鼎大名的 Bert 算法相信大部分同學都聽說過,它是Google推出的NLP領域“王炸級”預訓練模型,其在NLP任務中刷新了多項記錄,并取得state of the art的成績。但是有很多深度學習的新手發(fā)現(xiàn)BERT模型并不好搭建,上手難度很高

鼎鼎大名的 Bert 算法相信大部分同學都聽說過,它是Google推出的NLP領域“王炸級”預訓練模型,其在NLP任務中刷新了多項記錄,并取得state of the art的成績。38G28資訊網(wǎng)——每日最新資訊28at.com

但是有很多深度學習的新手發(fā)現(xiàn)BERT模型并不好搭建,上手難度很高,普通人可能要研究幾天才能勉強搭建出一個模型。38G28資訊網(wǎng)——每日最新資訊28at.com

沒關系,今天我們介紹的這個模塊,能讓你在3分鐘內(nèi)基于BERT算法搭建一個問答搜索引擎。它就是 bert-as-service 項目。這個開源項目,能夠讓你基于多GPU機器快速搭建BERT服務(支持微調(diào)模型),并且能夠讓多個客戶端并發(fā)使用。38G28資訊網(wǎng)——每日最新資訊28at.com

1.準備

38G28資訊網(wǎng)——每日最新資訊28at.com

38G28資訊網(wǎng)——每日最新資訊28at.com

開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。38G28資訊網(wǎng)——每日最新資訊28at.com

(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.38G28資訊網(wǎng)——每日最新資訊28at.com

(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南。38G28資訊網(wǎng)——每日最新資訊28at.com

請選擇以下任一種方式輸入命令安裝依賴:1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.38G28資訊網(wǎng)——每日最新資訊28at.com

pip install bert-serving-server # 服務端pip install bert-serving-client # 客戶端

38G28資訊網(wǎng)——每日最新資訊28at.com

請注意,服務端的版本要求:Python >= 3.5,Tensorflow >= 1.10 。38G28資訊網(wǎng)——每日最新資訊28at.com

此外還要下載預訓練好的BERT模型,在 https://github.com/hanxiao/bert-as-service#install 上可以下載,如果你無法訪問該網(wǎng)站,也可以在 https://pythondict.com/download/bert-serving-model/ 此處下載。38G28資訊網(wǎng)——每日最新資訊28at.com

也可在Python實用寶典后臺回復 bert-as-service 下載這些預訓練好的模型。38G28資訊網(wǎng)——每日最新資訊28at.com

下載完成后,將 zip 文件解壓到某個文件夾中,例如 /tmp/uncased_L-24_H-1024_A-16/.38G28資訊網(wǎng)——每日最新資訊28at.com

2.Bert-as-service 基本使用

38G28資訊網(wǎng)——每日最新資訊28at.com

38G28資訊網(wǎng)——每日最新資訊28at.com

安裝完成后,輸入以下命令啟動BERT服務:38G28資訊網(wǎng)——每日最新資訊28at.com

bert-serving-start -model_dir /tmp/uncased_L-24_H-1024_A-16/ -num_worker=4

38G28資訊網(wǎng)——每日最新資訊28at.com

-num_worker=4 代表這將啟動一個有四個worker的服務,意味著它最多可以處理四個并發(fā)請求。超過4個其他并發(fā)請求將在負載均衡器中排隊等待處理。38G28資訊網(wǎng)——每日最新資訊28at.com

下面顯示了正確啟動時服務器的樣子:38G28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片38G28資訊網(wǎng)——每日最新資訊28at.com

使用客戶端獲取語句的編碼

現(xiàn)在你可以簡單地對句子進行編碼,如下所示:38G28資訊網(wǎng)——每日最新資訊28at.com

from bert_serving.client import BertClientbc = BertClient()bc.encode(['First do it', 'then do it right', 'then do it better'])

38G28資訊網(wǎng)——每日最新資訊28at.com

作為 BERT 的一個特性,你可以通過將它們與 |||(前后有空格)連接來獲得一對句子的編碼,例如38G28資訊網(wǎng)——每日最新資訊28at.com

bc.encode(['First do it ||| then do it right'])

38G28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片38G28資訊網(wǎng)——每日最新資訊28at.com

38G28資訊網(wǎng)——每日最新資訊28at.com

遠程使用 BERT 服務

你還可以在一臺 (GPU) 機器上啟動服務并從另一臺 (CPU) 機器上調(diào)用它,如下所示:38G28資訊網(wǎng)——每日最新資訊28at.com

38G28資訊網(wǎng)——每日最新資訊28at.com

# on another CPU machinefrom bert_serving.client import BertClientbc = BertClient(ip='xx.xx.xx.xx') # ip address of the GPU machinebc.encode(['First do it', 'then do it right', 'then do it better'])

38G28資訊網(wǎng)——每日最新資訊28at.com

3.搭建問答搜索引擎

38G28資訊網(wǎng)——每日最新資訊28at.com

38G28資訊網(wǎng)——每日最新資訊28at.com

我們將通過 bert-as-service 從FAQ 列表中找到與用戶輸入的問題最相似的問題,并返回相應的答案。38G28資訊網(wǎng)——每日最新資訊28at.com

FAQ列表其實就是官方文檔的readme.md, 在我提供的下載鏈接里也附帶了。38G28資訊網(wǎng)——每日最新資訊28at.com

1. 加載所有問題,并顯示統(tǒng)計數(shù)據(jù):38G28資訊網(wǎng)——每日最新資訊28at.com

prefix_q = '##### **Q:** 'with open('README.md') as fp:    questions = [v.replace(prefix_q, '').strip() for v in fp if v.strip() and v.startswith(prefix_q)]    print('%d questions loaded, avg. len of %d' % (len(questions), np.mean([len(d.split()) for d in questions])))    # 33 questions loaded, avg. len of 9

38G28資訊網(wǎng)——每日最新資訊28at.com

一共有33個問題被加載,平均長度是9.38G28資訊網(wǎng)——每日最新資訊28at.com

2. 然后使用預訓練好的模型:uncased_L-12_H-768_A-12 啟動一個Bert服務:38G28資訊網(wǎng)——每日最新資訊28at.com

bert-serving-start -num_worker=1 -model_dir=/data/cips/data/lab/data/model/uncased_L-12_H-768_A-12

38G28資訊網(wǎng)——每日最新資訊28at.com

3. 接下來,將我們的問題編碼為向量:38G28資訊網(wǎng)——每日最新資訊28at.com

bc = BertClient(port=4000, port_out=4001)doc_vecs = bc.encode(questions)

38G28資訊網(wǎng)——每日最新資訊28at.com

4. 最后,我們準備好接收用戶的查詢,并對現(xiàn)有問題執(zhí)行簡單的“模糊”搜索。38G28資訊網(wǎng)——每日最新資訊28at.com

為此,每次有新查詢到來時,我們將其編碼為向量并計算其點積  doc_vecs 然后對結果進行降序排序,返回前N個類似的問題:38G28資訊網(wǎng)——每日最新資訊28at.com

while True:    query = input('your question: ')    query_vec = bc.encode([query])[0]    # compute normalized dot product as score    score = np.sum(query_vec * doc_vecs, axis=1) / np.linalg.norm(doc_vecs, axis=1)    topk_idx = np.argsort(score)[::-1][:topk]    for idx in topk_idx:        print('> %s/t%s' % (score[idx], questions[idx]))

38G28資訊網(wǎng)——每日最新資訊28at.com

完成!現(xiàn)在運行代碼并輸入你的查詢,看看這個搜索引擎如何處理模糊匹配:38G28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片38G28資訊網(wǎng)——每日最新資訊28at.com

38G28資訊網(wǎng)——每日最新資訊28at.com

完整代碼如下,一共23行代碼:38G28資訊網(wǎng)——每日最新資訊28at.com

import numpy as npfrom bert_serving.client import BertClientfrom termcolor import coloredprefix_q = '##### **Q:** 'topk = 5with open('README.md') as fp:    questions = [v.replace(prefix_q, '').strip() for v in fp if v.strip() and v.startswith(prefix_q)]    print('%d questions loaded, avg. len of %d' % (len(questions), np.mean([len(d.split()) for d in questions])))with BertClient(port=4000, port_out=4001) as bc:    doc_vecs = bc.encode(questions)    while True:        query = input(colored('your question: ', 'green'))        query_vec = bc.encode([query])[0]        # compute normalized dot product as score        score = np.sum(query_vec * doc_vecs, axis=1) / np.linalg.norm(doc_vecs, axis=1)        topk_idx = np.argsort(score)[::-1][:topk]        print('top %d questions similar to "%s"' % (topk, colored(query, 'green')))        for idx in topk_idx:            print('> %s/t%s' % (colored('%.1f' % score[idx], 'cyan'), colored(questions[idx], 'yellow')))

夠簡單吧?當然,這是一個基于預訓練的Bert模型制造的一個簡單QA搜索模型。38G28資訊網(wǎng)——每日最新資訊28at.com

你還可以微調(diào)模型,讓這個模型整體表現(xiàn)地更完美,你可以將自己的數(shù)據(jù)放到某個目錄下,然后執(zhí)行 run_classifier.py 對模型進行微調(diào),比如這個例子:38G28資訊網(wǎng)——每日最新資訊28at.com

https://github.com/google-research/bert#sentence-and-sentence-pair-classification-tasks38G28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-86340-0.htmlPython 教你三分鐘用Bert搭建問答搜索引擎

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 系統(tǒng)設計中跨時區(qū)問題 解決方案

下一篇: Go 語言將 PDF 轉為 Word ,代碼怎么實現(xiàn) ?

標簽:
  • 熱門焦點
  • Find N3入網(wǎng):最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經(jīng)正式入網(wǎng),型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發(fā)布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發(fā)布,本次就這款耳機新品給大家?guī)硪粋€簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產(chǎn)
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • SpringBoot中使用Cache提升接口性能詳解

    環(huán)境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應用程序提供了透明式添加緩存的支持。和事務支持一樣,抽象緩存允許一致地使用各
  • 慕巖炮轟抖音,百合網(wǎng)今何在?

    來源:價值研究所 作者:Hernanderz“難道就因為自己的一個產(chǎn)品牛逼了,從客服到總裁,都不愿意正視自己產(chǎn)品和運營上的問題,選擇逃避了嗎?”這一番話,出自百合網(wǎng)聯(lián)合創(chuàng)
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯(lián)網(wǎng)企業(yè)調(diào)整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起“馮提莫”這個名字,很多網(wǎng)友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經(jīng)的“斗魚一姐”,馮提莫在游戲直播的年代影響力不輸于現(xiàn)
  • 機構稱Q2國內(nèi)智能手機銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據(jù)市場調(diào)查機構Counterpoint Research公布的最新報告,2023年第2季度中國智能手機銷量同比下降4%,創(chuàng)新自2014年以來第2季度銷量新低。報
  • Android 14發(fā)布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發(fā)布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發(fā)布了Androi
Top 主站蜘蛛池模板: 黑龙江省| 永昌县| 大方县| 太湖县| 郴州市| 鹤峰县| 定陶县| 包头市| 龙川县| 馆陶县| 宝兴县| 红原县| 平塘县| 侯马市| 凉城县| 宜城市| 弥渡县| 江孜县| 九龙城区| 麦盖提县| 怀仁县| 科尔| 贡觉县| 普定县| 富平县| 东莞市| 敦化市| 永和县| 尖扎县| 宁陵县| 灵石县| 始兴县| 武乡县| 牟定县| 肇源县| 罗田县| 从江县| 镇安县| 包头市| 吉安县| 城固县|