我正在尝试了解word2vec项目中的代码。我指的文件是word2vec.c。该代码段为:

#define EXP_TABLE_SIZE 1000
#define MAX_EXP 6
//...snip...
expTable = (real *)malloc((EXP_TABLE_SIZE + 1) * sizeof(real));
  for (i = 0; i < EXP_TABLE_SIZE; i++) {
    // Precompute the exp() table
    expTable[i] = exp((i / (real)EXP_TABLE_SIZE * 2 - 1) * MAX_EXP);
    // Precompute f(x) = x / (x + 1)
    expTable[i] = expTable[i] / (expTable[i] + 1);
  }
//...snip...

尚不清楚预先计算这些值的好处是什么。有人可以解释吗?

最佳答案

该表保存exp-6范围内的参数的6值。该功能在1001点采样。

同一源文件word2vec.c中的以下代码使用此表来计算指数:

    ...
    if (f <= -MAX_EXP) continue;
    else if (f >= MAX_EXP) continue;
    else f = expTable[(int)((f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2))];
    ...

(因此,如果您想知道表的第一个单元格的值是什么,它是exp(-6))

关于c - 预计算指数(exp)表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21501973/

10-12 13:31