NLP文本处理

分词 Segmentation

分词可以认为是已经解决的问题

分词工具 Segmentation Tools

Jieba分词 : https://github.com/fxsjy/jieba
SnowNLp  :  https://github.com/isnowfy/snownlp
LTP      :  http://www.ltp-cloud.com/
HanNLP    : https://github.com/hankcs/HanLP/

分词方法 Segmentation Method

1. 基于匹配规则的方法—Max Matching(最大匹配)

前项最大匹配(forward-max matching):从前向后扫描max_len的长度
后向最大匹配 (backward-max matchine):从后向前扫描max_len的长度
最大匹配的缺点:
  • 细分(有可能是更好)
  • 局部最优
  • 效率低(※)
  • 歧义(不能考虑语义)
PS:
1. 两种匹配方法结果90%会一样
2. 算法分为:贪心算法:选择当前最好解,不能看到全局最优解、DP算法:Global Optional
3. 这是贪心算法

2. 基于概率统计的方法—Language Model

(LM、HMM、CRF...)

Incorporate Semantic(考虑语义)

step1: 输入

<——生成所有可能的分割——>

step2: 选择其中最好的(by LM)

PS:1. 缺点: 复杂度很高,计算效率低
   2. 对于underflow(相乘结果小数点太多溢出问题)的解决办法 :“P——>logP”

3. 维特比算法(※)

合并step1和step2,解决计算效率低问题

动态规划问题,LM依赖Unigram

Steps:
  • 所有单词串联

  • combine所有出现过的词汇,进行连线

  • 统计所有路径

    从连线开始到结束的所有路径即为“分词”时的所有路径

  • 计算:最小(-logP)路径 <=> 最大(logP)路径

    • P: 句子的概率。eg:P(今天真高兴) = 0.35
数学公式表示维特比算法
  • f(m) = min { f(i) + W(i,m) }
  • i ∈ Ω(m)
  • Ω(m) : all the imcoming links
  • f(i) : 从节点1到节点 i 的最短路径的值

斐波那契: f(n) = f(n-1) + f(n-2)

Spell Correction 拼写错误纠正

(搜索相关)

用户输入(input)
<—AI—>
用户输入(correction)

1.错别字,2.词义不合适
触发机制:1:不存在于词典库 2:LM,P值很低 or...

Progess

  1. 当前单词 —(edit distance)—> find all Candidates
  2. 过滤掉不存在词库里的词—> Candidates
  3. -(NoisyChannel)-> Answer corrected
  • C^= argmaxc∈candidateP(S|C)* P(C)
    • P(S|C):从历史日志获得
    • P(C):LM获得

计算编辑距离的方法

初始方法:

input ——> find min(edit distance) ——> return Candidates

复杂度高O(V),V:字典中的所有词

  • 计算 edit distance(基于DP算法)
    • 3 operators : insert、delete、replace
    • 操作即成本
    • 操作数越小,成本越小,edit distance 就越小

alternative way(优化):

  • input —> 生成编辑距离为1,2 的字符串 —> 过滤 —> return

    • 生成过程By"replace/add/delete"三种操作
    • 之所以选定edit distance为1,2是科学论定,可以覆盖99.9%的情况`
  • 停用词过滤

    • How to select?

      • 问题定义:给定一个字符串S,we should find out 最有可能成为正确的字符串C,即:
        • C^ = argmaxc∈candidateP(C|S) = argmaxc∈candidateP(S|C)* P(C)/P(S) = argmaxc∈candidateP(S|C)* P(C)

          可以理解成: x^ = argmaxxf(x),即寻找一个x值使f(x)最大,将其定义为x^
          此公式可参考贝叶斯定理:P(x|y)=P(y|x)*P(x)/P(y)
          P(x,y):联合概率,P(x|y):条件概率

          • 分析:由于S给定,C的选取改变不受P(S)影响,故P(S)可看做常数
          • P(C)如何计算?——历史数据。P(C) : Unigram probability
          • P(S|C):对于一个正确的字符串(C),有百分之杜鳌少的人写成了S (input) 的形式
    • Filtering Words

      • 过滤:停用词(考虑特殊应用场景)、出现频率很低的词汇
      • 过滤过程类似于特征筛选,过滤后得到一个词典库
    • Stemming:one way to normalize词的标准化操作

      1. 把相同意思的单词合并,多用于英文
      2. Stemming不保证合并后的单词是有效单词
      3. lemmazation方法相对于Stemming更加严格,输出为有效单词
      4. PorterStemmer算法:https://tartarus.org/martin/PorterStemmer/java.txt
      5. 语言学家指定了Porter Stemmer规则

文本表示

Word Repressentation 向量表示单词

  • one-hot representation 方法

    词典:[我们,去,爬山,今天]
    word表示:
        我们:(1,0,0,0)
        今天:(0,0,0,1)
    sentence表示:
        去爬山:(0,1,1,0)
        我们去爬山去:(1,1,1,0)
    
    

Sentence Representation 向量表示句子

  • boolean representation 方法

    • 词典中的词出现次数大于1,仍记为1,出现0次记为0
  • count-based representation 方法

    • 词典中的词出现n次,仍记为n,出现0次记为0
    • 并不是出现次数越多就越重要,越少就越不重要,反而是经常相反
  • tf-idf Representation 方法

    tfidf(w) = tf(d,w) * idf(w)

    • tf: 文档d中w的词频
    • idf: log(N/N(w)),用于考虑单词的重要性
      • N: 预料库中的文档总数
      • N(w): 词语w出现在多少个文档
    • 计算的pipeline
      • 由句子构建词典

文本相似度

Sentence Similarity

  • 计算距离(欧氏距离):d = |s1 -s2|
    • d越大,相似度越小
  • 计算相似度(余弦相似度):d = (s1·s2)/(|s1|*|s2|)
    • d = 内积(方向)/范数(大小)Normalization
    • 可以同时考虑方向、大小
    • d越大,相似度越高

Word2Vector词向量

Words Similarity

  • one-hot representation

    • 不能表达单词之间的语义相似度
    • Sparsity
    • 向量长度=词典维度
  • Distributed Representation

    • 向量长度自定义
    • 不稀疏,每个向量元素都不是0

Comparing the Capacities

  • 100维的One-Hot 表示法做多可以表达100个单词
  • 100维的分布式 表示法做多可以表达无穷多个单词
  • 因此分布式表示法的容量空间远远大与one-hot

Learn Word Embeddings

Input(string) ——> 深度学习模型 ——> Distributed Representation

  • 1B: string contains 10^9 tokens(单词)
  • 训练词向量的深度学习模型:skip-gram、Glowe、CBOW、RNN/LSTM、MF、Gaussian Embedding
  • 所有模型提前需要定好参数-维度:dim/D:100/200/300(or so ,一般不超过300维)
  • 多数公司词向量已经训练好,直接使用

Essence of Word Embedding

Word2Vec 某种意义上理解成词的意思(Meaning)

训练词向量时,可以将训练结果放到二维空间,看二维空间中的词是否有一些分类的特点

From Word Embedding to Sentence Embedding

  • Averaging法则: 计算出句子向量,再根据相似度计算方法计算两个句子的相似度

Inverted Index倒排表

Retrieval-based QA System

input ——> 与知识库相似度匹配 ——> 返回相似度最高的

  • 时间复杂度很高O(N)
  • 计算相似度= O(N)*Sim(str1,str2)

优化—解决以上时间复杂度高的问题,核心思想“层次过滤思想”

input ——>过滤1 ——> 过滤2(多层过滤)——> 相似度匹配算法(cosin-similarity)——> return

时间复杂度:过滤器1 < 过滤器2 < cosin-similarity算法

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