her*_*hen 6 javascript nlp node.js ibm-watson tensorflow.js
我希望 Node.js 应用程序的用户写下想法,然后将其存储在数据库中。到目前为止一切顺利,但我不想在该表中出现多余的条目,所以我决定使用这个来检查相似性: https ://www.npmjs.com/package/string-similarity-js
你知道一种方法,可以通过意义来比较两个字符串吗?就像“使用公共交通”与“乘坐火车”的相似度得分很高一样,在上述一项中表现非常差。
要按含义比较两个字符串,需要首先将字符串转换为张量,然后评估张量之间的距离或相似度。许多算法可用于将字符串转换为张量 - 所有算法都与感兴趣的领域相关。但通用句子编码器是一种广泛的句子编码器,它将所有单词投影在一维空间中。余弦相似度可用于查看某些单词在含义上的接近程度。
例子
虽然king和 的kind汉明距离很接近(只有一个字符的差异),但它们却有很大不同。尽管queen和king虽然它们看起来不相关(因为所有字符都不同),但含义很接近。king因此,和之间的距离(有意义)queen应该小于king和之间的距离kind,如以下代码片段所示。
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/universal-sentence-encoder"></script>
<script>
(async() => {
const model = await use.load();
const embeddings = (await model.embed(['queen', 'king', 'kind'])).unstack()
tf.losses.cosineDistance(embeddings[0], embeddings[1], 0).print() // 0.39812755584716797
tf.losses.cosineDistance(embeddings[1], embeddings[2], 0).print() // 0.5585797429084778
})()
</script>Run Code Online (Sandbox Code Playgroud)
比较两个字符串的含义仍然是一项正在进行的研究。如果你真的想解决问题(或者想让你的语言模式获得真正好的表现),你应该考虑获得博士学位。
对于当时的开箱即用解决方案:我找到了这个 Github 存储库,它实现了谷歌的 BERT 模式并使用它来获得两个句子的嵌入。理论上,如果嵌入相似,两个句子具有相同的含义。
https://github.com/UKPLab/sentence-transformers
# the following is simplified from their README.md
embedder = SentenceTransformer('bert-base-nli-mean-tokens')
# Corpus with example sentences
S1 = ['A man is eating a food.']
S2 = ['A man is eating pasta.']
s1_embedding = embedder.encode(S1)
s2_embedding = embedder.encode(S2)
dist = scipy.spatial.distance.cdist([s1_embedding], [s2_embedding], "cosine")[0]
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |