赞
踩
NLP ——Natural Language Prrocessing 自然语言处理
一. NLP 文本相似度分析
马蜂窝评论造假事件
马蜂窝发现很多评论是通过机器写入的造假评论
那么是怎么发现的? ———— 采用NLP 的文本相似度分析
文本相似度分析: 从海量的数据(文章,评论)中,把相似的数据挑选出来
步骤:
(一)把评论翻译成机器能够看懂的语言
步骤:
分词: 把句子拆分成词语
import jieba # 抽取关键字的包 import jieba.analyse jieba.load_userdict('./mytext') text = "故宫有很多历史悠久的建筑,比如说乾清宫,午门。其中的黄琉璃瓦非常好看。啊" seg_list = jieba.cut(text, cut_all=False) # print("全模式:", "/".join(seg_list)) # 提取关键字 tags = jieba.analyse.extract_tags(text, topK=6) # topK = 5 : 提取5个关键字 print("关键字:") print(" ".join(tags)) # 除去停用词 stopwords = ["的", "包括", "等", "是", "啊"] # final:空的字符串 final = '' for seg in seg_list: if seg not in stopwords: final += seg print("final:", final)
运行结果:
eg:
import jieba
text = "我来到北京大学"
seg_list = jieba.cut(text,cut_all = True)
print("全模式:","/".join(seg_list))
seg_list = jieba.cut(text,cut_all = False)
print("精确模式:","/".join(seg_list))
seg_list = jieba.cut_for_search(text)
print("搜索引擎模式:","/".join(seg_list))
运行结果为:
(二) 使用机器看得懂的算法轮回去比较每一条和所有评论的相似度(TF-IDF)
1. 如何寻找TF-IDF 的关键字
1)不考虑停用词(没有什么意义的词语 eg:啊, 的,了。。)找出一句话中出现次数最多的单词,来代表这句话,这个就叫是词频(TF-Term-Frequency),相对应 的权重就会增高
2) 如果一个词在所有句子都出现过,那么这个词就能代表某句话,这个就叫做逆文本频率(IDF-Inverse Document Frequency)相应的权重值就会下降
3) TF-IDF = TF*IDF
2. TF公式:
其中ni ,j 是该词在一份文件 (或者评论)中出现的次数
分母是一份文件(或者评论)中所有词汇出现的次数总和
即:
3. IDF公式:
其中 |D|是语料库中的文件总数。 |{j:t_i∈ⅆ_j }|表示包含词语ti的文件数目。如果该词语不在语料库中,就会导致分母为0,因此一般情况下使用1+ |{j:t_i∈ⅆ_j }|
即:
分母加1 ,是为了避免分母为0
词类转换总结
假设我们有两句话,分别是
那么,这两句话的字典就是
dictionary: 0:a 1:b 2:c 3:d
其中key值表示索引,value表示对应的词语;
而且,词语不会重复
通过应用生成好的字典,我们可以重写两句话
然后把这两句话改成列表(list)类型,就变成以下格式
[[{0:1}, {1:1}, {2:1}, {3:0}],
[{0:0}, {1:1}, {2:1}, {3:1}]]
把list中的字典转换成元组,这就是我们在代码里得到的语料库
[[(0,1), (1,1), (2:1), (3:0)],
[(0:0), (1:1), (2:1), (3:1)]]
语料库的两种表现形式
1.第一种: String类型
[“a b c”,
“b c d”]
2.第二种,词袋类型
[[(0,1), (1,1), (2,1), (3,0)],
[(0,0), (1,1), (2,1), (3,1)]]
如果新得到一组数据,可以把它用两种形式加入到语料库中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。