OpenCLAS接近Milestone 1,性能有显著提高

52 views
Skip to first unread message

Dancefire

unread,
Mar 9, 2009, 9:47:52 AM3/9/09
to ictclas
对于之前的代码重构基本完毕,再修正几个小bug后,就可以tag为Milestone 1了。刚才小测试了一下性能,在目前没有特别优化的情况下,是
之前上传到论坛的OpenCLAS.rev37的3.5倍。按照当时测试ICTCLAS的相对速度看,新的OpenCLAS应该是
FreeICTCLAS的2倍左右。这是在没有实现Double Array Trie的情况下的数据。

在同一台计算机上,没有经过特别优化的前提下,老的OpenCLAS.rev37是39.35 KB/s;而新的OpenCLAS r84中,达到了
141.456 KB/s。

大家可以到下面的链接去下载测试代码。(下载代码需要Subversion客户端,浏览不需要)

http://code.google.com/p/openclas/

在这回的设计中,采用全头文件的形式,这样在C++代码中调用将会非常的方便。

Milestone 2的目标是实现未登录词识别、词性标注以及相应的单元测试。期望开发周期是2-3周。

Tao Wang

unread,
Mar 9, 2009, 10:05:54 PM3/9/09
to ictclas
之前是在Vista下测试的,在其中的Linux虚拟机测试了一下,差不多的性能也是140 KB/s。

今天在这台机器上(Core 2 2.5GHz)真正的装了一个Ubuntu 8.10,测试了一下,竟然有 314.12KB/s,同一台计算机上竟
然能有2倍的差别。

在另一台Core 2 2GHz笔记本上的Ubuntu中,也是250KB/s左右。看来Linux果然比Windows快好多啊。

liugang

unread,
Mar 9, 2009, 10:47:13 PM3/9/09
to ict...@googlegroups.com
能否介绍一下openCLAS的词典装载到内存的索引结构?我在优化ictclas4j,原来代码的速度仅有4K/s(pentium dual 1.6G,包括所有功能),我想至少达到20K/s,才能实用价值。优化了一下,现在能达到8K左右,发现要进一步提升需要修改词典索引结构。
 
我这方面以前接触比较少,希望能听听大家的建议。

2009/3/10 Tao Wang <Danc...@gmail.com>



--
Yours sincerely
liugang

Tao Wang

unread,
Mar 9, 2009, 11:04:21 PM3/9/09
to ictclas
目前我采用的是Trie结构,每个字一个node。这样搜索一个长度为n的词,最多也只需要比较n次;如果需要所有共享前缀,同样也在这n次比较内得
到。这应该是比较快的一种索引方式。不过遍历到当前节点后,查询下一个节点时间较长,假设当前节点有m个后继节点,那么需要log(m)次比较。具体的
代码请参考OpenCLAS中的dictionary.hpp中的class WordIndexer。

可能更合适的结构是Double array trie,目前没在这个上面下经历,但是从介绍上看,感觉性能会比我现在的结构高一些。这类实现可以
google到,不过大多只是针对char的,而不是wchar_t的,需要改动。

On 3月10日, 上午10时47分, liugang <liuga...@gmail.com> wrote:
> 能否介绍一下openCLAS的词典装载到内存的索引结构?我在优化ictclas4j,原来代码的速度仅有4K/s(pentium dual
> 1.6G,包括所有功能),我想至少达到20K/s,才能实用价值。优化了一下,现在能达到8K左右,发现要进一步提升需要修改词典索引结构。
>
> 我这方面以前接触比较少,希望能听听大家的建议。
>

> 2009/3/10 Tao Wang <Dancef...@gmail.com>

liugang

unread,
Mar 9, 2009, 11:34:44 PM3/9/09
to ict...@googlegroups.com
trie结构是不是比较耗内存?B树怎么样?

2009/3/10 Tao Wang <Danc...@gmail.com>



--
Yours sincerely
liugang

Dancefire

unread,
Mar 10, 2009, 2:19:25 AM3/10/09
to ict...@googlegroups.com
相对来说耗内存,但是感觉还好,不是很严重。不过我没有测试,现在还是以实现功能为主。如果你愿意,可以改动OpenCLAS的代码,测试一下不同的结构的性能。:)

2009/3/10 liugang <liug...@gmail.com>:

--
Microsoft Certified Technology Specialist
CCNA
http://www.dancefire.org/

Dancefire

unread,
Mar 10, 2009, 6:25:08 AM3/10/09
to ict...@googlegroups.com
呃,Linux果然牛,还是之前的那个Core 2 2.5GHz,还是OpenCLAS新的代码,g++
-O3优化编译后,分词速度达到了1003.5 KB/s,基本上可以算作1MB/s的分词了。不错。

2009/3/10 Dancefire <danc...@gmail.com>:

Jason Zou

unread,
Mar 10, 2009, 9:19:46 AM3/10/09
to ict...@googlegroups.com
我怎么在Linux下编译一大堆错误呀?
能把你的make file贴出来吗? 谢谢。

Jason

2009/3/10 Dancefire <danc...@gmail.com>

Dancefire

unread,
Mar 10, 2009, 7:54:02 PM3/10/09
to ict...@googlegroups.com
我用的是CMake,挺简单的。

假设我们在cpp这个目录,

1、先去除UTF8的BOM,这个gcc不支持,VC又需要。

script/bom.py -r

2、准备cmake和编译:

mkdir build
cd build
cmake ../src/unit_test
make

3、把FreeICTCLAS中的词典拷贝过来。

mkdir data
cp /path/to/Data/* data/

4、可以执行了。

./unit_test

需要注意的是,有一组测试需要后面测试所生成的mini.{tag, unigram,
bigram}.txt,所以第一遍执行的时候,会跳过这组测试,报告mini.*.txt找不到,但是第二遍就ok了。


2009/3/11 Jason Zou <jaso...@gmail.com>:

Jason Zou

unread,
Mar 11, 2009, 8:53:09 PM3/11/09
to ict...@googlegroups.com
谢了,果然是BOM的问题。
编译通过了。 可惜最近很忙。有时间的话用trie结构的字典实验一下。

Jason

2009/3/10 Dancefire <danc...@gmail.com>

luo

unread,
Mar 18, 2009, 5:12:25 AM3/18/09
to ictclas
在下载目录没有见着词典,是不是还要自己生成

On 3月9日, 下午9时47分, Dancefire <Dancef...@gmail.com> wrote:

Dancefire

unread,
Mar 18, 2009, 7:49:27 AM3/18/09
to ict...@googlegroups.com
目前使用的是ICTCLAS的词典,因此将FreeICTCLAS的Data\*复制到unit_test\data\*就可以了,单元测试里面有段代码可以对字典进行转换。由于OpenCLAS的设计原则之一是不使用任何代码,因此原有词典不属于OpenCLAS的一部分,将来会根据语料库训练生成词典。

2009/3/18 luo <yuliu...@gmail.com>
Message has been deleted

luo

unread,
Mar 19, 2009, 4:34:59 AM3/19/09
to ictclas
可以考虑用双数组做词典结构,我将Firtex的CTrieDictCreator改成UNICODE格式,觉得还可以。


另外可否考虑:在切分过程中减少甚至不要有字符串拷贝,统一用指针加偏移?
直至结果输出


On 3月9日, 下午9时47分, Dancefire <Dancef...@gmail.com> wrote:

Dancefire

unread,
Mar 19, 2009, 7:34:47 AM3/19/09
to ict...@googlegroups.com
OpenCLAS在切分过程中已经基本没有字符串拷贝了。等全部实现后再考虑更快的数据结构。或者你可以实现一个双数组Trie结构整合进OpenCLAS,测试一下与现有结构的性能差异。如果好的话可以替换现有结构。

2009/3/19 luo <yuliu...@gmail.com>
Reply all
Reply to author
Forward
0 new messages