【发布时间】:2022-01-25 11:55:40
【问题描述】:
我正在尝试在 fasttext 中获取词汇表外 (OOV) 单词的最近邻,但是,最近邻似乎也是 OOV?这是我正在使用的代码:
# get the intersection of the vocabularies of both models
all_vocab = []
all_vocab.append(model1.words)
all_vocab.append(model2.words)
# get the intersection of all vocabulary
common_vocab = list(set.intersection(*map(set, all_vocab)))
print('len of common vocab: {}'.format(len(common_vocab)))
# len of common vocab: 112251
nnsims1 = model1.get_nearest_neighbors(w, k)
nnsims2 = model2.get_nearest_neighbors(w, k)
nn1 = [n[1] for n in nnsims1 if n in model1.words]
nn2 = [n[1] for n in nnsims2 if n in model2.words]
print(len(nn1) == len(nnsims1)) # False
print(len(nnsims1), len(nn1)) # 50 0
print(len(nn2) == len(nnsims2)) # False
print(len(nnsims2), len(nn2)) # 50 0
我对此的解释是,如果这个词是 OOV,那么它的向量是一些子词的聚合,并且由于这个“聚合表示”不在词汇表中,所以它没有来自那个词汇表的邻居。但是,OOV 词的邻居是如何生成的?我似乎无法从 FastText 的文档中找到任何解释。
【问题讨论】:
-
你的
model1&model2来自哪里? -
@gojomo 他们都是 FastText 模型
-
你自己训练过他们吗?怎么训练的?还是从其他人的培训中下载?
-
@gojomo 我自己在我拥有的语料库上训练了他们——我使用了 SGNS
标签: python nearest-neighbor word-embedding fasttext