如何增加 BERT 句子转换器嵌入的维向量大小
How to increase dimension-vector size of BERT sentence-transformers embedding
我正在使用句子转换器进行语义搜索,但有时它不理解上下文含义和 returns 错误的结果
例如。
默认情况下,句子嵌入的向量侧是78列,那么如何增加该维度,以便它能够更深入地理解上下文含义。
代码:
# Load the BERT Model
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('bert-base-nli-mean-tokens')
# Setup a Corpus
# A corpus is a list with documents split by sentences.
sentences = ['Absence of sanity',
'Lack of saneness',
'A man is eating food.',
'A man is eating a piece of bread.',
'The girl is carrying a baby.',
'A man is riding a horse.',
'A woman is playing violin.',
'Two men pushed carts through the woods.',
'A man is riding a white horse on an enclosed ground.',
'A monkey is playing drums.',
'A cheetah is running behind its prey.']
# Each sentence is encoded as a 1-D vector with 78 columns
sentence_embeddings = model.encode(sentences) ### how to increase vector dimention
print('Sample BERT embedding vector - length', len(sentence_embeddings[0]))
print('Sample BERT embedding vector - note includes negative values', sentence_embeddings[0])
增加训练模型的维度是不可能的(没有很多困难并重新训练模型)。您使用的模型是使用 768 维进行预训练的,即模型的所有权重矩阵都有相应数量的训练参数。增加维度将意味着添加参数,但是需要学习这些参数。
此外,模型的维度并不能反映句子表示中的语义或上下文信息量。模型维度的选择更多地体现了模型容量、训练数据量和合理推理速度之间的权衡。
如果您使用的模型没有提供语义上足够丰富的表示,您可能想要搜索更好的模型,例如 RoBERTa 或 T5。
不幸的是,以有意义的方式增加嵌入维度的唯一方法是重新训练模型。 :(
但是,也许这不是您需要的...也许您应该考虑微调模型:
我建议您看看 UKPLabs 的 sentence-transformers。
他们有 100 多种语言的句子嵌入预训练模型。最好的部分是您可以 fine tune 那些模型。
祝你好运!
我正在使用句子转换器进行语义搜索,但有时它不理解上下文含义和 returns 错误的结果
例如。
默认情况下,句子嵌入的向量侧是78列,那么如何增加该维度,以便它能够更深入地理解上下文含义。
代码:
# Load the BERT Model
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('bert-base-nli-mean-tokens')
# Setup a Corpus
# A corpus is a list with documents split by sentences.
sentences = ['Absence of sanity',
'Lack of saneness',
'A man is eating food.',
'A man is eating a piece of bread.',
'The girl is carrying a baby.',
'A man is riding a horse.',
'A woman is playing violin.',
'Two men pushed carts through the woods.',
'A man is riding a white horse on an enclosed ground.',
'A monkey is playing drums.',
'A cheetah is running behind its prey.']
# Each sentence is encoded as a 1-D vector with 78 columns
sentence_embeddings = model.encode(sentences) ### how to increase vector dimention
print('Sample BERT embedding vector - length', len(sentence_embeddings[0]))
print('Sample BERT embedding vector - note includes negative values', sentence_embeddings[0])
增加训练模型的维度是不可能的(没有很多困难并重新训练模型)。您使用的模型是使用 768 维进行预训练的,即模型的所有权重矩阵都有相应数量的训练参数。增加维度将意味着添加参数,但是需要学习这些参数。
此外,模型的维度并不能反映句子表示中的语义或上下文信息量。模型维度的选择更多地体现了模型容量、训练数据量和合理推理速度之间的权衡。
如果您使用的模型没有提供语义上足够丰富的表示,您可能想要搜索更好的模型,例如 RoBERTa 或 T5。
不幸的是,以有意义的方式增加嵌入维度的唯一方法是重新训练模型。 :(
但是,也许这不是您需要的...也许您应该考虑微调模型:
我建议您看看 UKPLabs 的 sentence-transformers。 他们有 100 多种语言的句子嵌入预训练模型。最好的部分是您可以 fine tune 那些模型。
祝你好运!