7

我是机器学习和 Tensorflow 的新手,因为我不知道 python,所以我决定在那里使用 javascript 版本(可能更像是一个包装器)。

问题是我试图建立一个处理自然语言的模型。因此,第一步是对文本进行标记化,以便将数据提供给模型。我做了很多研究,但他们中的大多数都使用 python 版本的 tensorflow,使用的方法如下:tf.keras.preprocessing.text.Tokenizer我在 tensorflow.js 中找不到类似的方法。我被困在这一步,不知道如何将文本传输到可以输入模型的向量。请帮忙 :)

4

3 回答 3

9

要将文本转换为矢量,有很多方法可以做到,这都取决于用例。最直观的一种是使用词频,即,给定语料库的词汇表(所有可能的词),所有文本文档都将表示为一个向量,其中每个条目代表文本文档中单词的出现次数。

有了这个词汇:

["machine", "learning", "is", "a", "new", "field", "in", "computer", "science"]

以下案文:

["machine", "is", "a", "field", "machine", "is", "is"] 

将被转换为这个向量:

[2, 0, 3, 1, 0, 1, 0, 0, 0] 

这种技术的一个缺点是向量中可能有很多 0,其大小与语料库的词汇量相同。这就是为什么还有其他技术。然而,词袋经常被提及。使用tf.idf的版本略有不同

const vocabulary = ["machine", "learning", "is", "a", "new", "field", "in", "computer", "science"]
const text = ["machine", "is", "a", "field", "machine", "is", "is"] 
const parse = (t) => vocabulary.map((w, i) => t.reduce((a, b) => b === w ? ++a : a , 0))
console.log(parse(text))

还有以下模块可能有助于实现您想要的

于 2018-08-03T01:56:09.897 回答
4

好吧,我遇到了这个问题并按照以下步骤处理:

  1. 在你的python代码中tokenizer.fit_on_texts([data])打印之后。tokenizer.word_index
  2. 复制 word_index 输出并将其保存为 json 文件。
  3. 参考这个 json 对象来生成分词,像这样: function getTokenisedWord(seedWord) { const _token = word2index[seedWord.toLowerCase()] return tf.tensor1d([_token]) }
  4. 馈入模型: const seedWordToken = getTokenisedWord('Hello'); model.predict(seedWordToken).data().then(predictions => { const resultIdx = tf.argMax(predictions).dataSync()[0]; console.log('Predicted Word ::', index2word[resultIdx]); })
  5. index2wordword2indexjson对象的反向映射。
于 2019-04-15T17:53:23.097 回答
0

const vocabulary = ["machine", "learning", "is", "a", "new", "field", "in", "computer", "science"]
const text = ["machine", "is", "a", "field", "machine", "is", "is"] 
const parse = (t) => vocabulary.map((w, i) => t.reduce((a, b) => b === w ? ++a : a , 0))
console.log(parse(text))

于 2020-09-17T05:59:32.643 回答