中文分詞器性能比較


 

摘要:本篇是本人在Solr的基礎上,配置了中文分詞器,並對其進行的性能測試總結,具體包括

使用mmseg4j、IKAnalyzer、Ansj,分別從創建索引效果、創建索引性能、數據搜索效率等方面進行衡量。

具體的Solr使用方法假設讀者已有了基礎,關於Solr的性能指標見前期Solr博文

前提:       Solr提供了一整套的數據檢索方案,一台四核CPU16G內存的機器,千兆網絡
需求:       1、對Solr創建索引的效率有一定的要求。

             2、中文分詞速度要快,搜索速度也要快

             3、中文分詞准確率有一定的要求

說明:      以下是在Solr上分別配置不同的中文分詞器,它們之間的比較


1.      中文分詞

1.1  中文分詞器概述

名稱

最近更新

速度(網上情報)

擴展性支持、其它

mmseg4j

2013

complex 60W/s (1200 KB/s)

simple 100W/s (1900 KB/s)

使用sougou詞庫,也可自定義

(complex\simple\MaxWord)

IKAnalyzer

2012

IK2012 160W/s (3000KB/s)

支持用戶詞典擴展定義、支持自定義停止詞

(智能\細粒度)

Ansj

2014

BaseAnalysis 300W/s

hlAnalysis 40W/s

支持用戶自定義詞典,可以分析出詞性,有新詞發現功能

paoding

2008

100W/s

支持不限制個數的用戶自定義詞庫

 

注意:

中文分詞器可能與最新版本Lucene不兼容,配置好運行時出現TokenStream contractviolation錯誤,對於mmseg4j需要更改com.chenlb.mmseg4j.analysis.MMSegTokenizer源碼,添加super.reset()reset()內,重新編譯后替換原jar

 

1.2  mmseg4j

創建索引效果:

FieldValue內容:

京華時報ぼおえ2009123日報道,뭄내ㅠㅛㅜ치ㅗ受一股來自中西伯利亞的強冷空氣影響,本市出現大風降溫天氣,白天最高氣溫只有零下7攝氏度celsius degree,同時伴有67級的偏北風。

在詞庫中補充:

京華、뭄내ぼおえ受一股來

 

類型

結果

textMaxWord

京華|時報||||2009||1||23||報道|||||||||一股||||西|||||||空氣|影響|本市|出現|大風|降溫|天氣|白天|最高|氣溫|只有|零下|7|攝氏||celsius|degree|同時|伴有|6||7||||北風

textComplex

京華|時報|ぼおえ|2009||1||23||報道|뭄내ㅠㅛ||||受一股來|||西伯利亞|||冷空氣|影響|本市|出現|大風|降溫|天氣|白天|最高氣溫|只有|零下|7|攝氏度|celsius|degree|同時|伴有|6||7||||北風

textSimple

京華|時報|ぼおえ|2009||1||23||報道|뭄내ㅠㅛ||||受一股來||中西||||||冷空氣|影響|本市|出現|大風|降溫|天氣|白天|最高氣溫|只有|零下|7|攝氏度|celsius|degree|同時|伴有|6||7||||北風

 

創建索引效率:

17個各種類型字段,在solr博文中字段基礎上,選一空string類型字段改為新類型,並寫入文本內容(原純文本Size約為400BSolrInputDocument對象Size約為1130B)。

文本內容以詞庫中任選20詞拼成的句子,每詞大約3字,一句大約60字。

總數據量為2000W條數據,與2.2節相同配置。

字段類型

創建時間(s)

索引大小(GB)

網絡(MB/s)

速率(W/s)

textMaxWord

3115

4.95

6.0

0.64 (38W/s)

textComplex

4860

4.3

5.0

0.41 (25W/s)

textSimple

3027

4.32

6.5

0.66 (40W/s)

string

2350

9.08

8.0

0.85 (57W/s)

 

速度:在與“solr博文http://www.cnblogs.com/wgp13x/p/3742653.html”中1.2節相同配置的情況下,分詞索引創建速度要差於不使用分詞的。

大小:分詞索引大小要小於不使用分詞的,經測試分詞字段配置成autoGeneratePhraseQueries="false"對索引大小幾乎沒有影響

 

數據搜索效率:

文本內容以詞庫中任選20詞拼成的句子,每詞大約3字,一句大約60字,總數據量為2000W條數據。

字段類型

關鍵詞

搜索時間(ms)

結果()

textMaxWord

一不做二不休

180

2556

textComplex

一不做二不休

59

2648

textSimple

一不做二不休

62

2622

string

*一不做二不休*

20000

2689

textMaxWord

一個國家兩種制度

22

2620

textComplex

一個國家兩種制度

12

2687

textSimple

一個國家兩種制度

10

2670

string

*一個國家兩種制度*

15500

2657

textMaxWord

一些

24

15999

textComplex

一些

11

2687

textSimple

一些

9

2665

string

*一些*

14200

15758

textMaxWord

轉輾反側

15

2622

textComplex

轉輾反側

5

2632

textSimple

轉輾反側

9

2676

string

*轉輾反側*

15600

2665

 

補充:

對於非中文、數字、英文詞匯,包括繁體字,在詞典中加入新詞匯即可。

mmseg4j對於“都是先從容易的做起”,不能把“容易”分出來,分詞結果為“都是||從容|||做起”。

網上推薦使用textMaxWord類型分詞。

 

1.3  IKAnalyzer

創建索引效果:

FieldValue內容、在詞庫中補充均同1.2

分詞字段配置autoGeneratePhraseQueries="false"

 

類型

結果

細粒度

京華|時報|ぼおえ|2009||1||23|日報||報道|뭄내ㅠㅛ||||受一股來|一股|||來自|中西|西伯利亞|西伯|伯利|||強冷空氣|冷空氣|空氣|影響|本市|出現|大風|降溫|天氣|白天|最高|高氣|氣溫|只有||零下|||7|攝氏度|攝氏||celsius|degree|同時|伴有||6||7|||偏北風|偏北|北風

 

創建索引效率:

字段類型

創建時間(s)

索引大小(GB)

網絡(MB/s)

速率(W/s)

細粒度

3584

5.06

6.0

0.56 (33W/s)

 

速度:與1.2比較,分詞索引創建速度要略差於使用mmseg4j分詞的。

大小:分詞索引大小要略大於使用mmseg4j分詞的。

 

數據搜索效率:

字段類型

關鍵詞

搜索時間(ms)

結果()

細粒度

一不做二不休

400

5949255

細粒度

一個國家兩種制度

500

6558449

細粒度

一些

300

5312103

細粒度

轉輾反側

15

10588

 

補充:

mmseg4jtextMaxWord,“一不做二不休”被分為:一|不做|二不|不休;

IKAnalyzer中細粒度,“一不做二不休”被分為:一不做二不休||不做|二不休||不休;

因此同樣使用autoGeneratePhraseQueries="false",“一不做二不休”搜索,IKAnalyzer搜索出來的結果要遠多於mmseg4j

1.4  Ansj

創建索引效果:

FieldValue內容同1.2,沒有補充詞庫。

 

<fieldType name="text_ansj"class="solr.TextField">

                            <analyzertype="index">

                                     <tokenizerclass="org.ansj.solr.AnsjTokenizerFactory" conf="ansj.conf"rmPunc="true"/>

                            </analyzer>

                            <analyzertype="query">

                                     <tokenizerclass="org.ansj.solr.AnsjTokenizerFactory" analysisType="1"rmPunc="true"/>

                            </analyzer>

</fieldType>

 

結果

京華|時報||||2009|1|23|報道||||||||||一股|來自||西伯利亞|||強冷空氣|冷空氣|影響||本市|出現|大風|降溫|天氣||白天|最高|氣溫||只有||零下|7攝氏度|攝氏|攝氏度|celsius||degree||同時||伴有||6||7|||偏北風|北風|

 

    “京華”二字被分詞后變成了“京華”,據朋友介紹,它有將生僻字改字的Bug

 

創建索引效率:

字段類型

創建時間(s)

索引大小(GB)

網絡(MB/s)

速率(W/s)

細粒度

3815

5.76

5.2

0.52 (31W/s)

 

速度:與1.21.3比較,分詞索引創建速度要略差於使用mmseg4jIKAnalyzer分詞的。

大小:分詞索引大小要略大於使用mmseg4jIKAnalyzer分詞的。

 

數據搜索效率:

關鍵詞

搜索時間(ms)

結果()

一不做二不休

200

2478

一個國家兩種制度

15

0

一些

25

15665

轉輾反側

6

2655

 

1.5  總結

按分詞后的結果進行搜索,若在分詞字段配置autoGeneratePhraseQueries="false",則是搜索條件先分詞,再使用分詞在結果中搜索,默認的是trueautoGeneratePhraseQueries="false"對創建索引速度沒影響,對搜索結果有影響。也可以修改SolrQueryPasser,對於輸入的一個字符串,先進行相應分詞,再使用分詞結果在索引集中搜索。

精確或模糊*搜索,都是以詞為單位搜索。精確搜索是指返回所有包含分詞的結果。

分詞器能對wordletterdigit等進行識別。

對於不使用分詞的String類型進行搜索,只能通過模糊搜索*,搜到連字,以字為單位搜索。

在分詞索引內搜索,速度較快;不分詞,需要遍歷所有文檔,速度較慢。

如果需要分詞的話,那分詞速度是主要瓶頸。

綜合考慮,mmseg4j是首選的中文分詞器。

 

如有需要具體的測試代碼,可以跟本人聯系。

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM