用于查找相似词 n-gram 的预训练模型

数据挖掘 nlp 快速文本
2022-02-27 04:45:23

是否有任何预训练模型来查找相似的单词 n-gram,其中 n>1?

例如,FastText 似乎只适用于 unigram:

from pyfasttext import FastText
model = FastText('cc.en.300.bin')
model.nearest_neighbors('dog', k=2000)

[('dogs', 0.8463464975357056),
 ('puppy', 0.7873005270957947),
 ('pup', 0.7692237496376038),
 ('canine', 0.7435278296470642),
 ...

但它在较长的 n-gram 上失败:

model.nearest_neighbors('Gone with the Wind', k=2000)

[('DEky4M0BSpUOTPnSpkuL5I0GTSnRI4jMepcaFAoxIoFnX5kmJQk1aYvr2odGBAAIfkECQoABAAsCQAAABAAEgAACGcAARAYSLCgQQEABBokkFAhAQEQHQ4EMKCiQogRCVKsOOAiRocbLQ7EmJEhR4cfEWoUOTFhRIUNE44kGZOjSIQfG9rsyDCnzp0AaMYMyfNjS6JFZWpEKlDiUqALJ0KNatKmU4NDBwYEACH5BAUKAAQALAkAAAAQABIAAAhpAAEQGEiQIICDBAUgLEgAwICHAgkImBhxoMOHAyJOpGgQY8aBGxV2hJgwZMWLFTcCUIjwoEuLBym69PgxJMuDNAUqVDkz50qZLi',
  0.71047443151474),

或者

model.nearest_neighbors('Star Wars', k=2000)
[('clockHauser', 0.5432934761047363),
 ('CrônicasEsdrasNeemiasEsterJóSalmosProvérbiosEclesiastesCânticosIsaíasJeremiasLamentaçõesEzequielDanielOséiasJoelAmósObadiasJonasMiquéiasNaumHabacuqueSofoniasAgeuZacariasMalaquiasNovo',
  0.5197194218635559),
1个回答

首先,据我所知,没有专门为生成 ngram 嵌入而训练的模型。虽然,修改 word2vec 算法以适应 ngram 将非常容易。

现在,你能做什么?

您可以通过总结单个词嵌入来计算 ngram 嵌入。例如,您可以潜在地应用基于 tfidf 的权重,但不是必需的。一旦你有 1 个嵌入,只需使用余弦距离找到最近的邻居。

另一种方法虽然计算成本更高,但计算 ngram 之间的 Earth Mover 距离(也称为 Wasserstein)并以这种方式找到最近的邻居。