【问题标题】:Need a overall scoring algorithm需要一个整体评分算法
【发布时间】:2021-03-26 10:35:24
【问题描述】:

我有许多词分为不同的类别。每个单词都分配了 0 到 100 之间的排名。如果某个单词出现在文本中,我正在检查文本,我想找到特定类别的总分。

例如,让我们考虑一下,我有一般类别,而我有几个词属于同一类别

word weight count
x 90 5
y 84 4
z 52 2

计数是单词在文本中出现的次数

目前,我正在使用 LOG-SUM-EXP(https://en.wikipedia.org/wiki/LogSumExp) 方法来计算类别的分数。
对于上表,得分为 91.61

SELECT LOG(EXP(90) + EXP(90) + EXP(90) + EXP(90) + EXP(90) + EXP(84) + EXP(84) + EXP(84) + EXP(84) + EXP(52) + EXP(52));

评分时要考虑的事项

  1. 字数和权重

我面临的问题是,如果只有一个单词存在一个计数,那么分数会非常高。

例如,以下查询的得分为 91

SELECT LOG(EXP(91))
word weight count
x 91 1

如果计数低我不想要高分,有没有替代算法可以解决问题?

最终得分应该在 0 到 100 之间。

【问题讨论】:

  • 在您提到的只有 1 个单词的示例中,您认为可以接受的分数是多少?
  • 您在问题中提到的“0 到 1 之间的排名”是否对应于 0 到 100 之间的权重?另外,这个问题与 Java 或 MySQL 有什么关系?这似乎是一个纯粹的数学或算法问题。

标签: algorithm math scoring


【解决方案1】:

尝试将权重用作 0 到 1 之间的值,而不是 1 到 100 之间的值。通过在 Python 中快速实现,您的示例给出:

import numpy as np
def lse(L):
    return np.log(sum(map(np.exp, L)))
example_1 = [.9 for _ in range(5)] + [.84 for _ in range(4)] + [.52 for _ in range(2)]
example_2 = [.9]

然后:

> lse(example_1)
3.2159731667213824
> lse(example_2)
0.9

包含一个元素的集合的 LogSumExp 旨在返回该元素 - 但是,您给出的另一个示例确实具有更高的回报。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多