我正在进行一个项目,希望实现自然语言理解的效果。然而,我打算从小处着手,首先在特定的查询上进行训练。
例如,刚开始我可能会告诉它:
歌曲。
然后如果它看到像“卡尼·韦斯特的歌曲”这样的句子,它可以与之匹配。
但是,我还希望给它一些额外的句子,这些句子可能意味着同样的事情,这样它最终能够学会将未知的句子预测到我已经训练过的集合中。
所以我可能会添加句子:“由
当然,还会有一个它可以匹配的名字数据库。
我发现了一个很棒的网站,Wit.ai,它做的正是我所谈论的。然而,他们将匹配解析为意图,而我希望将其匹配到简化的查询,或者更好的是数据库查询(如Facebook图形搜索)。
我知道无上下文语法(CFG)在这方面会很有效(还有其他方法吗?)。但是,训练几个具有相似含义的CFG,然后当它看到未知句子时尝试预测,有哪些好的方法呢?
任何想法都会很棒。
基本上,我希望能够将一个自然语言句子转换为某种形式,使我的系统更容易理解,并以一种美观的方式呈现给用户。不确定是否有更适合的StackExchange网站!
回答:
首先,我认为StackOverflow非常适合这个问题(我在Area 51上查过了,没有专门的NLP StackExchange)。
假设你已经熟悉了PCFG语法的常规训练,我将进入一些可能帮助你实现目标的具体细节:
任何在语料库上训练的语法都会依赖于该训练语料库中的词汇。对于未知词汇的表现不佳是PCFG训练以及几乎所有概率学习框架中众所周知的问题。然而,我们可以将这个问题视为一个释义问题。毕竟,你是想将具有相同含义的句子归为一类,对吗?
在最近的研究中,检测具有相同(或相似)含义的句子或短语时,采用了一种称为分布相似性的技术。它旨在改善未见过的共现的概率估计。基本概念是
在语料库中具有相同分布——相同上下文中相同词汇集的词汇或短语,往往具有相似的含义。
你可以仅使用内在特征(例如PCFG中的生成规则),或者通过额外的语义知识(例如像FreeBase这样的本体)来增强这些特征。使用额外的语义知识可以生成具有相似含义的更复杂的句子/短语,但这种方法通常只在特定领域内表现良好。所以,如果你希望你的系统仅在音乐领域表现良好,这是一个好主意。
重现实际的分布相似性算法会使这个回答变得非常冗长,所以这里有一个优秀文章的链接:
Generating Phrasal and Sentential Paraphrases: A Survey of Data-Driven Methods 由Madnani和Dorr撰写。
对于你的工作,你只需要阅读第3.2节:使用单一单语语料库进行释义。我相信这篇论文中标记为“算法1”的算法对你会很有用。然而,我不知道有任何公开可用的工具/代码可以做到这一点。