大数据关键技术:自然语言处理入门篇
分词与词向量
自然语言处理简介
自然语言处理概况
什么是自然语言处理?
自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
自然语言处理主要应用于机器翻译、舆情监测、自动摘要、观点提取、文本分类、问题回答、文本语义对比、语音识别、中文OCR等方面。
(1) 计算机将自然语言作为输入或输出:
- 输入对应的是自然语言理解;
- 输出对应的是自然语言生成;
(2) 关于NLP的多种观点:
- A、人类语言处理的计算模型:
- ——程序内部按人类行为方式操作
- B、 人类交流的计算模型:
- ——程序像人类一样交互
- C、有效处理文本和语音的计算系统
(3) NLP的应用:
A、机器翻译(Machine Translation)…….
B、MIT翻译系统(MIT Translation System)……
C、文本摘要(Text Summarization)……
D、对话系统(Dialogue Systems)……
E、其他应用(Other NLP Applications):
——语法检查(Grammar Checking)
——情绪分类(Sentiment Classification)
——ETS作文评分(ETS Essay Scoring)
自然语言处理相关问题
为什么自然语言处理比较难?
(1) 歧义
“At last, a computer that understands you like your mother”
对于这句话的理解:
A、 它理解你就像你的母亲理解你一样;
B、 它理解你喜欢你的母亲;
C、 它理解你就像理解你的母亲一样
D、 我们来看看Google的翻译:终于有了一台像妈妈一样懂你的电脑(看上去Google的理解更像选项A)。
A到C这三种理解好还是不好呢?
(2) 不同层次的歧义
A、 声音层次的歧义——语音识别:
——“ ... a computer that understands you like your mother”
——“ ... a computer that understands you lie cured mother”
B、语义(意义)层次的歧义:
Two definitions of “mother”:
——a woman who has given birth to a child
——a stringy slimy substance consisting of yeast cells and bacteria; is added to cider or wine to produce vinegar
C、话语(多语)层次的歧义、句法层次的歧义:
NLP的知识瓶颈
我们需要:
——有关语言的知识;
——有关世界的知识;
可能的解决方案:
——符号方法 or 象征手法:将所有需要的信息在计算机里编码;
——统计方法:从语言样本中推断语言特性;
(1)例子研究:限定词位置
任务:在文本中自动地放置限定词
样本:Scientists in United States have found way of turning lazy monkeys into workaholics using gene therapy. Usually monkeys work hard only when they know reward is coming, but animals given this treatment did their best all time. Researchers at National Institute of Mental Health near Washington DC, led by Dr Barry Richmond, have now developed genetic treatment which changes their work ethic markedly. ”Monkeys under influence of treatment don’t procrastinate,” Dr Richmond says. Treatment consists of anti-sense DNA - mirror image of piece of one of our genes - and basically prevents that gene from working. But for rest of us, day when such treatments fall into hands of our bosses may be one we would prefer to put off.
(2)相关语法规则
a) 限定词位置很大程度上由以下几项决定:
i. 名词类型-可数,不可数;
ii. 照应-特指,类指;
iii. 信息价值-已有,新知
iv. 数词-单数,复数
b) 然而,许多例外和特殊情况也扮演着一定的角色,如:
i. 定冠词用在报纸名称的前面,但是零冠词用在杂志和期刊名称前面
(3) 符号方法方案
a) 我们需要哪些类别的知识:
i. 语言知识:
-静态知识:数词,可数性,…
-上下文相关知识:共指关系
ii. 世界知识:
- 引用的唯一性(美国现任总统),名词的类型(报纸与杂志),名词之间的情境关联性(足球比赛的得分),......
iii. 这些信息很难人工编码!
(4)统计方法方案
a) 朴素方法:
i. 收集和你的领域相关的大量的文本
ii. 对于其中的每个名词,计算它和特定的限定词一起出现的概率
iii. 对于一个新名词,依据训练语料库中最高似然估计选择一个限定词
b) 实现:
i. 语料:训练——华尔街日报(WSJ)前21节语料,测试——第23节
ii. 预测准确率:71.5%
c) 结论:
i. 结果并不是很好,但是对于这样简单的方法结果还是令人吃惊
ii. 这个语料库中的很大一部分名词总是和同样的限定词一起出现,如:
-“the FBI”,“the defendant”, ...
(5)作为分类问题的限定词位置
a) 预测:
b) 代表性的问题:
i. 复数?(是,否)
ii. 第一次在文本中出现?
iii. 名词(词汇集的成员)
c) 图表例子略
d) 目标:学习分类函数以预测未知例子
(6)分类方法
a) 学习X->Y的映射函数
b) 假设已存在一些分布D(X,Y)
c) 尝试建立分布D(X,Y)和D(X|Y)的模型
(7)分类之外
a) 许多NLP应用领域可以被看作是从一个复杂的集合到另一个集合的映射:
i. 句法分析: 串到树
ii. 机器翻译: 串到串
iii. 自然语言生成:数据词条到串
b) 注意,分类框架并不适合这些情况!
自然语言处理:单词计数
语料库及其性质
(1) 什么是语料库(Corpora)
i. 一个语料库就是一份自然发生的语言文本的载体,以机器可读形式存储;
(2) 单词计数(Word Counts)
i. 在文本中最常见的单词是哪些?
ii. 在文本中有多少个单词?
iii. 在大规模语料库中单词分布的特点是什么?
(3) 我们以马克吐温的《汤姆索耶历险记》为例:
单词(word) 频率(Freq) 用法(Use)
the 3332 determiner (article)
and 2972 conjunction
a 1775 determiner
to 1725 preposition, inf. marker
of 1440 preposition
was 1161 auxiliary verb
it 1027 pronoun
in 906 preposition
that 877 complementizer
Tom 678 proper name
虚词占了大多数
(4) 这个例句里有多少个单词:
They picnicked by the pool, then lay back on the grass and looked at the stars.
i. “型”(Type) ——语料库中不同单词的数目,词典容量
ii. “例”(Token) — 语料中总的单词数目
iii. 注:以上定义参考自《自然语言处理综论》
iv. 汤姆索耶历险记(Tom Sawyer)中有:
1. 词型— 8, 018
2. 词例— 71, 370
3. 平均频率— 9(注:词例/词型)
(5) 词频的频率:
大多数词在语料库中仅出现一次!
自然语言处理的一般步骤
(1) 文本预处理(分词、去除停用词、词干化)
(2) 统计词频
(3) 文本向量化
分词相关知识
(1) Tokenization
i. 目标:将文本切分成单词序列
ii. 单词指的是一串连续的字母数字并且其两端有空格;可能包含连字符和撇号但是没有其它标点符号
iii. Tokenizatioan 容易吗?
(2) 什么是词?
i. English:
1. “Wash. vs wash”
2. “won’t”, “John’s”
3. “pro-Arab”, “the idea of a child-as-required-yuppie-possession must be motivating them”, “85-year-old grandmother”
ii. 东亚语言:
词之间没有空格
(3) 分词(Word Segmentation)
i. 基于规则的方法: 基于词典和语法知识的形态分析
ii. 基于语料库的方法: 从语料中学习(Ando&Lee, 2000))
iii. 需要考虑的问题: 覆盖面,歧义,准确性
1.基于词典:基于字典、词库匹配的分词方法;(字符串匹配、机械分词法)
2.基于统计:基于词频度统计的分词方法;
3.基于规则:基于知识理解的分词方法。
中文分词——jieba分词
中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,在进行中文自然语言处理时,通常需要先进行分词。
中文在基本文法上有其特殊性,具体表现在:
1.与英文为代表的拉丁语系语言相比,英文以空格作为天然的分隔符,而中文由于继承自古代汉语的传统,词语之间没有分隔。 古代汉语中除了连绵词和人名地名等,词通常就是单个汉字,所以当时没有分词书写的必要。而现代汉语中双字或多字词居多,一个字不再等同于一个词。
2.在中文里,“词”和“词组”边界模糊
现代汉语的基本表达单元虽然为“词”,且以双字或者多字词居多,但由于人们认识水平的不同,对词和短语的边界很难去区分。
例如:“对随地吐痰者给予处罚”,“随地吐痰者”本身是一个词还是一个短语,不同的人会有不同的标准,同样的“海上”“酒厂”等等,即使是同一个人也可能做出不同判断,如果汉语真的要分词书写,必然会出现混乱,难度很大。
jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能生成词情况所构成的有向无环图(DAG), 再采用了动态规划查找最大概率路径,找出基于词频的最大切分组合,对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。
jieba分词支持三种分词模式:
-
精确模式, 试图将句子最精确地切开,适合文本分析:
-
全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;
-
搜索引擎模式,在精确模式的基础上,对长词再词切分,提高召回率,适合用于搜索引擎分词。
jieba分词还支持繁体分词和支持自定义分词。
jieba分词器安装
在python2.x和python3.x均兼容,有以下三种:
-
全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
-
半自动安装: 先下载,网址为: http://pypi.python.org/pypi/jieba, 解压后运行: python setup.py install
-
手动安装: 将jieba目录放置于当前目录或者site-packages目录,
jieba分词可以通过import jieba 来引用
jieba分词主要功能
先介绍主要的使用功能,再展示代码输出。jieba分词的主要功能有如下几种:
-
jieba.cut:该方法接受三个输入参数:需要分词的字符串; cut_all 参数用来控制是否采用全模式;HMM参数用来控制是否适用HMM模型
-
jieba.cut_for_search:该方法接受两个参数:需要分词的字符串;是否使用HMM模型,该方法适用于搜索引擎构建倒排索引的分词,粒度比较细。
-
待分词的字符串可以是unicode或者UTF-8字符串,GBK字符串。注意不建议直接输入GBK字符串,可能无法预料的误解码成UTF-8,
-
jieba.cut 以及jieba.cut_for_search返回的结构都是可以得到的generator(生成器), 可以使用for循环来获取分词后得到的每一个词语或者使用
-
jieb.lcut 以及 jieba.lcut_for_search 直接返回list
-
jieba.Tokenizer(dictionary=DEFUALT_DICT) 新建自定义分词器,可用于同时使用不同字典,jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射。
jieba分词器添加自定义词典
jieba分词器还有一个方便的地方是开发者可以指定自己的自定义词典,以便包含词库中没有的词,虽然jieba分词有新词识别能力,但是自行添加新词可以保证更高的正确率。
使用命令:
jieba.load_userdict(filename) # filename为自定义词典的路径
在使用的时候,词典的格式和jieba分词器本身的分词器中的词典格式必须保持一致,一个词占一行,每一行分成三部分,一部分为词语,一部分为词频,最后为词性(可以省略),用空格隔开。下面其中userdict.txt中的内容为小修添加的词典,而第二部分为小修没有添加字典之后对text文档进行分词得到的结果,第三部分为小修添加字典之后分词的效果。
这里介绍基于TF-IDF算法的关键词抽取, 只有关键词抽取并且进行词向量化之后,才好进行下一步的文本分析,可以说这一步是自然语言处理技术中文本处理最基础的一步。
jieba分词中含有analyse模块,在进行关键词提取时可以使用下列代码
import jieba.analyse
jieba.analyse.extrac_tags(sentence,topK=20,withweight=False,allowPos=())
#sentence为待提取的文本,
#toPK为返回几个TF/tDF权重最大的关键词,默认值为20
#withweight为是否一并返回关键词权重值,默认值为False
#a11 owPOS仅包含指定词性的词,默认值为空,既不筛选
jieba.analyse.TFIDF(idf_path=None)#新建rF-IDF实例,idf path为IDF频率文件
jieba.analyse.textrank(sentence,topK=20,withweight=False,allowPOS=('ns','n','vn','v'))
#直接使用,接口相同,注意磨人过滤词性
jieba.analyse.TextRank()
#新建自定义TextRank.实例
基本思想:
1、将待抽取关键词的文本进行分词
2、以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图计算图中节点的PageRank,注意是无向带权图
利用jieba进行关键词抽取
一个例子:分别使用两种方法对同一文本进行关键词抽取,并且显示相应的权重值。
jieba分词的词性标注
jieba分词还可以进行词性标注,标注句子分词后每个词的词性,采用和ictclas兼容的标记法,这里知识简单的句一个列子。
#jieba.posseg.POSTokenizer(tokenizer=None)
#新建自定义分词器,tokenizer参数可以指定内部使用的
#jieba.Tokenizer分词器,jieba.posseg.dt为默认词性标注分词器
import jieba.posseg as pseg
words=pseg.cut("我爱北京大学")
for word,flag in words:
print('%s %s' %(word,flag))
文本向量化表示
文本表示是自然语言处理中的基础工作,文本表示的好坏直接影响到整个自然语言处理系统的性能。文本向量化就是将文本表示成一系列能够表达文本语义的向量,是文本表示的一种重要方式。目前对文本向量化大部分的研究都是通过词向量化实现的,也有一部分研究者将句子作为文本处理的基本单元,于是产生了doc2vec和str2vec技术。
词袋模型
词袋模型和表示方法
从书店图书管理员谈起。假设书店有3排书架,分别摆放“文学艺术”、“教育考试”、“烹饪美食”3种主题的书籍,现在新到了3本书分别是《唐诗三百首》、《英语词汇》《中式面点》,你是一名图书管理员,要怎样将这些书摆放到合适的书架上呢?实际上你摆放图书的过程就是分类的过程。如下图所示:
文本向量化表示就是用数值向量来表示文本的语义。文本分类领域使用了信息检索领域的词袋模型,词袋模型在部分保留文本语义的前提下对文本进行向量化表示。
One-Hot表示法
One-Hot表示法的数值计算规则为:词语序列中出现的词语其数值为1,词语序列中未出现的词语其数值为0。用数学式子表达为:
例1 已知有下边的几篇英文文本,请用词袋模型One-Hot法向量化表示每篇文本。
从以上介绍可以看到,词袋模型的One-Hot表示法考虑了都有哪些词在文本中出现,用出现的词语来表示文本的语义。
TF表示法
TF表示法的数值计算规则为:词语序列中出现的词语其数值为词语在所在文本中的频次,词语序列中未出现的词语其数值为0。用数学式子表达为:
其中,\(t\)表示词语\(j\),\(count(t)\)表示词语\(j\)在所在文本出现的次数。
从以上介绍可以看到,词袋模型的TF表示法除了考虑都有哪些词在文本中出现外,还考虑了词语出现的频次,用出现词语的频次来突出文本主题进而表示文本的语义。
TF-IDF表示法
TF-IDF表示法的数值计算规则为:词语序列中出现的词语其数值为词语在所在文本中的频次乘以词语的逆文档频率,词语序列中未出现的词语其数值为0。用数学式子表达为:
例2 已知有下边的几篇英文文本,请用词袋模型TF法向量化表示每篇文本。文本同例1
IDF值计算过程
非词袋模型
词袋(Bag Of Word)模型是最早的以词语为基础处理单元的文本项量化方法。该模型产生的向量与原来文本中单词出现的顺序没有关系,而是词典中每个单词在文本中出现的频率。该方法虽然简单易行,但是存在如下三个方面的问题:维度灾难,无法保留词序信息,存在语义鸿沟。
神经网络语言模型(Neural Network Language Model,NNLM)与传统方法估算的不同在于直接通过一个神经网络结构对n元条件概率进行估计。
由于NNLM模型使用低维紧凑的词向量对上下文进行表示,解决了词袋模型带来的数据稀疏、语义鸿沟等问题。
另一方面,在相似的上下文语境中,NNLM模型可以预测出相似的目标词,而传统模型无法做到这一点。
例如,如果在语料中A=“小狗在院子里趴着”出现1000次,B=“小猫在院子里趴着”出现1次。A和B的唯一区别就是狗和猫,两个词无论在语义还是语法上都相似。根据频率来估算概率P(A)>>P(B),这显然不合理。如果采用NNLM计算P(A)~P(B),因为NNLM模型采用低维的向量表示词语,假定相似的词其词向量也相似。
Word2Vec是从大量文本语料中以无监督的方式学习语义知识的一种模型,它被大量地用在自然语言处理(NLP)中。
Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文。而CBOW是给定上下文,来预测input word。
Word2Vec模型实际上分为了两个部分,第一部分为建立模型,第二部分是通过模型获取嵌入词向量。Word2Vec的整个建模过程实际上与自编码器(auto-encoder)的思想很相似,即先基于训练数据构建一个神经网络,当这个模型训练好以后,我们并不会用这个训练好的模型处理新的任务,我们真正需要的是这个模型通过训练数据所学得的参数,例如隐层的权重矩阵。
模型的输出概率代表着到我们词典中每个词有多大可能性跟input word同时出现。举个例子,如果我们向神经网络模型中输入一个单词“Soviet“,那么最终模型的输出概率中,像“Union”, ”Russia“这种相关词的概率将远高于像”watermelon“,”kangaroo“非相关词的概率。因为”Union“,”Russia“在文本中更大可能在”Soviet“的窗口中出现。
我们的模型将会从每对单词出现的次数中习得统计结果。例如,我们的神经网络可能会得到更多类似(“Soviet“,”Union“)这样的训练样本对,而对于(”Soviet“,”Sasquatch“)这样的组合却看到的很少。因此,当我们的模型完成训练后,给定一个单词”Soviet“作为输入,输出的结果中”Union“或者”Russia“要比”Sasquatch“被赋予更高的概率。
如果两个不同的单词有着非常相似的“上下文”(也就是窗口单词很相似,比如“Kitty climbed the tree”和“Cat climbed the tree”),那么通过我们的模型训练,这两个单词的嵌入向量将非常相似。
那么两个单词拥有相似的“上下文”到底是什么含义呢?
比如对于同义词“intelligent”和“smart”,我们觉得这两个单词应该拥有相同的“上下文”。而例如”engine“和”transmission“这样相关的词语,可能也拥有着相似的上下文。
实际上,这种方法实际上也可以帮助你进行词干化(stemming),例如,神经网络对”ant“和”ants”两个单词会习得相似的词向量。
词干化(stemming)就是去除词缀得到词根的过程。
主题挖掘
LDA主题模型基本知识
文本挖掘背景知识
什么是文本挖掘?
- 计算机通过高级数据挖掘和自然语言处理,对非结构化的文字进行机器学习。
- 文本数据挖掘包含但不局限以下几点:
- 主题挖掘
- 文本分类
- 文本聚类
- 语义库的搭建
在机器学习和自然语言处理等领域,主题挖掘是寻找是主题模型,主题模型是用来在一系列文档中发现抽象主题的一种统计模型。
如果一篇文章有一个中心思想,那么一些特定词语会更频繁的出现。简单而言,主题挖掘就是要找到表达文章中心思想的主题词。
从大量文字中找到主题是一个高度复杂的工作,不仅因为人的自然语言具有多层面特性,而且很难找到准确体现资料核心思想的词语。
主题挖掘的现有方案如下:
- TF-IDF(Term Frequency–Inverse Document Frequency)
- 共现关系(co-occurrence)
- LDA(隐含狄利克雷分布Latent Dirichlet allocation)
但是这些算法也存在一定的局限性:要么是无法做到只提炼出重要主题,要么是不具高度扩展性和高效性。
TF-IDF
TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
- TF是词频(Term Frequency)
词频(TF)表示词条(关键字)在文本中出现的频率。
这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。
- IDF是逆向文件频率(Inverse Document Frequency)
逆向文件频率 (IDF) :某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。
如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。
- TF-IDF实际上是:TF * IDF
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
- TF-IDF应用
(1)搜索引擎;
(2)关键词提取;
(3)文本相似性;
(4)文本摘要
Python如何实现TF-IDF算法: NLTK、 Sklearn、 Jieba
Co-occurrence(共现关系)
共词关系分析方法在网络研究中应用普遍,通常利用单元(如词汇、人物和机构等)之间的共现关系构建共现矩阵,进而映射为共现关系网络并可视化,从而来揭示某领域的热点与趋势、结构与演化等。
在大规模语料中,若两个词经常共同出现(共现)在截取的同一单元(如一定词语间隔/一句话/一篇文档等)中,则认为这两个词在语义上是相互关联的,而且,共现的频率越高,其相互间的关联越紧密。
两个词共同出现的次数越多,网络图中两个词语节点连线越粗,也就是共现的次数为边上的权值
其次,单个词出现的次数越多,在网络图中节点越大,若一个词与许多词均有联系,则这个词会在网络图的中心区域。
在文本挖掘中,有共现矩阵的概念,如下
案例:
利用Python构建共现关系分析大江大河2弹幕数据
导入Gephi 制作网络图
案例:利用共现关系分析微生物群落中菌群之间的生态学关系
什么是LDA主题模型
介绍
- 关于LDA有两种含义,一种是线性判别分析(Linear Discriminant Analysis),一种是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),我们讲后者。
- 按照wiki上的介绍,LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,是一种在PLSA基础上改进的主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题(分布)出来后,便可以根据主题(分布)进行主题聚类或文本分类。同时,它是一种典型的词袋模型,即一篇文档是由一组词构成,词与词之间没有先后顺序的关系。
- 研表究明,汉字的序顺并不定一能影阅响读。比如当你看完这句话后,才发这现里的字,全是都乱的。
- 此外,一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。
人类是怎么生成文档的呢?LDA的这三位作者在原始论文中给了一个简单的例子。比如假设事先给定了这几个主题:Arts、Budgets、Children、Education,然后通过学习训练,获取每个主题Topic对应的词语。如下图所示:
然后以一定的概率选取上述某个主题,再以一定的概率选取那个主题下的某个单词,不断的重复这两步,最终生成如下图所示的一篇文章(其中不同颜色的词语分别对应上图中不同主题下的词):
当我们看到一篇文章后,往往喜欢推测这篇文章是如何生成的,我们可能会认为作者先确定这篇文章的几个主题,然后围绕这几个主题遣词造句,表达成文。
LDA就是要干这事:根据给定的一篇文档,推测其主题分布。
通俗来说,可以假定认为人类是根据上述文档生成过程写成了各种各样的文章,现在某小撮人想让计算机利用LDA干一件事:你计算机给我推测分析网络上各篇文章分别都写了些什么主题,且各篇文章中各个主题出现的概率大小(主题分布)是什么。
数学背景知识
在LDA模型中,一篇文档生成的方式如下:
- 从狄利克雷分布中取样生成文档 i 的主题分布
- 从主题的多项式分布中取样生成文档i第 j 个词的主题
- 从狄利克雷分布中取样生成主题对应的词语分布
- 从词语的多项式分布中采样最终生成词语
其中,类似Beta分布是二项式分布的共轭先验概率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布。
这里先简单解释下二项分布、多项分布、beta分布、Dirichlet 分布这4个分布。
- 二项分布(Binomial distribution),是从伯努利分布推进的。伯努利分布,又称两点分布或0-1分布,是一个离散型的随机分布,其中的随机变量只有两类取值,非正即负{+,-}。
- 多项分布,是二项分布扩展到多维的情况。单次试验中的随机变量的取值不再是0-1的,而是有多种离散值可能(1,2,3...,k)。比如投掷6个面的骰子实验,N次实验结果服从K=6的多项分布。
- Beta分布,二项分布的共轭先验分布。给定参数和,取值范围为[0,1]的随机变量 x 的概率密度函数。
- Dirichlet分布,是beta分布在高维度上的推广,其密度函数形式跟beta分布的密度函数如出一辙。
贝叶斯派思考问题的固定模式:
先验分布\(\pi(\theta)\) + 样本信息\(\chi\) \(\Rightarrow\)后验分布\(\pi(\theta|x)\)
上述思考模式意味着,新观察到的样本信息将修正人们以前对事物的认知。换言之,在得到新的样本信息之前,人们对的认知是先验\(\pi(\theta)\)分布,在得到新的样本信息\(\chi\)后,人们对\(\theta\)的认知为 \(\pi(\theta|x)\)。
所观测到的数据符合二项分布,参数的先验分布和后验分布都是Beta分布的情况,就是Beta-Binomial共轭。换言之,Beta分布是二项式分布的共轭先验概率分布。
在贝叶斯概率理论中,如果后验概率P(θ|x)和先验概率p(θ)满足同样的分布律,那么,先验分布和后验分布被叫做共轭分布,同时,先验分布叫做似然函数的共轭先验分布。
所观测到的数据符合多项分布,参数的先验分布和后验分布都是Dirichlet 分布的情况,就是Dirichlet-Multinomial 共轭。换言之,至此已经证明了Dirichlet分布的确就是多项式分布的共轭先验概率分布。
实现
为了方便描述,首先定义一些变量:
图模型为(图中被涂色的w表示可观测变量,N表示一篇文档中总共N个单词,M表示M篇文档)
主题模型下生成文档
PLSA中,主题分布和词分布是唯一确定的,能明确的指出主题分布可能就是{教育:0.5,经济:0.3,交通:0.2},词分布可能就是{大学:0.5,老师:0.3,课程:0.2}。
但在LDA中,主题分布和词分布不再唯一确定不变,即无法确切给出。例如主题分布可能是{教育:0.5,经济:0.3,交通:0.2},也可能是{教育:0.6,经济:0.2,交通:0.2},到底是哪个我们不再确定(即不知道),因为它是随机的可变化的。但再怎么变化,也依然服从一定的分布,即主题分布跟词分布由Dirichlet先验随机确定。
PLSA和LDA生成模型的比较
LDA生成文档的过程中,先从dirichlet先验中“随机”抽取出主题分布,然后从主题分布中“随机”抽取出主题,最后从确定后的主题对应的词分布中“随机”抽取出词。
形式化LDA
对于语料库中的每篇文档,LDA定义了如下生成过程(generative process):
(1)对每一篇文档,从主题分布中抽取一个主题。
(2)从上述被抽到的主题所对应的单词分布中抽取一个单词。
(3)重复上述过程直至遍历文档中的每一个单词。
LDA认为每篇文章是由多个主题混合而成的,而每个主题可以由多个词的概率表征。所以整个程序的输入和输出如下表所示。
每个主题规则文件.twords如下格式所示
案例分析
“埃航空难”的主题图谱构建及分析
王晰巍,张柳,黄博,韦雅楠.基于LDA的微博用户主题图谱构建及实证研究——以“埃航空难”为例[J].数据分析与知识发现,2020,4(10):47-57.
数据获取与文本预处理
第一步,采用网络爬虫方式采集用户数据,获取字 段包括用户 ID、用户名、用户个人资料相关字段、转发评论文本及时间等信息。
数据采集时间段参考百度指数,如图 2 所示,“埃航空难”的活跃期以 2019 年 3 月 10 日为起始 点、2019 年 6 月 20 日为终结点,从而最大限度地保证 数据的有效性,最终获得微博数据 34 325 条。
确定主题
选用 gensim 中的类实例化 LDA 主题模型,对处理后的文本进行分类训练。
困惑度的局部极小值点出现在主题数为 7 时,最佳主题数为7。
表:主题高频词分布
随机微博用户的“文档-主题”分布
“埃航空难”微博用户主题图谱
主题 3 用户节点分布及意见领袖识别
表:主题3中用户度中心度(TOP10)
春秋时期社会发展的主题挖掘与演变分析
何琳,乔粤,刘雪琪.春秋时期社会发展的主题挖掘与演变分析——以《左传》为例[J].图书情报工作,2020,64(07):30-38.
《左传》是先秦时期的重要典籍,是我国第一部编年体史书。它以《春秋》的记事为纲,以时间先后为序,记叙了上起鲁隐公元年(公元前 722 年),下迄鲁哀公二十七年(公元前 467 年),共 255 年的历史,记录了春秋时期 100 多个诸侯国政治、经济、军事、外交和文 化方面的重要事件和重要人物,是研究中国先秦历史和春秋时期社会发展的重要文化材料。
利用LDA主题模型和自然语言处理技术,可以打破《 左传》线性的编年体记载顺序,通过不同的主题维度展现春秋时期整个社会以及不同诸侯国在战争、政治及外交等方面的发展变迁,实现对春秋时期社会发展的定量分析。
不同诸侯国文本主题段落分布数量
《左传》主题-词概率分布
部分主题的主题强度演化
鲁国主题-词分布
楚国主题 - 词分布
三国共同主题强度变化
单个国家特有主题强度变化
文本情感分析
情感分析的背景知识
互联网(如博客和论坛)上产生了大量的用户参与的、对于诸如人物、事件、产品等有价值的评论信息。这些评论信息表达了人们的各种情感色彩和情感倾向性,如喜、怒、哀、乐和批评、赞扬等。
潜在的用户可以通过浏览这些主观色彩的评论来了解大众舆论对于某一事件或产品的看法。
什么是情感分析?
情感分析(Sentiment analysis),又称倾向性分析,意见抽取(Opinion extraction),意见挖掘(Opinion mining),情感挖掘(Sentiment mining),主观分析(Subjectivity analysis),它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。
如从评论文本中分析用户对“数码相机”的“变焦、价格、大小、重量、闪光、易用性”等属性的情感倾向。
正面与负面评价?
电影评论
舆情分析
使用twitter预测股市
情感分析领域的主题词共现图
情感分析的应用领域
应用 | 英文文献 | 中文文献 |
---|---|---|
社交媒体 | Twitter、微博、Facebook、公众意见、预测、危机、政治、健康、疾病、讽刺检测 | 微博、Twitter、舆情分析、预测、观点分析 |
在线评论 | 商品评论、消费者评论、用户评论、电影评论、酒店评论、旅游评论 | 商品评论、用户评论、电影评论、弹幕 |
商业投资 | 股票市场、股票价格、投资者情绪 | 股票预测、股票市场、投资者情绪、行为金融 |
其他 | 新闻文章、阿拉伯语、迁移学习、跨领域、跨语言 | 新闻、维吾尔语、新词发现、迁移学习、跨领域、多模态、跨语言 |
情感分析的目的
情感分析主要目的是识别用户对事物或人的看法、态度。参与主体主要包括:
(1)Holder (source)** of attitude:观点持有者
(2)Target (aspect) of attitude:评价对象
(3)Type of attitude:评价观点
set of types:Like, love, hate, value, desire, etc.
simple weighted polarity: positive, negative, neutral
Text containing the attitude:评价文本,一般是句子或整篇文档
文本情感分析存在的问题和挑战
(1)领域依赖。是指文本情感分析的模型对某一领域的文本数据非常有效,但是将其应用于其他领域的时候,会使得分类模型的性能严重下降。
(2)情感语义理解。由于自然语言情感表达的复杂性,使得计算机能够精确理解文本中的情感语义,就必须借助自然语言理解技术,难度较大。
(3)特征提取。现有的文本情感分析使用的提取特征的方法能达到的精度还有限,如何有效地表达语句作者情感的特征,是尚待研究的。
(4)样本标注。虽然针对产品评论的情感分析,可以通过用户对该产品的打分来进行标注,但是绝大部分情感分析领域,有监督的机器学习情感分析方法,无法在训练阶段或者精确的标注样本,而人工进行标注的话,则非常困难,因此样本标注也是一个待解决的挑战。
情感分析的难易程度
- Simplest task: Is the attitude of this text positive or negative?
- 最简单的任务:这个文本的态度是积极还是消极?
- More complex: Rank the attitude of this text from 1 to 5
- 更复杂。将此文的态度从1到5排序
- Advanced: Detect the target, source, or complex attitude types
- 高级的。检测目标、来源或复杂的态度类型
情感分析的分类
按文本类型划分
按照处理文本的类别不同,分为基于新闻评论的情感分析和基于产品评论的情感分析。
前者处理的文本主要是新闻评论,如情感句“他坚定地认为台湾是中国不可分割的一部分”,表明了观点持有者“他”对于事件“台湾归属问题”的立场;
后者处理的主要是网络在线的产品评论文本,如“Iphone6s的外观很时尚”,表明了对评价对象“Iphone6s的外观”的评价“时尚”是褒义的。
按方法划分
根据使用的不同方法,将情感分析方法分为:
- 基于情感词典的情感分析方法
- 基于传统机器学习的情感分析方法
- 基于深度学习的情感分析方法
基于情感词典的情感分析方法
基于情感词典的方法,是指根据不同情感词典所提供的情感词的情感极性,来实现不同粒度下的情感极性划分。具体步骤如下:
- 将文本输入,通过对数据的预处理(包含去噪、去除无效字符等);
- 分词,并将情感词典中的不同类型和程度的词语放入模型中进行训练;
- 根据情感判断规则将情感类型输出。
关键问题:构建情感词典(阅读大量资料和现有词典、总结含有情感倾向的词语、标注词语的情感极性和强度)
英文情感词典:General Inquirer、SentiWordNet、Opinion Lexicon和MPQA等
中文情感词典:有知网词典HowNet、台湾大学的NTUSD、大连理工大学的中文情感词汇本体库
方法优势:易于分析和理解
方法劣势:对词典依赖程度高,词语的多义性、上下文语义关系
情感分析的粒度
- 文档级情感分析。是指以文档为单位进行分类,该分析是将整个文档看作一个整体来进行情感分类,并判断该文档表达的是正面的、中立的还是负面的情感。
- 句子级情感分析。是指以句子为单位进行分类,判断一个句子所表达的情感是正面的、中立的还是负面的。句子级情感分析和句子的主客观判断有非常大的联系。句子的主客观判断的目的是区分一个句子是主观句还是客观句,但并不是只有主观句才表达观点或者看法,客观句里有时也隐藏着情感。
- 方面级情感分析。早期也叫作特征级情感分析,它首先识别出观点的目标(通常是一个实体),然后将其分成几个方面,挖掘出人们在不同方面对该实体的情感喜好。
基于传统机器学习的情感分析方法
基于机器学习的情感分析方法,是指通过大量有标注的或无标注的语料,使用统计机器学习算法,抽取特征,最后在进行情感分析输出结果。
此类方法分为三类:有监督(KNN、朴素贝叶斯、SVM)、半监督(对未标记的文本进行特征提取)和无监督(根据文本间的相似性对未标记的文本进行分类)的方法。
此类方法的关键在于情感特征的提取以及分类器的组合选择。
缺点:在对文本内容进行情感分析时并未充分利用上下文语境信息,可能影响准确性。
基于深度学习的情感分析方法
此类方法可分为:
- 单一神经网络的情感分析方法(CNN, RNN, LSTM)
- 混合(组合、融合)神经网络的情感分析方法
- 引入注意力机制的情感分析
- 使用预训练模型的情感分析
方法 | 英文文献 | 中文文献 |
---|---|---|
基于情感词典与规则的方法 | 情感词典、语义相似度、关联规则等 | 领域情感词典、依存句法分析、语义规则、语义相似度、本体等 |
基于机器学习的方法 | 支持向量机、朴素贝叶斯、逻辑回归、LDA 主题模型、随机森林、决策树、遗传算法、集成学习、最大熵等 | 支持向量机、LDA主题模型、条件随机场、朴素贝叶斯、协同过滤、集成学习、随机森林、最大熵、K-Means 等 |
基于深度学习的方法 | 卷积神经网络、长短期记忆网络、注意力机制、循环神经网络、双向长短期记忆网络等 | 卷积神经网络、注意力机制、长短期记忆网络、双向长短期记忆网络、循环神经网络、递归神经网络、生成对抗网络等 |
基于深度学习方法的情感分析中的实验结果
文本情感分析方法对比
方法 | 优点 | 缺点 |
---|---|---|
基于情感词典的情感分析方法 | 基于情感词典的方法能有效反映文本的结构特征,易于理解,在情感词数量充足时情感分类效果明显 | 基于情感词典的方法没有突破情感词典的限制,要对情感词典不断扩充,使得文本情感判断的准确率不高 |
基于传统机器学习的情感分析方法 | 基于传统机器学习的方法能够根据对情感特征的选取以及情感分类器的组合对文本的情感进行分类 | 这一类方法存在不能充分利用上下文文本的语境信息,影响分类准确性;数据量大时完成分类任务的效率和质量低的问题 |
基于深度学习的情感分析方法 | 能充分利用上下文文本的语境信息;能主动学习文本特征,保留文本中词语的顺序信息,从而提取到相关词语的语义信息,来实现文本的情感分类;通过深层网络模型学习数据中的关键信息,来反映数据的特征,从而提升学习的性能;通过和传统方法相比,使用语言模型预训练的方法充分利用了大规模的单语语料,可以对一词多义进行建模,有效缓解对模型结构的依赖问题 | 基于深度学习的方法需要大量数据支撑,不适合小规模数据集;算法训练时间取决于神经网络的深度和复杂度,一般花费时间较长;对深层网络的内部结构、理论知识、网络结构等不了解也是对研究人员的一项挑战 |
情感分析的一般框架
情感信息抽取
情感信息抽取是情感分析的最底层的任务,它旨在抽取情感评论文本中有意义的信息单元。
其目的在于将无结构化的情感文本转化为计算机容易识别和处理的结构化文本,继而供情感分析上层的研究和应用服务。
评价词语的抽取和判别
评价词语又称极性词、情感词,特指带有情感倾向性的词语。评价词语在情感文本中处于举足轻重的地位。
主要有基于语料库的方法和基于词典的方法。
基于语料库的方法:评价词语抽取和判别主要是利用大语料库的统计特性,观察一些现象来挖掘语料库中的评价词语并判断极性;
基于词典的方法:评价词语抽取及判别方法主要是使用词典中的词语之间的词义联系来挖掘评价词语。
评价对象的抽取
评价对象是指某段评论中所讨论的主题,具体表现为评论文本中评价词语所修饰的对象,如新闻评论中的某个事件/话题或者产品评论中某种产品的属性(如“屏幕”)等。
基于规则/模板的方法:规则的制定通常要基于一系列的语言分析与预处理过程,如词性标注、命名实体识别、句法分析等;
将评价对象看作产品属性的一种表现形式(如对数码相机领域而言,“相机的大小”是数码相机的一个属性,而“相机滑盖”是数码相机的一个组成部分),继而考察候选评价对象与领域指示词(如“整体-部分”关系,指示词“has”)之间的关联度来获取真正的评价对象。
观点持有者抽取
观点持有者的抽取在基于新闻评论的情感分析中显得尤为重要,它是观点/评论的隶属者,如新闻评论句“我国政府坚定不移的认为台湾是中国领土不可分割的一部分”中的“我国政府”。
-
命名实体识别技术
-
序列标注
-
知识图谱
组合评价单元的抽取
单独的评价词语存在一定的歧义性,如评价词语“高”在以下 3 个句子中的使用:
Sen 1:Mac的价格真高.
Sen 2:华为手机的性价比相当高.
Sen 3:姚明有2米多高.
- 主观表达式的抽取。表示情感文本单元主观性的词语或词组。
- 评价短语的抽取。评价短语表现为一组连续出现的词组,不同于主观表达式,该词组往往是由程度副词和评价词语组合而成,如“very good”等。情感极性、修饰成分。
- 评价搭配的抽取。表现为二元对〈评价对象,评价词语〉,如情感句“这件衣服价格很高”中的“价格-很高”。
情感信息分类
情感信息分类则利用底层情感信息抽取的结果将情感文本单元分为若干类别,供用户查看,如分为褒、贬两类或者其他更细致的情感类别(如喜、怒、哀、乐等).
按照不同的分类目的,可分为主客观分析和褒贬分析;
按照不同的分类粒度,可分为词语级、短语级、篇章级等多种情感分类任务。
情感信息的分类任务可大致分为两种:
一种是主、客观信息的二元分类;
另一种是主观信息的情感分类,包括最常见的褒贬二元分类以及更细致的多元分类。
1)主客观信息分类;
2)主观信息情感分类;
3)观点分类与挖掘
4)情感信息检索与归纳
主客观信息分类
情感文本中夹杂着少量客观信息而影响情感分析的质量,需将情感文本中的主观信息和客观信息进行分离。由于情感文本单元表现格式比较自由,区分主、客观文本单元的特征并不明显,在很多情况下,情感文本的主客观识别比主观文本的情感分类更有难度。
情感信息检索与归纳
情感信息抽取和分类后呈现的结果并不是用户所能直接使用的。情感分析技术与用户的交互主要集中于情感信息检索和情感信息归纳两项任务上。
情感信息检索旨在为用户检索出主题相关,且包含情感信息的文档;
情感信息归纳则针对大量主题相关的情感文档,自动分析和归纳整理出情感分析结果提供给用户参考,以节省用户翻阅相关文档的时间。
情感分析的评测与资源
情感分析的评测
为了推动情感分析技术的发展,国内外的很多研究机构纷纷组织了一些公共评测。
- TREC;2006,博客
- NTCIR;2006,新闻
- COAE;2008
情感分析的资源
(1) 康奈尔(Cornell)大学提供的影评数据集,电影评论
(2) 伊利诺伊大学芝加哥分校提供的产品领域的评论语料:主要包括从亚马逊和 Cnet 下载的 5 种电子产品的网络评论;
(3) Wiebe 等人所开发的 MPQA(multiple-perspective QA)库:包含 535 篇不同视角的新闻评论
(4) 麻省理工学院的 Barzilay 等人构建的多角度餐馆评论语料;
(5) 中国科学院计算技术研究所提供的较大规模的中文酒店评论语料
情感分析的数据集
数据集名称 | 数据集介绍 | 下载地址 |
---|---|---|
sentiment140 | 包含160 万不同产品或品牌的推文,数据集标签划分为0(消极)和4(积极) | http://help.sentiment140.com/site-functionality |
IMDB影评数据集 | 包含50 000 个对电影评论的样本值,该数据集分为正负两个极性 | http://www.cs.cornell.edu/people/pabo/movie-review-data/ |
Twitter US Airline Sentiment数据集 | 包含美国各大航空公司14 640 条推文,分为正面、负面和中性 | https://www.kaggle.com/crowdflower/twitter-airline-sentiment |
weibo_senti_100k | 包含约12 万条新浪微博,正负向约各6 万条 | https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/simplifyweibo_4_moods/intro.ipynb |
酒店评论数据集 | 包含10 000 条酒店评论,分为正面、负面和中性 | http://www.datatang.com/data/11936 |
外卖评论数据集 | 包含某外卖平台正向4 000 条评论和负向8 000 条评论 | https://github.com/SophonPlus/ChineseNlpCorpus/tree/master/ |
SE-ABSA15 数据集 | 包含笔记本、餐馆和酒店3 类评论,含有方面标注 | http://metashare.ilsp.gr:8080/ |
情感分析的词典资源
(1) GI(general inquirer)评价词词典收集了 1 914 个褒义词和 2 293 个贬义词,并为每个词语按照极性、强度、词性等打上不同的标签;
(2) NTU 评价词词典(繁体中文).该词典由台湾大学收集,含有 2 812 个褒义词与 8 276 个贬义词;
(3) 主观词词典,来自 OpinionFinder 系统。该词典含有8 221 个主观词,并为每个词语标注了词性、词性还原以及情感极性;
(4) HowNet 评价词词典,该词典包含 9 193 个中文评价词语/短语,9 142 个英文评价词语/短语,并被分为褒贬两类
情感词典名称 | 情感词典介绍 | 下载地址 |
---|---|---|
SentiWordNet | 包含正、负以及中性三种情感极性 | http://sentiwordnet.isti.cnr.it/ |
NTUSD | 包含8 276 个贬义词和2 812 个褒义词 | http://academiasinicanlplab.github.io/ |
How Net | 包含9 142 个英文评价词语和9 193 个中文评价词语,词语分为正负两种极性 | http://www.keenage.com/html/e_index.html |
WordNet | 包含五种情感极性 | https://wordnet.princeton.edu/download |
Sentiment Lexicon | 包含2 006 个褒义词汇和4 783 个贬义词汇 | https://www.cs.uic.edu/~liub/FBS/sentiment-analysis.html |
中文情感词汇本体库 | 包含词语词性种类、情感类别、情感强度级性等内容,将情感分为7 大类21 小类 | http://ir.dlut.edu.cn/zyxz/qgbtk.htm |
情感分析的应用与案例
基于snownlp的情感分析
SnowNLP是一个python写的类库,主要用于处理中文文本,可实现分词、词性标注、情感分析、汉字转拼音、繁体转简体、关键词提取以及文本摘要等等。
SnowNLP 本身使用的语料是电商网站评论,其他场景的效果可能不理想。
SnowNLP 使用自定义语料进行模型训练。
from snownlp import sentiment
sentiment.train('./train/neg60000.txt','./train/pos60000.txt')
sentiment.save('weibo.marshal')
某餐厅评论的情感分析
- 导入数据
- 分析第一条评论
- 分析第二条评论
批量处理所有评论
通过mean()函数可以知道评论的平均值。
借助matplotlib画出时间的趋势图
通过排序,找到情感分析得分倒数第一位的评论,并将内容打印出来:
原创作者:孤飞-博客园
原文链接:https://www.cnblogs.com/ranxi169/p/16804615.html