【问题标题】:Predicting Missing Word in Sentence预测句子中的缺失词
【发布时间】:2016-06-22 15:17:54
【问题描述】:

如何预测句子中缺少的单词?

我看过许多关于使用 n-gram 语言模型预测句子中的下一个单词的论文,该模型具有来自一组训练数据的频率分布。但相反,我想预测一个不一定在句末的缺失词。例如:

我带着我的___去散步。

我似乎找不到任何利用空格后面单词的算法;我想我可以忽略它们,但它们必须增加一些价值。当然,二元/三元模型不适用于预测前两个单词。

我应该使用什么算法/模式?还是用空格后面的词没有好处?

【问题讨论】:

  • 您描述的任何算法都应该具有适应性,您只需稍微更改实现,使其不会专门针对先前的单词进行训练。我不确定您所说的“双/三元模型不适用于预测前两个单词”是什么意思,但是这些方法应该可以正常工作-您只需要更改扫描训练数据的模式为,稍微。
  • 好的,谢谢!我会试一试。我的意思是,如果我使用基于前一个单词的算法,我无法预测句子的第一个单词(如果它基于前两个单词,我无法预测前两个单词);但我可能想错了。
  • 好的,我明白你的意思了。我会发布一个答案来澄清更多。
  • 当然,使用下面的词是有好处的。如果您不使用以下单词,那么您无法确定“狗”是一个合适的结果,而“船”是可笑的错误。
  • 训练两种语言模型,一种用于从左到右读取语料库,另一种用于从右到左读取语料库。当给定一个间隙时,调用每个语言模型,其中一个您将预测概率限制在右侧的内容上,而在另一个您将预测概率限制在左侧的内容上。然后取两个概率的平均值,作为你的分数。

标签: algorithm machine-learning nlp


【解决方案1】:

Tensorflow 有一个教程可以做到这一点:https://www.tensorflow.org/versions/r0.9/tutorials/word2vec/index.html

顺便说一句,它会做更多的事情并生成词嵌入,但为了达到目的,他们训练了一个模型来预测(下一个/缺失的)词。它们也显示仅使用前面的单词,但您可以应用相同的想法并添加后面的单词。

他们也有很多关于如何提高精度的建议(跳过 ngrams)。

在教程底部的某处,您可以找到工作源代码的链接。

唯一需要担心的是有足够的训练数据。

【讨论】:

  • 您能否解释一下,直到我需要按照代码来预测下一个丢失的单词?我看到他们通过保存之前和之后出现的单词来创建 Skip Gram 模型。然而,在那之后他们就进入了模型图,我认为这不是我们预测单词所需要的。这是正确的想法吗?我还需要手动保存上下文和单词并自己反转它们吗?
【解决方案2】:

因此,当我使用二元组/三元组时,示例查询通常看起来像“预测 'Would you ____' 中缺少的单词”。然后我会检查我的训练数据并收集与该模式匹配的所有三个单词的集合,并计算空白中的内容。所以,如果我的训练数据看起来像:

would you not do that
would you kindly pull that lever
would you kindly push that button
could you kindly pull that lever

我会得到两项“善意”和一项“不”,我会预测“善意”。对于你的问题,你所要做的就是在不同的地方考虑空白:“____ you kindly”会得到两个“would”和一个“could”,所以你会预测“would”。就计算机而言,词序没有什么特别之处——你可以从你的训练数据中描述你想要的任何模式。这有意义吗?

【讨论】:

  • 谢谢!这很有意义!
猜你喜欢
  • 2020-07-03
  • 1970-01-01
  • 2019-07-25
  • 2020-11-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
相关资源
最近更新 更多