下面是一個求職範例:
我使用來自 Huggingface Transformer 的預訓練模型。
手動將預先訓練的分詞器和 t5/bert 模型下載到本機目錄中。
我使用“t5-small”模型,檢查此處並單擊List all files in model
以下載檔案。
請注意手動下載的檔案目錄結構。
您可以使用其他 T5 或 Bert 型號。
如果您下載其他模型,請檢查hugaface Transformers預訓練模型清單以檢查模型名稱。
$ export TOKEN_DIR=path_to_your_tokenizer_directory/tokenizer
$ export MODEL_DIR=path_to_your_model_directory/model
$ export MODEL_NAME=t5-small # or other model you downloaded
$ export INDEX_NAME=docsearch
$ docker-compose up --build
我還使用docker system prune
刪除所有未使用的容器、網路和映像,以獲得更多記憶體。如果您遇到Container exits with non-zero exit code 137
錯誤,請增加您的 docker 記憶體(我使用8GB
)。
我們使用密集向量資料類型來保存從預訓練 NLP 模型中提取的特徵(這裡是 t5 或 bert,但您可以自行添加您感興趣的預訓練模型)
{
...
"text_vector" : {
"type" : " dense_vector " ,
"dims" : 512
}
...
}
尺寸尺寸dims:512
適用於 T5 型號。如果您使用 Bert 模型,請將dims
變更為 768。
從mysql讀取doc並將文件轉換為正確的json格式以批次匯入elasticsearch。
$ cd index_files
$ pip install -r requirements.txt
$ python indexing_files.py
# or you can customize your parameters
# $ python indexing_files.py --index_file='index.json' --index_name='docsearch' --data='documents.jsonl'
請造訪http://127.0.0.1:5000。
使用預訓練模型提取特徵的關鍵程式碼是./index_files/indexing_files.py
和./web/app.py
檔案中的get_emb
函數。
def get_emb ( inputs_list , model_name , max_length = 512 ):
if 't5' in model_name : #T5 models, written in pytorch
tokenizer = T5Tokenizer . from_pretrained ( TOKEN_DIR )
model = T5Model . from_pretrained ( MODEL_DIR )
inputs = tokenizer . batch_encode_plus ( inputs_list , max_length = max_length , pad_to_max_length = True , return_tensors = "pt" )
outputs = model ( input_ids = inputs [ 'input_ids' ], decoder_input_ids = inputs [ 'input_ids' ])
last_hidden_states = torch . mean ( outputs [ 0 ], dim = 1 )
return last_hidden_states . tolist ()
elif 'bert' in model_name : #Bert models, written in tensorlow
tokenizer = BertTokenizer . from_pretrained ( 'bert-base-multilingual-cased' )
model = TFBertModel . from_pretrained ( 'bert-base-multilingual-cased' )
batch_encoding = tokenizer . batch_encode_plus ([ "this is" , "the second" , "the thrid" ], max_length = max_length , pad_to_max_length = True )
outputs = model ( tf . convert_to_tensor ( batch_encoding [ 'input_ids' ]))
embeddings = tf . reduce_mean ( outputs [ 0 ], 1 )
return embeddings . numpy (). tolist ()
您可以更改程式碼並使用您最喜歡的預訓練模型。例如,您可以使用 GPT2 模型。
您也可以使用自己的分數函數而不是.webapp.py
中的cosineSimilarity
來自訂您的elasticsearch。
這個rep是基於Hironsan/bertsearch修改的,它使用bert-serving
套件來提取bert特徵。它僅限於 TF1.x