命名实体识别
命名实体识别常用方法:
1.传统方法
基于规则:使用正则表达式,词典匹配或语法规则
统计机器学习
特征工程:利用词性标注、词形、上下文窗口、前缀或后缀等特征
模型:隐马尔可夫模型、条件随机场
2.深度学习方法
词嵌入:Word2Vec、GloVe等将词转化为向量
序列建模
BiLSTM-CRF:双向LSTM捕捉上下文,CRF优化标签序列
Transformer模型:BERT、RoBERTa等预训练模型通过微调实现SOTA性能
Prompt Learning:利用模板引导模型生成实体(如“找到组织:[ORG]”)
正则的基础知识
| 基本语法 | |
| 元字符 | 说明 |
| . | 匹配任意字符(除换行符) |
| ^ | 匹配行首 |
| $ | 匹配行尾 |
| * | 前一个字符0次或多次 |
| + | 前一个字符1次或多次 |
| ? | 前一个字符0次或1次 |
| [] | 字符集合 |
| () | 分组捕获 |
| 转义字符:特殊字符需用 \ 转义:\. 匹配句号,\\ 匹配反斜杠 | |
| 预定义字符类 | ||
| 简写 | 等效表达式 | 说明 |
| \d | [0-9] | 数字 |
| \w | [a-zA-Z0-9_] | 单词字符(字母、数字、下划线) |
| \s | [ \t\n\r\f\v] | 空白字符(空格、制表符等) |
| \D | [^0-9] | 非数字 |
| \W | [^\w] | 非单词字符 |
| \S | [^\s] | 非空白字符 |
正则表达式在NER中的应用
# 匹配"YYYY-MM-DD"或"MM/DD/YYYY"
(\d{4}-\d{2}-\d{2})|(\d{2}/\d{2}/\d{4})
# 匹配11位手机号(以13/14/15/17/18/19开头)
^1[3-9]\d{9}$
# 简单匹配(如user@example.com)
\w+@\w+\.(com|cn|net)
# 匹配"¥100.00"或"$1,000"
[¥$]\d+(,\d{3})*(\.\d{2})?
# 匹配"¥100.00"或"$1,000"
[¥$]\d+(,\d{3})*(\.\d{2})?
#嵌套结构
# 匹配"北京市(海淀区)"中的地名
([^\(]+)\(([^\)]+)\)
Word2Vec的基础知识
目标:将单词映射到低维稠密向量空间,使得语义/语法相似的词在向量空间中距离相近。
两种模型架构:
1.CBOW
-
输入:周围上下文词(窗口内的词)的向量。
-
输出:预测当前中心词。
-
特点:
-
适合小型数据集或高频词。
-
训练速度快,对罕见词表现较差。
-
2. Skip-gram
-
输入:当前中心词的向量。
-
输出:预测周围上下文词。
-
特点:
-
适合大型数据集,能更好处理罕见词。
-
训练速度较慢,但效果通常优于CBOW。
-
架构对比:
| 模型 | 输入 | 输出 | 适用场景 |
|---|---|---|---|
| CBOW | 上下文词 | 中心词 | 小数据、高频词 |
| Skip-gram | 中心词 | 上下文词 | 大数据、罕见词 |
训练步骤详解
数据预处理
-
分词:英文转为小写,中文需分词(如结巴分词)。
-
停用词过滤:移除无意义词(如“的”、“and”)。
-
低频词处理:删除出现次数少于
min_count的词。
2. 构建词汇表
-
统计词频,为每个词分配唯一索引。
-
生成
(word, index)映射和反向映射。
3. 模型训练(以Skip-gram为例)
-
输入层:中心词的 one-hot 向量(维度=词汇表大小)。
-
隐藏层:无激活函数,权重矩阵
W(维度=[vocab_size, embedding_dim])即为词向量表。 -
输出层:Softmax 预测上下文词的概率分布。
