2024年1月17日 星期三

匯入中文斷詞套件 pywordseg 出現 IndexError 問題

去年底我測試了左岸開發的中文斷詞模組 jieba, 在支援自訂字典功能的加持下, 繁體中文的斷詞效果倒也還不錯. 今天在 "Python 實戰聖經 (碁峰, 2021)" 這本書讀到 pywordseg 這個專為繁體中文開發的斷詞模組, 今天就來測試看看唄. 關於 Jieba 的用法參考 :   


與 Jieba 不同的是, pywordseg 模組採用深度學習模型 (elmo/w2v) 來斷詞, 雖然準確度較高, 但所需要的算力也較大, 最好是開啟 GPU 來加速. 由於我的筆電沒有 GPU, 故以下測試改在 Colab 上進行. 關於 Colab 用法參考 :


由於 Colab 未預載 pywordseg, 故使用前須先安裝 : 

!pip install pywordseg




安裝完就可以匯入所有模組來使用 : 

from pywordseg import *   

第一次會先下載模型, 包含系統斷句模型與 CharEmb, ELMo 等模型, 總共超過 500MB, 需要花點時間. 但下載完後匯入模組與函式時卻出現 IndexError : 




我以為是 pywordseg 版本問題, 於是改安裝較舊版本 0.0.9, 但還是無法順利匯入, 這回出現的錯誤是 TypeError : 




即使是只匯入 Wordseg 函式也是一樣 :

from pywordseg import Wordseg 

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-bf1f65fc63ab> in <cell line: 1>()
----> 1 from pywordseg import Wordseg

10 frames
/usr/local/lib/python3.10/dist-packages/overrides/signature.py in ensure_return_type_compatibility(super_type_hints, sub_type_hints, method_name)
    300     sub_return = sub_type_hints.get("return", None)
    301     if not _issubtype(sub_return, super_return) and super_return is not None:
--> 302         raise TypeError(
    303             f"{method_name}: return type `{sub_return}` is not a `{super_return}`."
    304         )

TypeError: Highway.forward: return type `<class 'torch.Tensor'>` is not a `<class 'NoneType'>`.

原因還沒時間研究, 先記下來吧! 不過這套件需要下載這麼大的模型且執行速度慢, 好像用 Jieba 就可以了. 

沒有留言:

張貼留言