NLP中的分类问题
2020年9月4日
一、分词算法
- Jieba分词 http://github.com/fxsjy/jieba
- SnowNLP https://github.com/isnowfy/snownlp
- LTP https://www.ltp-cloud.com/
- HanNLP https://github.com/hankcs/HanLP/
已经解决的问题,直接使用
二、词性标注(POS Tagging)
- 句子中的每个单词被分类为一种词性,如动词,名词等
- 词性标注的过程依赖当前单词以及它的上下文信息
- 词性标注问题也叫做序列标注(sequence labeling)问题
- 很多时候,可以作为上游任务的特征
1. sequence labeling当做分类问题
- 每个单词独立地去做分类
- 对于当前单词以及上下文单词(sliding window)提取特征,并用这些特征去做分类
我想要分析bootcamp这个单词是什么词性,我们可以划定一个范围,例如包含bootcamp附近的一小句话就可以提取各种特征,例如:
-
bootcamp
本身可以当做一个特征 -
mp
提取最后两个字符 -
camp
提取后面四个字符 -
8
这个单词由8个字符组成 -
0
这个单词是否是大写开头的 -
take the ...
take the 加另外的词作为特征
这样我们就得到了一个特征向量feature vector,可以再使用分类模型
但是这种方法论还是存在一定的问题,因为我们是将其一个个词进行分析,并没有将句子的连续性放到句子中考虑,比它更优秀的是下面的方法论
2. sequence labeling当做序列问题
- 利用概率来表示序列
- 考虑单词之间的前后依赖关系
- 常见的算法:
隐马尔科夫模型 (Hidden Markov Model)
条件随机场 (Conditional Random Fields)
现在使用的都是条件随机场的变种,训练模型例如:LSTM-CRF、Ber-BILSTM-CRF,都是基于CRF的,文本领域更倾向于使用CRF
三、命名实体识别(NER)
“张三” 人名
“北京” 地名