【问题标题】:Nearest Neighbours of OOV are also OOV - FastTextOOV 的最近邻居也是 OOV - FastText
【发布时间】: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


【解决方案1】:

单独训练的模型将具有兼容的坐标空间,除非您采取一些其他步骤来强制这种情况。 (模型初始化、训练、不同训练数据的效果以及多线程训练期间的任意线程排序有足够的随机性,以至于每个训练会话本质上都是在创建自己独立但内部敏感的“空间”。)

因此,即使是像'hot' 这样的简单单词也可能出现在任意不同的位置,而相对距离/方向仅在相同模型中才有意义。

因此我怀疑正在发生的事情(没有完全单步执行您的代码)是对于来自一个模型的任何 OOV 词,所有最近的词汇表中的词(同一模型)在 other 模型。

如果两个语料库中的语言/词义兼容,您可能希望将所有文本/词训练成一个组合模型。

(您还可以考虑其他“对齐”/翻译技术,如果模型有一组共享的“锚”字,您愿意规定应该具有相同的坐标 - 但这是一个比将所有数据/单词放入一个统一模型更复杂且可能“更宽松”的过程。)

【讨论】:

  • 感谢您的准确解释,但为了清楚起见,我在 same 模型中找到 OOV 最近邻而不是在不同模型中
  • 啊哈。您需要检查单词 n[1] 是否在模型的 .words], *not* the (similarity, word)` 元组中。例如:nn1 = [n[1] for n in nnsims1 if n[1] in model1.words]。或者通过解构更清楚:nn1 = [word for score, word in nnsims1 if word in model1.words](抱歉,我主要在 Gensim 中使用不同的 FastText API,所以一开始没有注意到这一点。)
  • 是的,就是这样。不用担心,感谢您的指导
猜你喜欢
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 2018-09-06
  • 2020-11-05
  • 1970-01-01
相关资源
最近更新 更多