Skip to content
Xipeng Qiu edited this page Aug 14, 2014 · 12 revisions

FNLP入门教程 (by h4x3rotab

目录

1 快速入门

FNLP是一个致力于中文自然语言处理的开源项目,提供了进行自然语言处理的工具,包括分词、词性标注、句法分析、文本相似度计算等等,以及进行处理所需的数据集。从功能的角度而言,FNLP与著名的Python自然语言处理工具包NLTK较为类似,但后者对中文处理的能力较差。

FNLP采用Java编写,使得它可以轻松运行在各种不同的平台之上,不仅可以通过命令行调用,同时也可以十分便捷的集成到各种Java项目之中。

1.1 下载与编译

1.1.1 下载FNLP

FNLP是一个开源项目,其代码托管在Github.com之上。有多种方法从FNLP的Github页面下载最新源码。

  • 直接下载ZIP包

进入Github中的FNLP项目首页,在页面右侧点击“Download ZIP”按钮,即可从Github下载到FNLP的最新源码包。得到的ZIP包解压缩后即可使用。用这种方法得到的是一份纯净的FNLP源码。

  • 直接利用Git下载

对于习惯使用源码管理工具Git的用户,可以直接使用Git下载最新源码,命令如下:

git clone https://github.com/xpqiu/fnlp.git

采用这种方法得到的是一份包含Git仓库的源码,除了纯净的源码外,还可以利用Git的版本控制功能查阅每个文件的任何一个历史版本。Git是一个支持多人协作的源码版本管理系统,详情参见Wikipedia页面,或Git官方网站

下载后得到文件结构应与FNLP Github页面中呈现的一致,确认无误后即可开始编译运行。

1.1.2 编译FNLP

FNLP的编译并不复杂,但需要确保系统中已经安装好了编译所必备的工具。

  • 安装与配置JDK

在编译前,确保已经正确安装并配置了JDK(版本需Java 1.6或以上)。配置后,PATH环境变量中应包含JDK目录,确保可以在命令行中运行javajavac工具。 java -version javac -version

  • 安装与配置Maven

Maven是一款先进的Java项目管理工具,用于项目的管理与编译,FNLP也采用Maven构建。完成了Maven的安装与配置后,确保可以在命令行中查看Maven版本号: mvn -version

  • 编译FNLP

在命令行中进入FNLP的源码目录(即“README.md”所在的目录),执行如下命令进行编译: mvn install -Dmaven.test.skip=true

此时Maven会显示编译结果,如果见到类似如下的语句,说明编译成功。

[INFO] Reactor Summary:
[INFO] 
[INFO] fnlp-all ........................................... SUCCESS [  0.225 s]
[INFO] fnlp-core .......................................... SUCCESS [  1.417 s]
[INFO] fnlp-dev ........................................... SUCCESS [  0.182 s]
[INFO] fnlp-train ......................................... SUCCESS [  0.193 s]
[INFO] fnlp-app ........................................... SUCCESS [  0.246 s]
[INFO] fnlp-demo .......................................... SUCCESS [  0.153 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

通过这种方法,会编译四个Jar包:fnlp-corefnlp-devfnlp-trainfnlp-appfnlp-demo。它们分别位于源码目录中,各自对应目录中的"target"目录之中,例如fnlp-core的软件包位于: fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar

如果遇到错误“软件包 org.junit 不存在”,则可修改源码目录下的“pom.xml”文件。找到包含“junit”的依赖设置: junit junit 4.11 test 删除其中的scope元素所在行。完成编辑保存后,再次执行编译命令,即可顺利编译。

1.2 命令行调用

FNLP提供了命令行下的调用方法,这也是测试是否正确编译最简单的手段。下面简单地列举FNLP支持的部分功能与使用方式。然而在执行前,还需要下载两个Java工具包。

下载后的工具包可以存放于任何位置,在后续命令中指定其位置即可。假设命令行当前位于源码目录,且Trove与Commons-cli的Jar包位于“libs”目录下,则可以通过下列命令调用FNLP。

【目录结构截图】

  • 中文分词

    java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.CWSTagger -s models/seg.m "自然语言是人类交流和思维的主要工具,是人类智慧的结晶。"

执行结果如下:

自然 语言 是 人类 交流 和 思维 的 主要 工具 , 是 人类 智慧 的 结晶 。

【图:命令行运行截图】

参数“-Xmx1024m”设置Java虚拟机的可用内存为1024M。FNLP载入语言模型所需内存较大,因此可以利用此参数修改可用内存量。

参数“-classpath ...”载入Jar文件。因此在引号内依次写下fnlp-core、trove、commons-cli的Jar包路径,使用英文冒号分隔文件名。

参数“org.fnlp.nlp.cn.tag.CWSTagger”指定了本次调用的类名,表示调用中文分词器CWSTagger。而后续的参数是根据所调用的类确定的,例如,CWSTagger需要通过“-s”参数指定语言模型文件“models/seg.m”。

  • 中文词性标注

    java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.POSTagger -s models/seg.m models/pos.m "周杰伦出生于台湾,生日为79年1月18日,他曾经的绯闻女友是蔡依林。"

执行结果如下: 周杰伦/人名 出生/动词 于/介词 台湾/地名 ,/标点 生日/名词 为/介词 79年/时间短语 1月/时间短语 18日/时间短语 ,/标点 他/人称代词 曾经/副词 的/结构助词 绯闻/名词 女友/名词 是/动词 蔡依林/人名 。/标点

  • 实体名识别

    java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.NERTagger -s models/seg.m models/pos.m "詹姆斯·默多克和丽贝卡·布鲁克斯 鲁珀特·默多克旗下的美国小报《纽约邮报》的职员被公司律师告知,保存任何也许与电话窃听及贿赂有关的文件。"

执行结果如下: {詹姆斯·默多克=人名, 鲁珀特·默多克旗=人名, 丽贝卡·布鲁克斯=人名, 纽约=地名, 美国=地名}

使用命令行的方式,不必编写Java代码即可体验到FNLP的强大功能,是进行功能测试与开发轻量级应用的绝佳方法。除了以上三种功能,FNLP还提供了更多的命令行接口,将在第3章节详细介绍。同时,下一个版本的FNLP也会开放更多的命令行接口供用户使用。

1.3 调用FNLP库

虽然FNLP提供了方便的命令行接口,当希望在Java项目中使用FNLP强大的语言处理能力,最佳方式仍然是以库的形式调用FNLP。在这一部分讲介绍如何在两种常见的IDE中引用FNLP,并简单的介绍库的使用方法。

1.3.1 在Eclipse项目中引用FNLP

Eclipse是老牌的Java IDE,在项目中引用FNLP非常简单(以JUNO 4.2版本为例)。

  • 添加库引用

在IDE左侧的Package Explorer中选择项目名称,右击,在菜单中选择Build PathAdd External Archives...,则会弹出文件选择对话框,依次查找并添加下列文件:

  • fnlp-core-2.0.0-SNAPSHOT.jar
  • trove4j-3.0.3.jar
  • commons-cli-1.2.jar

【图:Add External Archives菜单】

这三个文件分别为FNLP的核心程序包,与两个库依赖的工具包。前者通过FNLP源码编译得到,而后者可以从互联网中下载。在命令行调用一节中已经提供了下载地址。

完成以上操作后,在Package Explorer中的项目目录之下,可以在Referenced Libraries目录中看到以上三个Jar程序包,则成功引用了FNLP。

  • 修改最大内存量

【图:Referenced Libraries】

接下来修改程序的可用内存大小。由于FNLP的语言模型加载需要较大内存,Java默认的内存量通常不足,因此尽量设为1024MB或更大。

Package Explorer中选择项目名称,右击,在菜单中选择Properties。在弹出的属性窗口左侧选择Run/Debug Settings,则会呈现项目所有的启动配置。选择当前的启动配置,并点击右侧Edit...,出现Edit Configuration窗口。选择Arguments栏,找到VM arguments输入框,并添加如下参数: -Xmx2048m

其中2048m表示允许最大内存空间2048MB,可以按需要进行修改,最后点击确认离开配置窗口。

【图:VM arguments修改后】

  • 添加模型文件

模型文件指词典、训练后的中文分词器、POS标注器等,它们位于FNLP源码目录下的“models”目录之中。将此目录复制到Eclipse项目目录之下即可。

项目目录可以通过如下方法找到:在Package Explorer的项目名称上右击,选择Properties,出现属性窗口。窗口左侧选择Resource,则Location的内容即为项目目录。

【图:文件结构】

1.3.2 在Intellij IDEA中引用FNLP

Intellij IDEA是近几年流行起来的IDE,引用FNLP库也十分简单(以IDEA 13版本为例)。

  • 添加库引用

对于单个模块的应用程序,建议在IDE左侧Project视图的项目目录中添加“libs”目录,查找并向此目录中复制如下Jar文件:

  • fnlp-core-2.0.0-SNAPSHOT.jar
  • trove4j-3.0.3.jar
  • commons-cli-1.2.jar

以上三个文件的获取请参考上一节。完成上述操作后,可以在Project视图的“libs”目录中看到三个Jar文件。依次在文件上右键,选择Add as Library...,出现创建库窗口,在窗口中选择合适的配置,确认即可。

对于多模块的应用程序,也可以在Project Structure窗口的Libraries中添加库引用。使用这种方法添加的引用,需要添加了如上三个Jar程序包后,在Libraries中的程序包上分别右键,选择Add to Modules...,选择合适模块,以便所有调用FNLP的模块可以得到引用。

  • 修改最大内存量

FNLP在载入语言模型时需要内存量较大,建议设为1024MB以上。点击菜单RunEdit Configurations...,出现运行配置窗口。在窗口的左侧Application栏目中选择当前的应用程序后,在窗口中的VM options中添加如下参数: -Xmx2048m

其中2040m表示最大内存为2048MB,可以按需要进行修改,最后点击确认离开配置窗口。

【图:修改后】

  • 添加模型文件

FNLP的模型文件包含中文词典、已训练的分词器、POS标注器等,它们位于FNLP源码目录的“models”目录之中。只需把“models”目录复制到当前的项目目录即可。

项目目录可以通过如下方式查找:在IDE的Project视图中,选择项目名称,右击并选择Show in Explorer(Windows系统)或Reveal in Finder(OS X系统)。

1.3.3 Hello World!

创建一个Java项目,准备好环境配置,则可以顺利的调用FNLP进行自然语言处理了。下面一步一步实现最简单常见的任务。

  • 中文分词

中文分词工具使用的是CWSTagger类,位于org.fnlp.nlp.cn.tag包中。首先在文件中添加引用(后文略):

import org.fnlp.nlp.cn.tag.CWSTagger;

在main函数处中写入如下代码:

public static void main(String[] args) throws Exception {

	// 创建一个中文分词器,并使用分词模型“seg.m”初始化分词器
	CWSTagger tagger = new CWSTagger("models/seg.m");
	
	// 使用分词器对中文句子进行分词,得到分词结果
	String result = tagger.tag("关注自然语言处理、语音识别、深度学习等方向的前沿技术和业界动态。");
	
	// 显示分词结果
	System.out.println(result);
}

编译运行,就可以得到分词结果:

关注 自然 语言 处理 、 语音 识别 、 深度 学习 等 方向 的 前沿 技术 和 业界 动态 。
  • 中文词性标注

位于org.fnlp.nlp.cn.tag包的POSTagger类提供了中文词性标注功能:

public static void main(String[] args) throws Exception {
		
	// 创建一个POS标注器,使用分词模型“seg.m”与POS标注模型“pos.m”初始化标注器
	POSTagger tagger = new POSTagger("models/seg.m", "models/pos.m");
	
	// 使用标注器对中文句子进行标注,得到标注结果
	String result = tagger.tag("关注自然语言处理、语音识别、深度学习等方向的前沿技术和业界动态。");
    
	// 显示标注结果
	System.out.println(result);
}

编译运行,可以得到标注结果: 关注/动词 自然/名词 语言/名词 处理/动词 、/标点 语音/名词 识别/名词 、/标点 深度/形容词 学习/名词 等/省略词 方向/名词 的/结构助词 前沿/名词 技术/名词 和/并列连词 业界/名词 动态/名词 。/标点

  • 实体名识别

实体名识别采用NERTagger类实现,位于org.fnlp.nlp.cn.tag包之中。与前两者不同的是,实体名标注器返回的是一个HashMap对象,其中包含已识别出的实体名与实体类型间的关系。

public static void main(String[] args) throws Exception {

	// 创建一个实体名标注器,使用分词模型“seg.m”与POS标注模型“pos.m”初始化标注器
	NERTagger tagger = new NERTagger("models/seg.m", "models/pos.m");

	// 使用标注器对包含实体名的句子进行标注,得到结果
	HashMap<String, String> result = tagger.tag("詹姆斯·默多克和丽贝卡·布鲁克斯 鲁珀特·默多克旗下的美国小报《纽约邮报》的职员被公司律师告知,保存任何也许与电话窃听及贿赂有关的文件。");

	// 显示标注结果
	System.out.println(result);
}

编译运行,得到识别结果:

{詹姆斯·默多克=人名, 鲁珀特·默多克旗=人名, 丽贝卡·布鲁克斯=人名, 纽约=地名, 美国=地名}

1.4 更多资料

快速入门这一章节简单的介绍了FNLP库的编译安装、命令行调用,以及使用FNLP库。相信在这一章的介绍后,读者已经对FNLP的使用有了初步的认识。除了本教程以外,还可以通过互联网上的许多资源来更深入地研究、学习FNLP,下面就列出了部分相关的资料。如果您愿意与大家分享学习FNLP的经验,欢迎联系我们,这个列表将会不停更新下去。

【可以继续整理一下】

2 使用命令行调用FNLP

本章节介绍如何使用命令行调用FNLP,完成多种中文自然语言处理任务。

通过命令行调用FNLP是一种较为轻量级的方法。FNLP的Java程序包中包含了许多可供直接使用的命令行工具,通过命令行工具,不必编写任何代码就可以使用FNLP完成常见的语言处理任务,包括中文分词、词性标注、实体名识别、句法分析、训练语言模型等。

通过命令行的调用通常可以用于测试,轻量级的集成(如进行少批量的文本处理),训练语言模型等。然而这种方式也有其缺点:每一次运行都需要重新载入一遍语言模型。载入模型文件消耗的时间与资源都较大,因此性能难以得到保证。当对性能要求较高时,还应调用FNLP库。

2.1 命令行调用方式

  • 准备JRE

首先需要确保正确安装了JRE(需版本1.6以上,JDK中已包含了JRE)。可以通过如下命令确定JRE已经正确安装并配置:

java -version

已经安装了JRE缺提示无法找到java命令,则说明没有正确设置PATH环境变量。请自行参考互联网上的资料进行配置。

  • 准备FNLP程序包

其次,需要准备编译好的FNLP程序包。FNLP的编译过程可以参考本教程“快速入门”章节。编译后在源码目录中可以得到多个Jar程序包,接下来需要使用的命令行工具就包含在这些程序包之中。确保源码目录下包含如下文件:

./fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar
./fnlp-app/target/fnlp-app-2.0.0-SNAPSHOT.jar
./fnlp-demo/target/fnlp-demo-2.0.0-SNAPSHOT.jar
./fnlp-train/target/fnlp-train-2.0.0-SNAPSHOT.jar
  • 准备第三方工具包

FNLP依赖了Trove与Commons-cli两个第三方工具包,需要在调用时指定其路径。确保已经准备好了如下工具包:

* Trove 3.0.3:[下载页面][2.1]
* Commons-cli 1.2:[下载页面][2.2]

建议在FNLP的源码目录中创建“libs”文件夹,并把二者的Jar程序包复制进文件夹之中,以便后续使用(如同“快速入门”章节一样)。

  • 调用方式

完成一切准备后就可以开始调用FNLP的命令行工具了。进入命令行,定位到FNLP源码目录,然后执行java命令,格式如下:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" <类名称> [参数表]

其中第一个参数“-Xmx1024m”表示设置最大内存占用为1024MB,当出现内存不足异常时,可以尝试增加最大内存量。

第二个参数“-classpath ...”表示加载程序包文件。在此参数中需要指定FNLP程序包,以及Trove、Commons-cli两个工具包的路径,路径之间使用西文冒号分隔。

第三个参数为类名称,此处需要填写完整的类名称。类名称之后则跟随具体的参数,通常命令行工具都可以通过“-h”参数来显示帮助说明。

例如,为了调用中文分词器org.fnlp.nlp.cn.tag.CWSTagger,显示分词器的命令行参数说明,可以执行命令:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.CWSTagger -h

可以得到如下结果:

usage: SEG:
	java edu.fudan.nlp.tag.CWSTagger -f model_file input_file output_file;
	java edu.fudan.nlp.tag.CWSTagger -s model_file string_to_segement

-f   segment file. Default string mode.
-h   Print help for this application
-s   segment string

值得注意的是,截止目前版本(FNLP 2.0.0),虽然FNLP的包名前缀已经由edu.fudan迁移至了org.fnlp,但命令行工具的帮助说明中仍有部分包名保留着旧的edu.fudan前缀。这将在后续版本中逐一改进。

使用命令行时,调用java命令的虚拟机参数较长。可以考虑通过脚本简化调用命令的长度,不过限于篇幅,本章节中对此不再展开。

2.2 中文分词

类名称:org.fnlp.nlp.cn.tag.CWSTagger

参数格式:

  1. org.fnlp.nlp.cn.tag.CWSTagger -f <分词模型文件> <输入文件> <输出文件>

载入分词模型文件,对输入的中文语料文件进行分词,并通过文件输出分词结果。FNLP包含已训练好的分词模型文件,位于源码目录下的“models/seg.m”。

以下命令可以对“input.txt”进行分词,并输出到“output.txt”中:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.CWSTagger -f models/seg.m input.txt output.txt
  1. -s <分词模型文件> <输入字符串>

载入分词模型文件,对输入字符进行分词,并在控制台中输出分词结果。分词模型文件与用法1中相同。

以下命令实现分词功能:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.CWSTagger -s models/seg.m "世界你好。"

2.3 词性标注

类名称:org.fnlp.nlp.cn.tag.POSTagger

参数格式:

  1. org.fnlp.nlp.cn.tag.POSTagger -f <分词模型文件> <词性标注模型文件> <输入文件> <输出文件>

载入分词模型与词性标注模型文件,并对输入语料进行分词、词性标注,把结果输出至文件之中。两个模型文件分别位于FNLP源码目录中的“models/seg.m”与“models/pos.m”。

以下命令对“input.txt”进行分词与词性标注,并把结果保存至“output.txt”:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.POSTagger -f models/seg.m models/pos.m input.txt output.txt
  1. org.fnlp.nlp.cn.tag.POSTagger -s <分词模型文件> <词性标注模型文件> <输入字符串>

与用法1类似,但在参数中指定输入字符串,并在控制台中输出标注结果。分词模型文件与词性标注模型文件与用法1中相同。

以下命令实现词性标注功能:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.POSTagger -s models/seg.m models/pos.m "世界你好。"

2.4 实体名识别

类名称:org.fnlp.nlp.cn.tag.NERTagger

参数格式:

  1. org.fnlp.nlp.cn.tag.NERTagger -f <分词模型文件> <词性标注模型文件> <输入文件> <输出文件>

载入分词模型与词性标注模型文件,识别输入语料中的实体名,并保存至输出文件之中。两个模型文件分别位于FNLP源码目录中的“models/seg.m”与“models/pos.m”。

以下命令对“input.txt”进行处理,识别出实体名,并保存至“output.txt”:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.NERTagger -f models/seg.m models/pos.m input.txt output.txt
  1. org.fnlp.nlp.cn.tag.NERTagger -s <分词模型文件> <词性标注模型文件> <输入字符串>

与用法1类似,但在参数中指定输入字符串,并在控制台中输出识别到的实体结果。分词模型文件与词性标注模型文件与用法1中相同。

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.NERTagger -s models/seg.m models/pos.m "史蒂夫·乔布斯(1955-2011),发明家、企业家、美国苹果公司联合创办人、前行政总裁。"

2.5 句法分析

【句法分析器还没有对应的命令行工具可用,我会添加一个cli工具,然后pull到主分支去】

2.6 训练器

【训练器虽然是可用的,但是似乎没有公开FNLPCurpos训练数据,数据的格式也没有现成文档。格式可以通过源码推断,因此我打算在后续部分增加数据集格式的说明】

2.6.1 中文分词器训练

类名称:org.fnlp.train.tag.CWSTrain

参数说明:

org.fnlp.train.tag.CWSTrain [可选参数] <特征模板文件> <训练集文件> <模型文件>

使用已标注的训练集对分词器进行训练。训练器会利用模板从训练集中抽取特征,用于训练一个中文分词器。模板与训练集文件必须遵循相应格式。最后,把训练得到的分词器模型保存至“模型文件”。

关于“标注序列”格式与“特征抽取模板”的格式,请参见教程第4章节。

可选参数:

  • -iter <迭代次数>:设置训练器迭代次数,范围为正整数,默认值为50;
  • -c <步长阈值>:设置线性Viterbi算法训练时的步长阈值,范围为正实数,默认值为0.8。

以下命令将使用模板文件“seg.template”与数据集“train.seg”训练中文分词器,并把得到的模型保存至“seg.gz”中:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.train.tag.CWSTrain seg.template train.seg seg.gz

2.6.2 词性标注器训练

类名称:org.fnlp.train.tag.POSTrain

参数说明:

org.fnlp.train.tag.POSTrain [可选参数] <特征模板文件> <训练集文件> <模型文件>

使用已标注的训练集对词性标注器进行训练。训练器会利用模板从训练集中抽取特征,用于训练一个词性标注器。模板与训练集文件必须遵循相应格式。最后,把训练得到的分词器模型保存至“模型文件”。

关于“标注序列”格式与“特征抽取模板”的格式,请参见教程第4章节。

可选参数:

  • -iter <迭代次数>:设置训练器迭代次数,范围为正整数,默认值为50;
  • -c <步长阈值>:设置线性Viterbi算法训练时的步长阈值,范围为正实数,默认值为0.8。

以下命令将使用模板文件“pos.template”与数据集“train.pos”训练中文分词器,并把得到的模型保存至“pos.gz”中:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.train.tag.POSTrain pos.template train.pos pos.gz

2.6.3 句法分析器训练

类名称:org.fnlp.nlp.parser.dep.train.JointParserTrainer

参数说明:

org.fnlp.nlp.parser.dep.train.JointParserTrainer [可选参数] <训练集目录> <模型文件>

【JointParserTrainer被误写作Parer,我会在下一个pull request中修正】

使用FNLPCorpus数据集训练句法分析器。训练器将查找“训练集目录”中的所有文件,读取并以此训练一个句法分析器。文件必须遵循FNLPCorpus格式。最后,把训练得到的语言模型保存至“模型文件”。

关于FNLPCorpus格式,请参见教程第4章节。

可选参数:

  • -iter <迭代次数>:设置训练器迭代次数,范围为正整数,默认值为50;
  • -c <步长阈值>:设置线性分类器PA算法训练时的步长阈值,范围为正实数,默认值为1.0。

以下命令将使用“curpos”目录下的数据集训练句法分析器,并把得到的模型保存至“dep.gz”文件中:

java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.0.0-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.parser.dep.train.JointParserTrainer curpos dep.gz

3 使用FNLP库

3.1 基本知识

3.1.1 基本数据结构

3.1.2 管道模型

3.1.3 语言模型与文件结构

3.2 分词

3.3 词性标注

3.4 实体识别

3.5 指代消解

3.6 句法分析

3.7 相似度计算

3.8 机器学习

3.8.1 特征抽取

3.8.2 分类器

3.8.3 聚类

3.8.4 文本分类

3.8.5 关键词抽取

3.9 知识库

4 扩展FNLP

4.1 数据集格式

4.1.1 标注序列

4.1.2 特征抽取模板

4.1.3 FNLPCurpos

3.7 **duplicate class

Clone this wiki locally