为什么在SpaCy中token“less”与“more”的相似度更高?
问题原因与解决方案
为什么"less"和"more"相似度高?
en-web-core-lg的词向量是基于大规模文本的上下文共现模式训练的。"less"和"more"经常出现在相似的对比语境中(比如"less sugar, more water"这类结构),模型会将这种高频共现关联为语义相似性,而非区分它们的极性差异,所以会出现反义词相似度偏高的情况。
解决思路
- 结合极性过滤:手动维护或调用反义词词典(比如WordNet),获取"less"的反义词列表(more、greater等),计算相似度后排除这些词。示例逻辑:
from nltk.corpus import wordnet def get_antonyms(word): antonyms = set() for syn in wordnet.synsets(word): for lemma in syn.lemmas(): if lemma.antonyms(): antonyms.update([ant.name() for ant in lemma.antonyms()]) return antonyms less_antonyms = get_antonyms("less") # 计算相似度后过滤掉属于less_antonyms的词 - 换用Transformer-based模型:spaCy的
en_trf_robertabase_lg这类基于BERT的模型,能更好捕捉语义的细微差异(包括极性),相比传统词向量更能区分"less"和"more"的语义对立。 - 基于语境的匹配:不用纯词向量相似度,而是用spaCy的
Matcher或PhraseMatcher,结合"less"的常见搭配语境来筛选句子,比如匹配"less + 名词"或"less than"这类结构,更精准定位目标句子。
内容的提问来源于stack exchange,提问作者SanjeethBoddi
相关产品推荐
相关产品推荐

