目录
一、ALBERT
ALBERT (A Lite BERT) 是一种改进的 BERT 模型,旨在减少参数数量并提高训练速度,同时保持或提高性能。“albert_chinese_large”是 ALBERT 模型的一个版本,它是在中文数据集上预训练的。
ALBERT模型的主要特点包括:
1、参数减少技术:ALBERT 通过因式分解词嵌入参数和跨层参数共享来减少模型参数的数量,这使得模型更小,更容易训练和部署。
2、句子顺序预测:除了 BERT 中的掩码语言模型(MLM)任务外,ALBERT 还引入了句子顺序预测(SOP)任务,以改善句子级别的理解。
3、自监督学习:ALBERT 使用自监督学习方法进行预训练,这意味着它不需要标注数据。它通过预测掩码的单词和判断句子顺序来学习语言知识。
4、多尺度学习:ALBERT 在不同的尺度上学习信息,包括单词、短语和句子级别,这使得模型能够捕捉到不同层次的语言特征。
二、基于ALBERT进行文本向量化
1、导包、下载预训练模型
import torch
from transformers import BertTokenizer,BertModel,BertConfig
import numpy as np
pretrained = 'voidful/albert_chinese_large'
tokenizer = BertTokenizer.from_pretrained(pretrained)
model=BertModel.from_pretrained(pretrained)
config=BertConfig.from_pretrained(pretrained)
如果本地没有加载过albert_chinese_large模型,通过以上代码会自动从Hugging Face(一个开源的nlp模型库)下载,不过由于该网站可能无法访问,会出现以下报错信息:
'(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /voidful/albert_chinese_large/resolve/main/tokenizer_config.json (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x7fee551d3d60>, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: d18d1da5-28a1-427c-82c0-693784491a94)')' thrown while requesting HEAD https://huggingface.co/voidful/albert_chinese_large/resolve/main/tokenizer_config.json
对于不会黑科技的同学,我提供了百度云下载链接:点我下载。提取码:g6n9
可自行下载,将该压缩包解压放在:
(Windows)“C:\Users\Administrator\.cache\huggingface\hub”路径下
或(Linux)“/root/.cache/huggingface/hub”路径下
当然,也可以在from_pretrained函数指定cache_dir模型缓存路径。
2、使用预训练模型进行编码
def albert_encode(text):
'''
使用预训练模型进行编码
'''
inputtext = text
tokenized_text=tokenizer.encode(inputtext)
input_ids=torch.tensor(tokenized_text).view(-1,len(tokenized_text))
outputs=model(input_ids)
return outputs
3、向量余弦相似度计算
def cos_sim(vector_a, vector_b):
"""
计算余弦相似度
"""
vector_a = np.mat(vector_a)
vector_b = np.mat(vector_b)
num = float(vector_a * vector_b.T)
denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)
cos = num / denom
sim = 0.5 + 0.5 * cos
return sim
4、测试
if __name__ == '__main__':
outputs1=albert_encode('Word2Vec是一种将单词映射到向量空间的模型,可以用于生成句向量')
outputs2=albert_encode('BERT是一种基于Transformer的预训练语言表示模型,可以用于生成句向量')
print(outputs1[1].shape,outputs2[1].shape)
vector_a=outputs1[1][0].detach().numpy()
vector_b=outputs2[1][0].detach().numpy()
sim=cos_sim(vector_a,vector_b)
print('相似度:',sim)
输出结果:
torch.Size([1, 1024]) torch.Size([1, 1024])
相似度: 0.9969849579943442
三、总结
可以看到,ALBERT将文本句子嵌入到1024维的向量空间中,对于每个输入句子会得到1024长度的向量,并可将其用于下游任务,如文本相似度计算、文本分类等等。如果需要将预训练模型用于特点任务、特定应用领域,最好是用一定的标记数据微调一下,以适应特定任务或理解特定领域的概念。