uni-gram 何时比 bi-gram(或更高的 N-gram)更合适?

Posted

技术标签:

【中文标题】uni-gram 何时比 bi-gram(或更高的 N-gram)更合适?【英文标题】:When are uni-grams more suitable than bi-grams (or higher N-grams)? 【发布时间】:2016-08-01 06:41:12 【问题描述】:

我正在阅读有关 n-gram 的文章,我想知道在实践中是否存在使用 uni-grams 优于 bi-grams 的情况(或更高的N-gram)。据我了解,N 越大,计算概率和建立向量空间的复杂度就越大。但除此之外,还有其他原因(例如与数据类型有关)吗?

【问题讨论】:

向量空间?!您是指概率向量,即多项分布吗? - 没有 99% 的把握,我可以说 unigram 永远不应该用作 n-gram 语言模型。 正如下面提到的 Lior,我的意思是向量空间,例如TF-IDF。在这种情况下,您将如何使用概率向量? n-gram 语言模型旨在定义词汇表中单词的概率向量,以上下文为条件(即在 unigrm 情况下,上下文为空,因此概率基本上定义为最大似然估计: \frac# of a specific word in the training data#of words in the training data 计算概率的弱方法。 【参考方案1】:

这归结为data sparsity:随着您的 n-gram 长度增加,您看到任何给定 n-gram 的次数将会减少:在最极端的例子,如果您有一个最大文档长度为 n 个标记的语料库,并且您正在寻找一个 m-gram 其中 m= n+1,当然,您将根本没有数据点,因为在您的数据集中根本不可能有这样长度的序列。您的数据集越稀疏,the worse you can model it。出于这个原因,尽管高阶 n-gram 模型在理论上包含有关单词上下文的更多信息,但它不能轻易推广到其他数据集(称为overfitting),因为随着 n 的增加,它在训练期间看到的事件数(即 n-grams)会逐渐减少。另一方面,低阶模型缺少上下文信息,因此可能underfit 您的数据。

因此,如果你的token types的数量非常多(即你的文本的词汇量非常丰富)但是这些类型中的每一个的频率都非常低,你可能会用较低的频率获得更好的结果-订购 n-gram 模型。同样,如果您的训练数据集非常小,则使用低阶 n-gram 模型可能会做得更好。但是,假设你有足够的数据来避免过度拟合,你then get better separability of your data with a higher-order model。

【讨论】:

补充一点:如果标记是独立的,那么 1-gram 和 n-gram 一样好。例如朴素贝叶斯是一个你经常可以忽略上下文/相关性的例子。但正如您所回答的那样,主要问题可能是您需要(以指数方式?)更多的训练数据,您的 n-gram 越长。 @Anony-Mousse:关于独立性的评论非常好。然而,我认为,至少在 NLP 中,你试图在大多数任务中建模的现象的真正统计独立性是非常罕见的——或者我错了吗?另外,需要does indeed increase exponentially的训练数据量。 这真的取决于你想做什么。垃圾邮件检测中的朴素贝叶斯是 1-gram 表现良好的主要例子。但在其他情况下,您至少希望使用二元组。 @Anony-Mousse: 是的,我听说过垃圾邮件分类,但是高阶 n-grams 不会表现得更好吗?--否则,这样的句子因为:“我收到的几乎所有垃圾邮件都包含像'viagra'、'Vi@gr@'、'viaaggggra'、'via.gra'等等这样的词”具有讽刺意味的是,它强烈地表明了垃圾邮件。 使用 n-gram 的错误可能有利于 的决定。 NB的估计概率通常是不可用的;但是二元决策垃圾邮件-非垃圾邮件非常好。对于大部分是随机单词和“伟哥”的垃圾邮件,位置信息可能不会增加太多价值;也可能是因为非垃圾邮件文本如此多样化,n-gram 在很大程度上是独一无二的。简单地说:如果“伟哥”已经有 99% 表示垃圾邮件,“购买伟哥”可能只会将这一比例提高到 99.9% - 结果相同。【参考方案2】:

通常,大于 1 的 n-gram 更好,因为它通常携带更多关于上下文的信息。但是,有时除了二元组和三元组之外,还计算一元组并用作它们的后备。这也很有用,如果您想要高召回率而不是精确度来搜索一元组,例如,您正在搜索动词“make”的所有可能用法。

让我们以统计机器翻译为例: 直观地说,最好的情况是您的模型之前已经看过完整的句子(比如说 6 克)并且知道它的整体翻译。如果不是这种情况,您可以尝试将其划分为更小的 n-gram,同时考虑到您对单词环境了解的信息越多,翻译效果就越好。例如,如果您想将“Tom Green”翻译成德语,如果您看到双元组,您将知道它是一个人名并且应该保持原样,但如果您的模型从未见过它,您将退回到unigrams 并分别翻译“Tom”和“Green”。因此“Green”将被翻译成“Grün”的颜色等等。

此外,在搜索中了解更多有关周围环境的信息会使结果更加准确。

【讨论】:

以上是关于uni-gram 何时比 bi-gram(或更高的 N-gram)更合适?的主要内容,如果未能解决你的问题,请参考以下文章

CUDA - 更多的 SM 或更高的时钟频率?

html 当在亚马逊页面上时,单击链接以提示输入数字以过滤所选折扣百分比或更高的项目。

我明明已经面试到了一个职位更高的工作但工资比现在低,但我非得找一个职位高工资也高的工作,最后?

克隆如何比对象创建具有更高的性能

云对象存储错误 - 创建存储桶需要 Writer 或更高权限

如何在 android 9 上赋予 WiFi 比以太网更高的优先级?