如何使用词嵌入模型
如何使用词嵌入模型
作用
将文本转换成向量
用在哪里?
- 训练和使用语言模型的时候,但是类似 GPT 这样的模型会使用自己的词嵌入模型
- 知识库中,做文本检索的时候
官网FlagEmbedding
安装依赖
pip install -U FlagEmbedding
pip install peft
FlagEmbedding 依赖于 sentence_transformers,所以可以直接安装 sentence_transformers
模型下载
首页 · 魔搭社区
示例代码
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(r'D:\Weather_pred\bge-large-zh-v1___5')
embeddings = model.encode(['你好', '你叫什么名字'])
from FlagEmbedding import FlagModel# 加载模型
model = FlagModel(r'D:\Weather_pred\bge-large-zh-v1___5')t1 = '你好,请问你叫什么名字?'
# t2 = '你好吗?请问你叫啥名?'
t2 = '我叫张三,你呢?'# 密集编码(将整句话变成向量)
result = model.encode(t1)
print(result)
result = model.encode([t1, t2])
print(result)# 相似度得分 是 0~1 的值,越接近 1 越相似
score = result[0] @ result[1]
print(score)
分词
将一句话中的词语拆分出来
API 文档
result = model.tokenizer([t1, t2],add_special_tokens=False, # 是否添加特殊符号,例如: [CLS] [SEP]max_length=10, # 限制最大长度truncation=True, # 超出最大长度是否截断# padding='max_length', # 填充模式# return_tensors='pt' # 返回张量的类型,若不填,则返回列表;pt 代表 pytorch; tf 代表 tensorflowreturn_token_type_ids=True,return_overflowing_tokens=True # 是否返回溢出的文本
)
print(result)
print(result['input_ids']) # 文本在词库中的索引
print(result['attention_mask']) # 注意力掩码,1 代表有效输入的位置 0 代表填充的位置
获取词库的大小
print(model.tokenizer.vocab_size)
print(len(model.tokenizer))
解码
print(model.tokenizer.decode(result['input_ids'][0]))
print(model.tokenizer.decode(result['input_ids'][1]))
# 批量解码
print(model.tokenizer.batch_decode(result['input_ids']))
转换 idx list 变成 token 列表
tokens = model.tokenizer.convert_ids_to_tokens(result['input_ids'][0])
编码
print(model.encode(tokens))