| title | Zh2Emoji |
|---|---|
| emoji | 🤖 |
| colorFrom | blue |
| colorTo | red |
| sdk | gradio |
| sdk_version | 6.1.0 |
| app_file | app.py |
| pinned | false |
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
我们将中文分词任务建模为字符级的四分类问题。
- 标签体系 (BIES):
B(Begin): 词首I(Inside): 词中E(End): 词尾S(Single): 单字词
数学表示:
给定输入序列
为了实现“模糊匹配”(例如“咖啡”能匹配到 ☕,“拿铁”也能匹配到 ☕),我们使用 Sentence-BERT (SBERT) 将词汇映射到高维向量空间。
余弦相似度公式:
给定待转换词汇向量
当
- 基础模型:
bert-base-chinese - 微调语料:SIGHAN 2005 PKU 语料库
- 关键技术:
- Offset Mapping:确保 Tokenizer 产生的 Subword 能完美映射回原始字符位置。
- 分段推理:利用正则引擎对长文本进行无损切分,保证上下文逻辑的同时规避显存溢出。
- 嵌入模型:
paraphrase-multilingual-MiniLM-L12-v2(支持 50+ 语言) - 外部集成:集成
emojilibJSON 词库,拥有 1800+ 个 Emoji 语义条目。 - 多层过滤机制:
- 极速词典:处理“我”、“喜欢”等高频词,O(1) 复杂度。
- 停用词拦截:防止“的”、“了”等无意义虚词被误转。
- 语义匹配:处理名词、动词等核心词汇。
pip install transformers torch sentence-transformers gradio emoji requestspython app.pyZh2Emoji - 让文字表达更有趣。 🚀🍎☕