Estoy trabajando con Tensorflow.js en mecanografiado y quiero obtener la similitud del coseno de dos tensores 1D, pero tengo problemas para tratar con los tipos que usa tensorflow. Cuando calculo la similitud del coseno, al usar esta función debería obtener un número, pero en su lugar obtengo un montón de otros tipos diferentes, incluido el número.
function calculateCosineSimilarity(abstractEmbedding: tf.Tensor1D | Array<number>, queryEmbedding: tf.Tensor1D | Array<number>): number{ const dotProd: tf.Tensor = tf.dot(abstractEmbedding, queryEmbedding); const lenAbstractEmbedding: tf.Tensor = tf.dot(abstractEmbedding, abstractEmbedding); const lenQueryEmbedding: tf.Tensor = tf.dot(queryEmbedding, queryEmbedding); const similarityScore: tf.Tensor = tf.div(dotProd, tf.mul(lenAbstractEmbedding,lenQueryEmbedding)); return similarityScore.arraySync(); }Recibo este error en la declaración de devolución:
Type 'number | number[] | number[][] | number[][][] | number[][][][] | number[][][][][] | number[][][][][][]' is not assignable to type 'number'.Sé que cuando toma productos de puntos de matrices multidimensionales, las dimensiones/tipos de la matriz resultante variarán, pero en mi caso, sé que obtendré un solo valor, por lo que solo quiero devolver un solo número. ¿Hay alguna forma de resolver este problema sin tener que cambiar el tipo de devolución de la función?
No creo que sea la mejor práctica, pero si no desea que el tipo de retorno de la función enumere todas esas opciones de tipo, o sea Cualquiera, entonces puede forzar la coerción de la variable de respuesta a desconocido, si es necesario. y luego al tipo que espera.
return similarityScore.arraySync() as number;o si los tipos no se superponen lo suficiente
return similarityScore.arraySync() as unknown as number;