用于理解上下文词的自然语言处理技术

采用以下句子:

I'm going to change the light bulb

change的意思是replace,就像有人要更换灯泡一样。这可以通过使用字典API或类似的方法轻松解决。但是,以下句子

I need to go the bank to change some currency

You need to change your screen brightness

第一句话不再意味着replace,它意味着Exchange,第二句话change意味着adjust

在这种情况下,如果您想了解change的含义,那么有人会使用哪些技术基于句子的上下文来提取正确的定义?我想做什么叫什么?

请记住,输入内容只有一个句子。像这样:

Screen brightness is typically too bright on most peoples computers.
People need to change the brightness to have healthier eyes.

这不是我要解决的问题,因为您可以使用前面的句子来设置上下文。同样,这将适用于许多不同的单词,而不仅仅是单词change

欣赏建议。

编辑:我知道各种嵌入模型可以帮助您深入了解此问题。如果这是您的答案,您将如何解释返回的嵌入词?这些数组的长度可能超过500+,这很难解释。

lz0738 回答:用于理解上下文词的自然语言处理技术

您要尝试的操作称为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

大家都在问