THULAC-Python icon indicating copy to clipboard operation
THULAC-Python copied to clipboard

普通cut方式分词效率较慢问题

Open FelixHo opened this issue 8 years ago • 1 comments

测试了一下中长文本的分词效率,1+秒,全部使用默认参数,seg_only的效率明显提升,平均大概20ms(但感觉还是无法满足工业级大规模分词场景,还是有些慢)

环境:MacOS

Python 2.7.13 (default, Apr  4 2017, 08:47:57)
Type "copyright", "credits" or "license" for more information.

IPython 5.3.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import thulac

In [2]: import sys
   ...:
   ...: reload(sys)
   ...: sys.setdefaultencoding('utf-8')
   ...:

In [3]: t = thulac.thulac()
Model loaded succeed

In [4]: msg = u"""北京时间7月26日凌晨,在布达佩斯进行的2017年世界游泳锦标赛结束了男子100米仰泳决赛争夺,中国选手徐嘉余以52秒44获得冠军!这是中国选手首次在男子仰泳项目上获得世界大
   ...: 赛(奥运会和世界锦标赛)冠军!美国选手格雷维斯以52秒48获得亚军,两人差距仅仅0.04秒,世界纪录保持者、美国人默菲以52秒59获得第三。
   ...: 由于在刚刚结束的女子100米仰泳决赛上,加拿大选手马塞打破了世界纪录,男子100米仰泳的气氛也相应被掀了起来。为了给身体保暖,徐嘉余穿大衣入场,他如同国王一般,双手扬起接受全场
   ...: 欢呼。
   ...: 比赛开始!徐嘉余在这场比赛尽展绝对优势,他出水就领先!头50米徐嘉余用时25秒12排名第一!进入后半程争夺,徐嘉余继续全面领先!最终冲刺开始,嘉余不再象预赛和半决赛时那样多少放
   ...: 点,而是全力开冲。但两侧的美国选手格雷维斯和默菲对他形成了强力夹击,特别是格雷维斯,看上去都要追上了,但徐嘉余顽强的把优势保持到了终点,52秒44,徐嘉余获得冠军!"""

In [5]: %timeit t.cut(msg)
1 loop, best of 3: 1.09 s per loop

In [6]: t2 = thulac.thulac(seg_only=True)
Model loaded succeed

In [7]: %timeit t2.cut(msg)
10 loops, best of 3: 22.4 ms per loop

FelixHo avatar Jul 26 '17 03:07 FelixHo

感谢您对thulac的支持,python本身效率不高,而且文本处理又没有很好的矩阵并行化计算方法,所以原生的cut函数效率较慢,当然也和我们的模型本身比较复杂有关。如果需要处理大文本还是建议使用fast_cut方法来调用so扩展

MaJunhua avatar Jul 29 '17 15:07 MaJunhua