Python 进行自然语言处理相关的实践。如:
pypinyin:汉字拼音转换工具 Python 版。xpinyin:一个用于把汉字转换为拼音的库。
jieba: Chinese Word Segmentation:jieba 中文分词:做最好的 Python 中文分词组件NLTK:该库具备可用于几乎所有 NLP 任务的工具pkuseg:北大开源的中文分词工具包,”据说“分词准确率远超过 THULAC 与结巴分词spacy:最快的 NLP 框架THULAC:清化大学推出的一套高效的中文词法分析工具包HanLP:Java 开发的中文自然语言处理工具SnowNLP:中文文本处理库gensim:从非结构化文本中无监督地学习文本隐层的主题向量表示,支持包括 TF-IDF/LSA/LDA/Word2VeC 多种主题模型算法。并可进行相似度计算、信息检索等常用任务。FlashText:运行时间与操作词语数量无关的关键词抽取、同义词替代
概述
语言模型
语言模型:描述语言规律的数学模型
- 目标:寻找困惑度最小的模型,使其最接近真实的语言
- 概率图模型
- HMM 马尔科夫模型
- CRF 条件随机场模型
- MEMM 最大熵隐马尔可夫模型
主要方向
命名实体识别
命名实体识别:Name Entity Recognition:NER:对非结构化文本数据提取出实体
关系抽取:Relation Extraction:RE:
实体统一:实体消歧:Entity Resolution:ER:对指向同一个实体的,进行合并,如“中国”与“中华人民共和国”
指代消解:Coreference Resolution:
命名实体识别
实体标注
语义消歧
词性标注
句法分析
语义分析
语音识别
语音识别:Speech recognition:Automatic Speech Recogniition:ASR:Speech To Text:STT:计算机自动将人类的语音内容转换为相应的文字
常用 LSTM
- 音素(Phoneme):单词的发音都是由音素构成,对于英语,常用的音素集是 CMU 的 39 个音素构成的音素集。而对于汉语,一般直接用全部声母和韵母作为音素集,另外汉语识别还要考虑音调。
- 声学模型:是将声学和发音学(phonetics)的知识进行整合,以特征提取部分生成的特征作为输入,并为可变长特征序列生成声学模型分数。
- 语言模型:通过从训练语料(通常是文本形式)学习词之间的相互关系,来估计假设词序列的可能性,又叫语言模型分数。
- GMM:Gaussian Mixture Model, 高斯混合模型,描述基于傅里叶频谱语音特征的统计模型,用于传统声学模型的建模中。
- HMM:Hidden Markov Model, 隐马尔科夫模型,是一种用来描述含有隐含未知参数的马尔科夫过程,其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。
- MFCC:Mel-Frequency Cepstral Coefficients, 梅尔频率倒谱系数,是组成梅尔频率倒谱的系数。衍生自音讯片段的倒频谱(cepstrum)。倒谱与梅尔频率倒谱的区别在于,梅尔频率倒谱的频带划分是在梅尔刻度上等距划分的,它比用于正常的对数倒频谱中的线性间隔的频带更接近人类的听觉系统。广泛应用于语音识别中。
- Fbank:Mel Frequency Filter Bank, 梅尔频率滤波器组。
- WER:Word Error Rate, 词错误率,是最常见的衡量语音识别系统性能的指标。
文字转语音
文本相似度
文本情感分析
新闻评论:舆情监控与预测
产品评论:产品优劣
情感词典
文本生成
知识图谱
pypinyin
pypinyin:汉字拼音转换工具 Python 版。
xpinyin:一个用于把汉字转换为拼音的库。
jieba 分词
jieba: Chinese Word Segmentation:jieba 中文分词:做最好的 Python 中文分词组件
- 中文分词必备
基本使用
- 四种模式
- 精确模式:最精确分开,不存在冗余数据,常用于文本分析
- 全模式:所有可成词词语扫描出来,速度快,但有歧义
- 搜索引擎模式:精确模式的基础上对长词进行切分,提高召回率,适合用于搜索引擎构建倒排索引的分词,粒度比较细
- paddle 模式:利用 PaddlePaddle 深度学习框架,训练序列标注(双向 GRU)网络模型实现分词。
- 需先安装:
pip install paddlepaddle-tiny==1.6.1
- 需先安装:
1 | # 使用utf-8编码的字符串 |
添加新词
1 | # # 特殊用词加入用户自定义词典 |
1 | import jieba |
词云
1 |
|
关键词抽取
- TF-IDF 算法、TextRank 算法
1 | # 关键词提取 |
词性标注
- 标注句子分词后每个词的词性
1 | import jieba.posseg as pseg |
词在原文的位置
- jieba 提供了 Tokenize 来返回词语在原文的起止位置,拥有默认和搜索两种模式。
1 | result = jieba.tokenize(u'小Q的python学习笔记') |
NLTK
NLTK:该库具备可用于几乎所有 NLP 任务的工具
- 对每种 NLP 任务有大量方法
- 学习与使用较为复杂,运行速度慢
- 没有集成词向量,不提供神经网络结构
用于分词、词性还原、词干提取、解析、句法分析、词性标注等任务。
PKUSeg
pkuseg:北大开源的中文分词工具包,”据说“分词准确率远超过 THULAC 与结巴分词
- 多领域分词
1 | import pkuseg |
- 训练模型
1 | import pkuseg |
spacy
spacy:最快的 NLP 框架
- 更面向对象
- 不如 NLTK 灵活,不支持多种 语言
1 | sudo pip install spacy |
THULAC
THULAC:清化大学推出的一套高效的中文词法分析工具包
- 功能:
- 中文分词模型
- 词性标注模型
- 由 5800 万字的人工分词和词性标注中文语料库训练而成,能力强大,对 Chinese Treebank(CTB5) 上的分词 F1 值高达 97.3%,词性标注的 F1 值高达 92.9%,且速度快,同时进行分词与词性标注速度达 300kb/s,每秒处理 15 万字,只进行分词达 1.3MB/S。
HanLP
HanLP:Java 开发的中文自然语言处理工具
- 中文分词
- 词性标注
- 命名实体识别
- 依存句法分析
SnowNLP
SnowNLP:中文文本处理库
unicode 编码
- 文本分类(Naive Bayes)
- 转换成拼音(Trie 树实现的最大匹配)
- 繁体转简体(Trie 树实现的最大匹配)
- 提取文本关键词(TextRank 算法)
- 提取文本摘要(TextRank 算法)
- Tokenization(分割成句子)
- 文本相似(BM25)
- 词性标注
- 句子分割
1 | from snownlp import SnowNLP |
gensim
gensim:从非结构化文本中无监督地学习文本隐层的主题向量表示,支持包括 TF-IDF/LSA/LDA/Word2VeC 多种主题模型算法。并可进行相似度计算、信息检索等常用任务。
- 知识图谱作为知识存储
- 快速高效的知识检索
- 情感分析与推理技术
FlashText
FlashText:运行时间与操作词语数量无关的关键词抽取、同义词替代
- 高效的文本查找替换库
1 | pip install flashtext |
关键词抽取
- 相同的意思有不同的词语
1 | from flashtext import KeywordProcessor |
关键词替换
1 | # 将 New Delhi(新德里)替换为 NCR region(国家首都区) |
rasa
rasa:基于多轮对话的框架
- 组件:
- Rassa NLU:自然语言理解:意图识别 + 实体识别,将用户的输入转换为结构化的数据
- 词槽
- Rasa Core:聊天机器人框架:基于机器学习的对话管理,决定返回什么内容给用户
- Rassa NLU:自然语言理解:意图识别 + 实体识别,将用户的输入转换为结构化的数据
- 功能:
- 对话系统
- 检索型问答系统:IR-bot:主要针对问答系统,提问 - 给答案,一般不需参考上下文内容
- 任务型对话系统:Task-bot:针对查询、操作(如订机票)之类的任务对话
- 闲聊系统:Chitchat-bot:如 小爱用学、siri 之类的陪聊
- 自然语言理解:NLU,
- 表示自然语言含义的形式:三元组方式:
- action:意图
- slot:需要填充的槽值
- value:对应的值
- 表示自然语言含义的形式:三元组方式:
- 对话状态:DST:Dialogue State Tracking,持续对话所需要的各种信息
nlpir
1 | pip install pynlpir |
