首页 > 解决方案 > TensorflowJS 文本/字符串分类

问题描述

主题

你好。我想NodeJS.
它的工作是将字符串与一些预定义的主题相匹配。

例子:

输入::String“我的狗喜欢在沙滩上散步”
预定义的主题::输出Array<String>:有很多我喜欢的输出变体。这些是一些例子,但如果你能提出更好的建议,那就去做吧!["dog", "cat", "cow"]

研究

我知道可以通过过滤主题名称的字符串并执行一些算法来实现类似的结果,但也可以使用 ML 来实现。

已经有一些关于使用字符串、分类文本和使用 TensorFlow 创建自动完成功能的帖子(但不确定TFjs,如下所示:

你可以如何提供帮助

我的目标是用TensorflowJS. 我只需要一个示例,说明使用字符串训练模型或如何对文本进行分类的最佳方法,然后我将自行扩展其余部分。

标签: node.jstensorflowmachine-learningtexttensorflow.js

解决方案


文本分类有一个额外的挑战,即首先从单词中找到向量。根据所解决问题的性质,有多种方法。在构建模型之前,可以确保将向量与语料库的所有单词相关联。在从语料库中表示向量后,又遇到了另一个稀疏问题。因此产生了词嵌入的需要。该任务最流行的两种算法是Wor2VecGloVe。js中有一些实现。或者可以使用此处概述的词袋创建向量。

一旦有了向量,完全连接的神经网络 FCNN 就足以预测文本的主题。其他要考虑的事情是决定文本的长度。如果文本太短,可能会有一些填充等......这是一个模型

const model = tf.sequential();
model.add(tf.layers.dense({units: 100, activation: 'relu', inputShape: [lengthSentence]}));
model.add(tf.layers.dense({units: numTopics, activation: 'softmax'}));
model.compile({optimizer: 'sgd', loss: 'categoricalCrossentropy'});

模型的关键要点

该模型只是将输入连接到分类输出。这是一个非常简单的模型。但在某些场景下,可以考虑在输入层之后添加嵌入层。

model.add(tf.layers.embedding({inputDim: inputDimSize, inputLength: lengthSentence, outputDim: embeddingDims}))

在其他一些情况下,LSTM层可能是相关的

tf.layers.lstm({units: lstmUnits, returnSequences: true})

推荐阅读