中文分词

一、NLP文本相似度

内容:

1.NLP(自然语言处理入门)

TF-IDF、 关键词提取、LCS最长公共子序列

2.中文分词

jiaba、HMM

3.实践

MR TF-IDF

MR 根据LCS计算文本相似度

MR 结巴分词


共同好友:

A:B,C,D,F,E,O   A的好友有——》B,C,D,F,E,O

B:A,C,E,K   B的好友有——》A,C,E,K 

C:F,A,D,I  C的好友有——》:F,A,D,I

D:C   D的好友有——》C

返回结果:

A,B的共同好友有:C和E

A,C用户的共同好友有:D和F

...

两轮MR

1. map输入

     map输出  C \t A ; 一个好友及拥有这个好友对应的人

     C \t B

     C \t D

     reduce输入

     reduce输出 C \t A, B, D;  一个好友及拥有这个好友的所有人

2. map 输入

     map 输出 A_B \t C ;A_B的共同好友里有的一个是C

                      A_D \t C

     reduce 输入

    reduce 输出 A_B \t C,E  A_B的共同好友里面所有的共同好友

问题1:只有1轮MR,其中代码map里面用了一个字典,在不同map里面字典是不能共享的。

           本地执行是可以的,分布式的结果不对。

           本地测试:根据map分而治之的思想

           head -7 file |python map.py >f1

           tail -7 file |python map.py >f2

           cat f1 f2>f12

           cat f12 |sort |python red.py >res

           wc -l res

问题2:A_B \t C 本地

              B_A \t C 集群

排序导致的,没有问题,  C \t A, B, D

1、文本相似度

1)字面相似,但是语义不相似

      我吃饱饭了

      我吃不饱饭

方案:(1)中文分词,看多少词是相同的 (2)分词之后LCS最长公共子序列

2)语义相似,但是字面不相似

       老铁的个人简历

       铁匠人物介绍

方案:基于人的行为(1)基于共同的行为(CF)(2)word embedding ,映射到向量空间

相似度的度量

1)余弦相似度 cos

   A (1,2,3)

   B (2,3,4)

   cos(A,B)

   分子:A*B = 1*2+2*3+3*4=20

   分母:|A| *|B| = sqrt(1*1 + 2*2 +3*3) * sqrt(2*2 + 3*3 +4*4) = 3.74*5.38

   cos(A,B) = 20 / 3.74*5.38

   优化的思路:把词频换成词在文章中的重要性

   词在文章中的重要性:

   1.词频,去掉停用词,在本篇文章出现次数多 :tf

    2.词在其他文章出现的少 :idf

聚类算法

1、密度——在指定半径内出现的邻居数量

2、与其他比自己密度值大的点的距离的最小值(例如:两个类:A、B,A的聚类的第二大的值比B的聚类的第一大的值还要大,但是A的这个值离B远,所以选B的聚类的第一大的值为聚类中心。)

聚类中心两个值(上边1和2两点)都要大。

1)TF:词频

2)IDF:反文档频率

取值范围(0,log(语料库中文档总数))

自动摘要

1)确定一批关键词(TF-IDF)

2)包含关键词的句子找出来

3)对句子做些处理,排序(关键词越多,权重大)

4)把句子汇总,就是摘要

LCS 最大公共子序列(业务紧密相连)

A:我很喜欢看电影,最喜欢看《我不是药神》

B:我很喜欢看电影,最喜欢看《我不是潘金莲》

LCS(A,B)我很喜欢看电影,最喜欢看《我不是》

文本相似度 = 2*LCS(A,B) / [ len(A) + len(B)]

目的:从字面衡量文本相似度的方法之一,动态规划的思路与中文分词里面有一个viterbi算法也用到DP。

推荐:LCS(A,B)>0.9 AB非常相似,过滤掉(近似等价于已经看过的),多样化。

            TF-IDF 以及LCS 都是已经做了中文分词的基础上。

中文分词:

结婚的和尚未结婚的

结婚的 \ 和 \ 尚未 \ 结婚的

结婚的 \ 和尚 \ 未 \ 结婚的

广州本田雅阁汽车

广州 \ 本田 \ 雅阁 \ 汽车

广州本田 \ 雅阁 \ 汽车

广州 \ 本田雅阁 \ 汽车

分词的粒度:

粗粒度: 比如:成语;推荐场景:拿字去索引库召回效果不好。

细粒度:搜索场景,搜索引擎不会把所有小粒度的词都建索引,而是选择更有可能展现相关结果的小粒度词——所以前几页效果好,后边效果不好,因为召回变多。

例:车 —— 》 汽车坐垫,自行车,越野车

DAG图有向无环图:切开哪一个位置好?

C = 本田雅阁

S1 = 本田  \ 雅阁

S2 = 本 \ 田 \ 雅阁

P(S1 | C) P(S2 | C) 比较大小

朴素贝叶斯公式:(分类:邮件:S是:类别是否是垃圾 ,C是:样本) 独立性假设,每个词的出现都跟其他词没有关系。

P(S | C) = P(S,C) / P(C)  = P(C | S)* P(S)/ P(C)

P(S,C) =P(C | S)* P(S)

P(C | S)=P(本田雅阁 | 本田  \ 雅阁) =1

P(S)

P(C) = P(本田雅阁) =常数(比较两个概率的大小,共同除以P(C),所以省去)

P(S1 | C)= P(S1)=P(本田 \ 雅阁) = P(本田) * P(雅阁)=logP(本田 \ 雅阁) =log( P(本田) * P(雅阁)) = log(P(本田)) +log(P(雅阁))

P(S2 | C)= P(S2)=P(本 \ 田 \ 雅阁)= P(本) * P(田) * P(雅阁)

P(本田) = 分子/分母

分子:本田在语料库中出现的次数

分母:语料库总词数,可能会很大

P会特别小,P连乘(尤其在句子长时)会计算结果非常小 = 0

所以我们对P,取log再比较

为什么能取log:log是增函数,可以保证大小顺序一致,实际当中不关系概率值是多少,只是比较大小。

log(a*b) = log(a) + log(b)

取log的好处

1.防止数据向下溢出

2.加法运算速度快于乘法

独立性假设有些不合理 ——》概率语言模型(本田后面跟雅阁的概率 > 本田后面跟奔驰的概率)

语言模型:

P(w1,w2,w3) = p(w1)*p(w2 | w1) * p(w3 | w1,w2)

一元模型(Unigram)

P(w1,w2,w3) =p(w1) * p(w2) * p(w3)

二元模型(Bigram)

P(w1,w2,w3) = p(w1)*p(w2 | w1) * p(w3 | w2)

三元模型(trigram)

P(w1,w2,w3) = p(w1)*p(w2 | w1) * p(w3 | w1,w2)

什么是模型:

p(w1) = 0.1 

p(w2) = 0.2

p(w2 | w1) =0.3

模型有了也就是概率计算好了,使用的时候直接用值即可。

p(w1) =p(本田)=w1的次数 / 语料库总次数

p(w2 | w1) = p(w2,w1) / p(w1) = w1,w2共同出现的次数 / w1 出现的次数

结巴分词背后实现的原理:

结巴分为两个阶段:

(1)基于本地词库,前向遍历方式,构造DAG图出来,进行最优路径的选择(求概率)

(2)如果词库不够大, HMM隐马模型

HMM

状态序列:希望得到的,比如中文输入法的汉字,翻译的结果,分词(每个字要不要停顿),词性标注(词性,n,v)

观测序列:可以观察到的,中文输入法的拼音,翻译前的语言,每个字,每个字

分词:

观察到的是字

状态:

B ——begin

M —— middle

E —— end

S —— single

我 / 喜欢/ 广州本田

S    B E  B M M E

参数:

1、初始概率 :数量4(分词:BMME),状态的个数M

2、转移概率:M*M

3、发射概率:观察值数量是N,M*N

把所有参数计算出来就得到了模型:上面1、2、3点。

三个基本问题(概率语言模型)

1.模型参数估计  M个初始概率+M*M个状态转移概率+M*N个发射概率

2.给定模型,计算一个观测序列出现的概率, 广州本田雅阁汽车这句话出现的概率是多少

3.给定模型和观测序列,找到最优的隐藏状态序列(词性标注,中文分词。。。)

1.状态已知 (隐藏序列),观测序列都知道,相当于已经分好词,求解模型只需要基于统计

  初始概率:p(B) = B在句子开头的次数 / B总出现次数

  转移概率:p(B->M) = (B后面一个是M)出现次数 / B 出现次数

  发射概率: p(B->广)=(状态是B,观测是广)出现次数 / B出现次数

  状态未知 ,观测序列都知道 , EM。

2.DP,前向算法和后向算法

3.分词过程(有模型):viterbi算法,动态规划。

概率最大化: π(b) * p(s|b)*p(广 |s) *p(m | s ) *p(州|m)......

实践:

tfidf : 一个词的tf在所有文章是不是一样的? 不一定

        一个词的idf 在所有文章都是一样的吗?  一样

文本相似度=2*LCS(A,B)/[len(A)+len(B)]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355