此文为学习何晗老师《自然语言处理入门》笔记
词性标注
- 词性(Part-Of-Speech, POS):单词的语法分类。作用是提供词语的抽象表示。
- 词性标注集:所有词性集合。
示例
| 词性 | 说明 | 中文示例 | 英文示例 |
|---|---|---|---|
| r | 代词 | 我 你 他 | me you he |
| u | 助词 | 的 了 得 地 着 | oh well be |
| n | 名词 | 太阳 月亮 南京 | city house name |
| v | 动词 | 跑 跳 走 | run sit study |
| p | 介词 | 被即 往 | at on in before after |
| a | 形容词 | 可爱 聪明 机灵 | beautiful pretty good |
| nr | 人名 | 马云 马化腾 | James Kobe Bush |
- 词性标注:为句子中每个单词预测一个词性标签的任务。
- 流水式词法分析器:在大型分词语料库上训练分词器,然后与小型词性标注语料库上的词性标注模型灵活组合
PKU格式标注:
咱们/r 中国/ns 这么/r 大/a 的/u 一个/m 多/a 民族/n 的/u 国家/n 如果/c 不/d 团结/a ,/w 就/d 不/d 可能/v 发展/v 经济/n ,/w 人民/n 生活/n 水平/n 也/d 就/d 不/d 可能/v 得到/v 改善/vn 和/c 提高/vn 。/w
基于感知机的词性标注
布什将出任美国总统
布什/nr 将/d 出任/v 美国/ns 总统/n
| 转移特征 | 状态特征 | 示例 |
示例 |
|---|---|---|---|
| _B_1 -> 1 | |||
| 布什 | |||
| 将 | |||
POSInstance特取特性
protected int[] extractFeature(String[] words, FeatureMap featureMap, int position) {
List<Integer> featVec = new ArrayList<Integer>();
// 前一个词
String preWord = position >= 1 ? words[position - 1] : "_B_";
// 当前词
String curWord = words[position];
// 下一个词
String nextWord = position <= words.length - 2 ? words[position + 1] : "_E_";
// 前一个词
StringBuilder sbFeature = new StringBuilder();
sbFeature.append(preWord).append('1');
addFeatureThenClear(sbFeature, featVec, featureMap);
// 当前词
sbFeature.append(curWord).append('2');
addFeatureThenClear(sbFeature, featVec, featureMap);
// 下一个词
sbFeature.append(nextWord).append('3');
addFeatureThenClear(sbFeature, featVec, featureMap);
int length = curWord.length();
// 当前词的第一个字符,比如 ‘中华民族’ 第一个字符 ‘中’
sbFeature.append(curWord.substring(0, 1)).append('4');
addFeatureThenClear(sbFeature, featVec, featureMap);
if (length > 1) {
// 当前词的前两个字符,比如 ‘中华民族’ 第一个字符 ‘中华’
sbFeature.append(curWord.substring(0, 2)).append('4');
addFeatureThenClear(sbFeature, featVec, featureMap);
}
if (length > 2) {
// 当前词的前三个字符,比如 ‘中华民族’ 第一个字符 ‘中华民’
sbFeature.append(curWord.substring(0, 3)).append('4');
addFeatureThenClear(sbFeature, featVec, featureMap);
}
// suffix(w0, i)(i = 1, 2, 3)
// 当前词的最后一个字符,比如 ‘中华民族’ 最后字符 ‘族’
sbFeature.append(curWord.charAt(length - 1)).append('5');
addFeatureThenClear(sbFeature, featVec, featureMap);
if (length > 1) {
// 当前词的后缀两个字符,比如 ‘中华民族’ 长2后缀 ‘民族’
sbFeature.append(curWord.substring(length - 2)).append('5');
addFeatureThenClear(sbFeature, featVec, featureMap);
}
if (length > 2) {
// 当前词的后缀三个字符,比如 ‘中华民族’ 第一个字符 ‘华民族’
sbFeature.append(curWord.substring(length - 3)).append('5');
addFeatureThenClear(sbFeature, featVec, featureMap);
}
return toFeatureArray(featVec);
}
命名实体识别
基于序列标注的命名实体识别
边界通过{B, M, E, S}确定,其类别可以通过B-nt等附加类别的标签来确定。 从通用语料库到序列标注命名实体识别语料库的转换,比如:
萨哈夫/nr 说/v ,/w 伊拉克/ns 将/d 同/p [联合国/nt 销毁/v 伊拉克/ns 大规模/b 杀伤性/n 武器/n 特别/a 委员会/n]/nt 继续/v 保持/v 合作/v 。/w
| 输入变量 |
输入变量 |
输出变量 |
|---|---|---|
| 萨哈夫 | nr | S |
| 说 | v | O |
| , | w | O |
| 伊拉克 | ns | S |
| 将 | d | O |
| 同 | p | O |
| 联合国 | nt | B-nt |
| 销毁 | v | M-nt |
| 委员会 | n | E-nt |
特征提取
| 转移特征 | 词语特征 | 词性特征 |
|---|---|---|