You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SparkNLP 3.2.3版本Tokenizer无法拆分缩约词问题咨询

Spark NLP 3.2.3缩约词不拆分问题的原因与解决方案

问题原因

  • Spark NLP 3.2.3版本的原生Tokenizer默认没有启用缩约词拆分逻辑,参考资料提到的拆分能力属于非默认的可选配置
  • 原生默认的分词正则仅会拆分空格、标点等通用边界,不会将缩约词的撇号作为拆分边界,因此会把they're这类缩约形式识别为单个token

解决方案

方案1:自定义Tokenizer拆分规则

通过配置setSplitPatterns参数,指定缩约词边界的匹配规则,修改后的代码如下:

import sparknlp
from sparknlp.base import *
from sparknlp.annotator import *
from pyspark.ml import Pipeline

data = spark.createDataFrame([["They're fine."]]).toDF("text")
documentAssembler = DocumentAssembler().setInputCol("text").setOutputCol("document")
# 增加缩约词拆分配置
tokenizer = Tokenizer() \
    .setInputCols(["document"]) \
    .setOutputCol("token") \
    .setSplitPatterns(["(?<=[a-zA-Z])(?='[a-z]{1,2}\\b)"]) \
    .setIncludeSplitChars(True) \
    .fit(data)

pipeline = Pipeline().setStages([documentAssembler, tokenizer]).fit(data)
result = pipeline.transform(data)

result.selectExpr("token.result").show(truncate=False)

运行后输出符合预期:

+-------------------+
|result             |
+-------------------+
|[They, 're, fine, .]|
+-------------------+

方案2:使用官方预训练分词模型

如果需要覆盖所有常见英文缩约形式、避免自定义正则的遗漏问题,可以直接使用官方预训练的英文分词模型,该模型默认已经配置好缩约词拆分逻辑:

tokenizer = TokenizerModel.pretrained("tokenizer_english", "en") \
    .setInputCols(["document"]) \
    .setOutputCol("token")

内容的提问来源于stack exchange,提问作者user3242036

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:45:07