您要尝试的操作称为Word Sense Disambiguation。多年来,它一直是研究的主题,尽管它可能不是最流行的问题remains a topic of active research。即使是现在,仅选择一个单词的最常识也是一个很强的基准。
单词嵌入可能会很有用,但其用法与您在此处尝试做的事情正交。
这里有pywsd的一些示例代码,这是一个Python库,其中包含一些经典技术的实现:
>>> from pywsd.lesk import simple_lesk
>>> sent = 'I went to the bank to deposit my money'
>>> ambiguous = 'bank'
>>> answer = simple_lesk(sent,ambiguous,pos='n')
>>> print answer
Synset('depository_financial_institution.n.01')
>>> print answer.definition()
'a financial institution that accepts deposits and channels the money into lending activities'
这些方法大多数都是过时的,我不能说它们的质量,但这至少是一个很好的起点。
感官通常来自WordNet。
,
我不知道这有什么用,但是从我的POV中,单词向量嵌入自然地分离了,并且样本空间中的位置与单词的不同用法密切相关。但是,就像您经常说的那样,在某些情况下可能会使用一个词。
为了解决该目的,通常使用利用上下文的编码技术,例如连续的单词袋或连续的跳过语法模型,以在特定上下文中对单词的用法进行分类,例如用于交换或调整的变化。这个想法也适用于基于LSTM的体系结构或RNN,其中上下文在输入序列上得以保留。
从可视化的角度来看,对单词向量的解释是不切实际的,而对于样本空间中的其他单词,只能从“相对距离”的角度进行解释。另一种方法是维护语料库的矩阵,并为该矩阵中的单词表示上下文使用。
实际上,有一个神经网络利用双向语言模型先预测即将到来的单词,然后在句子结尾返回并尝试预测先前的单词。叫做ELMo。您应该仔细阅读本文。ELMo Paper和这个blog
自然,该模型从代表性示例中学习。因此,您对同一单词的各种用法给出的训练集越好,更好的模型就可以学习利用上下文将含义附加到单词上。通常,这是人们通过使用以领域为中心的训练数据来解决其特定情况的方法。
我认为这些可能会有所帮助:
Efficient Estimation of Word Representations in
Vector Space
,
如另一个答案中所述,像BERT这样的预训练语言模型可能对此有用。这些模型基于上下文生成表示。
最近的预训练语言模型使用字词,但是spaCy具有将这些字词与自然语言标记对齐的实现。然后例如可以基于上下文检查不同令牌的相似性。 https://explosion.ai/blog/spacy-transformers
中的示例
import spacy
import torch
import numpy
nlp = spacy.load("en_trf_bertbaseuncased_lg")
apple1 = nlp("Apple shares rose on the news.")
apple2 = nlp("Apple sold fewer iPhones this quarter.")
apple3 = nlp("Apple pie is delicious.")
print(apple1[0].similarity(apple2[0])) # 0.73428553
print(apple1[0].similarity(apple3[0])) # 0.43365782
本文链接:https://www.f2er.com/2951616.html