关于中文分词

关于中文分词

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

眼下全量索引17G,不到1300万document花费大约25分钟的时间(Lucene 4.0),吞吐量远远低于lucene nightly build宣称的170G/h的量。换用StandardAnalyzer,有34%的提高,比較下使用的KAnalyzer,mmseg4j1.9.2-snapshot,standardanalyzer,性能分别在1.7M/s,10M/s,20M/s这样量级。所以觉得假设分词性能有明显提高,索引速度应该会有加快。

分析了下眼下使用的KAnalyzer,它同一时候运行正向最大匹配和反向最大匹配,取概率最大那个(1-gram累计词频),假设有歧义/交集的三元组,用概率算第三种分词方式,假设最高,当然选用第三种分词方式。

感觉起来效率不太高,由于有三次匹配,我会尝试例如以下动作:

1)分别測试仅仅使用最大正向和最大反向的性能,有个直观感觉,再建索引看看性能;

2)mmseg相同是启示式的,但仅仅做一次匹配,孰优孰劣,还要看准确率,召回率,必须通过的測试是否都通过,这一套标准须要建立起来

3)算法是一方面,词典质量更重要,算法方面性能,准确率,召回率各个方面做个tradeoff就能够。

4)对于”南京西路”,想保留”南京|西|路”,感觉建个额外字典,某些词必须拆掉就能够了。

5)里面的概率所有改用ln(freq),累计频率所有使用加法,提高效率,少用string,看看是否能用bytesref,按句子分,不要按整块文本分。diffrate = Max / (Min + 1)看起来有点费解…

6)最大匹配里面放进去的匹配规则要揪出来,要看看mmseg4j的实现。

最后想说理论上viterbi算法分词准确率最优,仅仅是性能太差了..

另外补充个,geo眼下按多级(15级)索引,可能是导致索引慢的原因。还有从csv文本到ReusableDocument的反序列化过程也可能拖慢索引速度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118678.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DispatcherServlet contextConfigLocation

    DispatcherServlet contextConfigLocation//ClassPathXmlApplicationContext是读取src目录下的配置文件ApplicationContextapp=newClassPathXmlApplicationContext("applicationContext.xml");//FileSystemXmlApplicationContext即系统文件路径,文件的目录。Applica…

    2022年7月12日
    16
  • SCCM 2007 R2部署、操作详解系列之准备篇

    SCCM 2007 R2部署、操作详解系列之准备篇

    2021年8月14日
    55
  • 推荐几款可以直接在手机上编程的app(包含Java、C、Python等)

    这里介绍几款可以在手机上编程的app,分别是:1.java和Android:AIDE集成开发环境。2.C语言:c语言编译器、C4droid。3.python:QPython3、Termux。4.CSS/HTML/JavaScript:HTMLplay。大部分都不需要root,可以直接编写程序并运行,下面我简单介绍一下这3个app的安装和简单使用,主要内容如下:一.AIDE集…

    2022年4月6日
    121
  • java中calendar类打印日历_输入年份和月份求天数

    java中calendar类打印日历_输入年份和月份求天数题目题目另可表述为:1.输入一个年份和月份,按格式输出此月份的日历2.以如下格式输出一个月份的日历代码实现1.Calendar类的一些说明Calendar类是一个抽象类,不能通过new的方式来获得实例,可以使用类方法getInstance()返回一个Calendar的子类对象.Calendarcalendar=Calendar.getInstance();…

    2022年9月2日
    11
  • leetcode-11盛最多水的容器「建议收藏」

    leetcode-11盛最多水的容器「建议收藏」原题链接给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入:he

    2022年8月8日
    4
  • C语言数据类型_unint16_t

    C语言数据类型_unint16_tGolang中int,int8,int16,int32,int64和uint区别

    2022年8月15日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号