最近一直在搞论文的理论背景,没有时间复习Python的的基础,不过这个月也加深了自己对于自然语言处理的一些理解,构建了一个比较全面的理论框架,在这里写下来备忘。下面的一些例子来自于《Python for NLP》一书中,有助于我们理解一些常用的语言理解技术。
- 词义消歧:根据上下文,分析特定的词是哪个意思,以下是一个简单的例子:
a. The lost children were found by the searchers (实施者)
b. The lost children were found by the mountain (地点)
c. The lost children were found by the afternoon (时间)
可以看到,单词“by”在上面三个句子中,分别承担了不同的含义,我们需要根据by后面的词,来分析出by的具体意思,这就是词义消歧。
- 指代消解:检测动词的主语和宾语(谁对谁做了什么)
a. The thieves stole the paintings. They were subsequently sold.
b. The thieves stole the paintings. They were subsequently caught.
c. The thieves stole the paintings. They were subsequently found.
考虑以上三个句子的结构,是什么被出售,被抓或者被找到。这就需要找到代词they的先行词thieves或者paintings. 这里其实下分两种计算技术,分别是指代消解(确定代词所指的目标),以及语义角色标注(确定名词短语如何与动词关联)
- 自动生成语言
这项技术的主要目标,是实现“自动问答”以及“机器翻译”这两个功能,比如我们经常用到的siri,或者一些问答机器人
Text: The thieves stole the paintings. They were subsequently sold.
users: what was sold?
PC: The paintings.
- 机器翻译
时至今日,机器翻译依旧是自然语言处理的圣杯。可惜的是,机器仍然无法完全替代人工翻译,调用NLTK工具包中的“babelizer”框架,我们可以看到机器翻译面临的困难:1. 给定的单词可能又几种不同的解释(词义消歧)2. 不同语言间的词序变换。处理机器翻译的困难,可以考虑根据已有的双语词典,建立特定的模型。比如从一个双语网站上,采集一百万个双语“句子对”,根据这些句子对的词序,词义来建立翻译新文本的模型。
- 人机对话系统
在人工智能的历史中,主要的智能测试是一种语言学测试,叫做图灵测试:一个响应用户文本输入的对话系统能否表现得如此自然以至于我们无法区分它是人工生成的响应?相比之下,今天的商业对话系统能力是非常有限的。以下是对话系统一般的NLP流程架构。我们可以尝试与NLTK模块下的chatbot谈话,运行nltk.chat.chatbots().
- 文本的含义
我们希望使用自动方法,根据一段文本做出正确的决策。比如我们想找到证据来支持一个假设:A is beaten by B. 而有一段文字刚好是和这个假设有关的:A is elected as the senator in last parliamentary election, beating candidate B. 这段文字可以给我们的假设一个否定的答案,即 A is not beaten by B. 然而使用自动方法做出这样的结论很困难。在这个例子中,很重要的一点是让系统知道 A 在假设中是被击败的人,而不是文本中击败别人的人。书中给出了一个文本-假设对,这是任务困难性的另一个例子:
text: David Golinkin is the editor or author of 18 books, and over 150 response, articles, sermons and books
hypothesis: Golinkin has written 18 books
为了确定假设是否得到文本的支持,该系统需要以下背景知识:a. 如果有人是一本书的作者,那么他写了这本书。b. 如果有人是一本书的编辑,那么他完全没写这本书。c. 如果有人是18本书的编辑或作者,则无法断定他是18本书的作者。
- NLP的局限性
在现实应用中,已经部署的语言理解系统仍然不能进行常识推理或者以一般的方式描述这个世界的知识