我正在开展一个项目,我希望能够达到自然语言理解的感觉。但是,我将从小做起,并希望在特定查询上进行训练。
例如,我可以告诉它:
歌曲。
然后,如果它看到像“Kanye Wests songs”这样的句子,它可以与之匹配。
然后我想给它一些额外的句子,这些句子可能意味着相同的事情,以便最终学会能够将未知句子预测到我训练过的一组中。
所以我可以加上句子:“歌曲
当然,它可以是一个可以再次匹配的名称数据库。
我遇到了一个整洁的网站,Wit.ai就像我说的那样。但是,他们将匹配解析为意图,我希望将其匹配为简化查询或更好地匹配数据库(如facebook图搜索)。
我理解上下文无关语法对此有用(其他什么?)。但是,训练几个CFG的好方法是什么,我说它具有相似的含义,然后当它看到未知的句子时,它可以尝试和预测。
任何想法都会很棒。
基本上我希望能够采用自然语言句子并将其转换为某种形式,可以更好地理解我的系统,并以一种很好的方式呈现给用户。不确定是否有更好的堆栈交换!
答案 0 :(得分:9)
首先,我认为SO非常适合这个问题(我检查了区域51,NLP没有堆栈交换)。
假设您已熟悉PCFG语法的常规培训,我将进入一些可能有助于您实现目标的细节:
在语料库上训练的任何语法都将取决于该训练语料库中的单词。对于未知单词的不良表现不仅仅是PCFG培训中的一个众所周知的问题,而是几乎任何概率学习框架。然而,我们可以做的是将问题视为一个释义问题。毕竟,你想把具有相同含义的句子组合在一起,对吧?
在最近的研究中,检测具有相同(或相似)含义的句子或短语采用了一种称为分布相似性的技术。它旨在改善对看不见的共生的概率估计。基本概念是
共享相同分布的单词或短语 - 语料库中相同上下文中的同一组单词 - 往往具有相似的含义。
您只能使用内在功能(例如PCFG中的制作规则)或使用其他语义知识(例如FreeBase等本体)来支持此类功能。使用额外的语义知识可以生成具有相似含义的更复杂的句子/短语,但这种方法通常只适用于特定的域。因此,如果您希望系统仅适用于音乐,那么这是一个好主意。
重现实际的分布相似性算法会使这个答案非常长,所以这里有一篇优秀文章的链接:
Madnani和DorrGenerating Phrasal and Sentential Paraphrases: A Survey of Data-Driven Methods。
对于您的工作,您只需要阅读第3.2节:使用单个单语语料库进行释义。我相信本文中标记为“算法1”的算法对您有用。但是,我不知道有任何可公开使用的工具/代码。