nlp - 余弦相似度涉及嵌入,我们是否必须嵌入整个句子/文本?

标签 nlp word-embedding cosine-similarity sentence-transformers

假设我有一些这样的代码。我正在使用编码函数来创建嵌入。然后,在我选择的所有模型都面向余弦相似度(而不是点积相似度)之后,我会根据这些计算计算余弦相似度得分。

我的问题是,您是否总是按原样嵌入整个字符串,或者您是否/可以在对两个字符串进行编码之前对它们进行清理?停用词出来了。也许只保留名词或实体。这是一个问题吗,或者结果字符串中的不连续性/非语法可能性会伤害我们吗?

from sentence_transformers import SentenceTransformer, util
model_name = 'sentence-transformers/multi-qa-mpnet-base-cos-v1'
model = SentenceTransformer(model_name)
phrase1 = 'Some arbitrarily long string from a book'
phrase2 = "This is a another arbitrarily long string from the same book'    
emb1 = model.encode(phrase1)
emb2 = model.encode(phrase2)

我得到的余弦相似度分布得不太好。好的匹配和坏的匹配之间没有足够的区别。

最佳答案

由于您使用的是句子嵌入,因此对整个句子进行编码更有意义。

为了增加分离度,另一种方法可能是,如果您了解大多数文本所属的类别,那么您可以使用零样本分类器为每个类别的每个文本给出分数。您可以像半监督方法一样不断细化类别。

关于nlp - 余弦相似度涉及嵌入,我们是否必须嵌入整个句子/文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77503757/

相关文章:

nlp - 哪里可以从维基词典下载多语言单词列表?

Ruby:有没有 "knows"英文不规则动词的词干分析器?

machine-learning - 词嵌入训练

java - 从庞大的文本语料库中删除停用词的最有效方法是什么?

python-3.x - BERT文件嵌入

nlp - 如何将词嵌入和 pos 嵌入结合在一起来构建分类器

kernel - 当对 TfIdfVectorizer 使用 linear_kernel 或 cosine_similarity 时,我收到错误 "Kernel died, restarting"

postgresql - 如何获得postgres中两个向量之间的余弦距离?

Elasticsearch 评分

regex - 脚本是否有一种非常简单的方法(从上下文中)判断 "her"是否是所有格代名词?