На самом деле, я нашел решение для этого.
В файле gensim.models.keyedvectors
под class WordEmbeddingKeyedVectors
мы можем изменить значение с
def init_sims(self, replace=False):
"""Precompute L2-normalized vectors."""
if getattr(self, 'vectors_norm', None) is None or replace:
logger.info("precomputing L2-norms of word weight vectors")
self.vectors_norm = _l2_norm(self.vectors, replace=replace)
на
def init_sims(self, replace=False):
"""Precompute L2-normalized vectors."""
if getattr(self, 'vectors_norm', None) is None or replace:
logger.info("precomputing L2-norms of word weight vectors")
self.vectors_norm = _l2_norm(self.vectors, replace=replace)
elif (len(self.vectors_norm) == len(self.vectors)): #if all of the added vectors are pre-computed into L2-normalized vectors
pass
else: #when there are vectors added but have not been pre-computed into L2-normalized vectors yet
logger.info("adding L2-norm vectors for new documents")
diff = len(self.vectors) - len(self.vectors_norm)
self.vectors_norm = vstack((self.vectors_norm, _l2_norm(self.vectors[-diff:])))
По сути, если исходная функция выполняетнет self.vectors_norm
, рассчитывается по L2-нормализации self.vectors
.Однако, если в self.vectors
есть какие-либо новые добавленные векторы, которые не были предварительно вычислены в L2-нормализованные векторы, мы должны предварительно вычислить их, а затем добавить к self.vectors_norm
.
.это как комментарий к вашему сообщению об ошибке @gojomo и добавление запроса на получение!Спасибо :)