gpt4 book ai didi

python - 简短短语的快速文本表示,但不适用于包含短短语的较长短语

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:34 26 4
gpt4 key购买 nike

我正在使用Gensim用于加载德语.bin来自Fasttext的文件为了获得词汇表之外的单词和短语的向量表示。到目前为止,它运行良好,总体上取得了良好的结果。
我熟悉KeyError :'all ngrams for word <word> absent from model'.显然,该模型并未为每种可能的 ngram 组合提供向量表示。
但现在我遇到了一个令人困惑的(至少对我来说)问题。
我举一个简单的例子:
该模型提供了短语 AuM Wert 的表示.
但是当我想获得 AuM Wert 50 Mio. Eur 的代表时,我会得到KeyError上文提到的。因此,该模型显然具有较短短语的表示,但不具有扩展短语的表示。
它甚至返回 AuM Wert 50 Mio.Eur 的表示形式(我刚刚删除了“Mio”和“Eur”之间的空格)
我的意思是,错误中的陈述根本不正确,因为第一个示例表明它知道一些 ngram。有人可以向我解释一下吗?这里我不明白什么?难道我对ngram的理解错了?

代码如下:

from gensim.models.wrappers import FastText
model = FastText.load_fasttext_format('cc.de.300.bin')
model.wv['AuM Wert'] #returns a vector
model.wv['AuM Wert 50 Mio.EUR'] #returns a vector
model.wv['AuM Wert 50 Mio. EUR'] #triggers the error

提前致谢,
阿莫斯

最佳答案

我不确定是什么导致了您所看到的行为,尽管我有以下理论。

但是,请注意当前的 gensim 行为(通过 3.7.1)有时会返回 KeyError: all ngrams for word <...> absent对于 OOV 单词,不符合 Facebook 原始 FastText 实现的行为,因此被视为错误。

应该会在下一个版本中修复它。您可以阅读change note about the new compatible behavior

因此,在不久的将来,使用最新版本的 gensim,您将永远不会看到这个“KeyError”。

与此同时,可能解释您所观察到的行为的因素包括:

  • 通常不会将空格分隔的短语传递给 FastText 。此外,训练文本的通常标记化只会传递单词标记,没有任何内部空格。因此,对于典型的模型来说,此类包含空格的短语不可能具有全词向量。而且,它们包含空格的字符 n 元语法也不会映射到训练期间看到的 n 元语法。如果您在 gensim 3.7.1 及更早版本中获得向量,那是因为在训练中发现了一些包含空格的 n 元语法。 (在 3.7.1 后,你总是会得到一个向量,尽管它可能是由查询词的新颖 n-gram 与训练中学习的 n-gram 的随机碰撞组成的,或者只是由随机初始化但从未训练过的 n-gram 组成的模型的 n-gram 哈希表内的向量。)
  • N-gram 是通过合成的词头前缀和词尾后缀学习的 - 特别是字符 <> 。默认的 n-gram 大小范围是 4 到 6 个字符。所以,你的字符串 'AuM Wert'其 n 元语法中将包括 '<AuM' , 'Wert' ,和'ert>' 。 (它的所有其他 n-gram 都将包含空格字符,因此不可能位于在没有空格的单词训练期间学习的 n-gram 集合中。)。但请注意,出现错误的较长短语将包含n-gram 'ert>' ,因为前面的结束标记已被替换为空格。因此,较短短语的 n 元语法不是较大短语 n 元语法的正确子集 - 并且较大短语可能会出错,而较短短语不会出错。 (没有空格的较长短语不会出错,还包括一些额外的 4-6 个字符的 n 元语法,这些 n 元语法可能存在于训练数据中,但错误短语没有。)

关于python - 简短短语的快速文本表示,但不适用于包含短短语的较长短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55028281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com