Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据意义比较两个字符串?_Javascript_Node.js_Nlp_Ibm Watson_Tensorflow.js - Fatal编程技术网

Javascript 如何根据意义比较两个字符串?

Javascript 如何根据意义比较两个字符串?,javascript,node.js,nlp,ibm-watson,tensorflow.js,Javascript,Node.js,Nlp,Ibm Watson,Tensorflow.js,我希望node.js应用程序的用户写下想法,然后将其存储在数据库中。 到目前为止还不错,但我不希望该表中有多余的条目,所以我决定使用以下条目检查相似性: 你知道一种方法吗,我可以用它来比较两个字符串的意思?例如,“使用公共交通工具”与“乘火车”的相似性得分较高,两者在上述一项中的表现非常差。比较两个字符串的含义仍然是一项正在进行的研究。如果你真的想解决这个问题(或者你的语言模式很好的表现),你应该考虑获得一个博士学位。 对于当时开箱即用的解决方案:我找到了这个Github repo,它实现了g

我希望node.js应用程序的用户写下想法,然后将其存储在数据库中。 到目前为止还不错,但我不希望该表中有多余的条目,所以我决定使用以下条目检查相似性:


你知道一种方法吗,我可以用它来比较两个字符串的意思?例如,“使用公共交通工具”与“乘火车”的相似性得分较高,两者在上述一项中的表现非常差。

比较两个字符串的含义仍然是一项正在进行的研究。如果你真的想解决这个问题(或者你的语言模式很好的表现),你应该考虑获得一个博士学位。 对于当时开箱即用的解决方案:我找到了这个Github repo,它实现了google的BERT模式,并使用它嵌入了两个句子。理论上,如果两个句子有相似之处,那么这两个句子的意思是相同的

#以下内容从其README.md中简化
embedder=SentenceTransformer('bert-base-nli-mean-tokens'))
#例句语料库
S1=[“一个人正在吃一种食物。”]
S2=[“一个男人正在吃意大利面。”
s1_嵌入=嵌入器。编码(s1)
s2_嵌入=嵌入器编码(s2)
dist=scipy.space.distance.cdist([s1_嵌入],[s2_嵌入],“余弦”)[0]

要按意义比较两个字符串,首先需要将字符串转换为张量,然后计算张量之间的距离或相似性。许多算法可用于将字符串转换为张量——所有这些都与感兴趣的领域有关。但通用句子编码器是一种宽泛的句子编码器,它将所有单词投射到一维空间中。余弦相似性可以用来判断某些单词的意义有多接近

示例

虽然
king
kind
在汉明距离上是相近的(只有一个字符的差异),但它们是非常不同的。而
queen
king
虽然看起来不相关(因为所有字符都不同),但它们的意思相近。因此,
king
queen
之间的距离(意义上)应小于
king
kind
之间的距离,如以下代码片段所示


(异步()=>{
const model=wait use.load();
const embeddings=(wait model.embed(['queen','king','kind')).unstack()
tf.loss.cosineDistance(嵌入[0],嵌入[1],0).print()//0.39812755584716797
tf.loss.cosineDistance(嵌入[1],嵌入[2],0).print()//0.5585797429084778
})()  

您刚才描述的是一个涉及人工智能的博士级问题。事实证明,自然语言理解一直是计算中最困难的问题之一。这是一个好问题-欢迎来到社区。很抱歉,圣诞节期间所有孤独的人都把时间花在投票问题上。这不再是一个博士级别的问题——这是一个解决了所有实际问题的问题。使用JxCode的答案以及像谷歌通用语句嵌入这样的较轻模型,使用余弦相似性对相似文本进行分组
Example output (copied from their README.md)

Query: A man is eating pasta.
Top 5 most similar sentences in corpus:
A man is eating a piece of bread. (Score: 0.8518)
A man is eating a food. (Score: 0.8020)
A monkey is playing drums. (Score: 0.4167)
A man is riding a horse. (Score: 0.2621)
A man is riding a white horse on an enclosed ground. (Score: 0.2379)