数据整理
jieba分词
不同分词模式
主要围绕两个函数:jieba.cut()
, jieba.cut_for_search()
jieba.cut()
第一个参数是需要进行分词的字符串。
第二个参数控制是否启用全模式:
若启用,参数为“cut_all=True
”,表示选择全模式。特征:词之间会有重复的部分,从最短词到仍具有完整语义的最长词都会打印出来。
若缺省或选择 False ,则表示选择精确模式。特征:无重复,从左到右呈现具有完整语义的最长词。
jieba.cut_for_search()
参数是需要进行分词的字符串。搜索引擎模式特征:词之间有重复的部分,会呈现相邻之间能组成的有完整语义的词,最短词到最长词都有。
自定义词典
不足
测试的时候发现它识别不出完整的成语:
去停用词
首先需要下载些停用词的文本,GitHub上都有,我下的是百度、哈工大、川大的停用词文本。
具体操作学习的是这篇博客。
进行停用词的去除,需要先加载停用词:
path3 = "D:/stopwords_u.txt" #停用词txt
stopwords = [line.strip() for line in open(path2, encoding="utf-8").readlines()] #加载停用词
继而可以根据停用词进行储存和词频统计:
words = jieba.lcut(txt) #前一步的分词
counts = {} #计数{word,frequency}
for word in words:
if word not in stopwords: #不在停用词表中
if len(word) == 1: #长度为1的话,不储存
continue
else: #不是停用词且词长度不为1
counts[word] = counts.get(word, 0) + 1 #词均用数组下标进行标识
热点事件自动识别
(附上参考的论文)
该论文主要从突发词识别(采用加权突发词聚类算法)的基础出发,再在对应时间窗上识别对应热点事件、测度热度值等。
首先初始化为0-1矩阵:
不断进行迭代运算类间相似性,同时合并相似性最大的两个子类,直到满足终止条件。
最终能得到一定时间内权重最大或较大的词,继而可以据此实现热点事件的进一步识别。
该论文还涉及到一些惩罚函数等式子,目前还没看懂…
基于词向量的固定表征
(附上参考链接)
在前一步的分词中已经把数据集分成各个具有完整语义的词。为了分析出该数据集的整体感情色彩,需要分析这些词。方法有词频统计、概率统计等。尤其是相近语义或类型的词,是否把它们归为一类,在文中不同地方出现语义是否会有所变化,这些都会影响分析结果的准确性。这时利用词向量间的运算(求余弦等)可以计算出相对应的值,可用于分析计算对应词的属性。
Word2Vec模型(不足:只利用了局部信息)
(附上学习链接)
这个模型主要通过滑动窗口的方式进行多次输入输出,以完善一个较为准确的词向量。如下,每次取窗口中前两个词进行输入,在词向量表中经过计算后,更新第三个词的向量值(即输出后的词向量表已被更新)。
视频中还提到两种具体的方式:
一是取窗口中间的词作为要输出的词。(多对一)
二是取中间的词作为输入,其余的分别作输出。(一对多)
(这些窗口滑动计算的过程也是深度学习的过程)
此外,为提高准确性,该预处理模型还需要加入一些负样本,以在计算的过程中将词向量表更新得更准确和符合原文本。如下,根据选好的滑动窗口中的词,规定当输出词不是原窗口中该输出的词的时候,得到的结果为0.
GloVe(改良:能利用全局信息)
( 参考了大佬的博客 和 b站上的视频 )
首先需要建立一个n×n的共现矩阵(词汇表×词汇表),全部初始化为0,表示这些词之间尚未有联系。
接着用滑动窗口的方法统计词i与词j的共现次数。共现矩阵构建好后变可计算共现频率:
进一步计算共现频率比:
在此基础上优化词向量函数:
最后据此确定一个加权函数: