文本相似度。基于词典的情感分析,依赖人工标记的词典,所以需要大量的人力。如果遇到是情感词但是词典里没有,就设计到另一种在NLP经常用到的技术文本相似度。以上步骤可以更加优化,比如用决策树来判断句法规则。下一步实现,基于朴素贝叶斯的情感分析。
一、一般处理流程
语料获取 -> 文本预处理 -> 特征工程 -> 特征选择
1、语料获取
即需要处理的数据及用于模型训练的语料。
数据源可能来自网上爬取、资料积累、语料转换、OCR转换等,格式可能比较混乱。需要将url、时间、符号等无意义内容去除,留下质量相对较高的非结构化数据。
2、文本预处理
将含杂质、无序、不标准的自然语言文本转化为规则、易处理、标准的结构化文本。
①处理标点符号
可通过正则判定、现有工具(zhon包)等方式筛选清理标点符号。
②分词
将连续的自然语言文本,切分成具有语义合理性和完整性的词汇序列的过程。
一般看来英文较容易可通过空格符号分词,中文相对复杂,参考结巴分词、盘古分词、Ansj等工具。
常见的分词算法有:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法和基于规则的分词方法,每种方法下面对应许多具体的算法。
③词性标注
为自然语言文本中的每个词汇赋予一个词性的过程,如名词、动词、副词等。可以把每个单词(和它周围的一些额外的单词用于上下文)输入预先训练的词性分类模型。
常用隐马尔科夫模型、N 元模型、决策树
④stop word
英文中含大量 a、the、and,中文含大量 的、是、了、啊,这些语气词、助词没有明显的实际意义,反而容易造成识别偏差,可适当进行过滤。
⑤词形还原
偏向于英文中,单数/复数,主动/被动,现在进行时/过去时/将来时等,还原为原型。
⑥统计词频
因为一些频率过高/过低的词是无效的,对模型帮助很小,还会被当做噪声,做个词频统计用于停用词表。
⑦给单词赋予id
给每一个单词一个id,用于构建词典,并将原来的句子替换成id的表现形式
⑧依存句法分析
通过分析句子中词与词之间的依存关系,从而捕捉到词语的句法结构信息(如主谓、动宾、定中等结构关系),并使用树状结构来表示句子的句法结构信息(如主谓宾、定状补等)。
3、特征工程
做完语料预处理之后,接下来需要考虑如何把分词之后的字和词语表示成计算机能够计算的类型。
如果要计算我们至少需要把中文分词的字符串转换成数字,确切的说应该是数学中的向量。有两种常用的表示模型分别是词袋模型和词向量。
①词向量
词向量是将字、词语转换成向量矩阵的计算模型。目前为止最常用的词表示方法是 One-hot,这种方法把每个词表示为一个很长的向量。
②词袋模型
即不考虑词语原本在句子中的顺序,直接将每一个词语或者符号统一放置在一个集合(如 list),然后按照计数的方式对出现的次数进行统计。统计词频这只是最基本的方式,TF-IDF 是词袋模型的一个经典用法。
常用的表示模型有:词袋模型(Bag of Word, BOW),比如:TF-IDF 算法;词向量,比如 one-hot 算法、word2vec 算法等。
4、特征选择
在文本挖掘相关问题中,特征工程也是必不可少的。在一个实际问题中,构造好的特征向量,是要选择合适的、表达能力强的特征。
举个自然语言处理中的例子来说,我们想衡量like这个词的极性(正向情感还是负向情感)。我们可以预先挑选一些正向情感的词,比如good。然后我们算like跟good的PMI,用到点互信息PMI这个指标来衡量两个事物之间的相关性。
特征选择是一个很有挑战的过程,更多的依赖于经验和专业知识,并且有很多现成的算法来进行特征的选择。目前,常见的特征选择方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六种。
5、模型训练
在特征向量选择好了以后,接下来要做的事情是根据应用需求来训练模型,我们使用不同的模型,传统的有监督和无监督等机器学习模型,如 KNN、SVM、Naive Bayes、决策树、GBDT、K-means 等模型;深度学习模型比如 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。这些模型在分类、聚类、神经序列、情感分析等应用中都会用到。
当选择好模型后,则进行模型训练,其中包括了模型微调等。在模型训练的过程中要注意由于在训练集上表现很好,但在测试集上表现很差的过拟合问题以及模型不能很好地拟合数据的欠拟合问题。同时,也要防止出现梯度消失和梯度爆炸问题。
6、模型评估
在机器学习、数据挖掘、推荐系统完成建模之后,需要对模型的效果做评价。模型的评价指标主要有:错误率、精准度、准确率、召回率、F1 值、ROC 曲线、AUC 曲线等。
7、投产上线
模型的投产上线方式主要有两种:一种是线下训练模型,然后将模型进行线上部署提供服务;另一种是在线训练模型,在线训练完成后将模型 pickle 持久化,提供对外服务。
三、NLP应用方向
1、命名实体识别
指识别自然语言文本中具有特定意义的实体,主要包括人名、地名、机构名、时间日期等。
传统机器学习算法主要有HMM和CRF,深度学习常用QRNN、LSTM,当前主流的是基于bert的NER。
2、情感分析
文本情感分析和观点挖掘(Sentiment Analysis),又称意见挖掘(Opinion Mining)是自然语言处理领域的一个重要研究方向。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。
情感分析技术可以分为两类,一类是基于机器学习的方法,通过大量有标注、无标注的主观语料,使用统计机器学习算法,通过提取特征,进行文本情感分析。另一类是基于情感词典的方法,根据情感词典所提供的词的情感极性(正向、负向),从而进行不同粒度的(词语、短语、属性、句子、篇章)下的文本情感分析。
3、文章标签
文章标签是利用机器学习算法,对文章进行文字和语义的分析后,提取出若干个重要的词或者短语(关键短语)。关键短语是NLP基础的算法模块,有了关键短语,能为后续的搜索、推荐等更高级的应用提供有力的抓手。
适用场景:1、个性化推荐:通过对文章的标签计算,结合用户画像,精准的对用户进行个性化推荐;2、话题聚合:根据文章计算的标签,聚合相同标签的文章,便于用户对同一话题的文章进行全方位的信息阅读;3、搜索:使用中心词可以对query进行相似度计算、聚类、改写等,可以用于搜索相关性计算。
4、案件串并
①信息抽取
运用实体抽取、关系抽取,从案情中抽取关键信息,如从警情中可以抽取报警人项目、报警人电话、案发地址等信息
②实体对齐
相同的实体在不同的案情中会有不同的表述,会给串并带来困难。可针对地址、人名、组织名进行对齐处理。
③文本聚类
对于关键片段类信息,无法像实体那样对齐,需要借助文本聚类技术进行关联。
④构建图谱
将信息抽取结果存入图谱。每个警情id对应一个节点,实体、属性、关键片段作为节点,对齐的实体、同一类的文本存为同一个节点。
除了来自于从警情中抽取的信息,还可以将其他警务系统中存在的结构化数据导入(如来自户籍信息的人物关系),从而丰富图谱。
⑤图谱检索
完成以上工作,即完成了案件串并的必要基础建设,接下来通过图谱的查询功能自动完成案件的串并。首先需要设定串并的条件,案件串并的条件在警务实战中已有很多的积累,如“具有相似的作案手段”,又如“相似作案手段,嫌疑人有共同联系人”,只需要将这些条件用图谱查询语言表达出来。
牛头:挥去法( 也叫飚换法、闪变法、咻模式 )、双重抽离法、次感元改变法……
那么,我整理了一下这几个技巧,如下:
1 想一想经常在你生活中出现的一种习惯行为或情绪,一种你很想改变的习惯行为或情绪。
2 找出改变这种行为的契机。问一问自己,你怎么知道在什么时候会出现这种行为。你的诱因或提醒物是什么?也就是在你出现这个行为之前,会发生什么情况?
3 闭上眼睛,形成一个表示此契机或此行为的内心图像。这是图像O(Old表示“旧”),一旦形成了这幅图像,就暂时先把它放在一边。
4 闭上眼睛, 创造出你想要的、具有新行为的内在图像 。这是图像N(New表示“新”)。
5 调整图像N的次感元,使其显现到最强程度 。调整亮度、尺寸、位置、距离及其他情况,使此图看起来令人快乐、充满激情。当你做到恰到好处时,你就会发现在做的同时你已经充满了快乐与激情。
6 你在对待图像N时,要从这幅图中抽离开来,从图外的角度来看问题。
7 由于脑海中存在着图像O和图像N,你就可以开始快速滑动进行飙换了。在你把此过程应用到你自身之前,一定要仔细地看一看以下说明。
8 脑海里显现出图像O,并要与这幅图连成一体,就好像完全置身于这幅图中。
9 在你视野的左下角,加上很小的、暗淡的图像N,把它看成是一张微型胶片。
10瞬间以后,同时将图像O缩小,并使其远远的退去,马上使图像N扩展增大,占满你的整个视野范围。你可以一边这么做一边从牙齿缝里发出“嘶——”的声音,这样做会更有意思,更有效果。这个动作要瞬间完成,速度很重要!当你这样做时,如果你的头不是摇晃的,说明你的速度还不够快!
11 睁开你的眼睛,把 注意力 从刚才的经历上移到别的事情上。在 NLP 中,这叫“打破状态”,这是这个过程一个重要的组成部分。如果有必要的话,你可以起立并改变肢体动作,以便进一步打破状态。
12 把8~11的步骤至少再重复5次,你会注意到几次以后,这种重复就会自动发生了。当你以后再次出现习惯性的行为或情绪的时候,你会发现你的行为情绪已经习惯化地转到了新的、你想要的行为或情绪上面。
逐步抽离法
坐在椅子上,回想一次带来困扰的事情;站起来,走开几步,转回身看着坐在椅子上有困扰的自己,那就是自己负责情绪的部分;看着椅子上的自己,检查一下自己心里还有没有困扰的情绪;如果没有,那是说自己能成功抽离。事实上,在绝大多数情况里,你会心里还有一些情绪。
想想什么颜色最能代表心中的那份情绪,用手势显示出心中情绪的大小,然后往后退一步。后退时,想像你整个人都会跟着你后退,只有这堆有颜色的情绪留在原位;想象身旁有个按钮,按下按钮,这堆带颜色的情绪,变成小颗粒,像科幻**里一样,全部飞到坐在椅子上的自己,直到全部颗粒都飞走为止。
感觉一下现在心里觉得怎样,还有没有那份情绪,通常会已经好了很多。如果仍有很大份的情绪在心里,可以想想现在心里的情绪,颜色怎样的改变了,现在的形状有多大。这往往会是较为淡了的颜色,形状大小也应会是减退了。你可以重复上一段的做法,直到心中的情绪全部送去坐著的自己那里。如果心中总是保存小小的一点情绪,不能完全消除,由它好了,那是你的潜意识坚持保留一点点感受作为推动力:提醒你事情需要处理。
若你在上述过程中消减心中的情绪不够理想,可以加入以下的做法。:
看着椅子里的自己,对他说:“你是X X(自己的名字)的一个重要部份,多谢你一直以来对他的照顾。你是负责情绪的,同时我是负责想办法解决事情的。为了我在这件事里可以做到更好的效果,我想把情绪全部交给你,好让我能冷静地思想得更好。你给我的讯息我已知道,我会记得处理这件事,无须再用这份情绪提醒我,我需要你的合作,可以吗?”注意坐在椅子上的自己有什么反应,一般的会是‘可以’、‘接受’和‘点头’。对他说声多谢,然后重复上面第三段的步骤。通常的问题,只须两至三次便能达到满意的效果。
次感元调整法
我曾经运用以下NLP的"次感元调整法”帮助一名大学生调整好被母亲说话伤害而不能平复的情况
运用身心语法程式学 (Neuro-Linguistic Programming) 以及催眠治疗(Hypnotherapy) 提供一套快速以及持久的治疗方法。包医治失眠,抑郁症,恐拒症,情绪困扰,减轻工作压力,减肥,戒烟,提升自我价值等。有一些表面上的问题例如经常情绪化,面对陌生人没有自信等,可能涉及我们在成长过程当中,特别是童年一些负面经历的影响,例如被母亲在陌生人面前大声指责,特别在身份层次的侮辱。在这些负面经验当中,所产生的负面情绪愈深,对当时人的影响愈大。而这些经历,随着年龄增长,已经被遗忘。但遗憾的是,它们一直影响当时人每一天的生活。而这些影响力的运作是在我们潜意识中,而不是意识。所以很多人不能控制自己的情绪行为,就是这个原因。这些深植在我们潜意识当中的经验事件,必需找出来并加以处理,我们才能够真正获得释放,并在每一天生活当中感受更多的成功快乐。你可以按每一位当时人不同的需要而设计一套度身订做的调整过程。以下个案你会更加了解这个过程的运作:
以下是运用了NLP(Neuro-Linguistic Programming 身心语法程式学)的真实治疗个案。 基于对当事人的尊重及保密理由, 以下的当事人名称全用了假名
被母亲愤怒的说话伤害难以平复
背景:
李琪是一个具有一定影响力的外贸英语系的男大三学生。在一次与同母亲争辩的过程中, 被母亲一句很愤怒的说话伤害。每当他一想起那情景, 李琪会感到莫名的恐惧并会令全身猛的一震
个案分析:
在人类大脑里所储存的所有记忆, 都是由次感元(Sub-modalities)所构成。所谓次感元就是
视觉 - 图像的大小、光暗、颜色、远近等
听觉 - 声音的大小、高低、快慢、方向等
感觉 - 轻重、冷热、强度、体内位置等
味觉及嗅觉。
该件事情己经发生, 不能改变。但我们可以改变次感元(Changing Sub-modalities)使该件事情带给我们的情绪得以改变。从脑神经学的角度分析, 改变某件事情的次感元, 就是改变了该件事情在脑内储存的神经网络。
方法:
我先用了一些放松的技巧令李琪进入开始回想状态。 引导李琪把那次不愉快的经历的象放**那样回放在头部一尺远的地方,并可以控制它的位置。我引导他把昼面调校得暗一点, 声音(即母亲的说话) 调校得低沉一些, 甚至开始走音。然后把画面电推远, 使昼面变得愈来愈细。李琪开始慢慢地舒了一口气,感觉到舒服。我再引导他想像母亲的声音象猫一样地说话, 李琪突然轻松地笑出声来。后来他说想像到的母亲的象猫一样温顺, 我更引导他想像母亲用英语来骂他,这时候, 李琪整个人满脸笑容,全身乐得晃来晃去感觉到非常有趣,说从来没有用过这样的方式学习英语为了检查效果, 我让他再次回想起那情景,他发觉回想不清原来的样子了,他说这方法有点神,又简单
疏导时间: 十五分钟
结果:
疏导完成后我多次叫他回想该件事情, 他发觉很难回想当时的情节。那个影像、声音及负面情绪从此再没有出现,整个人心情舒畅了。
和谐气氛
人与人之间的沟通,必须在一个前提条件之下,才能取得效果,那就是和谐气氛。
和谐气氛,就是让每一个人放松下来,感到安全,并对对方有一定的信任,在这种情况下,个人与自己内心的感觉联系着,同时,大脑里理性的部分充分运作,因而最能在NLP技巧过程中取得理想的效果。
打破状态
当一个人处于某个内心状态,意念,思想及情感,而导致事情不能顺利进行或对现场环境有负面影响时,另外一个人可通过一些语言或行为为即时改变这个人的内心状态,这便是打破状态。
未来测试
未来测试是NLP技巧中必经的步骤之一,目的是引导本色的或对方想象在未来运用所学到的东西,或者测试所应用的技巧是否有效,通常,一个NLP技巧完成后,会先来个打破状态,再做个未来测试,若效果满意,便可以结束整个过程。
呼气与吸气
身体各部分向大脑传递信息,在呼气与吸气时是不同的,因此身体的机能在呼气与吸气时也会不同,呼气时身体处于一个放松的状态,适合于松弛及放松身体各部分时使用,吸气时身体处于一个强化的状态,适合于加强,凝聚及提升身体能力时使用。
时间线
人脑对于记忆或思考某件事情是有其时间位置的,一般来说,用右手的人,其过去位于左边而未来位于右边,距离现在越远的过去或未来时间,则越远离自己的鼻子,现在则会在眼前,因此他们的时间线是从左至右,从远至近又再走远。
有些人的时间线会贯通自己,未来在前面现在在眼下,过去则在身后,也有一些人的时间线在未经整理之前,是乱七八糟的。
时间线可以很容易地进行整理,调整时间线可以使一个人减少焦虑或提高积极性。在NLP技巧中,时间线更是简单的一条在地上无形的直线。
经验擎
一些事物会使我们回想起往事,因而带回这些往事中本人当时的感受,这些事物便是经验擎。
经验擎可以分为4中
1视觉型经验擎,中国成语,睹物思人是较为恰当的描述。
2听觉经验擎,歌曲,名字都属于听觉经验擎。
3感觉经验擎,握手,拥抱,吻脸,摸头等身体接触。
4内感觉经验擎,一些静坐宗派所采用的 心号 。
其中1-3的经验擎,也可转为内视,内听,内感觉型的经验擎。
以上
一种流行的自然语言处理库、自带语料库、具有分类,分词等很多功能,国外使用者居多,类似中文的jieba处理库
为单词序列分配概率的模型就叫做语言模型。
通俗来说, 语言模型就是这样一个模型:对于任意的词序列,它能够计算出这个序列是一句话的概率。或者说语言模型能预测单词序列的下一个词是什么。
n-gram Language Models
N-gram模型是一种典型的统计语言模型(Language Model,LM),统计语言模型是一个基于概率的判别模型统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,统计语言模型赋予这个序列一个概率P(S),来衡量S 符合自然语言的语法和语义规则的置信度。用一句简单的话说,统计语言模型就是计算一个句子的概率大小的这种模型。
n-gram模型可以减轻单词序列没有在训练集中出现过而引起的问题,即数据稀疏问题
n-gram模型问题
对于n-gram模型的问题,这两页ppt说的很明白
N-gram模型基于这样一种假设,当前词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram(N=2)和三元的Tri-Gram(N=3)Bi-Gram所满足的假设是马尔科夫假设。
一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分别用公式表示如下:
Bi-Gram: P(T)=p(w1|begin) p(w2|w1) p(w3|w2)p(wn|wn-1)
Tri-Gram: P(T)=p(w1|begin1,begin2) p(w2|w1,begin1) p(w3|w2w1)p(wn|wn-1,wn-2)
注意上面概率的计算方法:P(w1|begin)=以w1为开头的所有句子/句子总数;p(w2|w1)=w1,w2同时出现的次数/w1出现的次数。以此类推。
对于其中每项的计算举个例子:
由上可见Bi-Gram计算公式中的begin一般都是加个<s>标签。
N-gram存在的问题:
举一个小数量的例子进行辅助说明:假设我们有一个语料库(注意语料库),如下:
老鼠真讨厌,老鼠真丑,你爱老婆,我讨厌老鼠。
想要预测“我爱老”这一句话的下一个字。我们分别通过 bigram 和 trigram 进行预测。
1)通过 bigram,便是要对 P(w|老)进行计算,经统计,“老鼠”出现了3次,“老婆”出现了1次,通过最大似然估计可以求得P(鼠|老)=075,P(婆|老)=025, 因此我们通过 bigram 预测出的整句话为: 我爱老鼠。
2)通过 trigram,便是要对便是要对 P(w|爱老)进行计算,经统计,仅“爱老婆”出现了1次,通过最大似然估计可以求得 P(婆|爱 老)=1,因此我们通过trigram 预测出的整句话为: 我爱老婆。显然这种方式预测出的结果更加合理。
问题一:随着 n 的提升,我们拥有了更多的前置信息量,可以更加准确地预测下一个词。但这也带来了一个问题,当N过大时很容易出现这样的状况:某些n-gram从未出现过, 导致很多预测概率结果为0, 这就是稀疏问题。 实际使用中往往仅使用 bigram 或 trigram 。(这个问题可以通过平滑来缓解参考: https://mpweixinqqcom/s/NvwB9H71JUivFyL_Or_ENA )
问题二:同时由于上个稀疏问题还导致N-gram无法获得上下文的长时依赖。
问题三:n-gram 基于频次进行统计,没有足够的泛化能力。
n-gram总结:统计语言模型就是计算一个句子的概率值大小,整句的概率就是各个词出现概率的乘积,概率值越大表明该句子越合理。N-gram是典型的统计语言模型,它做出了一种假设,当前词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。它其中存在很多问题,再求每一个词出现的概率时,随着N的提升,能够拥有更多的前置信息量,可以使得当前词的预测更加准确,但是当N过大时会出现稀疏问题,导致很多词的概率值为0,为解决这一问题,因此常用的为bigram 或 trigram,这就导致N-gram无法获得上文的长时依赖。另一方面N-gram 只是基于频次进行统计,没有足够的泛化能力。
神经网络语言模型
2003年 Bengio 提出,神经网络语言模型( neural network language model, NNLM)的思想是提出词向量的概念,代替 ngram 使用离散变量(高维),采用连续变量(具有一定维度的实数向量)来进行单词的分布式表示,解决了维度爆炸的问题,同时通过词向量可获取词之间的相似性。
结合下图可知它所建立的语言模型的任务是根据窗口大小内的上文来预测下一个词,因此从另一个角度看它就是一个使用神经网络编码的n-gram模型。
它是一个最简单的神经网络,仅由四层构成,输入层、嵌入层、隐藏层、输出层。(从另一个角度看它就是一个使用神经网络编码的n-gram模型)
输入是单词序列的index序列,例如单词‘这’在字典(大小为∣V∣)中的index是10,单词‘是’的 index 是23,‘测’的 index 是65,则句子“这是测试”通过‘这是测’预测‘试’,窗口大小内上文词的index序列就是 10, 23, 65。嵌入层(Embedding)是一个大小为∣V∣×K的矩阵(注意:K的大小是自己设定的,这个矩阵相当于随机初始化的词向量,会在bp中进行更新,神经网络训练完成之后这一部分就是词向量),从中取出第10、23、65行向量拼成3×K的矩阵就是Embedding层的输出了。隐层接受拼接后的Embedding层输出作为输入,以tanh为激活函数,最后送入带softmax的输出层,输出概率,优化的目标是使得待预测词其所对应的softmax值最大。
缺点:因为这是通过前馈神经网络来训练语言模型,缺点显而易见就是其中的参数过多计算量较大,同时softmax那部分计算量也过大。另一方面NNLM直观上看就是使用神经网络编码的 n-gram 模型,也无法解决长期依赖的问题。
RNNLM
它是通过RNN及其变种网络来训练语言模型,任务是通过上文来预测下一个词,它相比于NNLM的优势在于所使用的为RNN,RNN在处理序列数据方面具有天然优势, RNN 网络打破了上下文窗口的限制,使用隐藏层的状态概括历史全部语境信息,对比 NNLM 可以捕获更长的依赖,在实验中取得了更好的效果。RNNLM 超参数少,通用性更强;但由于 RNN 存在梯度弥散问题,使得其很难捕获更长距离的依赖信息。
Word2vec中的CBOW 以及skip-gram,其中CBOW是通过窗口大小内的上下文预测中心词,而skip-gram恰恰相反,是通过输入的中心词预测窗口大小内的上下文。
Glove 是属于统计语言模型,通过统计学知识来训练词向量
ELMO 通过使用多层双向的LSTM(一般都是使用两层)来训练语言模型,任务是利用上下文来预测当前词,上文信息通过正向的LSTM获得,下文信息通过反向的LSTM获得,这种双向是一种弱双向性,因此获得的不是真正的上下文信息。
GPT是通过Transformer来训练语言模型,它所训练的语言模型是单向的,通过上文来预测下一个单词
BERT通过Transformer来训练MLM这种真正意义上的双向的语言模型,它所训练的语言模型是根据上下文来预测当前词。
以上部分的详细介绍在NLP之预训练篇中有讲到
语言模型的评判指标
具体参考: https://blogcsdnnet/index20001/article/details/78884646
Perplexity可以认为是average branch factor(平均分支系数),即预测下一个词时可以有多少种选择。别人在作报告时说模型的PPL下降到90,可以直观地理解为,在模型生成一句话时下一个词有90个合理选择,可选词数越少,我们大致认为模型越准确。这样也能解释,为什么PPL越小,模型越好。
一般用困惑度Perplexity(PPL)衡量语言模型的好坏,困惑度越小则模型生成一句话时下一个词的可选择性越少,句子越确定则语言模型越好。
简单介绍
Word2vec是一种有效创建词嵌入的方法,它自2013年以来就一直存在。但除了作为词嵌入的方法之外,它的一些概念已经被证明可以有效地创建推荐引擎和理解时序数据。在商业的、非语言的任务中。
背景
由于任何两个不同词的one-hot向量的余弦相似度都为0,多个不同词之间的相似度难以通过onehot向量准确地体现出来。
word2vec⼯具的提出正是为了解决上⾯这个问题。它将每个词表⽰成⼀个定⻓的向量,并使得这些向量能较好地表达不同词之间的相似和类⽐关系。
word2vec模型
word2vec⼯具包含了两个模型,即跳字模型(skip-gram)和连续词袋模型(continuous bag of words,CBOW)。word2vec的input/output都是将单词作为one-hot向量来表示,我们可以把word2vec认为是词的无监督学习的降维过程。
MaxEnt 模型(最大熵模型): 可以使用任意的复杂相关特征,在性能上最大熵分类器超过了 Byaes 分类器。但是,作为一种分类器模型,这两种方法有一个共同的缺点:每个词都是单独进行分类的,标记(隐状态)之间的关系无法得到充分利用,具有马尔可夫链的 HMM 模型可以建立标记之间的马尔可夫关联性,这是最大熵模型所没有的。
最大熵模型的优点:首先,最大熵统计模型获得的是所有满足约束条件的模型中信息熵极大的模型;其次,最大熵统计模型可以灵活地设置约束条件,通过约束条件的多少可以调节模型对未知数据的适应度和对已知数据的拟合程度;再次,它还能自然地解决统计模型中参数平滑的问题。
最大熵模型的不足:首先,最大熵统计模型中二值化特征只是记录特征的出现是否,而文本分类需要知道特征的强度,因此,它在分类方法中不是最优的;其次,由于算法收敛的速度较慢,所以导致最大熵统计模型它的计算代价较大,时空开销大;再次,数据稀疏问题比较严重。
CRF(conditional random field) 模型(条件随机场模型):首先,CRF 在给定了观察序列的情况下,对整个的序列的联合概率有一个统一的指数模型。一个比较吸引人的特性是其为一个凸优化问题。其次,条件随机场模型相比改进的隐马尔可夫模型可以更好更多的利用待识别文本中所提供的上下文信息以得更好的实验结果。并且有测试结果表明:在采用相同特征集合的条件下,条件随机域模型较其他概率模型有更好的性能表现。
CRF 可以用于构造在给定一组输入随机变量的条件下,另一组输出随机变量的条件概率分布模型。经常被用于序列标注,其中包括词性标注,分词,命名实体识别等领域。
建一个条件随机场,我们首先要定义一个特征函数集,每个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入。然后为每一个特征函数赋予一个权重,然后针对每一个标注序列l,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。
CRF 具有很强的推理能力,并且能够使用复杂、有重叠性和非独立的特征进行训练和推理,能够充分地利用上下文信息作为特征,还可以任意地添加其他外部特征,使得模型能够 获取的信息非常丰富。
CRF 模型的不足:首先,通过对基于 CRF 的结合多种特征的方法识别英语命名实体的分析,发现在使用 CRF 方法的过程中,特征的选择和优化是影响结果的关键因素,特征选择问题的好与坏,直接决定了系统性能的高低。其次,训练模型的时间比 MaxEnt 更长,且获得的模型很大,在一般的 PC 机上无法运行。
潜在语义分析(Latent Semantic Analysis,LSA)模型
在潜在语义分析(LSA)模型首先给出了这样一个 ‘‘分布式假设” :一个 单词的属性是由它所处的环境刻画的。这也就意味着如果两个单词在含义上比较接近,那么它们也会出现在相似的文本中,也就是说具有相似的上下文。
LSA模型在构建好了单词-文档矩阵之后,出于以下几种可能的原因,我们会使用奇异值分解(Singular Value Decomposition,SVD) 的方法来寻找该矩阵的一个低阶近似。
概率潜在语义分析(Probability Latent Semantic Analysis ,PLSA)模型
概率潜在语义分析(PLSA)模型其实是为了克服潜在语义分析(LSA)模型存在的一些缺点而被提出的。LSA 的一个根本问题在于,尽管我们可以把 U k 和 V k 的每一列都看成是一个话题,但是由于每一列的值都可以看成是几乎没有限制的实数值,因此我们无法去进一步解释这些值到底是什么意思,也更无法从概率的角度来理解这个模型。
PLSA模型则通过一个生成模型来为LSA赋予了概率意义上的解释。该模型假设,每一篇文档都包含一系列可能的潜在话题,文档中的每一个单词都不是凭空产生的,而是在这些潜在的话题的指引下通过一定的概率生成的。
在 PLSA 模型里面,话题其实是一种单词上的概率分布,每一个话题都代表着一个不同的单词上的概率分布,而每个文档又可以看成是话题上的概率分布。每篇文档就是通过这样一个两层的概率分布生成的,这也正是PLSA 提出的生成模型的核心思想。
PLSA 通过下面这个式子对d和 w 的联合分布进行了建模:
该模型中的 z 的数量是需要事先给定的一个超参数。需要注意的是,上面这 个式子里面给出了 P (w, d ) 的两种表达方式,在前一个式子里, d 和 w 都是在给定 z 的前提下通过条件概率生成出来的,它们的生成方式是相似的,因此是 ‘‘对称’’ 的;在后一个式子里,首先给定 d ,然后根据 P ( z | d ) 生成可能的话题 z ,然后再根据 P (w| z ) 生成可能的单词 w,由于在这个式子里面单词和文档的生成并不相似, 所以是 ‘‘非对称’’ 的。
上图给出了 PLSA 模型中非对称形式的 Plate Notation表示法。其中d表示 一篇文档,z 表示由文档生成的一个话题,w 表示由话题生成的一个单词。 在这个模型中, d和w 是已经观测到的变量,而z是未知的变量(代表潜在的话题)。
容易发现,对于一个新的文档而言,我们无法得知它对应的 P ( d ) 究竟是什么, 因此尽管 PLSA 模型在给定的文档上是一个生成模型,它却无法生成新的未知的文档。该模型的另外的一个问题在于,随着文档数量的增加, P ( z | d ) 的参数也会随着线性增加,这就导致无论有多少训练数据,都容易导致模型的过拟合问题。这两点成为了限制 PLSA 模型被更加广泛使用的两大缺陷。
潜在狄利克雷分配(Latent Dirichlet Analysis , LDA)模型
为了解决 PLSA 模型中出现的过拟合问题,潜在狄利克雷分配(LDA)模型被 Blei 等人提出,这个模型也成为了主题模型这个研究领域内应用最为广泛的模 型。LDA就是在PLSA的基础上加层贝叶斯框架,即LDA就是PLSA的贝叶斯版本(正因为LDA被贝叶斯化了,所以才需要考虑历史先验知识,才加的两个先验参数)。
从上一节我们可以看到,在 PLSA 这个模型里,对于一个未知的新文档 d ,我们对于 P ( d ) 一无所知,而这个其实是不符合人的经验的。或者说,它没有去使用本来可以用到的信息,而这部分信息就是 LDA 中所谓的先验信息。
具体来说,在 LDA 中,首先每一个文档都被看成跟有限个给定话题中的每一个存在着或多或少的关联性,而这种关联性则是用话题上的概率分布来刻画的, 这一点与 PLSA 其实是一致的。
但是在 LDA 模型中,每个文档关于话题的概率分布都被赋予了一个先验分布,这个先验一般是用稀疏形式的狄利克雷分布表示的。 这种稀疏形式的狄利克雷先验可以看成是编码了人类的这样一种先验知识:一般而言,一篇文章的主题更有可能是集中于少数几个话题上,而很少说在单独一篇文章内同时在很多话题上都有所涉猎并且没有明显的重点。
此外,LDA 模型还对一个话题在所有单词上的概率分布也赋予了一个稀疏形式的狄利克雷先验,它的直观解释也是类似的:在一个单独的话题中,多数情况是少部分(跟这个话题高度相关的)词出现的频率会很高,而其他的词出现的频率则明显较低。这样两种先验使得 LDA 模型能够比 PLSA 更好地刻画文档-话题-单词这三者的关系。
事实上,从 PLSA 的结果上来看,它实际上相当于把 LDA 模型中的先验分布转变为均匀分布,然后对所要求的参数求最大后验估计(在先验是均匀分布的前提下,这也等价于求参数的最大似然估计) ,而这也正反映出了一个较为合理的先验对于建模是非常重要的。
分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。
现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。
按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。
中文分词根据实现原理和特点,主要分为以下2个类别:
(1)基于词典分词算法
也称字符串匹配分词算法。该算法是按照一定的策略将待匹配的字符串和一个已建立好的“充分大的”词典中的词进行匹配,若找到某个词条,则说明匹配成功,识别了该词。常见的基于词典的分词算法分为以下几种:正向最大匹配法、逆向最大匹配法和双向匹配分词法等。
基于词典的分词算法是应用最广泛、分词速度最快的。很长一段时间内研究者都在对基于字符串匹配方法进行优化,比如最大长度设定、字符串存储和查找方式以及对于词表的组织结构,比如采用TRIE索引树、哈希索引等。
(2)基于统计的机器学习算法
这类目前常用的是算法是HMM、CRF(条件随机场)、SVM、深度学习等算法,比如stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。
常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。
随着深度学习的兴起,也出现了 基于神经网络的分词器 ,例如有人员尝试使用双向LSTM+CRF实现分词器, 其本质上是序列标注 ,所以有通用性,命名实体识别等都可以使用该模型,据报道其分词器字符准确率可高达975%。算法框架的思路与论文《Neural Architectures for Named Entity Recognition》类似,利用该框架可以实现中文分词,如下图所示:
首先对语料进行字符嵌入,将得到的特征输入给双向LSTM,然后加一个CRF就得到标注结果。
目前中文分词难点主要有三个:
1、分词标准 :比如人名,在哈工大的标准中姓和名是分开的,但在Hanlp中是合在一起的。这需要根据不同的需求制定不同的分词标准。
2、歧义 :对同一个待切分字符串存在多个分词结果。
歧义又分为组合型歧义、交集型歧义和真歧义三种类型。
一般在搜索引擎中,构建索引时和查询时会使用不同的分词算法。常用的方案是,在索引的时候使用细粒度的分词以保证召回,在查询的时候使用粗粒度的分词以保证精度。
3、新词 :也称未被词典收录的词,该问题的解决依赖于人们对分词技术和汉语语言结构的进一步认识。
典型的文本分类过程可以分为三个步骤:
1 文本表示(Text Representation)
这一过程的目的是把文本表示成分类器能够处理的形式。最常用的方法是向量空间模型,即把文本集表示成词-文档矩阵,矩阵中每个元素代表了一个词在相应文档中的权重。选取哪些词来代表一个文本,这个过程称为特征选择。常见的特征选择方法有文档频率、信息增益、互信息、期望交叉熵等等。为了降低分类过程中的计算量,常常还需要进行降维处理,比如LSI。
2 分类器构建(Classifier Construction)
这一步骤的目的是选择或设计构建分类器的方法。不同的方法有各自的优缺点和适用条件,要根据问题的特点来选择一个分类器。我们会在后面专门讲述常用的方法。选定方法之后,在训练集上为每个类别构建分类器,然后把分类器应用于测试集上,得到分类结果。
3 效果评估(Classifier Evaluation)
在分类过程完成之后,需要对分类效果进行评估。评估过程应用于测试集(而不是训练集)上的文本分类结果,常用的评估标准由IR领域继承而来,包括查全率、查准率、F1值等等。
1 Rocchio方法
每一类确定一个中心点(centroid),计算待分类的文档与各类代表元间的距离,并作为判定是否属于该类的判据。Rocchio方法的特点是容易实现,效率高。缺点是受文本集分布的影响,比如计算出的中心点可能落在相应的类别之外。
2 朴素贝叶斯(naïve bayes)方法
将概率论模型应用于文档自动分类,是一种简单有效的分类方法。使用贝叶斯公式,通过先验概率和类别的条件概率来估计文档对某一类别的后验概率,以此实现对此文档所属类别的判断。
3 K近邻(K-Nearest Neightbers, KNN)方法
从训练集中找出与待分类文档最近的k个邻居(文档),根据这k个邻居的类别来决定待分类文档的类别。KNN方法的优点是不需要特征选取和训练,很容易处理类别数目多的情况,缺点之一是空间复杂度高。KNN方法得到的分类器是非线性分类器。
4 支持向量机(SVM)方法
对于某个类别,找出一个分类面,使得这个类别的正例和反例落在这个分类面的两侧,而且这个分类面满足:到最近的正例和反例的距离相等,而且是所有分类面中与正例(或反例)距离最大的一个分类面。SVM方法的优点是使用很少的训练集,计算量小;缺点是太依赖于分类面附近的正例和反例的位置,具有较大的偏执。
文本聚类过程可以分为3个步骤:
1 文本表示(Text Representation)
把文档表示成聚类算法可以处理的形式。所采用的技术请参见文本分类部分。
2 聚类算法选择或设计(Clustering Algorithms)
算法的选择,往往伴随着相似度计算方法的选择。在文本挖掘中,最常用的相似度计算方法是余弦相似度。聚类算法有很多种,但是没有一个通用的算法可以解决所有的聚类问题。因此,需要认真研究要解决的问题的特点,以选择合适的算法。后面会有对各种文本聚类算法的介绍。
3 聚类评估(Clustering Evaluation)
选择人工已经分好类或者做好标记的文档集合作为测试集合,聚类结束后,将聚类结果与已有的人工分类结果进行比较。常用评测指标也是查全率、查准率及F1值。
1.层次聚类方法
层次聚类可以分为两种:凝聚(agglomerative)层次聚类和划分(divisive)层次聚类。凝聚方法把每个文本作为一个初始簇,经过不断的合并过程,最后成为一个簇。划分方法的过程正好与之相反。层次聚类可以得到层次化的聚类结果,但是计算复杂度比较高,不能处理大量的文档。
2.划分方法
k-means算法是最常见的划分方法。给定簇的个数k,选定k个文本分别作为k个初始簇,将其他的文本加入最近的簇中,并更新簇的中心点,然后再根据新的中心点对文本重新划分;当簇不再变化时或经过一定次数的迭代之后,算法停止。k-means算法复杂度低,而且容易实现,但是对例外和噪声文本比较敏感。另外一个问题是,没有一个好的办法确定k的取值。
3.基于密度的方法
为了发现任意形状的聚类结果,提出了基于密度的方法。这类方法将簇看作是数据空间中被低密度区域分割开的高密度区域。常见的基于密度的方法有DBSCAN, OPTICS, DENCLUE等等。
4.神经网络方法
神经网络方法将每个簇描述为一个标本,标本作为聚类的"原型",不一定对应一个特定的数据,根据某些距离度量,新的对象被分配到与其最相似的簇中。比较著名的神经网络聚类算法有:竞争学习(competitive learing)和自组织特征映射(self-organizing map)[Kohonen, 1990]。神经网络的聚类方法需要较长的处理时间和复杂的数据复杂性,所以不适用于大型数据的聚类。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)