自然语言处理LexVec、Lango、SyntaxNet、Lacona介绍

以下为你介绍的自然语言处理软件都可用在Linux系统上:LexVec(Go 的自然语言处理)、Lango(自然语言处理库)、SyntaxNet(全球最精准自然语言解析器)、Lacona(JavaScript 语言解析器)。

1、LexVec(Go 的自然语言处理)

LexVec 是 Go 实现的自然语言处理,类似 Google 的 Word2vec。是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。

安装:

1]、安装Go编译器和clang。

2]、确保已设置$GOPATH。

3]、在终端中执行以下命令:

$ go get github.com/alexandres/lexvec

$ cd $GOPATH/src/github.com/alexandres/lexvec

$ make

下载地址:https://github.com/alexandres/lexvec

2、Lango(自然语言处理库)

Lango 是自然语言处理库,类似乐高游戏,可以把各个语言块构建在一起工作。

主要包含两款工具:匹配成分解析树、建模会话。

安装:

pip install lango

设置环境变量:

import os

os.environ['STANFORD_PARSER'] = 'stanford-parser-full-2015-12-09'

os.environ['STANFORD_MODELS'] = 'stanford-parser-full-2015-12-09'

下载地址:https://github.com/ayoungprogrammer/Lango

3、SyntaxNet(全球最精准自然语言解析器)

SyntaxNet 是一个框架,即学术圈所指的SyntacticParser,他是许多NLU系统中的关键组件。在这个系统中输入一个句子,他会自动给句子中的每一个单词打上POS(part-of-Speech)标签,用来描述这些词的句法功能,并在依存句法树中呈现。这些句法关系直接涉及句子的潜在含义。

举一个很简单的例子,看下面这个句子“Alice saw Bob”的依存句法树:

自然语言处理LexVec、Lango、SyntaxNet、Lacona介绍

在这个结构中,Alice和Bob被编码为名词,Saw是动词。只要的动词saw 是句子的根,Alice是saw的主语,Bob是直接宾语(dobj)。和期待的一样,Paesey McParseface能正确地分析这一句子,也能理解下面这个更加复杂的例子:

自然语言处理LexVec、Lango、SyntaxNet、Lacona介绍

句子:Alice, who had been reading about SynataxNet, saw Bob in the hallwayyesterday

在这个句子的编码中,Alice 和 Bob的分别是saw的主语和宾语,Alice由一个带动词“reading”的关系从句来修饰,而saw则由时态“yesterday”来修饰。依存句法树中的语法关系让我们可以轻易地找到不同问题的答案,比如,Alice看见了谁?谁看到了Bob?Alice正在读的是什么?或者Alice是在什么时候看到Bob的。

为什么让计算机正确处理句法分析如此困难? 

句法分析如此困难的一个主要问题是,人类语言具有显著的歧义性。包含 20 到 30 个单词的中等长度的句子会具有数百、数千甚至数万种可能的句法结构,这样的情况并不少见。一个自然语言句法分析器必须能够搜索所有这些结构选择,并找到给定语境下最合理的那个结构。作为一个非常简单的例子,“Alice drove down the streetin her car”这个句子就具有至少两种可能的依存分析:

自然语言处理LexVec、Lango、SyntaxNet、Lacona介绍

第一种分析是对应这句话的(正确)解释,按照这种解释,爱丽丝在汽车里进行驾驶,而汽车位于街道上;第二种分析对应于一种对这句话的(荒诞但仍然可能的)解释,按照这种解释,爱丽丝在街道上驾驶,而街道位于汽车之内。之所以会产生这种歧义,是因为“in”这个介词既可以用来修饰“drove(驾驶)”也可以用来修饰“street(街道)”。上面这个例子是所谓的“介词短语附着歧义”的一个实例。 

人类在处理歧义方面有超强的能力,以至于人们甚至注意不到句子有歧义。而这里的挑战是,如何能让计算机做到同样好。长句中的多重歧义会共同造成句子的可能结构数量的组合爆炸。通常,这些结构中的绝大多数都极其不合理,但它们仍然是可能的,句法分析器必须以某种方式来丢弃它们。 

SyntaxNet 将神经网络运用于歧义问题。一个输入句子被从左到右地处理。当句子中的每个词被处理时,词与词之间的依存关系也会被逐步地添加进来。由于歧义的存在,在处理过程的每个时间点上都存在多种可能的决策,而神经网络会基于这些决策的合理性向这些彼此竞争的决策分配分数。出于这一原因,在该模型中使用 Beam Search (集束搜索)就变得十分重要。不是直接取每个时间点上的最优决定,而是在每一步都保留多个部分性假设。只有当存在多个得分更高的假设的时候,一个假设才会被抛弃。下图将展示的,是“I booked a ticket to Google”这句话经过从左到右的决策过程而产生的简单句法分析。

自然语言处理LexVec、Lango、SyntaxNet、Lacona介绍

而且,正如我们在论文中所描述的,十分重要的一点是,要把学习和搜索紧密整合起来才能取得最高的预测准确度。Parsey McParseface 和其他 SyntaxNet 模型是我们用谷歌的 TensorFlow 框架训练过的最复杂的网络结构。通过利用谷歌支持的 Universal Treebanks 项目中的数据,你也可以在自己的机器上训练句法分析模型。

4、Lacona(JavaScript 语言解析器)

Lacona 是语言无关的 JavaScript 语言解析器。Lacona 可以根据一个任意但是定义良好的模式来预测自然语言。也就是说,你告诉 Lacona 一些语言的工作原理,然后就能帮助用户编写它,然后告诉用户这是什么意思。

因为语言是非常复杂的,所以 Lacona 提供一些强大的工具来简化TA。Lacona 类似 nltk,但是又非常不同。nltk 是低级解析器,根据实际的语法来解析任意字符串,而 Lacona 理解一个良好定义的词组,提取其中的数据,不要求支持实际的语法。

使用:

import lacona from 'lacona';

var parser = new lacona.Parser();

注明

以上就是自然语言处理LexVec、Lango、SyntaxNet、Lacona的介绍内容,这些自然语言处理软件都能使用在Linux操作系统中。

栏目相关文章