• Как обучить W2V модель в разных контекстах?

    @Eldrich Автор вопроса
    Применение алгоритмов обучения doc2vec практически полностью разрешило задачу.
    Ответ написан
  • Как оптимизировать код на JS для ускорения работы?

    @Eldrich Автор вопроса
    Нашел решение, объединив возможности библиотеки и совет @Taraflex

    Код выглядит так:
    var kernelMatrixSize = 4096
    
            const gpu = new GPU({
                mode: 'gpu'
            });
    
            const f3 = gpu.createKernel(function(inp1, inp2) {
    
                    var a = 0
                    var b = 0
                    var c = 0
                    for (var i = 0; i < 300; i++) {
                        a += inp1[this.thread.y][i] * inp2[this.thread.x][i]
                        b += Math.pow(inp1[this.thread.y][i], 2)
                        c += Math.pow(inp2[this.thread.x][i], 2)
                    }
    
                    return Math.floor(a / (Math.sqrt(b * c)) * 1000000) / 1000000;
    
                }).setOutput([kernelMatrixSize, kernelMatrixSize])
                .setOutputToTexture(true);
    x = getAllDistanceBetween(vectorsData)
    y = x[0].toArray(gpu)


    Если стоит метка setOutputToTexture, то вычисление матрицы 4096х4096 длится 224 мс, преобразование текстуры в массив занимает примерно 3 секунды. Высчитываем только половину матрицы, так как расстояние от 0 вектора до 1 = расстоянию от 1 к 0. Итого вычисление всех необходимых ячеек займет чуть меньше 60 секунд, вместо 6 минут ранее.

    Всем спасибо за помощь.
    Ответ написан