Skip to content

Commit

Permalink
Merge branch 'v3.1-model-truncation-devel'
Browse files Browse the repository at this point in the history
  • Loading branch information
Oneplus committed Jan 20, 2014
2 parents bd75f94 + 1401fd5 commit 01b6fef
Show file tree
Hide file tree
Showing 102 changed files with 12,275 additions and 12,246 deletions.
31 changes: 19 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,28 @@ config.h
include/
lib/
bin/
lgdpj
lgsrl
otcws
otpos
otner
maxent
cws
cws_cmdline
multi_cws_cmdline
pos
par
ner
tools/train/lgdpj
tools/train/lgsrl
tools/train/otcws
tools/train/otpos
tools/train/otner
tools/train/maxent
examples/cws
examples/cws_cmdline
examples/multi_cws_cmdline
examples/pos
examples/pos_cmdline
examples/multi_pos_cmdline
examples/par
examples/ner

###############
# data file #
###############
new_ltp_data/
ltp_data/

##################
# running folder #
##################
dummy/
8 changes: 8 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
2014-01-16
----------
* 在分词、词性标注和依存句法分析模块中加入模型裁剪功能,减少了模型大小。用户可以通过配置文件里的rare-feature-threshold参数配置裁剪力度,如果rare-feature-threshold为0,则只去掉为0的特征;rare-feature-threshold大于0时将一步去掉更新次数低于阈值的特征。这一优化方法主要参考[Learning Sparser Perceptron Models](http://www.cs.bgu.ac.il/~yoavg/publications/acl2011sparse.pdf)
* 修复了词性标注、命名实体识别、依存句法分析训练套件中的内存泄露问题
* 修复了语义角色标注的内存泄露问题
* 增加了`ltp_server`在异常输入情况下返回错误代码,如果输入数据编码错误或者输入xml不符合规则,将返回400
* 修复了词性标注、命名实体识别模型文件的错误标示符,这项修改将导致3.1.0以及之后的版本不能与3.0.x的模型兼容,请务必注意

2013-09-29
----------
* 解决windows编译问题
Expand Down
69 changes: 38 additions & 31 deletions doc/ltp-document-3.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ LTP提供了一系列中文自然语言处理工具,用户可以使用这些

同时,你可以从以下一些地方获得LTP的模型。

*
* [百度云](http://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569)
* 当前模型版本3.1.0


## 安装CMake

Expand Down Expand Up @@ -860,7 +862,7 @@ otcws是ltp分词模型的训练套件,用户可以使用otcws训练获得ltp

otcws分别支持从人工切分数据中训练分词模型和调用分词模型对句子进行切分。人工切分的句子的样例如下:

对外 , 他们 代表 国家
对外 , 他们 代表 国家

otcws主要通过配置文件指定执行的工作,其中主要有两类配置文件:训练配置和测试配置。

Expand All @@ -872,15 +874,17 @@ otcws主要通过配置文件指定执行的工作,其中主要有两类配置
algorithm = pa
model-name = model/ctb5-seg
max-iter = 5
rare-feature-threshold = 0

其中,

* [train] 配置组指定执行训练
* Ttain-file 配置项指定训练集文件
* Holdout-file 配置项指定开发集文件
* Algorithm 指定参数学习方法,现在otcws支持两种参数学习方法,分别是passive aggressive(pa)和average perceptron(ap)。
* Model-name 指定输出模型文件名
* Max-iter 指定最大迭代次数
* ttain-file 配置项指定训练集文件
* holdout-file 配置项指定开发集文件
* algorithm 指定参数学习方法,现在otcws支持两种参数学习方法,分别是passive aggressive(pa)和average perceptron(ap)。
* model-name 指定输出模型文件名
* max-iter 指定最大迭代次数
* rare-feature-threshold 配置裁剪力度,如果rare-feature-threshold为0,则只去掉为0的特征;rare-feature-threshold;如果大于0时将进一步去掉更新次数低于阈值的特征

测试配置的配置文件样例如下所示。

Expand All @@ -891,8 +895,8 @@ otcws主要通过配置文件指定执行的工作,其中主要有两类配置
其中,

* [test] 配置组指定执行测试
* Test-file 指定测试文件
* Model-file 指定模型文件位置
* test-file 指定测试文件
* model-file 指定模型文件位置

切分结果将输入到标准io中。

Expand Down Expand Up @@ -924,11 +928,12 @@ otpos主要通过配置文件指定执行的工作,其中主要有两类配置
其中,

* [train] 配置组指定执行训练
* Ttain-file 配置项指定训练集文件
* Holdout-file 配置项指定开发集文件
* Algorithm 指定参数学习方法,现在otcws支持两种参数学习方法,分别是passive aggressive(pa)和average perceptron(ap)。
* Model-name 指定输出模型文件名
* Max-iter 指定最大迭代次数
* ttain-file 配置项指定训练集文件
* holdout-file 配置项指定开发集文件
* algorithm 指定参数学习方法,现在otcws支持两种参数学习方法,分别是passive aggressive(pa)和average perceptron(ap)。
* model-name 指定输出模型文件名
* max-iter 指定最大迭代次数
* rare-feature-threshold 配置裁剪力度,如果rare-feature-threshold为0,则只去掉为0的特征;rare-feature-threshold;如果大于0时将进一步去掉更新次数低于阈值的特征

测试配置的配置文件样例如下所示。

Expand All @@ -939,8 +944,8 @@ otpos主要通过配置文件指定执行的工作,其中主要有两类配置
其中,

* [test] 配置组指定执行测试
* Test-file 指定测试文件
* Model-file 指定模型文件位置
* test-file 指定测试文件
* model-file 指定模型文件位置

词性标注结果将输入到标准io中。

Expand Down Expand Up @@ -972,11 +977,11 @@ Otner主要通过配置文件指定执行的工作,其中主要有两类配置
其中,

* [train] 配置组指定执行训练
* Train-file 配置项指定训练集文件
* Holdout-file 配置项指定开发集文件
* Algorithm 指定参数学习方法,现在otner支持两种参数学习方法,分别是passive aggressive(pa)和average perceptron(ap)。
* Model-name 指定输出模型文件名
* Max-iter 指定最大迭代次数
* train-file 配置项指定训练集文件
* holdout-file 配置项指定开发集文件
* algorithm 指定参数学习方法,现在otner支持两种参数学习方法,分别是passive aggressive(pa)和average perceptron(ap)。
* model-name 指定输出模型文件名
* max-iter 指定最大迭代次数

测试配置的配置文件样例如下所示。

Expand All @@ -987,8 +992,8 @@ Otner主要通过配置文件指定执行的工作,其中主要有两类配置
其中,

* [test] 配置组指定执行测试
* Test-file 指定测试文件
* Model-file 指定模型文件位置
* test-file 指定测试文件
* model-file 指定模型文件位置

命名实体识别结果将输入到标准io中。

Expand All @@ -1000,7 +1005,7 @@ lgdpj是ltp依存句法分析模型的训练套件,用户可以使用lgdpj训

编译之后,在tools/train下面会产生名为lgdpj的二进制程序。调用方法是

./lgdpj [config_file]
./lgdpj [config_file]

lgdpj分别支持从人工标注依存句法的数据中训练依存句法分析模型和调用依存句法分析模型对句子进行依存句法分析。人工标注的词性标注依存句法的句子遵从conll格式,其样例如下:

Expand Down Expand Up @@ -1039,6 +1044,7 @@ lgdpj主要通过配置文件指定执行的工作,其中主要有两类配置
max-iter = 5
algorithm = pa
model-name = model/parser/ldc-o2carreras
rare-feature-threshold = 0

其中,

Expand All @@ -1047,11 +1053,12 @@ lgdpj主要通过配置文件指定执行的工作,其中主要有两类配置
* decoder-name 表示采用的解码算法,现在lgdpj支持三种解码算法,分别是1o,2o-sib,2o-carreras
* [feature] 配置组指定使用的特征
* [train] 配置组指定执行训练
* Train-file 配置项指定训练集文件
* Holdout-file 配置项指定开发集文件
* Algorithm 指定参数学习方法,现在otcws支持两种参数学习方法,分别是passive aggressive(pa)和average perceptron(ap)。
* Model-name 指定输出模型文件名
* Max-iter 指定最大迭代次数
* train-file 配置项指定训练集文件
* holdout-file 配置项指定开发集文件
* algorithm 指定参数学习方法,现在otcws支持两种参数学习方法,分别是passive aggressive(pa)和average perceptron(ap)。
* model-name 指定输出模型文件名
* max-iter 指定最大迭代次数
* rare-feature-threshold 配置裁剪力度,如果rare-feature-threshold为0,则只去掉为0的特征;rare-feature-threshold;如果大于0时将进一步去掉更新次数低于阈值的特征

测试配置的配置文件样例如下所示。

Expand All @@ -1062,8 +1069,8 @@ lgdpj主要通过配置文件指定执行的工作,其中主要有两类配置
其中,

* [test] 配置组指定执行测试
* Test-file 指定测试文件
* Model-file 指定模型文件位置
* test-file 指定测试文件
* model-file 指定模型文件位置

依存句法分析结果将输入到标准io中。

Expand Down
54 changes: 27 additions & 27 deletions examples/cws.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,38 @@
#include "segment_dll.h"

int main(int argc, char * argv[]) {
if (argc < 2) {
std::cerr << "cws [model path] [lexicon_file]" << std::endl;
return 1;
}
if (argc < 2) {
std::cerr << "cws [model path] [lexicon_file]" << std::endl;
return 1;
}

void * engine = 0;
if (argc == 2) {
engine = segmentor_create_segmentor(argv[1]);
} else if (argc == 3) {
engine = segmentor_create_segmentor(argv[1], argv[2]);
}
void * engine = 0;
if (argc == 2) {
engine = segmentor_create_segmentor(argv[1]);
} else if (argc == 3) {
engine = segmentor_create_segmentor(argv[1], argv[2]);
}

if (!engine) {
return -1;
}
std::vector<std::string> words;
if (!engine) {
return -1;
}
std::vector<std::string> words;

const char * suite[2] = {
"What's wrong with you? 别灰心! http://t.cn/zQz0Rn",
"台北真的是天子骄子吗?",};
const char * suite[2] = {
"What's wrong with you? 别灰心! http://t.cn/zQz0Rn",
"台北真的是天子骄子吗?",};

for (int i = 0; i < 2; ++ i) {
words.clear();
int len = segmentor_segment(engine, suite[i], words);
for (int i = 0; i < len; ++ i) {
std::cout << words[i];
if (i+1 == len) std::cout <<std::endl;
else std::cout<< "|";
}
for (int i = 0; i < 2; ++ i) {
words.clear();
int len = segmentor_segment(engine, suite[i], words);
for (int i = 0; i < len; ++ i) {
std::cout << words[i];
if (i+1 == len) std::cout <<std::endl;
else std::cout<< "|";
}
}

segmentor_release_segmentor(engine);
return 0;
segmentor_release_segmentor(engine);
return 0;
}

72 changes: 36 additions & 36 deletions examples/cws_cmdline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,52 +19,52 @@
#include "segment_dll.h"

double get_time(void) {
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + (tv.tv_usec / 1000000.0);
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + (tv.tv_usec / 1000000.0);
}

int main(int argc, char * argv[]) {
if (argc < 2) {
std::cerr << "cws [model path] [lexicon_file]" << std::endl;
return 1;
}
if (argc < 2) {
std::cerr << "cws [model path] [lexicon_file]" << std::endl;
return 1;
}

void * engine = 0;
if (argc == 2) {
engine = segmentor_create_segmentor(argv[1]);
} else if (argc == 3) {
engine = segmentor_create_segmentor(argv[1], argv[2]);
}
void * engine = 0;
if (argc == 2) {
engine = segmentor_create_segmentor(argv[1]);
} else if (argc == 3) {
engine = segmentor_create_segmentor(argv[1], argv[2]);
}

if (!engine) {
return -1;
}
std::vector<std::string> words;
std::string sentence;
if (!engine) {
return -1;
}
std::vector<std::string> words;
std::string sentence;

std::cerr << "TRACE: Model is loaded" << std::endl;
double tm = get_time();
std::cerr << "TRACE: Model is loaded" << std::endl;
double tm = get_time();

while (std::getline(std::cin, sentence, '\n')) {
words.clear();
if (sentence.size() == 0) { continue; }
int len = segmentor_segment(engine, sentence, words);
for (int i = 0; i < len; ++ i) {
std::cout << words[i];
if (i+1 == len) std::cout <<std::endl;
else std::cout<< "|";
}
while (std::getline(std::cin, sentence, '\n')) {
words.clear();
if (sentence.size() == 0) { continue; }
int len = segmentor_segment(engine, sentence, words);
for (int i = 0; i < len; ++ i) {
std::cout << words[i];
if (i+1 == len) std::cout <<std::endl;
else std::cout<< "|";
}
}

segmentor_release_segmentor(engine);
segmentor_release_segmentor(engine);

tm = get_time() - tm;
std::cerr << "TRACE: consume "
<< tm
<< " seconds."
<< std::endl;
tm = get_time() - tm;
std::cerr << "TRACE: consume "
<< tm
<< " seconds."
<< std::endl;

return 0;
return 0;
}

5 changes: 4 additions & 1 deletion examples/multi_cws_cmdline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
* is not compilable under MSVC
*/
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <vector>
Expand Down Expand Up @@ -91,7 +92,9 @@ void multithreaded_segment( void * args) {

int main(int argc, char ** argv) {
if (argc < 2 || (0 == strcmp(argv[1], "-h"))) {
std::cerr << "Example: ./multi_cws_cmdline [model path] [lexicon file]=NULL threadnum" << std::endl;
std::cerr << "Example: ./multi_cws_cmdline "
<< "[model path] [lexicon file](optional) threadnum"
<< std::endl;
std::cerr << std::endl;
std::cerr << "This program recieve input word sequence from stdin." << std::endl;
std::cerr << "One sentence per line." << std::endl;
Expand Down
Loading

0 comments on commit 01b6fef

Please sign in to comment.