NLP笔记

本文介绍了NLP中的分词方法,包括前向最大匹配和后向最大匹配,指出其只考虑单词形式,忽视语义的缺点。接着讲解了词向量的One-hot编码及其变种,并探讨了词义相似度计算,如欧式距离和余弦相似度。最后提到了One-hot编码的缺点及TF-IDF权重计算。
摘要由CSDN通过智能技术生成

NLP处理流程在这里插入图片描述

分词

前向最大匹配(Forward max matching)

例子:我们经常有意见分歧
1.先设定一个max_len=5,并且有一个词典。
2.取出前max_len个词“我们经常有”,在词典中寻找该词,若无,则去匹配"我们经常",…,知道匹配到“我们”。
3.接着按照max_len取出"经常有意见",同样的是5个词,重复上面操作,找到词典中有的词"意见"。

4.直到分完这个句子。
在这里插入图片描述
代码实现:

def forward_max_match(input_word,dic_words=dic_words,window_size=5):
    """前向最大匹配"""
    result=[]
    index=0
    text_size=len(input_word)
    while text_size>index:
        for size in range(window_size+index,index,-1):
            piece=input_word[index:size]
            if piece in dic_words:
                index=size-1
                break
        index+=1
        result.append(piece)
    return result
forward_max_match("北京的天气真好啊")

后向最大匹配(Backward max matching)

后向最大匹配则是从后往前的
在这里插入图片描述

def backward_max_match(input_word,dic_words=dic_words,window_size=5):
    """后向最大匹配"""
    result=[]
    index=len(input_word)
    window_size=min(index,window_size)
    while index>0:
        for size in range(index-window_size,index):
            piece=input_word[size:index]
            if piece in dic_words:
                index=size+1
                break
        index-=1
        result.append(piece)
    return result
backward_max_match("北京的天气真好啊")

前向最大匹配和后向最大匹配的缺点
这两个方法只关注到了单词形式上的意思,并没有考虑到句子以及语义。
一个好的分词 不仅要考虑单词、更要在句子甚至语义

考虑语义的分词

首先先将一个句子,分割成所有可能的形式,然后利用语言模型输出概率最高的分词结果。(注:这种方法其实存在一个效率问题,分成了2个步骤,可以使用维比特算法优化,以后再补充)
在这里插入图片描述

纠错

如果是输入的文本有错,就需要就行纠错操作。
例子:
假设输入了一个__therr__,而词典中有there、their、thesis、theirs和the,由此计算编辑距离。编辑距离是将有误的单词转化成正确的单词所需要的步骤,(插入、替换、删除都算一个编辑距离),图中这5个单词的编辑距离为1,1,3,2,2
在这里插入图片描述
而如果将所有的词典全都遍历一遍,计算量太高,
因此可以将有误的单词,首先生成编辑距离为1,2的字符串,再进行过滤操作,选择最好的一个单词。在这里插入图片描述
如何过滤和选择?
预备知识:贝叶斯公式
p ( x , y ) = p ( x ∣ y ) p ( y ) = p ( y ∣ x ) p ( x ) p(x,y)=p(x|y)p(y)=p(y|x)p(x) p(x,y)=p(xy)p(y)=p(yx)p(x)
p ( x , y ) = p ( y ∣ x ) p ( x ) p ( y ) p(x,y)=\displaystyle\frac{p(y|x)p(x)}{p(y)} p(x,y)=p(y)p(yx)p(x)

图中, p ( s ) p(s) p(s)是一个常量, p ( s ∣ c ) p(s|c) p(sc)是在过往的历史中,输错的形式出现的概率, p ( c ) p(c) p(c)是词库中单词出现的概率(Unigram的概率)

词向量表示

假设又一个大词典,词典中有
[我们,又,去,爬山,今天,你们,昨天,跑步]

One-hot编码

每个单词的编码:(8维=词典的维度)
我们:(1,0,0,0,0,0,0,0)
爬山:(0,0,0,1,0,0,0,0)
跑步:(0,0,0,0,0,0,0,1)
昨天:(0,0,0,0,0,0,1,0)

One-hot编码(boolean)

每个句子的表示:(8维=词典的维度)

(S1)我们 今天 去 爬山:(1,0,1,1,1,0,0,0)
(S2)你们 昨天 跑步:(0,0,0,0,0,1,1,1)
(S3)你们 又 去 爬山 又 去 跑步:(0,1,1,1,0,1,0,1)

One-hot编码(count)

(S1)我们 今天 去 爬山:(1,0,1,1,1,0,0,0)
(S2)你们 昨天 跑步:(0,0,0,0,0,1,1,1)
(S3)你们 又 去 爬山 又 去 跑步:(0,2,2,1,0,1,0,1)

词义相似度计算

欧式距离

d ( x , y ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ⋯ + ( x n − y n ) 2 = ∑ i = 1 n ( x i − y i ) 2 d(x, y)=\sqrt{\left(x_{1}-y_{1}\right)^{2}+\left(x_{2}-y_{2}\right)^{2}+\cdots+\left(x_{n}-y_{n}\right)^{2}}=\sqrt{\sum_{i=1}^{n}\left(x_{i}-y_{i}\right)^{2}} d(x,y)=(x1y1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值