You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中标签文本相似度计算的最优方案及代码实现

Node.js环境下文本标签相似度评估最优方案

方案1:TensorFlow.js加载预训练词向量(推荐)

利用TensorFlow.js维护活跃的预训练模型,无需依赖老旧word2vec库,直接在Node.js中计算词向量余弦相似度,适配现代Node.js版本,还支持短语级匹配。

实现步骤:

  1. 安装依赖:
npm install @tensorflow/tfjs-node @tensorflow-models/universal-sentence-encoder
  1. 代码实现:
const tf = require('@tensorflow/tfjs-node');
const use = require('@tensorflow-models/universal-sentence-encoder');

async function calculateSimilarity(label1, label2) {
  // 加载预训练模型
  const model = await use.load();
  // 生成两个标签的向量
  const embeddings = await model.embed([label1, label2]);
  // 计算余弦相似度
  const similarityMatrix = await embeddings.matMul(embeddings.transpose()).array();
  // 返回两个标签的相似度值(范围0-1,越接近1越相似)
  return similarityMatrix[0][1];
}

// 测试示例
calculateSimilarity('technology', 'computer').then(sim => {
  console.log('相似度:', sim); // 输出接近1的值
});
calculateSimilarity('technology', 'food').then(sim => {
  console.log('相似度:', sim); // 输出接近0的值
});

方案2:FastText的Node.js现代适配

FastText的官方封装库已适配Node.js 16+版本,支持预训练词向量加载和相似度计算,适合专注于单个词汇的场景。

实现步骤:

  1. 安装依赖:
npm install @fasttext/fasttext.js
  1. 下载Facebook官方英文预训练模型(如cc.en.300.bin)到本地目录
  2. 代码实现:
const FastText = require('@fasttext/fasttext.js');
const path = require('path');

// 初始化FastText实例,加载本地预训练模型
const fastText = new FastText({
  model: path.resolve(__dirname, 'cc.en.300.bin') // 替换为你的模型本地路径
});

async function getWordSimilarity(word1, word2) {
  // 获取词向量
  const vec1 = await fastText.getWordVector(word1);
  const vec2 = await fastText.getWordVector(word2);
  // 计算余弦相似度
  const dotProduct = vec1.reduce((sum, val, idx) => sum + val * vec2[idx], 0);
  const mag1 = Math.sqrt(vec1.reduce((sum, val) => sum + val**2, 0));
  const mag2 = Math.sqrt(vec2.reduce((sum, val) => sum + val**2, 0));
  return dotProduct / (mag1 * mag2);
}

// 测试
getWordSimilarity('chip', 'computer').then(sim => {
  console.log('相似度:', sim);
});

方案3:Sentence-BERT轻量封装(精准语义匹配)

Sentence-BERT在语义相似度表现上优于传统词向量,适合处理多词标签或短语级别的匹配需求,通过Node.js封装库可快速实现。

实现步骤:

  1. 安装依赖:
npm install @tensorflow/tfjs-node sentencebert
  1. 代码实现:
const tf = require('@tensorflow/tfjs-node');
const SentenceBERT = require('sentencebert');

async function computeSimilarity(text1, text2) {
  // 加载轻量预训练模型all-MiniLM-L6-v2
  const model = await SentenceBERT.load('all-MiniLM-L6-v2');
  // 获取句子向量
  const embeddings = await model.encode([text1, text2]);
  // 将余弦距离转换为相似度(范围0-1)
  const cosineDistance = tf.losses.cosineDistance(embeddings[0], embeddings[1], 0).dataSync()[0];
  return 1 - cosineDistance;
}

// 测试
computeSimilarity('technology', 'chip').then(sim => {
  console.log('相似度:', sim);
});

方案4:同义词词典规则 fallback(简单场景)

如果对精度要求不高、需要快速实现,可基于同义词词典做规则匹配,适合小范围词汇场景。

实现步骤:

  1. 安装依赖:
npm install wordnet-db node-wordnet
  1. 代码实现:
const WordNet = require('node-wordnet');
const wordnet = new WordNet();

async function checkSynonymSimilarity(word1, word2) {
  if (word1.toLowerCase() === word2.toLowerCase()) return 1;
  // 获取word1的所有同义词
  const synsets1 = await wordnet.lookup(word1);
  const synonyms1 = new Set();
  synsets1.forEach(synset => {
    synset.synonyms.forEach(syn => synonyms1.add(syn.toLowerCase()));
  });
  // 返回相似度值:同义词返回0.8,非同义词返回0.1
  return synonyms1.has(word2.toLowerCase()) ? 0.8 : 0.1;
}

// 测试
checkSynonymSimilarity('computer', 'technology').then(sim => {
  console.log('相似度:', sim);
});

内容的提问来源于stack exchange,提问作者Sir hennihau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:07:35