问题的提出来自于使用VectorDB: http://t.csdnimg.cn/z1UMG
VectorDB提供一个数据和嵌入向量匹配的数据结构, 如果我们想要这个DB存储自己的数据, 则还需要计算出数据对应的嵌入向量.
如何准确的构建Text数据和嵌入向量(embedding)之间的关系, 是本篇文章解决的目标.
参考了几个模型后, 我从Bert和Word2vec中选择了后者, 因为我的笔记本是个轻薄本, 只能跑些小型模型.
🔗Word2vec链接: https://github.com/dav/word2vec
目标: 将下面的Text转化为128维度.
"Your long input text here"
实现思路: 使用transformer库中的GPT2模型, 把文本转化为768维度的嵌入向量.
以下为依赖库:
pip install transformers
完整代码如下, 初次运行时比较慢, 因为需要下载GPT2模型:
from transformers import GPT2Tokenizer, GPT2Modeltokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2Model.from_pretrained('gpt2')def text2vec(input):inputs = tokenizer(input, return_tensors="pt")outputs = model(**inputs)embeddings = outputs.last_hidden_state.mean(dim=1).squeeze().detach().numpy()return embeddingif __name__ == "__main__":text = "Your long input text here"embedding=text2vec(text)print(f"text={text}\nembeddings={embedding}\nshape={len(embedding)}")