首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OOV的近邻也是OOV - FastText

OOV的近邻也是OOV - FastText
EN

Stack Overflow用户
提问于 2021-12-25 11:58:43
回答 1查看 81关注 0票数 0

我试图在快速文本中获取词汇外单词( OOV )的最近邻居,然而,似乎最近的邻居也是OOV?这是我使用的代码:

代码语言:javascript
复制
    # 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的文档中找到任何解释。

EN

回答 1

Stack Overflow用户

发布于 2021-12-28 21:21:42

单独训练的模型将不具有兼容的坐标空间,除非您采取其他步骤强制这样做。(模型初始化、训练和不同训练数据的影响-甚至多线程训练期间任意线程排序的影响-有足够的随机性,即每个培训过程基本上都在创建自己的单独但在内部是合理的“空间”。)

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

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

如果两个语料库中的语言/词义是一致的,那么您可能需要将所有的文本/单词训练成一个单一的组合模式。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70479869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档