Skip to content

Repository files navigation

title Zh2Emoji
emoji 🤖
colorFrom blue
colorTo red
sdk gradio
sdk_version 6.1.0
app_file app.py
pinned false

Zh2Emoji: 基于 Transformer 的语义中文分词与 Emoji 转换系统

Zh2Emoji 是一个集成了深度学习语义理解能力的 NLP 工具,旨在将原始中文文本精确切分,并根据词汇的深层语义智能地匹配最合适的 Emoji。

🌟 系统特色

  • Transformer 驱动:使用微调后的 BERT 模型进行序列标注,解决歧义分词问题。
  • 语义搜索匹配:并非简单的“查表法”,而是利用 Sentence-BERT 计算词向量与 Emoji 描述向量的余弦相似度。
  • 长文本支持:内置滑动窗口与标点切分逻辑,突破 BERT 512 Token 的长度限制。
  • 动态交互:基于 Gradio 构建 Web UI,支持用户自定义匹配阈值。

🏗 系统架构

系统主要由两个核心模块组成:Transformer 分词器 (CWS)语义 Emoji 映射器 (SEM)

graph TD
    A[输入原始中文文本] --> B{长度检查}
    B -- >512字符 --> C[标点符号切分逻辑]
    B -- <=512字符 --> D[BERT 编码层]
    C --> D
    
    subgraph "阶段 1: Transformer 分词 (CWS)"
    D --> E[Token Classification 层]
    E --> F[BIES 标签预测]
    F --> G[后处理: 词语重组]
    end
    
    G --> H[分词列表]
    
    subgraph "阶段 2: 语义映射 (SEM)"
    H --> I{停用词过滤/极速词典}
    I -- 命中 --> J[直接输出 Emoji]
    I -- 未命中 --> K[Sentence-BERT 向量化]
    K --> L[余弦相似度计算]
    L --> M[Emoji 知识库检索]
    M --> N{相似度 > 阈值?}
    N -- 是 --> O[返回最匹配 Emoji]
    N -- 否 --> P[返回原始词汇]
    end
    
    J --> Q[输出最终文本]
    O --> Q
    P --> Q
Loading

🔬 实现原理

1. 基于序列标注的中文分词

我们将中文分词任务建模为字符级的四分类问题。

  • 标签体系 (BIES)
    • B (Begin): 词首
    • I (Inside): 词中
    • E (End): 词尾
    • S (Single): 单字词

数学表示: 给定输入序列 $X = {x_1, x_2, ..., x_n}$,模型需要预测序列 $Y = {y_1, y_2, ..., y_n}$,其中 $y_i \in {B, I, E, S}$。 模型输出的概率分布为: $$P(y_i | X) = \text{Softmax}(W \cdot \text{BERT}(X)_i + b)$$ 其中 $\text{BERT}(X)_i$ 是 Transformer 最后一层提取的特征向量。

2. 语义向量空间映射

为了实现“模糊匹配”(例如“咖啡”能匹配到 ☕,“拿铁”也能匹配到 ☕),我们使用 Sentence-BERT (SBERT) 将词汇映射到高维向量空间。

余弦相似度公式: 给定待转换词汇向量 $\mathbf{u}$ 和候选 Emoji 描述向量 $\mathbf{v}$,它们之间的相似度 $S$ 计算如下: $$\text{similarity} = \cos(\theta) = \frac{\mathbf{u} \cdot \mathbf{v}}{|\mathbf{u}| |\mathbf{v}|} = \frac{\sum_{i=1}^{n} u_i v_i}{\sqrt{\sum_{i=1}^{n} u_i^2} \sqrt{\sum_{i=1}^{n} v_i^2}}$$

$\text{similarity} \ge \tau$ (用户自定义阈值) 时,系统执行转换。


🛠 模块说明

分词模块 (classification.py)

  • 基础模型bert-base-chinese
  • 微调语料:SIGHAN 2005 PKU 语料库
  • 关键技术
    • Offset Mapping:确保 Tokenizer 产生的 Subword 能完美映射回原始字符位置。
    • 分段推理:利用正则引擎对长文本进行无损切分,保证上下文逻辑的同时规避显存溢出。

Emoji 映射模块 (emoji.py)

  • 嵌入模型paraphrase-multilingual-MiniLM-L12-v2 (支持 50+ 语言)
  • 外部集成:集成 emojilib JSON 词库,拥有 1800+ 个 Emoji 语义条目。
  • 多层过滤机制
    1. 极速词典:处理“我”、“喜欢”等高频词,O(1) 复杂度。
    2. 停用词拦截:防止“的”、“了”等无意义虚词被误转。
    3. 语义匹配:处理名词、动词等核心词汇。

🚀 快速开始

1. 环境准备

pip install transformers torch sentence-transformers gradio emoji requests

2. 运行 UI 界面

python app.py

Zh2Emoji - 让文字表达更有趣。 🚀🍎☕

About

基于 Transformer 的语义中文分词与 Emoji 转换系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages