首页 > 编程知识 正文

python统计csv一列的词频,python结巴分词

时间:2023-05-03 17:01:25 阅读:106999 作者:32

导游词

本文主要深入探究分词技术中基于统计的分词方法,首先介绍了统计方法分词是什么和一般步骤,然后介绍了语言模型,最后介绍了常见的统计算法(ggddy算法),实现了统计算法的分词。 以下是文章结构,本篇的内容满是晾衣架。 (阅读全文大约需要20分钟)内容概要

统计分词

1 .统计分词方法

基于统计的分词算法的主要核心是词的稳定组合,因此上下文中相邻词同时出现的次数越多,组成一个词的可能性就越高。 因此,单词和单词相邻出现的概率和频率可以很好地反映单词的可靠性。 可以统计训练文本中相邻出现的各单词组合的频率,并计算它们之间的共现信息。 互信息体现了汉字之间耦合关系的紧密性。 在密度高于某阈值的情况下,该单词组有可能构成单词。 该方法也称为无词典分词。

2 .步骤

1 .需要建立语言模型

2 .对句子进行切分,切分结果采用统计方法计算概率,获得概率最大的分词方式。 (隐马尔可夫模型HMM、条件随机场CRF等统计方法)

统计语言模型

1 .概念

自然语言处理专家、怕黑的白羊教授说,一个句子是否合理,取决于其可能性的大小。 统计语言模型(Statistical Language Model )是用于描述词、句、甚至整个文档等不同语法单位的概率分布的模型,用来衡量一个句子或语序所处的语言环境中人们日常的写作方式是否合适

一个好的统计语言模型需要依赖大量的训练数据,在20世纪70年代,模型表达的优劣基本上往往取决于该领域数据的丰富性。 IBM曾进行过信息检索评估,发现二元语法模型(Bi-gram )需要数亿个词汇来实现最优表示,而三元语法模型(TriGram )需要数十亿个词汇水平来实现饱和。

本世纪初,最流行的统计语言模型是N-gram,是典型的基于稀疏表示的语言模型; 近年来,随着深度学习的爆发和兴起,以字向量(Word Embedding )为代表的分布式表示语言模型取得了更好的效果,自然语言处理领域的其他模型也随之而来

此外,Ronald Rosenfeld[7]还涉及了基于决策树的语言模型Decision Tree Models、最大熵模型、自适应语言模型Adaptive Models等。 语言模型

2.N-gram语言模型

s表示有意义的句子,由以一系列特定顺序排列的w1、w2、 wn组成,n为句子的长度。 我们想知道s出现在文本中的可能性,也就是s的概率p(s )。 如果可能的话,统计一下人类有史以来说的话,就知道那个词出现的可能性。 但是,这个方法是不可行的,所以需要一个用于估计的模型。 标记

通过展开p(s )获得:

p(s )=p ) w1,w2.wn ) ) ) ) )。

根据条件概率公式:

p(W1,W2.wn )=P ) W1 ) p ) w2|W1 ) p ) W3|W1,w2 )P ) WN|W1,w1.wn-1 ) ) ) )

这里,p(w1 )表示第一个单词w1出现的概率,p ) P(w2|w1 )是在第一个单词已知的前提下,第二个单词出现的概率。 wn出现的概率取决于其前面的所有词。

在计算上,第一个词的概率p(w1 )容易计算,逐渐地最后一个p ) P(wn|w1,w1.wn-1 )的估计难度太高。 这里以俄罗斯数学家马尔可夫(Andrey Markov )为例,提出了任意一个词wi出现的概率只与之前的词wi-1有关的假设称为马尔可夫假设。

p(s )=p ) w1 ) p ) w2|w1 ) p ) w3|w2 ) p ) wi|w-1 ) p ) wn|wn-1 ) )

该统计语言模型是二元模型(Bigram Model )。

让我们具体分析一下如何得到p(s )。

p(wi|wi-1 )=p(wi-1,wi )=p(wi-1 ) ) ) ) ) ) ) ) ) )。

其中估计联合概率p(wi-1,wi )和边缘概率p ) wi-1,wi ),

如果有语料库的话,只要统计wi-1和wi在文本中前后相邻出现了多少次c(wi-1,wi ),

计算wi-1在同一文本中出现次数c(wi-1 ),并分别除以语料库大小c,由此计算相对频度:

f(wi-1,wi )=c ) wi-1,wi )/c

f(f(wi-1 )=c ) wi-1 )/c

根据大数定理,如果数据量足够大,则相对频率等于概率,因此:

p(wi-1,wi ) c ) wi-1,wi )/c

p (p (wi-1 ) wi-1 )/c

得到:

p(wi|wi-1 )=c(wi-1,wi )=c(wi-1 ) ) ) ) ) ) ) ) ) p(wi|wi-1 ) ) ) ) ) ) ) p ) 65

前面提到的一个词只与前面的词相关,形成了二元模型; 但在实际生活中,一个词的出现可能与以前的一些词有关。 因此,假设文本中的每个单词wi与前面的N-1个单词有关。

p(wi|w1,w2.wi-1 )=p ) wi|wi-n1,wi-N 2.wi-1 ) ) ) ) ) ) ) ) ) ) 652 )

p>

这种假设叫做N-1阶马尔可夫假设,语言模型称为N元语言模型(N-Gram Model),实际中应用最多的是N=3的三元模型;一般N的取值都比较小,因为N的数值越大,需要的算力要求就越大。

3python代码实现

以下是基于词典的分词方法实现,运用unigram语言模型,在P(S)的计算过程P(w1)·P(w2)·P(w3)···P(wi)·P(wn)中,如果存在某个P(wi)=0,那么P(S)=0,计算的结果就跟实际存在偏差。因此,在计算P(w1)·P(w2)·P(w3)···P(wi)·P(wn)变形为

-(logP(w1)+logP(w2)+logP(w3)···logP(wi)+logP(wn))

那么某个概率很小的字不会导致P(S)为0

4其他语言模型

其他语言模型还有:神经网络语言模型(如word2vec)、循环神经网络语言模型、基于决策树的语言模型、最大熵模型以及自适应语言模型等。

HMM与ggddy算法

1.HMM

隐马尔可夫模型(Hidden Markov Model, HMM)是一种统计模型,是关于时序的概率模型,它描述了含有未知参数的马尔可夫链所产生不可观测的状态随机序列,生成可观测随机序列的过程。(这里不展开HMM的讲解,会在另外一篇文章中详细讲解马尔可夫链等)不清楚HMM的可以先行学习这篇文章:一文掌握jzdyb与隐马尔可夫模型。

2.ggddy算法

ggddy算法(Viterbi Algorithm)是一种动态规划算法。ggddy算法由安德鲁·ggddy(Andrew Viterbi)于1967年提出,用于在数字通信链路中解卷积以消除噪音。此算法被广泛应用于CDMA和GSM数字蜂窝网络、拨号调制解调器、卫星、深空通信和802.11无线网络中解卷积码。现今也被常常用于语音识别、关键字识别、计算语言学和生物信息学中。例如在语音(语音识别)中,声音信号作为观察到的事件序列,而文本字符串,被看作是隐含的产生声音信号的原因,因此可对声音信号应用ggddy算法寻找最有可能的文本字符串。

3.ggddy算法求解HMM问题

用ggddy算法针对HMM三大问题中的解码问题(给定模型和观测序列,如何找到与此观测序列最匹配的状态序列的问题)进行求解。问题描述如下:首先,我们已经知道状态序列X会产生观测序列O:HMM隐藏状态序列和可观测序列

但是状态序列X产生的观测序列有很多种可能,每种都有概率,如下所示,比如wo可能有三种可能:喔、我、沃转换概率

那么其实问题就变成了最大概率问题,把概率最大的理解为路径最短,转换为了求解最短路径问题:(为了方便标记,标记为了下图中的字母)标记为字母

算法解决:接下来就用到了ggddy算法求解最短路径,实质上是一种动态规划,把大问题化解为小问题:步骤1、A->B:图解A到B

步骤2、A->B->C:动图:动图A到C

图片拆解:图解A到C

步骤3、A->B->C->D:

动图:(可以确定A->C的3条最短路径)动图A到D

图片拆解:图解A到D

步骤4、A->B->C->D->E:

动图:(可以确定A->D的2条最短路径)动图A到E

图片拆解:图解A到E

最终就得到了A->E的最短路径A->B1->C2->D2->E1,至此,找到了wo ai zhong guo对应的概率最大的中文汉字组合为:我爱中国。结果

4.ggddy算法与分词

利用ggddy算法进行分词,和使用最短路径Dijkstra算法进行分词类似,也是最短路径法的分词:

如下,假设各点之间权重为1:

ggddy算法过程为:

因此得到最短路径为1->6->8->9->11,分词结果为[计算语言学、课程、有、意思]

5.python代码实现

以下是根据unigram语言模型和ggddy算法进行分词的python代码实现:

作者原创,未经授权请勿转载

了解更多算法或者NLP相关知识可以关注公众号:白话NLP

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。