Nlp 最有分量的单词中的分句

Nlp 最有分量的单词中的分句,nlp,combinatorics,Nlp,Combinatorics,我正在做一个游戏,我需要找到一个特定句子的最大权重 假设我有一个句子“快速棕色狐狸”,并假设只有一个单词具有定义的权重:“the”->10,“quick”->5,“brown”->3,“fox”->8 在这种情况下,问题是无关紧要的,因为解决方案在于增加每个单词的权重 现在假设我们还添加了两个单词,所以除了上面的单词外,我们还有“quick”->5,“quick brown”->10,“brown fox”->1 我想知道哪个单字和双字组合的分量最大,在这种情况下是“the”,“quick br

我正在做一个游戏,我需要找到一个特定句子的最大权重

假设我有一个句子“快速棕色狐狸”,并假设只有一个单词具有定义的权重:“the”->10,“quick”->5,“brown”->3,“fox”->8

在这种情况下,问题是无关紧要的,因为解决方案在于增加每个单词的权重

现在假设我们还添加了两个单词,所以除了上面的单词外,我们还有“quick”->5,“quick brown”->10,“brown fox”->1

我想知道哪个单字和双字组合的分量最大,在这种情况下是“the”,“quick brown”,“fox”

我的问题是,除了明显的暴力手段外,还有没有其他可能的方法来获得解决方案?不用说,我正在寻找一些最佳的方法来实现更大的句子

谢谢。

你可以像这样看图书馆。在这种情况下,您将希望最大化分数,并且您的目标函数将包含权重。然后您可以对其进行约束,就像不能同时使用“快速棕色”和“棕色”一样


对于单词对齐,本文中使用了这一点,但您的问题要简单得多,但您可以浏览本文,了解ILP的使用方式。除了ILP之外,可能还有其他算法可以用来优化解决这个问题,但是ILP可以优化并有效地解决小问题。

这感觉像是一个动态规划问题

我可以想象句子中的k个单词放在一起,每个单词之间有一个灯泡(即总共k-1个灯泡)。如果一个灯泡是打开的,那意味着它旁边的单词是一个短语的一部分,如果它是关闭的,它们不是。因此,这些灯泡的任何配置都表明可能存在重量组合。。当然,许多配置甚至是不可能的,因为我们没有他们需要的任何分数。因此,k-1灯泡意味着我们最多可以找到2^(k-1)个可能的答案

我们可以认识到,每个计算都有一些部分可以重复用于其他计算,而不是野蛮地强迫它,因此对于(快速)(棕色狐狸…懒狗)和(快速)(棕色狐狸…懒狗),我们只能计算一次(棕色狐狸…懒狗)的最大分数,记住它并在下次看到它时重复使用,而不做任何额外的工作

在我们开始之前,我们应该首先扔掉只有一个可能值的灯泡(假设我们没有“棕色狐狸”或任何更大的短语,那么“棕色”和“狐狸”之间的灯泡总是必须关掉)。。每个拆下的灯泡使溶液空间减半

如果w1,w2,w3是单词,那么灯泡应该是w1w2,w2w3,w3w4,等等

Optimal(w1w2 w2w3 w3w4 ...) = max(Optimal(w2w3 w3w4 ...) given w1w2 is on, Optimal(w2w3 w3w4 ...) given w1w2 is off)
(警告:如果我们遇到了无法解决的问题,我们只需返回MIN_INT,事情就会解决)

我们可以像这样解决问题,但如果我们能巧妙地按照接近灯泡的顺序来处理,我们可能会节省更多的时间。也许先攻击中心灯泡会有帮助。。这一部分我不太清楚。

<10“快”>5,“棕色”>3,“狐狸”>8 对于上述单个单词,我将使用数组 [10,5,3,8]对于单词0,1,2,3 遍历列表并获取两个分数的组合是否小于组合分数 例如 10+5>5+快速>快速 5+3<10快速棕色>快速棕色。记下这个 等等

标记组合溶液时,沿连续范围标记它们。 例如 如果单词分数是 单词=[1,2,5,3,1,4,6,2,6,8]和[4,6,9,7,8,2,9,1,2] 标记范围(包括两端) 是[0,1],[2,5],[6,7]

下面给出了伪代码

从0遍历到字长-1

if number not in range :
add word[number] to overall sum.
else:
if length of range = 1 :
    add combined_word_score [ lower_end_number]
 else if length of range = 2 :
    add combined_word_score [ lower_end_number+next number]
else if length of range > 2 and is odd number :
    add max (alternate_score_starting at lower_end_number , 
              word[lower_end]+word[higher_end]+alternate_score_starting at 
                next_number)
else if length of range > 2 and is even number :
     add max (alternate_score_starting at lower_end_number +word[higher_end],
              word[lower_end]+alternate_score_starting at 
                next_number).

因此,句子
的分数是
10+5+5
?首先,句子应该包含所有单词,单字或双字。在我展示的例子中,总分是10+10+8。请注意,分数适用于单字或双字,而不是同时适用于两个字。谢谢,这似乎对我想要实现的目标非常有用。我会看一看这篇论文,并希望找到如何将我的问题映射到这个方法中。