jieba icon indicating copy to clipboard operation
jieba copied to clipboard

取消星星了,这个项目已经死了

Open a358003542 opened this issue 3 years ago • 8 comments

个人有点算是Github老用户了,最近看到pelican项目也开始有这个趋势了多少有点感叹。我看过很多开源项目从开源项目慢慢变成了会员所有项目甚至变成了某些人甚至某一个人的专有项目,随着那小部分人失去了维护动力,至此那个开源项目就已经进入死亡周期了。

大概2020年的时候,我给这个项目提过一个意见,那就是我发现它用的marshal模块存储字典缓存的,这在python官方文档中已经不推荐了,推荐使用pickle,但实际上就这个应用场景,使用json就足够了。个人实践使用json确实能够提高模型加载速度。

当时给这个项目提了一个issue建议,但基本上过了很久很久这个issue也没人理。一开始我还以为是我提交的issue格式或者等等其他问题,但现在回过头来看,其实这个项目早就已经进入死亡周期了。

我写了一个fenci模块,分词逻辑上和jieba相同,不过代码会更简洁清晰,然后还提供了HMM算法的训练接口。

fenci模块

个人水平和精力有限,权当抛砖引玉吧。

我想说的jieba分词对于中文分词来说属于入门级别,对分词要求不高的场景可以随便用下,但即使是这样也是推荐加入自定义词典。而对于分词稍微有点要求的不管是算法还是词汇等等各方面都需要自己去实现了,至此jieba这个模块只具有参考学习价值了。

虽然有统计显示最近几年Github活跃新增项目数逐年是下降的了,但得出结论认为人们对开源代码的热情正在消退这是不正确的,开源的核心精神是开源而不是另外什么东西,你只要使用开源软件,给开源代码提问题,或者自己鼓捣一个什么开源项目分享出来,这都是开源精神,而我不认为这点上人们有所改变。那个统计无非揭示了确实Github上很多热门开源项目正在慢慢完成它的历史任务,因为火过之后也不敢再做什么大改动了,然后慢慢的走入静止衰退周期了,说大白话就是很多热门开源项目都步入死亡周期了,但那个统计的问题是他只关注热门项目,而我相信Github整体活跃度是一年高过一年的,而人们对于开源项目的热情也是一年高过一年的。

a358003542 avatar Jan 18 '22 17:01 a358003542

赞,坐吃山空,不破不立。补充一点,老牌分词工具其实都大刀阔斧的改革了,比如斯坦福CoreNLP续作Stanza,spacy,LTP升级4.0,HanLP升级2.0……jieba的paddle模式算是一次尝试,但是很敷衍,准确率仍然垫底,那套python2的代码结构现在也不适合学习,唯一的意义就是路径依赖。改革需要勇气,大版本一更新失去一批老用户,费力不讨好,哪有躺平轻松。但长远看,新技术必然取代旧技术,持续更新的必然比一潭死水强

我在另一个回答里也提了这个观点:https://github.com/fxsjy/jieba/issues/953#issuecomment-1000489899

botissue avatar Feb 10 '22 20:02 botissue

事情都在发展,人和组织都在变化,项目已死可能是不争的事实,但jieba仍然是我这类新手入门首选,就像初恋一样,我会留星。

gesean avatar Mar 16 '22 03:03 gesean

個人使用 jieba 也有幾年時間,老實說除了底層的 HMM 程式也應該做點修正了,程式可讀性也不符合 2022 年的標準(就單看變數命名,新手要怎麼理解)。

我自己的5分錢建議, 各位大老 ( @botissue @fxsjy @a358003542 )看看如何?

  • 後端分詞模型換成 onnx 格式的神經模型(確保未來不會受限於模型訓練框架,你想用 Pytorch, TF, Paddle 都行),並將分詞與詞性預測整合在同個模型下

  • 詞頻的 DAG 程式改寫

  • 將 pos, finalseg 兩個不同任務的模組,統一到同一個模塊下

  • 模型權重與字典分開下載,類似 spacy 的做法需要使用時才從網路載入或給予本地路徑

其他不太重要的建議:

  • 將 Python2 支援去除,單是判斷版本就讓程式複雜度增加、可讀性降低了不少

一些背景知識,本人實驗過使用類神經網路分詞在計算效能和F1-score 表現上都不會比 jieba 的 HMM 還差,只要設計得當在分詞套件還是有自己的存在需求(低資源需求)

theblackcat102 avatar Mar 17 '22 03:03 theblackcat102

感谢建议 @theblackcat102

onnx 很有意义,现在的梯度模型要上gpu上集群都是有需求的

权重和字典分离具体指什么? spacy下载实际上也有挺多的版本控制的问题,字典现在下载速度是真的很慢是吗?

DAG不改的话具体有什么问题可以展开一下吗?

shouldsee avatar Apr 05 '22 08:04 shouldsee

@shouldsee

  1. 权重和字典分离具体指什么?

目前 jieba 把 HMM的权重写死在程式中,我觉得应该参考更成熟的 HanLP 做法或 huggingface transformer 的 from_pretrained ,做到可以让使用者只有执行时才下载(当然要喂模型档案路径也行)。

  1. DAG不改的话具体有什么问题可以展开一下吗?

我觉得主要是可读性的问题?jieba 在最关键的步骤 __cut_DAG连句 comment 都沒有,

另外 paddle 问题真的很多,各位搜寻一下这里的 issue stack 就发现一堆问题了。我有魔改 jieba 用 onnx ,目前在处理 TB 等级的文字都没有问题(当然也不排除我的写法都避开了雷区)。

theblackcat102 avatar Apr 06 '22 02:04 theblackcat102

其实如果是有 active 的 maintainer 完全可以 fork 这个 repo 来重新 revamp

项目确实都是 来来去去的 这点倒是无可厚非

chenrui333 avatar Apr 06 '22 02:04 chenrui333

权重写死到PY文件肯定是有问题的,那最简修改的话至少要引入一个模型文件名,作为模型的属性加以维护应该是不难的,只要在模型初始化的时候指定即可,可选地可以支持简单http或者https的url直接读取简单的response直接load到模型里. 可以先把这部分简单改出来,然后看看具体文件格式怎么adapt

可读性的话,大家加注释comment就好了?那现在的问题主要还是没有一个active的review/maintain routine? 得有人花时间维护一套repo branch应该就可以? 目标就是把issue区清干净:D

shouldsee avatar Apr 07 '22 03:04 shouldsee

要开始维护的话,至少得先确定测试目标,和测试环境,还有api语法. 目前看来能跑的测试就只有test/jieba_test.py了,然后文档也得把函数签名写清楚一点...

  • 测试环境: python2.7 python3.5 python3.7 ?
  • 测试目标: test/jieba_test.py 通过, 重要issue加入testcase
  • 文档完善:
    • 加了个fork(https://github.com/shouldsee/jieba) 尝试写sphinx文档中: https://shouldsee.github.io/jieba/
      1. [x] 分词doc
      2. [ ] 添加自定义词典 doc
      3. [ ] 关键词提取
      4. [ ] 词性标注
      5. [ ] 并行分词
      6. [ ] Tokenize,输出(word,start,end)形式的结果
      7. [ ] ChineseAnalyzer for Whoosh 搜索引擎
      8. [ ] 命令行分词
      9. [ ] 延迟加载机制
    • api签名: 从README.md中整理出来
  • 功能

shouldsee avatar Apr 07 '22 08:04 shouldsee