成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 前端
今天我們介紹的這個模塊,能讓你在3分鐘內基于BERT算法搭建一個問答搜索引擎。它就是 bert-as-service 項目。這個開源項目,能夠讓你基于多GPU機器快速搭建BERT服務(支持微調模型),并且能夠讓多個客戶端并發(fā)使用。

鼎鼎大名的 Bert 算法相信大部分同學都聽說過,它是Google推出的NLP領域“王炸級”預訓練模型,其在NLP任務中刷新了多項記錄,并取得state of the art的成績。

但是有很多深度學習的新手發(fā)現BERT模型并不好搭建,上手難度很高,普通人可能要研究幾天才能勉強搭建出一個模型。

沒關系,今天我們介紹的這個模塊,能讓你在3分鐘內基于BERT算法搭建一個問答搜索引擎。它就是 bert-as-service 項目。這個開源項目,能夠讓你基于多GPU機器快速搭建BERT服務(支持微調模型),并且能夠讓多個客戶端并發(fā)使用。

1.準備

開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

(可選1) 如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.

(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南。

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

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

請注意,服務端的版本要求:Python >= 3.5,Tensorflow >= 1.10 。

此外還要下載預訓練好的BERT模型,在 https://github.com/hanxiao/bert-as-service#install 上可以下載,如果你無法訪問該網站,也可以在 https://pythondict.com/download/bert-serving-model/ 此處下載。

也可在Python實用寶典后臺回復 bert-as-service 下載這些預訓練好的模型。

下載完成后,將 zip 文件解壓到某個文件夾中,例如 /tmp/uncased_L-24_H-1024_A-16/.

2.Bert-as-service 基本使用

安裝完成后,輸入以下命令啟動BERT服務:

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

-num_worker=4 代表這將啟動一個有四個worker的服務,意味著它最多可以處理四個并發(fā)請求。超過4個其他并發(fā)請求將在負載均衡器中排隊等待處理。

下面顯示了正確啟動時服務器的樣子:

圖片圖片

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

現在你可以簡單地對句子進行編碼,如下所示:

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

作為 BERT 的一個特性,你可以通過將它們與 |||(前后有空格)連接來獲得一對句子的編碼,例如

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

圖片圖片

遠程使用 BERT 服務

你還可以在一臺 (GPU) 機器上啟動服務并從另一臺 (CPU) 機器上調用它,如下所示:

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

3.搭建問答搜索引擎

我們將通過 bert-as-service 從FAQ 列表中找到與用戶輸入的問題最相似的問題,并返回相應的答案。

FAQ列表其實就是官方文檔的readme.md, 在我提供的下載鏈接里也附帶了。

  • 加載所有問題,并顯示統(tǒng)計數據:
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

一共有33個問題被加載,平均長度是9.

  • 然后使用預訓練好的模型:uncased_L-12_H-768_A-12 啟動一個Bert服務:
bert-serving-start -num_worker=1 -model_dir=/data/cips/data/lab/data/model/uncased_L-12_H-768_A-12
  • 接下來,將我們的問題編碼為向量:
bc = BertClient(port=4000, port_out=4001)
doc_vecs = bc.encode(questions)
  • 最后,我們準備好接收用戶的查詢,并對現有問題執(zhí)行簡單的“模糊”搜索。

為此,每次有新查詢到來時,我們將其編碼為向量并計算其點積  doc_vecs 然后對結果進行降序排序,返回前N個類似的問題:

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]))

完成!現在運行代碼并輸入你的查詢,看看這個搜索引擎如何處理模糊匹配:

圖片圖片

完整代碼如下,一共23行代碼:

import numpy as np
from bert_serving.client import BertClient
from termcolor import colored

prefix_q = '##### **Q:** '
topk = 5

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])))

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搜索模型。

你還可以微調模型,讓這個模型整體表現地更完美,你可以將自己的數據放到某個目錄下,然后執(zhí)行 run_classifier.py 對模型進行微調,比如這個例子:

https://github.com/google-research/bert#sentence-and-sentence-pair-classification-tasks

責任編輯:武曉燕 來源: Python實用寶典
相關推薦

2021-10-27 05:47:53

通信協(xié)議協(xié)議網絡技術

2024-05-16 11:13:16

Helm工具release

2009-11-09 12:55:43

WCF事務

2024-12-18 10:24:59

代理技術JDK動態(tài)代理

2022-01-06 18:20:20

Scarlet AndroidWebSocket

2024-01-16 07:46:14

FutureTask接口用法

2021-04-20 13:59:37

云計算

2022-02-17 09:24:11

TypeScript編程語言javaScrip

2024-08-30 08:50:00

2023-12-27 08:15:47

Java虛擬線程

2020-06-30 10:45:28

Web開發(fā)工具

2013-06-28 14:30:26

棱鏡計劃棱鏡棱鏡監(jiān)控項目

2021-08-09 10:36:49

Python搜索引擎命令

2020-08-17 17:20:36

pythonJAVA代碼

2022-02-21 18:16:38

Go語言枚舉

2021-12-17 07:47:37

IT風險框架

2025-02-24 10:40:55

2020-06-29 07:42:20

邊緣計算云計算技術

2023-12-04 18:13:03

GPU編程

2024-07-05 09:31:37

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人激情视频在线观看 | 欧美一级免费观看 | 日韩伦理一区二区 | 黄 色 毛片免费 | 本道综合精品 | 在线亚洲人成电影网站色www | av中文在线 | 日韩中文在线观看 | 国产99久久精品一区二区永久免费 | 亚洲欧美中文日韩在线v日本 | 久久小视频 | 国产一区二区在线播放 | 九九热在线观看视频 | 日韩美女爱爱 | 国产在线中文 | 亚洲精品中文字幕在线观看 | 日韩av在线一区二区 | 欧美毛片免费观看 | 欧美9999| 99视频免费播放 | 91精品一区二区三区久久久久 | 91中文| www亚洲精品 | 久久99精品国产99久久6男男 | 国产精品成av人在线视午夜片 | 日韩在线欧美 | 国产视频福利一区 | 三级av在线 | 国产农村妇女精品一区 | 欧美日韩黄| 福利视频大全 | 超碰人人人人 | 国产亚洲成av人片在线观看桃 | 亚洲午夜视频在线观看 | 久久99精品视频 | 日本精品一区二区三区在线观看视频 | 国产在线一区二区三区 | 久久精品视频亚洲 | av天天看 | 男女在线网站 | 成年人网站国产 |