Machine learning 理解上下文词的自然语言处理技术

Machine learning 理解上下文词的自然语言处理技术,machine-learning,deep-learning,nlp,word-embedding,linguistics,Machine Learning,Deep Learning,Nlp,Word Embedding,Linguistics,采取以下句子: 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 在这种情况下

采取以下句子:

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

感谢您的建议


编辑:我知道各种嵌入模型可以帮助了解这个问题。如果这是您的答案,您如何解释返回的单词embedding?这些阵列的长度可以超过500+,这是不实际的解释

我不知道这有多有用,但从我的观点来看,单词向量嵌入是自然分离的,在样本空间中的位置与单词的不同用法密切相关。然而,就像你经常说的,一个词可以在多种语境中使用


为了解决这个问题,通常使用使用上下文(如连续词包)或连续跳过gram模型的编码技术对特定上下文(如交换或调整的更改)中的词的用法进行分类。这一思想也应用于基于LSTM的体系结构或RNN中,其中上下文在输入序列上保持不变


从可视化的角度来看,对词向量的解释是不实际的,而只是从与样本空间中其他词的“相对距离”的角度来看。另一种方法是维护语料库矩阵,该矩阵中的单词表示上下文用途。 事实上,有一种神经网络,它利用双向语言模型,首先预测即将出现的单词,然后在句子末尾返回并尝试预测前面的单词。它叫埃尔莫。你应该把报纸通读一遍。还有这个


自然,模型从有代表性的例子中学习。因此,对于同一个单词的不同用法,你提供的训练集越好,那么更好的模型就可以学会利用上下文赋予单词意义。通常,这是人们通过使用以领域为中心的培训数据来解决其特定案例的方法

我认为这些可能会有所帮助:

您要做的是调用。多年来,它一直是一个研究主题,虽然它可能不是最流行的问题。即使是现在,仅仅从一个词中挑出最常见的意思也是一个很强的底线

单词嵌入可能很有用,但它们的使用与您在这里尝试的操作是正交的

下面是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'
这些方法大多比较陈旧,我不能说它们的质量如何,但至少这是一个很好的起点


词义通常来自于。正如另一个答案中所提到的,像BERT这样经过训练的语言模型在这方面可能很有用。这些模型根据上下文生成表示

最近的预训练语言模型使用单词块,但spaCy有一个将这些单词块与自然语言标记对齐的实现。例如,可以根据上下文检查不同标记的相似性。来自

导入空间
进口火炬
进口numpy
nlp=空间负荷(“en_trf_bertbaseuncased_lg”)
apple1=nlp(“苹果股票因该消息上涨”)
apple2=nlp(“苹果本季度iPhone销量减少”)
apple3=nlp(“苹果派很好吃。”)
打印(apple1[0]。相似性(apple2[0])#0.73428553
打印(应用1[0]。相似性(应用3[0])#0.43365782

谢谢你的回答。我听说过Elmo、BERT和其他流行的嵌入模型,它们似乎是这个问题的逻辑解决方案。只是好奇而已,你知道有哪种技术从视觉角度来看更简单吗?例如,如果有一个类似于Elmo的模型,但不是一个巨大的500+数组,它将返回一个10元素数组,大多数人只要看它就会知道句子是不同的。我可能正在描述一些目前不可能实现的事情(我仍在学习嵌入的细节)。好吧,您可以通过添加一两层来修改体系结构,以将输出处理到较低的维度。但这可能会影响模型的准确性。一段时间前,我尝试使用低维的Word-2-vec模型,但经过长时间的训练,结果证明是一种浪费。更高的维度保护了相似性,同时突出了考虑到语料库中的单词数量的差异。限制在一个10维的向量会使它变得困难。但同样,您可以在不同的上下文中对同一单词的输出进行后期处理,并制作一个更简单的表示,这似乎是一个非常好的开始。我真的很感谢你的回答。这不是在比较完整的句子,而不仅仅是关键词吗?在本例中,
Apple
no这是比较所有句子中基于上下文嵌入的标记“Apple”和index=0。你可以看看我链接的文章,了解更多细节