从零开始学自然语言处理-十万字长文带你深入学习自然语言处理全流程

Posted 文宇肃然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始学自然语言处理-十万字长文带你深入学习自然语言处理全流程相关的知识,希望对你有一定的参考价值。

前言

内容会涉及自然语言处理的各个方面知识内容和具体操作:包括但不仅限于词法分析,句法分析,语义分析,文本聚类,文本分类,情感分析,文本摘要生成,主题模型,词嵌入,文本语义相似度,自然语言推理,机器翻译,语言模型,信息抽取,关系预测,对话,指代消解等等。

针对中文的自然语言处理,我们需要先将段落和句子切分为词语,这是最基础的一步操作,分词属于词法分析的基础部分。

以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟!

MATLAB-30天带你从入门到精通

MATLAB深入理解高级教程(附源码)

tableau可视化数据分析高级教程

本文聊聊 jieba 这个工具包。

jieba 是一款优秀的中文分词工具。

如何安装 jieba 呢?

我们可以通过 Python 的 pip 直接安装:

 

pip install jieba

jieba 采用的算法为:

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)

  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

  • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

jieba 有三种分词模式:

  • 精确模式,试图将句子最精确地切开,适合文本分析;

  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

我们接下来开始具体操作

1)分词的直观操作:

首先我们使用全模式进行分词:

 

import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

结果为:

使用精确模式(默认的也是精确模式,即去掉cut_all参数也是精确模式):

 

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式

使用搜索引擎模式:

 

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))

2)自定义词库:

但是当我们遇到一些新词的时候,jieba 可能并不能正确分词,例如我们在对以下句子进行分词时:

 

seg_list = jieba.cut("新研发的产品名为一网搜索。", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式

那如何解决这个问题呢?

我们只需要创建一个自定义词典文件,文件格式为 txt 

词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。词频省略时使用自动计算的能保证分出该词的词频。

例如,我在本地创建了一个名为 userdict.txt 的文件

然后将 “一网搜索” 加入自定义词典,后面的 5 表示词的词频(词频越高,对该词分词的准确度和优先级越高),然后保存。

用法:jieba.load_userdict(file_name) 

file_name 为文件类对象或自定义词典的路径

然后使用如下代码即可完成正确分词:

 

jieba.load_userdict(r'E:/jieba/userdict.txt') 
seg_list = jieba.cut("新研发的产品名为一网搜索。", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式

jieba 黑科技

小编喜欢用 jieba 分词,是因为它操作简单,速度快,而且可以添加自定义词,从而让 jieba 分出你想要分出的词,特别适用于特定场景的中文分词任务。

然鹅,万事都有两面性,jieba 分词这么好用,也难免有缺陷:

第一大缺陷就是它占用内存太大了。

jieba 分词自带了一套默认的字典文件dict.txt,存放在xx/Lib/site-packages/jieba路径下,文件大小接近 5M。5M 看起来不大,但是当 jieba 将其读入并生成字典树时,占用的内存差不多就上涨到 150M。当然了,150M 我们也能忍受,但是当我们需要把 jieba 部署到真正的生产环境,可能会使用多个 jieba 对象,这个时候内存占用率就会成倍的增加。那么如何减小 jieba 内存的占用呢?

结巴瘦身

既然 jieba 占据内存多的原因是字典树太大,那我们把dict.txt文件瘦身一下不就好了?事实上,jieba 的作者也经常被吐槽说 jieba 内存占用率太高,所以他也在 github 上对此问题进行了反馈,并且上传了一份瘦身版的词典文件dict.txt.small,大小为 1.5M。作者将一些低频词删除,整体上几乎没有对分词产生影响。
需要注意的是,我们使用 small 版本的字典时,没必要将原字典文件删除,在创建 jieba 对象时,给它指定好文件路径就可以了,具体操作为:

from jieba import Tokenizer

small_jieba = Tokenizer(‘xx/dict.txt.small’) #不传入任何参数,就使用默认的大字典文件
small_jieba.lcut(‘我喜欢结巴分词!’) #使用list(small_jieba.lcut())是一样的,但是看起来不专业

之前有同学问过,为什么import jieba之后,jieba.cut()会报错。这大概率是版本问题,使用上面的代码形式就可以了。此外,jieba.cut()返回的是一个迭代器对象,list(jieba.cut())的效果等同于 jieba.lcut()。如果同学们觉得这个字典还是太大,那就自己手动创建一份更小的字典。

jieba 不能对包含符号的词切分?

有些包含符号的特殊词,比如中国银行(北京),即使你添加到自定义词典,并给予很大的权重,jieba 依旧是不能对其进行分词的,会得到[“中国银行”, “(”, ”北京”, “)”]。怎么办呢?改源码!
在 jieba 的__init__.py文件下,有一个名称为re_han_default的变量,是一个编译过的正则表达式。

re_han_default = re.compile(“([\\u4E00-\\u9FD5a-zA-Z0-9+#&\\._%]+)”, re.U)

学过正则的同学看到这行代码,就应该知道了,jieba 默认允许词中带有“#”,“&”,“.”,“_”和“%”,想让它支持更多符号,我们手动写进去就好了嘛。同样的,我们其实也不需要真的去改源码,只要在加载 jiaba 之后,动态对其进行修改即可。

import jieba
Jieba.re_han_default = re.compile(“([\\u4E00-\\u9FD5a-zA-Z0-9+#&\\._%()\\(\\)]+)”, re.U)

这样就把中文括号和英文括号都添加进去了,当再次遇到“中国银行(北京)”时,就能将其当作一个整体的词切出来了。jieba 的作者在 github 上说

  • “结巴”中文分词:做最好的 Python 中文分词组件

结巴在不断的版本更新和迭代上,逐渐优化了许多功能点,最近又增添了深度学习模式的切词。许多人也都在问,jieba 是否支持分句、命名实体识别。当前的版本是不支持的,但是相信不久的将来,如果这些需求很大,也不排除作者会添加这些功能的可能。

手把手带你用代码实现word2vec

keras 实现 word2vec 的 CBOW 模型

许多刚刚接触 NLP 的童鞋,难免用深度学习做一些 NLP 相关的任务,而且都不可避免会使用到词向量。最经典的词向量训练模型,应该就是连续词袋模型(continuous bag of words, CBOW)以及跳字模型(Skip-gram)。初学者想要学习 CBOW 和 skip-gram,首选会怎么做?阅读能力较强且英语较好的人,会选择先看论文,不爱看书的(比如小编我自己一看书就困)往往会上网搜索,CSDN、简书、包括知乎上都会有大神进行讲解。看完之后,我们一般会说:“哦~原来是这么回事。” 那我们把实现代码写一下吧。

我刚接触深度学习就是使用的 keras,个人感觉 keras 对新手确实十分友好,刚跳深度学习坑的人,可以尝试借助 keras 来进行学习。

上代码!

import os
import jieba
import random
import numpy as np
from keras.layers import Input, Embedding, Lambda
from keras.models import Model
import keras.backend as K
from collections import Counter

首先,设定好超参数:

word_size = 128 #词向量维度
window = 5 #窗口大小
nb_negative = 50 #随机负采样的样本数
min_count = 10 #频数少于min_count的词将会被抛弃,低频词类似于噪声,可以抛弃掉
nb_epoch = 2 #迭代次数

接下来是对语料进行处理,这里我们使用的是搜狗新闻的语料库。你从网上下载下来的搜狗新闻语料,其文件夹结构为

语料存放在多个文件夹下,每个.txt 中都是一条新闻语料,因此我们需要写一个方法能够遍历根目录下的所有文件夹。

def all_path(dirname):
    paths = []   #将所有的txt文件路径存放在这个list中
    for maindir, subdir, file_name_list in os.walk(dirname):
        for filename in file_name_list:
            apath = os.path.join(maindir, filename)#合并成一个完整路径
            paths.append(apath)

    return paths

在这里,我们编写一个 def 来将所有语料读取出来。本例中是以词为单位,因此用到了 jieba 分词。

def get_corpus(file_path):
    words = []     #词库,不去重
    corpus = []
    i = 0          #用来控制读入数据的条数
    for file in file_path:
        if '.txt' in file:
            i += 1
            try:
                with open(file, encoding='gbk') as fr:
                    for line in fr:
                        words+=jieba.lcut(line)     #jieba分词,将句子切分为一个个词,并添加到词库中
                        corpus.append(jieba.lcut(line))
            except:
                pass
        if i ==1000:   #当读入了1000条语料之后跳出
            break
    return words, corpus
paths = all_path('../../dbs/SogouC.reduced/Reduced')
words, corpus = get_corpus(paths)
words = dict(Counter(words))

这里使用 Counter 来帮助我们对词频进行了统计,并将其转换为字典形式。例如,若原来 words 中数据为['结巴','结巴','喜欢','我','我','我','我'],经过 Counter()的一顿操作之后,就得到了 Counter({'结巴': 2, '喜欢': 1, '我': 4})。再经过 dict()转换,就将其转换为字典形式。

total = sum(words.values()) #总词频
words = {i:j for i,j in words.items() if j >= min_count} #去掉低频词
id2word = {i+2:j for i,j in enumerate(words)} #id到词语的映射,习惯将0设置为PAD,1设置为UNK
id2word[0] = 'PAD'
id2word[1] = 'UNK'
word2id = {j:i for i,j in id2word.items()} #词语到id的映射
nb_word = len(id2word) #总词数

PAD 的作用通常是将一些句子进行补全。例如有些模型要求输入数据的长度固定,假设要求输入的词的个数为 5,不足 5 个词的句子怎么办呢?这个时候就用到 PAD 了。可以将 PAD 统一补在句子前,也可以统一补在句子后。例如“PAD” “PAD” “我” “喜欢” “C 罗”。

UNK 就是 unknown 的意思。当遇见一些未出现在词库 words 中的词,例如罕见词、人名以及预处理时删掉的低频词等,都可以用 UNK 来替换。学习过 CBOW 的童鞋都知道,CBOW 是用周围词去预测中心词。怎么预测呢?就比如给了一个训练语料“我/出生/在/中国/。”,当给定[“我”,“出生”,“中国”,“。”]时,此时我的训练目标就是要预测“在”这个词的概率要大于其它所有词(即语料库中所有除了“在”的所有词)的概率。但是词库中的词可能会有几十万个,这样训练下去想要收敛就会变得十分困难。因此提出 word2vec 的神人们就想出了一个取巧的方法:我给它要求降低一点,我不要求模型从几十万个词找到那个正确的中心词,我把这个要求降低一点,我只要求模型能从十几个词中找到正确的中心词就可以了。因此就用到了 negtive sampling。原论文中对如何进行负采样有一个概率计算公式,这里我们为了简便,我们使用 random 方法从词库中随机挑选 neg_num 个负样本。

def get_negtive_sample(x, word_range, neg_num):
    negs = []
    while True:
        rand = random.randrange(0, word_range)
        if rand not in negs and rand != x:
            negs.append(rand)
        if len(negs) == neg_num:
            return negs

现在开始构造训练数据!

def data_generator(): #训练数据生成器
    x,y = [],[]

    for sentence in corpus:
        sentence = [0]*window + [word2id[w] for w in sentence if w in word2id] + [0]*window
        #上面这句代码的意思是,因为我们是通过滑窗的方式来获取训练数据的,那么每一句语料的第一个词和最后一个词
        #如何出现在中心位置呢?答案就是给它padding一下,例如“我/喜欢/足球”,两边分别补窗口大小个pad,得到“pad pad 我 喜欢 足球 pad pad”
        #那么第一条训练数据的背景词就是['pad', 'pad','喜欢', '足球'],中心词就是'我'
        for i in range(window, len(sentence)-window):
            x.append(sentence[i-window: i]+sentence[i+1: window+i+1])
            y.append([sentence[i]]+get_negtive_sample(sentence[i], nb_word, nb_negative))

    x,y = np.array(x),np.array(y)
    z = np.zeros((len(x), nb_negative+1))
    z[:,0]=1
    return x,y,z

x 为背景词训练语料,y 为一个正确的中心词+nb_negative 个负样本,因为我们是将正确的中心词放在 y 的第一位,因此在构造 z 时,把标签 1 放在每条 label 数据的第一位。输出 z[0],可以看到是[1,0,0,...,0],其实大家可以实际操作一下,看看构造出来的 xyz 分别长什么样。

x,y,z = data_generator() #获取训练数据

下面是具体的网络结构代码。


#我这个小白看的是晕头转向,得琢磨半天。但是后来我也没有找到合适的方式来替换这个K,只能跟着用。
#第一个输入是周围词
input_words = Input(shape=(window*2,), dtype='int32')

#建立周围词的Embedding层
input_vecs = Embedding(nb_word, word_size, name='word2vec')(input_words)

#CBOW模型,直接将上下文词向量求和
input_vecs_sum = Lambda(lambda x: K.sum(x, axis=1))(input_vecs)

#第二个输入,中心词以及负样本词
samples = Input(shape=(nb_negative+1,), dtype='int32')

#同样的,中心词和负样本词也有一个Emebdding层,其shape为 (?, nb_word, word_size)
softmax_weights = Embedding(nb_word, word_size, name='W')(samples)
softmax_biases = Embedding(nb_word, 1, name='b')(samples)

#将加和得到的词向量与中心词和负样本的词向量分别进行点乘
#注意到使用了K.expand_dims,这是为了将input_vecs_sum的向量推展一维,才能和softmax_weights进行dot
input_vecs_sum_dot_ = Lambda(lambda x: K.batch_dot(x[0], K.expand_dims(x[1],2)))([softmax_weights,input_vecs_sum])

#然后再将input_vecs_sum_dot_与softmax_biases进行相加,相当于 y = wx+b中的b项
#这里又用到了K.reshape,在将向量加和之后,得到的shape是(?, nb_negative+1, 1),需要将其转换为(?, nb_negative+1),才能进行softmax计算nb_negative+1个概率值
add_biases = Lambda(lambda x: K.reshape(x[0]+x[1], shape=(-1, nb_negative+1)))([input_vecs_sum_dot_,softmax_biases])

#这里用了K.softmax,而不是dense(nb_negative+1, activate='softmax')
#这是为什么呢?因为dense是先将上一层的张量先进行全联接,再使用softmax,而向下面这样使用K.softmax,就没有了全联接的过程。
#实验下来,小编尝试使用dense(activate='softmax')训练出来的效果很差。
softmax = Lambda(lambda x: K.softmax(x))(add_biases)

#编译模型
model = Model(inputs=[input_words,samples], outputs=softmax)
#使用categorical_crossentropy多分类交叉熵作损失函数
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.summary()

训练

model.fit([x,y],z, epochs=nb_epoch, batch_size=512)

这里我们没有切分训练集和测试集,小伙伴们可以自己尝试切分验证集。那么如何验证训练的词向量质量好坏呢?我们可以通过计算词语相似度进行验证。

model.save_weights('word2vec.model')

#embedding层的权重永远在模型的第一层
embeddings = model.get_weights()[0]

def most_similar(w):
    v = embeddings[word2id[w]]
    sims = np.dot(embeddings, v)
    sort = sims.argsort()[::-1]
    sort = sort[sort > 0]
    return [(id2word[i],sims[i]) for i in sort[:10]]
import pandas as pd
pd.Series(most_similar(u'科学'))

结果为

0     (科学, 13.68143)
1     (灿坤, 5.599081)
2    (知情权, 5.578944)
3    (创新, 5.0190754)
4     (在外, 4.942095)
5      (深度, 4.86686)
6    (获取, 4.6781273)
7      (精神, 4.55865)
8     (为例, 4.535615)
9      (筹资, 4.51618)
dtype: object
pd.Series(most_similar(u'女'))
0      (女, 20.131395)
1       (男, 8.825096)
2    (联系电话, 8.602478)
3     (010, 8.465874)
4      (00, 8.302881)
5     (131, 7.862992)
6     (梭织, 7.7005587)
7       (代码, 7.60074)
8     (网址, 7.4306855)
9     (&#, 7.0047092)
dtype: object

显然不是用 for 循环逐个计算的,矩阵乘法对于人来说很复杂,但是对计算机来说就很简单了,通过让 embeding 矩阵与目标词向量进行点乘得到相似值,然后使用 numpy 的内置函数 argsort 进行排序,从而得到索引,这样就可以得到与词相似度有高到低的一个排序。大神还是大神,之前小编搜索过类似的问题,但就是怎么也找不到

手把手带你实现word2vec(skip-gram)

keras 实现 word2vec 的 skip-gram 模型

上面是CBOW模型的代码,如果需要Skip-Gram,请自行修改,Keras代码这么简单,改起来也容易。

看了几个其它框架实现的模型,其与CBOW的差异主要是在于训练数据的构建。

我们都知道,CBOW模型是用周围词去预测中心词。例如对于一句话“我 喜欢 学习 NLP !”,CBOW就是要用“我”,“喜欢”,“NLP”,“!”去预测“学习”这个词。我们在构造训练数据的时候,要去再构造几个负样本,这样模型的训练目标就是从“学习”和几个负样本词中,使预测“学习”的概率最大化。这个套路很简单,也很make sense。

而skip-gram的做法,是用“学习”去预测“我”,“喜欢”,“NLP”,“!”这四个词。我看网上的代码在构建训练数据的时候,是分别给“我”,“喜欢”,“NLP”,“!”构造负样本,这样一句话就构造了四条训练数据。什么意思呢?就是说,输入“学习”,要从“我”、负样本1、负样本2...中,使模型预测“我”的概率最大化;输入“学习”,我要从“喜欢”、负样本1、负样本2...中,使模型预测“喜欢”的概率最大化,......,这样训练四次。

我就觉得这比较扯淡了啊,感觉把“我”,“喜欢”,“学习”,“NLP”,“!”这五个词的相关性硬生生给拆开了。因此小编对数据集的构造也进行了适当的修改。

这里我们只把和CBOW模型代码不一样的地方写出来。首先是负样本的采集。

def get_negtive_sample(x, word_range, neg_num):
    negs = []
    while True:
        rand = random.randrange(0, word_range)
        if rand not in negs and rand not in x:
            negs.append(rand)
        if len(negs) == neg_num:
            return negs

构造训练数据!

def data_generator(): #训练数据生成器
    x,y = [],[]

    for sentence in corpus:
        sentence = [0]*window + [word2id[w] for w in sentence if w in word2id] + [0]*window
        #上面这句代码的意思是,因为我们是通过滑窗的方式来获取训练数据的,那么每一句语料的第一个词和最后一个词
        #如何出现在中心位置呢?答案就是给它padding一下,例如“我/喜欢/足球”,两边分别补窗口大小个pad,得到“pad pad 我 喜欢 足球 pad pad”
        #那么第一条训练数据的背景词就是['pad', 'pad','喜欢', '足球'],中心词就是'我'
        for i in range(window, len(sentence)-window):
            y.append([sentence[i]])
            surrounding = sentence[i-window: i]+sentence[i+1: window+i+1]+ge
            y.append(surrounding+get_negtive_sample(surrounding, nb_word, nb_negative))    x,y = np.array(x),np.array(y)
    z = np.zeros((len(x), nb_negative+len(surrounding)))
    z[:,:len(surrounding)]=1
    return x,y,z

x 为中心词训练语料,y 是周围词+nb_negative 个负样本,因为我们是将正确的周围词放在 y 的最前面,因此在构造 z 时,把标签 1 放在每条 label 数据的前len(surrounding)位。输出 z[0],可以看到是[1,1,1,...,0]。

x,y,z = data_generator() #获取训练数据
#第一个输入是周围词
input_words = Input(shape=(1,), dtype='int32')
#建立中心词的Embedding层
input_vecs = Embedding(nb_word, word_size, name='word2vec')(input_words)
#第二个输入,背景词以及负样本词
samples = Input(shape=(nb_negative+len(surrounding),), dtype='int32')
#同样的,中心词和负样本词也有一个Emebdding层,其shape为 (?, nb_word, word_size)
weights = Embedding(nb_word, word_size, name='W')(samples)
biases = Embedding(nb_word, 1, name='b')(samples)
#将中心词向量与周围词和负样本的词向量分别进行点乘
#注意到使用了K.expand_dims,这是为了将input_vecs_sum的向量推展一维,才能和weights进行dot
input_vecs_dot_ = Lambda(lambda x: K.batch_dot(x[0], K.expand_dims(x[1],2)))([weights,input_vecs])

#然后再将input_vecs_dot_与biases进行相加,相当于 y = wx+b中的b项
add_biases = Lambda(lambda x: K.reshape(x[0]+x[1], shape=(-1, nb_negative+1)))([input_vecs_dot_,biases])

#这里用了K.sigmoid
sigmoid = Lambda(lambda x: K.sigmoid(x))(add_biases)

#编译模型
model = Model(inputs=[input_words,samples], outputs=sigmoid)
#使用binary_crossentropy二分类交叉熵作损失函数
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.summary()

上面代码的大概意思就是说,输入一个中心词,要从一群正确的周围词和负样本中,去使模型预测这些周围词的概率最大化,因此模型的输出是一个multi-hot向量(因为预测结果有多个正确的周围词),这里就不能再使用softmax去计算概率,而应该用sigmoid去分别计算每一个周围词的概率。这是skip-gram与CBOW模型上最显著的不同。

同时,小编这里将周围词一起预测,感觉上没有切分这些词之间的相关性,治疗了我个人的强迫症。

model.fit([x,y],z, epochs=nb_epoch, batch_size=512)
 

整个代码就写好了,大家可以实际测试一下训练出来的词向量的效果。个人感觉skip-gram的训练时长要大于CBOW。

做 NLP 任务文本 id 化与预训练词向量初始化方法

许多新入门 NLP 的小伙伴开始做 NLP 相关任务的时候,还没到模型构建阶段,就已经被数据预处理给“劝退”了。

这其实是在把字或词转换为计算机可计算的数值型数据时,姿势不对。我们都知道,最简单的方式,就是将词处理成 one-hot 的形式。

举个栗子:

假如我们的语料库总共只有 10 个词,那么每个词经过转换之后,都会变成一个 10 维的稀疏向量。

例如,将分好词的文本“我 喜欢 学习”进行 one-hot 处理之后,会得到形如

 

[
[0,1,0,0,0,0,0,0,0,0], #表示“我”
[0,0,1,0,0,0,0,0,0,0], #表示“喜欢”
[0,0,0,0,0,0,0,1,0,0] #表示“学习”
]

用 one-hot 来表示词的弊端在这里就不介绍了,想必大家从各种科普文章中都有所了解。

怎么解决这种稀疏问题呢?这就用到了词向量了。词向量可以自己训练,也可以从网上直接下载训练好的词向量。通常,那些开源的词向量由于是在更大规模语料集上进行训练的,泛化能力要比自己训练的词向量质量要好很多(就算我们有那么多的数据集,我们也没有计算资源去训练)。

那些训练好的词向量我们需要使用 gensim 来导入。首先我们先看一看词向量文件长啥样。

 

999994 300
时间 -0.192653 -0.027064 0.157989 -0.959652 -0.249349 -0.695960 -0.290393 -0.320663 0.850561 1.123161 -0.820032 -0.031310 -0.220525 0.391944 0.363133 0.433053 0.133621 0.590930 -1.096903 -0.346236 0.211173 1.074069 1.840458 -0.619614 -0.047013 -0.482248 -0.980474 -0.052697 -0.764487 -1.042479 0.310801 1.027933 -0.703576 -0.121927 0.096973 -0.389311 0.467025 0.532758 -0.626837 0.689972 0.020686 0.654299 -0.463879 0.430281 -0.206859 -0.253277 -0.091177 -0.616631 0.082589 -0.110885 0.858724 1.039171 -0.215845 0.597427 -0.564434 1.393491 -0.340165 0.079653 -0.093698 0.238416 0.800182 0.019553 -0.275385 0.314701 0.126838 -0.891766 -0.598391 -0.339991 0.278942 0.150008 0.169043 -0.106491 0.129413 0.154625 -1.077015 0.636639 0.760766 0.291428 -0.304663 -0.709912 0.578007 0.400317 0.498921 0.299688 -1.924125 -0.233359 -0.593315 -0.064116 0.141521 0.708793 0.896055 -0.439493 0.040833 0.089314 -0.004766 0.501943 0.239141 -0.368876 0.016068 -0.074727 -0.526003 -0.683604 1.052587 -0.511065 -1.180889 -0.136742 -0.571856 0.072116 -0.220324 -0.180080 0.959551 0.180546 0.292177 0.048728 -0.535014 0.014530 0.631147 -0.088323 0.668570 -0.310500 0.363473 -0.564667 0.857510 -0.148112 0.238181 0.135603 -0.073686 0.755832 0.572558 0.281101 0.297423 -0.748391 -0.020244 -0.557294 -0.441473 0.106799 -0.297012 0.233237 0.218440 -0.034616 0.410545 -0.245199 0.695645 0.192339 -1.024643 -0.628238 0.357365 0.426126 0.290365 -0.421078 -0.207671 -0.393413 0.527472 -0.465794 0.134838 -0.118478 -0.358524 0.733155 0.181742 -0.357532 -0.425675 0.262033 0.192739 0.320736 -0.073291 -0.603243 -0.214388 0.251359 -0.157907 0.639871 -0.322949 0.153679 0.128943 -0.079536 -1.243106 0.405427 -0.679834 0.706061 -0.556909 0.317398 -0.972522 -0.323571 0.082381 0.952649 0.470793 -0.255887 -0.072567 0.154703 0.553813 0.444109 -0.955931 -0.506380 -0.185121 0.436316 -0.166778 -0.070471 0.134493 -0.041048 0.371387 -0.466888 -0.322176 -0.139643 -0.469103 -0.297749 -0.341331 -0.182869 -1.138910 -0.840458 -1.005790 -1.030163 0.435325 -0.218241 -1.017183 -0.249351 0.060505 0.819773 -1.382254 -0.520934 -0.643470 0.369318 0.390774 -0.547370 -0.003034 -0.119246 0.397086 -0.720554 -0.267369 -0.626506 0.650304 0.491474 0.097891 0.035371 0.471716 0.680434 -0.168340 -0.088465 0.200047 -0.021552 -0.849985 0.090245 1.103723 0.242453 -0.830361 -0.132980 0.391840 -0.074169 -0.254151 0.175168 -0.482801 0.787707 1.463750 -0.666707 -0.324269 0.170228 -0.455849 -0.454797 0.485042 0.906702 -0.069496 -0.017353 0.824049 0.567829 -0.075913 -0.094140 -0.010110 -0.428374 0.830554 -0.249833 0.168137 0.541595 -1.243334 0.625043 -0.149822 0.004912 -0.021771 -0.491535 0.503651 -0.315409 0.031236 0.328521 -0.264316 -0.191875 0.681480 -0.782049 0.641517 0.380847 0.347847 0.043671 0.636368 -0.315160 -0.576198 -0.348432 0.281816 -0.623102 -0.564527 0.902504 0.016528 -0.069687 -0.144267 0.006254
月 0.282719 0.152989 0.277989 -0.409890 -0.100124 -0.562012 0.054540 -0.302864 0.340999 0.332058 -0.036765 -0.328907 -0.370917 0.120894 -0.257750 -0.695093 0.201110 -0.020349 -0.200095 0.133917 0.161953 1.409806 0.930571 0.444746 -0.639931 0.444198 -0.495933 0.229397 -0.739602 -1.055825 -0.318828 1.522916 0.004156 0.343912 0.006537 0.388347 0.600495 0.239206 -0.028486 0.552802 -0.278926 0.373066 -0.426863 0.489640 -0.323016 -0.080631 -1.074515 -0.507549 0.665036 0.391942 1.328556 1.073624 -0.177601 -0.018996 0.348987 0.525943 0.005171 -0.306071 -0.512433 -0.289054 0.337168 -0.289363 -0.288751 -0.316822 -0.342586 0.074602 -0.808880 0.993347 -0.027332 0.564592 -0.264008 0.547095 0.713716 0.306165 -0.489996 0.403748 -0.368705 -0.457879 0.797570 -0.495398 0.355519 1.163623 0.563982 -0.054508 -0.902991 -0.064551 -0.314185 -0.710030 -0.444326 -0.638333 0.392305 -0.397702 -0.002391 -0.020851 0.107497 0.182052 0.570882 -0.650250 0.326903 -0.717934 0.280774 -0.278874 0.623692 -0.195263 -0.542201 -0.003978 0.787480 0.940788 0.495447 0.390056 0.547322 -0.223878 -0.775611 0.423554 0.227717 0.880800 0.295964 0.302781 0.979723 -0.007546 -0.030809 -0.124463 1.068195 -0.250004 -0.743149 0.287037 -0.627813 0.902924 -0.019548 -0.008901 0.716885 -0.080450 -0.078079 -0.380885 0.595999 -0.006114 0.456368 0.310282 -0.593804 -0.097739 -0.533996 0.129195 -0.206451 0.854950 -0.736590 -0.373819 -0.171245 0.822648 0.022098 -0.041053 0.133135 -0.221786 -0.370930 -0.073366 -0.076312 -0.141111 0.754814 0.311759 -0.487563 0.148415 -0.327943 1.227186 1.104577 0.584394 0.866440 -0.155514 0.571861 0.225291 -0.596585 0.341632 -0.075625 0.459881 0.492822 -0.856172 -0.467885 1.009984 -0.509890 -0.289279 0.198226 0.779081 -0.505615 0.262267 -0.692102 -0.631975 0.688475 -0.343992 0.473175 0.662025 0.846393 -0.026749 -0.032720 -0.642198 -0.022452 -0.492827 0.074650 -0.200605 0.142318 -0.030474 -0.021498 -0.059870 -0.558756 -0.568076 -0.125238 0.087478 -0.520128 -0.406735 -0.211258 -0.481394 -0.664873 -0.277975 0.412186 0.010863 -0.240466 -0.070284 0.405342 0.066035 -1.461064 -1.013241 -0.072386 0.634662 0.716899 -0.185302 -0.030074 -0.113286 0.790407 -0.334036 0.145996 0.457602 0.061558 0.303261 0.445127 0.128329 0.371765 0.705406 -0.924010 0.312624 -0.264194 0.308366 0.098177 0.532446 -0.651350 0.452719 -0.764295 -0.191709 0.274529 -0.663116 -0.442445 -0.332471 -0.566812 0.441788 0.991128 0.062422 0.332908 0.114607 -0.790051 0.140813 -0.078728 0.221595 -0.313071 0.172639 0.681872 0.530355 -0.548417 0.459590 -0.557620 -0.267441 0.221526 -0.000649 0.288101 0.463587 -0.214246 0.953989 -0.281264 0.129526 -0.206172 -0.171313 -0.152700 0.777293 -0.521110 0.491064 0.467925 0.892538 -0.254171 -0.500852 0.145604 -0.039736 -0.016100 0.545795 -0.154586 0.515680 0.105515 -0.214572 -0.341872 0.009775 0.009587 1.174931 -0.101082 0.310132 -0.541959 -0.693216
元 0.306025 0.322643 1.077880 -0.600908 0.172935 -0.737794 0.255050 -0.157029 0.342953 -0.706849 -0.381400 0.061180 -0.953065 -0.095882 -0.368000 0.420154 0.951357 0.767554 -0.143634 -0.126899 0.307859 -0.300399 1.556839 0.364413 0.250135 -0.566936 -0.995738 -0.113883 -1.406691 -1.014822 -0.687600 1.741928 -0.615409 -0.387166 0.027234 1.281103 0.351747 -0.227581 -0.232469 0.271432 -0.415515 0.631718 -0.894145 0.733428 -1.230473 0.682133 0.075777 0.649245 0.289526 -0.467158 0.919363 0.351625 0.222911 0.504691 -0.181684 -0.378320 -0.687206 0.148117 0.729295 -0.105381 0.695989 -0.754219 -0.440530 0.118117 -0.883886 0.492664 0.079025 1.197542 -0.610626 0.157875 -0.443919 0.746728 1.468872 -0.575745 -0.470869 0.846473 -0.617876 -0.127038 0.003786 -0.001282 0.176192 0.778630 -0.308934 -0.249084 -0.301070 -0.087675 0.103930 -0.340054 0.051219 0.025974 0.446019 -0.389392 0.933938 0.164278 0.435473 0.114423 0.302819 -0.724311 -0.338384 -0.036844 0.040301 -0.075052 0.496395 0.007586 -0.240168 -0.644824 -0.383305 -0.000070 -0.135047 -0.441491 -0.397919 -0.251733 0.320516 -0.316922 -0.176393 0.178300 0.372434 0.236957 -0.165925 0.870158 -0.275455 -0.283281 0.730676 0.013333 0.467073 -0.715855 1.007568 0.391907 -0.500897 1.030966 0.698415 0.478425 -0.691962 0.789402 0.111583 0.636666 -0.887124 -0.272008 -0.584863 -0.175891 0.452481 0.355332 0.007005 0.805152 -0.325006 -0.249743 0.031626 0.073259 -0.453138 0.277470 -0.478755 0.575895 0.355874 0.035219 0.079009 0.054281 0.201341 -0.105456 0.624423 0.419490 0.422743 0.886797 0.058878 0.218280 0.783062 -0.278714 0.244279 0.244416 -0.558108 -0.538741 -0.626169 0.796777 0.313345 -0.594111 -0.612010 0.543808 0.326743 -0.068215 -0.284259 0.111663 -1.129291 0.464670 0.355996 0.317091 0.101179 -0.515349 -0.268207 1.036510 0.211519 0.545480 -0.140292 -0.338422 0.350183 0.160976 -0.810460 -0.581156 -0.083485 0.175628 -0.395788 -0.154374 1.656540 -0.149448 -0.250864 0.027195 -0.000960 0.097104 -0.385608 0.388430 -0.219321 0.263330 -0.339932 0.169096 -1.619655 -0.260263 0.345896 0.407777 -1.409953 -0.595680 -0.820713 -0.197955 0.132537 0.609146 0.432836 -0.071146 0.582325 -0.670098 0.034255 -0.291316 0.500515 1.061890 0.178922 -0.471838 -0.328243 -0.209035 -0.135114 -0.890339 -0.736016 -0.594963 -0.932622 -0.414669 0.308166 -0.405150 0.466669 0.111795 0.032414 -0.055596 -0.688865 -0.334978 -0.041121 0.252767 0.603890 0.051988 0.886804 -0.175748 0.236281 0.094143 0.452659 0.917740 0.303790 -0.453451 0.630142 -0.170290 -0.083950 0.310024 -0.560198 -0.581944 0.530984 -0.194871 -0.052266 0.184277 -0.055074 -0.165853 -0.889973 -0.130048 0.556185 0.093815 0.077349 0.786506 0.017906 -0.209109 -0.610210 0.882594 0.242138 0.931476 -0.261045 -0.497909 0.045525 -0.391315 -0.737701 0.693279 0.625252 0.169180 -1.320762 0.212941 0.034001 1.308421 0.299258 0.197882 -0.742295 -0.070419
1 0.888034 -0.269472 0.416726 -0.396031 0.035506 -0.622379 -0.440201 -0.753203 0.398985 0.105516 0.040577 0.550698 -1.196764 0.480859 -0.343003 -0.207138 0.024000 0.383471 -0.265794 0.036858 -0.098424 -0.568933 0.755142 -0.054576 -0.848028 -0.005950 -0.107111 -1.310041 -0.301031 -0.132762 -0.114449 1.529382 0.480697 -0.317541 0.098669 0.736248 0.507810 0.586016 0.222051 -0.894592 -0.685444 0.937100 -0.727683 0.896437 0.331013 -0.252685 -0.648829 0.198743 0.434566 -1.018625 0.604905 0.406292 -0.378488 -0.145570 0.143134 0.145109 0.082009 -0.334453 -0.308911 -0.548263 -0.306763 -0.239198 -0.025372 -1.286177 -0.418609 -0.941808 0.073460 0.799592 -0.180774 0.470524 -0.339510 0.074398 1.134824 -0.534680 -0.852488 0.674400 -0.772466 0.522004 0.311741 0.318874 0.701483 0.355505 0.916747 -0.391279 -0.043185 -0.035573 0.124245 -0.511008 -0.028164 0.396926 0.310719 -0.058037 0.415305 -0.124527 0.795043 -0.048217 -0.204688 -0.545567 -0.332399 0.533343 -0.196562 -0.587495 0.613407 0.339769 -1.312807 -0.425666 0.550779 -0.078751 0.106345 -0.597031 0.303927 0.367110 -0.479566 -0.280796 -0.077603 0.089361 0.057174 0.680617 -0.232158 -0.380329 -0.353017 0.261309 0.214358 -0.436605 0.726974 0.686759 -0.190239 0.569367 -0.357779 0.217572 0.577694 -0.200133 0.319214 -0.238840 0.142662 0.019461 -0.504774 -0.493205 0.434241 -0.077088 0.492905 0.143735 -0.385636 0.110834 -0.760336 -1.083028 0.465417 0.823979 -0.218171 0.331168 -0.171310 -0.281734 0.110895 0.805839 0.391114 -0.155342 0.366512 -0.215544 0.573037 0.302591 -0.715427 1.287327 -0.233937 1.247682 0.546919 -0.104151 0.185894 0.783857 -0.716013 0.745546 -0.484780 -0.330844 0.012054 -0.701770 -0.930120 0.304442 -0.101639 0.141293 0.213534 1.119318 -0.159903 0.034759 -0.237266 -0.027194 1.521587 0.373965 -0.609322 1.010848 0.325201 -0.254094 -1.082284 0.966625 0.455843 -0.249176 -1.112331 -0.351975 0.052057 -0.396617 0.975547 -0.350484 -0.519251 -0.116380 0.263111 -0.679581 -0.509177 -0.611612 -1.014958 -1.130154 -0.559550 -0.558102 0.844820 -0.233135 -1.107969 -0.443999 0.112733 -0.204075 -0.698707 -1.276953 0.029345 0.273015 0.776428 0.283971 1.089718 -0.201296 -0.199805 -0.994360 0.001024 0.000260 0.042881 0.442563 -0.074997 -0.225658 -0.127922 -0.043150 -0.446940 0.630705 0.122018 0.889063 -1.137543 0.602873 -0.074088 0.591213 -0.055548 -0.744662 -0.415526 0.587157 -0.649435 -0.512667 -0.191861 0.295901 1.263322 -0.303088 0.406485 0.562705 -0.070011 0.483705 -0.296791 -0.003154 0.232777 -0.667530 0.346206 -0.297299 -0.304221 -0.251610 -0.225808 -1.008746 1.032771 -0.805736 0.350475 0.072382 1.180248 0.153301 -0.149750 -0.278651 -0.837156 -0.453207 0.156093 -0.189694 -0.123239 -0.640496 0.453016 -0.009482 -0.390708 -0.866602 0.362385 -0.031449 0.210468 0.231915 -0.285665 0.196669 0.176305 0.104762 -0.411070 -0.084570 -0.912936 0.740259 1.085935 0.331030 -0.355904 -0.241756
会议 1.771033 0.176118 0.379083 -1.038539 -0.159619 -0.810625 -0.211994 0.767950 0.113235 0.995838 0.142457 0.287684 -0.035386 0.464643 -0.773942 -0.403471 0.569797 0.253740 0.426339 0.071171 -0.311686 0.865899 0.530907 -0.161541 -0.488560 -0.129126 -0.448615 -0.926315 -0.088304 -0.902380 -0.259576 0.434504 -0.757882 -1.191447 0.162485 0.108723 0.197529 0.581506 -1.198933 0.218464 0.503901 1.417884 -0.579565 0.713137 -0.258934 -0.476144 -0.548408 -0.012146 0.578107 0.107231 1.058120 0.882515 0.756237 -0.384693 0.165540 0.411003 0.348020 -0.023861 -0.259647 0.186697 0.023265 0.225137 -0.692051 -0.037526 0.435802 -0.293929 -1.062105 -0.157920 0.217099 -0.734419 -0.667745 -0.096092 0.113397 -0.059034 0.295290 0.334193 -0.308422 -0.613945 0.205872 -0.658714 0.406285 0.736497 -0.066900 -0.202817 -0.440141 0.164648 -0.142157 -0.441622 -0.122423 0.034315 0.195609 0.276887 1.015851 0.545567 -0.872668 -0.008203 -0.217614 -0.203448 -0.353687 0.261102 0.208269 -0.262863 0.746820 -0.594605 -1.031103 0.288283 0.015618 0.884347 -0.138220 0.333664 0.230371 0.605099 0.317958 0.915120 -0.128864 0.209937 0.466525 0.142983 0.987952 -0.338007 -0.503637 -1.041105 0.585695 0.133922 -0.283604 -0.389145 -0.513809 0.927723 0.178702 -0.179315 0.077576 -0.665182 -0.031870 0.141394 0.240645 0.393327 -0.711886 0.200745 -0.061365 -1.052649 0.527113 -0.460608 0.246856 -0.320261 -0.142330 -0.609020 0.796626 0.201946 -0.246875 0.225949 0.785565 -0.603375 0.355625 -0.179703 -0.322463 0.631364 -0.112776 0.125427 -1.077946 -0.163022 0.206300 -0.000588 -0.276898 -0.698788 0.289042 -0.117832 -0.423394 0.628158 -0.965626 0.353545 0.179244 -0.491377 0.257370 0.089590 -0.951331 -0.250147 -0.444209 0.185769 -0.132900 -0.006498 0.112555 -0.392332 -0.012566 -0.171049 0.412430 -0.784530 0.597930 0.654582 0.305766 -0.196717 -0.108986 -0.882588 0.133782 0.114576 -0.491082 0.697926 0.155321 0.534372 0.424671 0.057960 -0.566005 -0.098149 0.216918 -0.223675 0.078227 0.377749 -1.097760 -0.621768 -0.174247 -0.364606 1.090865 -0.314739 -1.034864 -0.132283 -0.111963 0.465461 -0.824262 -0.782546 0.374973 -0.286167 0.011139 -0.383112 0.354855 -0.439314 0.381809 -0.474764 0.159545 -1.221441 0.666809 -0.709793 0.239210 -0.138918 0.590115 0.215989 0.275636 0.433601 -0.156793 -0.382559 -1.424089 -0.417850 -0.116381 -0.344665 0.489679 0.626358 0.052841 0.577256 0.230637 -0.600817 -0.635985 1.089865 0.722713 0.494734 -0.428877 0.334609 -0.017065 0.336209 0.419211 1.363705 0.044493 0.188291 0.569913 -0.441831 0.071900 0.495701 -1.016109 0.061804 -0.363644 -0.767242 0.558061 0.567890 -0.662831 0.129088 -0.273309 -0.404180 -0.102150 -0.352034 0.208647 -0.281785 -0.134028 0.287623 -0.592395 -0.741625 -0.765389 -0.062867 1.148501 -0.574797 0.111045 -0.296249 0.241325 -0.732370 0.038897 -0.928541 0.283815 -0.379969 -1.189722 0.377329 0.206329 -0.463671 -0.644053 -0.356224
日 0.629690 0.297326 0.232061 0.184713 0.456603 -1.360426 -0.161957 -0.327643 0.379252 0.329272 -0.132093 -0.592853 0.369421 1.037765 0.194027 -0.582120 -0.030273 -0.433952 -0.491450 0.534424 0.298695 0.749407 0.961532 -0.013265 -0.160156 0.327203 0.178737 0.260298 0.023090 -0.661755 -0.069589 1.252100 0.274427 0.240321 0.676330 0.472751 0.397922 0.450867 -0.418843 0.434151 -0.318744 0.347155 -0.379078 -0.420713 -1.057411 0.168308 -0.487032 -0.069009 0.791306 0.176923 0.595739 0.527158 -0.328227 -0.121685 0.394574 0.216304 -0.410889 -0.465544 -0.511710 -0.106813 0.241581 -0.421071 -0.769960 0.508721 -0.518993 -0.582130 -0.122278 1.356947 -0.472147 0.219176 -0.637373 -0.379232 0.783050 -0.213542 -0.539033 0.326720 -0.806085 -0.636173 0.789530 -0.457049 0.013086 0.821359 0.303692 0.398572 -0.555042 -0.129366 -0.750004 -0.814094 -0.069134 -0.530091 0.515363 -0.586577 0.416111 -0.013937 -0.207776 0.584663 -0.013731 0.084024 -0.081933 -0.352394 0.082810 -0.485991 1.068765 -0.357893 -0.397341 -0.211468 0.420876 0.739444 0.097145 -0.032144 0.608081 0.445486 -0.453803 0.010084 0.063489 0.685313 0.311570 0.270301 0.373394 -0.579335 0.392215 -0.846188 1.196801 -0.524513 -1.024028 0.281200 -0.396088 0.811682 0.015575 0.444197 1.280806 -0.460657 -0.160046 -0.448320 0.348771 0.186178 -0.179169 -0.506007 -0.467586 0.232892 -0.132603 0.303326 0.532450 0.307448 -0.503961 -0.096622 -0.799405 0.108548 0.766091 -0.692119 -0.166302 -0.499754 -0.297644 -0.890542 -0.026685 -0.066082 0.513476 -0.234157 0.065489 0.236738 -0.698255 1.164697 0.689472 1.031871 0.946376 -0.528323 0.608606 -0.244125 -0.698136 0.663297 -0.315753 -0.024955 0.280253 -0.422331 -0.580495 0.018098 -0.057022 -0.306539 -0.084533 0.808313 -0.383531 0.320171 -0.399376 -0.477695 0.049535 -0.240776 0.169495 1.111698 0.712204 -0.209212 -0.668397 -0.478881 1.045714 -1.103660 0.234638 -0.466507 -0.287628 -0.133884 -0.486556 -0.456381 -0.277966 -0.006142 -0.013448 -0.202422 0.082728 -0.331743 -0.455172 -0.096092 -0.726063 -0.445307 0.451012 -0.380199 -0.300324 -0.068178 0.028520 0.143256 -0.972176 -1.223306 -0.187028 0.516180 -0.013776 -0.332469 -0.086373 -0.002370 0.777023 -0.041362 0.118836 -0.213045 0.513897 0.059171 0.371966 0.248342 -0.023563 0.700690 -0.921861 -0.051847 -0.109556 0.310796 -0.321488 0.309024 -0.368767 0.219925 -0.691066 -0.023356 0.030746 -0.452083 0.313607 -0.559715 -0.557504 0.528424 0.607529 -0.136493 0.152444 0.168481 -0.786771 0.006343 0.041056 0.642219 -0.609352 0.189559 0.682013 -0.063358 -0.391703 0.779091 -0.527853 0.707578 0.406660 0.103047 0.234198 0.038635 0.302829 1.064635 0.117944 -0.125693 -0.097658 -0.065264 0.228236 0.545942 0.338116 0.127504 0.171728 0.730071 -0.496038 0.158599 0.477939 0.339338 0.073317 0.780151 -0.409706 -0.080721 0.052942 0.037625 -0.642805 -0.008267 0.050677 1.016556 0.096010 0.497020 0.160714 -0.086144
12 0.060987 0.220731 -0.132685 -0.820905 -0.146994 -0.353599 -0.018432 -0.725461 0.737936 -0.019994 -0.154258 -0.419405 -0.338631 -0.291629 -0.022446 -0.251117 0.267038 0.434467 0.078770 -0.025413 0.500651 0.854019 0.395952 -0.051031 -0.435698 0.237282 -0.583161 0.168157 -0.601435 -1.348934 -0.164784 1.616810 -0.478824 -0.017075 -0.366454 0.365084 0.612911 0.161186 0.276902 0.375643 -0.112530 0.241358 -0.396695 -0.194163 -0.237141 0.697846 -0.526700 -0.531520 0.772570 -0.322104 1.315113 0.933782 -0.300440 0.198085 0.157843 0.812475 0.187118 -0.254738 0.139663 -0.073107 0.528683 -0.647160 -0.423146 0.006624 -0.894147 -0.726237 -0.881079 0.825501 0.080627 -0.561961 -0.475129 0.047358 0.167624 0.359150 -0.428893 -0.098055 -0.787332 -0.403023 0.472614 -0.063268 0.086656 0.310264 0.610745 -0.221438 -0.421589 0.778696 0.256653 -0.560248 -0.649633 -0.102870 0.586092 0.003949 0.076587 -0.567913 0.704371 0.364411 0.761299 -0.051966 0.385057 -0.367773 0.355770 -0.647424 0.923446 -0.051832 -0.543764 0.588581 0.554076 0.719280 0.339640 0.226296 0.472695 0.397156 -0.489635 0.773813 -0.117013 0.493147 0.093860 0.815739 0.779326 0.310038 -0.783332 -0.620891 0.599204 0.011149 -0.107909 0.348672 -0.498058 0.057396 -0.031033 0.168456 0.991581 -0.478983 -0.781825 -0.271430 0.955011 -0.478941 0.302897 -0.093343 -1.225087 0.255701 -0.017678 -0.452325 0.377625 0.635914 -1.060914 -0.345057 -0.322616 0.805557 0.755067 0.543725 0.030418 -0.496267 -0.373508 -0.095644 -0.015342 0.230422 0.639305 0.210231 0.053320 0.272379 0.220056 0.767136 0.343294 0.690162 1.038597 -0.527260 0.498455 0.133132 -0.857316 -0.088142 -0.121594 0.524317 0.324666 -0.600952 -0.612691 1.126837 -0.052147 -0.754994 -0.371588 0.592034 -0.199333 -0.271918 -0.781767 -0.777349 0.545457 -0.369653 0.403855 0.507788 0.341316 0.256601 -0.652804 -0.737112 -0.248066 -0.641719 0.033328 -0.249865 0.328787 0.311992 -0.004281 0.216633 -0.081194 -0.126300 -0.272642 -0.001156 -0.393779 -0.830402 0.065871 -0.295060 -0.708441 -0.639450 -0.084257 0.074900 -0.591158 -0.031511 0.261493 -0.149527 -1.486934 -0.835603 -0.202950 0.765206 0.159304 -0.304259 0.363361 -0.466972 1.143983 -0.557980 -0.238127 -0.099868 0.267013 0.080638 0.565594 -0.164587 0.111982 0.391523 -0.656658 0.514244 -0.385658 -0.082066 -0.306449 0.810565 -0.694959 -0.296500 0.137355 -0.246647 0.456403 -0.376321 0.404851 -0.319968 -0.270184 0.835729 0.550599 0.198025 1.204497 -0.237713 -0.441482 -0.020244 0.109327 -0.164325 -0.587616 0.205860 0.452751 0.599642 -0.033190 0.569953 0.012436 -0.112856 0.127171 -0.183683 0.785418 0.581380 -0.613472 0.544212 0.165229 0.089152 -0.788505 -0.047272 -0.276138 -0.010708 -0.105783 0.323865 0.158936 0.329226 -0.172630 0.240504 0.143898 0.473886 -0.170357 0.875988 -0.070156 0.038928 0.481665 0.419615 0.238390 0.543345 0.468181 0.671512 -0.106844 -0.193693 -0.246399 -0.186887
2 0.361149 0.704917 0.291457 -0.080728 -0.572933 -0.589067 -0.793803 -1.000979 0.820175 0.295928 0.184207 0.885769 -0.399009 0.637581 0.318221 -0.022845 0.259705 -0.114552 -0.054940 0.182685 0.221006 -0.218122 0.865297 -0.441181 0.185419 0.447350 -0.213860 -1.769530 -0.623723 -1.066396 0.099660 1.458072 0.450007 -0.789303 -0.121537 0.312682 0.246968 0.901696 0.033775 0.563942 0.521539 0.790706 -0.875751 0.932463 -0.507096 -0.130464 1.109031 -0.469966 0.884996 -0.271595 0.670886 0.471352 -0.666085 0.080534 0.530477 0.371931 -0.060190 -0.320351 0.219629 -0.268545 0.640168 -0.545242 0.073721 -0.646921 0.468086 -0.719434 -0.026094 0.861088 0.010164 0.028802 -0.204849 0.493036 0.357690 -0.472914 -0.582728 0.376733 0.621382 -0.667704 -0.412258 -0.081961 0.306849 -0.197246 0.451879 -1.593393 0.159934 -0.159739 0.726716 0.039497 -0.330342 -0.193373 -0.045038 -0.785062 0.898486 -0.217732 1.028231 0.260610 0.865236 -0.474029 -0.726025 -0.554919 -1.216791 -0.570384 0.724477 -0.346603 -0.662520 0.868426 0.021664 -0.019214 0.271993 -0.176794 0.194711 -0.084973 -1.092003 -0.006232 -0.776445 -0.021545 0.000348 -0.076073 0.193496 0.259513 -0.696651 -0.119337 0.141526 0.255560 0.426479 0.253425 -0.899710 0.643363 -0.486986 0.184396 1.035831 0.141304 0.019429 0.155365 0.002902 -0.109107 0.055377 -0.024775 -0.693244 0.206938 0.179723 -0.798811 0.141440 -0.525572 -0.577044 -0.878470 0.477901 0.946455 -0.141953 -0.503441 -0.478369 0.069927 -0.136817 0.606908 -0.076950 0.324349 0.192879 0.114894 -0.919087 0.352348 -1.414676 0.916139 0.328463 1.186773 0.745050 -0.434486 -0.267733 -0.199708 -0.534591 0.888049 -0.429322 0.363039 -0.040896 -0.322206 -0.337510 -0.026441 -0.142639 0.213708 -0.124947 0.622512 -1.049125 -0.706038 -0.208899 0.447170 0.536233 -0.231709 0.489767 0.514644 0.048299 -0.557416 0.273464 -1.164850 0.695038 0.409650 -0.814939 -0.453800 0.442305 -0.609455 0.602072 0.006255 -0.069054 -0.450125 0.125254 -0.478271 -0.413480 -1.055180 -0.893434 -0.556728 -1.093960 -0.768353 0.271325 -0.388704 -0.630777 0.779149 -0.211849 -0.288888 -0.145470 -0.570022 -0.030645 -0.831691 0.284689 0.429069 0.362861 -0.749234 0.465644 0.248452 -0.246630 -0.053088 0.302568 0.058695 -0.025171 0.224125 -0.313906 0.595948 -0.747329 0.141962 -0.211617 0.277275 -0.510860 0.348968 0.048324 -0.095582 0.024356 -0.532523 -0.415193 0.493446 0.292916 -0.496475 0.292169 -0.555822 0.702531 -0.081132 -0.078505 0.356687 0.408023 0.532309 -0.100873 0.750387 0.157968 -0.626308 0.372636 0.901865 0.156366 -0.398677 -0.315714 0.024024 -0.440340 0.041518 0.937736 0.692113 -0.201351 -0.068569 -0.755074 -0.320450 -0.319768 -0.102927 0.009273 0.043572 -0.163320 -0.071635 0.635202 0.503277 0.106900 -0.362000 0.350847 -0.668718 -0.516442 -0.376715 -0.380673 0.517315 0.964409 -0.042094 -0.786081 -0.959971 -0.023261 1.323840 1.026073 -0.052168 -0.350861 0.062560
年 -0.025680 -0.148341 0.260403 0.435279 0.340753 -0.370165 0.692524 0.405896 0.703198 0.419036 0.065059 1.252715 -0.546617 0.288202 0.012702 0.090569 -0.643207 -0.240639 0.319901 -0.293442 0.487747 1.345064 0.846493 0.117547 -1.066390 0.662450 0.008567 -0.178598 -0.069384 -0.303476 -0.419415 0.074236 -0.287813 -0.494250 -1.147110 -0.279624 0.231568 0.129380 -0.133671 0.771361 0.169357 0.685386 -0.558743 -0.012061 -0.356053 0.066274 -0.478152 0.360300 0.584327 -0.111067 0.741198 0.946980 -0.227466 0.026979 0.199299 -0.356406 0.466501 -0.262172 -0.271103 -0.312378 0.475935 0.135873 -0.576739 -0.376040 0.230084 0.311886 -0.885410 -0.017326 0.172162 -0.166069 -0.669513 -0.079418 0.324018 0.229297 0.349141 1.200803 -0.836550 -0.131899 0.847725 0.495316 0.118726 0.463500 0.874937 -0.116077 -0.785283 0.009747 -1.198582 -0.528437 -1.039171 0.715792 0.459527 -0.346323 0.090036 0.272467 -0.146408 -0.137629 0.630577 0.404533 0.325585 -0.837493 0.497690 -0.118868 0.341744 0.342129 -0.100156 0.656184 0.002508 0.282706 0.801364 -0.268771 0.100605 0.126436 -0.148326 0.836686 0.522442 0.337463 0.759250 0.411933 0.206825 -0.341759 -1.007716 -1.160924 0.417559 0.168041 -0.196686 -0.114311 -0.240378 0.511523 -0.102376 0.243313 0.841565 -0.114063 -0.525006 -0.811578 -0.088705 0.243166 0.499764 -0.087099 -0.166266 -0.083989 -0.240918 0.481979 -0.541293 0.408957 -0.772534 -0.699110 0.168422 0.308715 -0.136194 0.043910 -0.489641 -1.030214 0.028125 0.707278 -0.245171 0.421922 -0.013471 0.309093 -0.260784 -0.311308 0.071559 0.550136 0.403435 0.467421 1.336632 0.114131 -0.127869 0.211865 -0.463383 0.807332 -0.462692 -0.031325 0.557738 -0.334642 -0.955832 1.272109 -0.304985 -0.560109 0.276666 0.388646 -1.179766 0.460541 -1.091042 -0.190026 0.188740 -0.575042 -0.085519 0.385787 0.031602 -0.232948 -0.306679 -0.166243 0.281174 -0.706293 -0.701480 -0.668203 -0.032880 0.267294 -0.275263 0.358886 -0.889863 -0.086739 0.058511 -0.305190 0.250048 -0.219450 -0.859118 -0.484297 -0.703766 -0.833164 0.497965 -0.961938 -0.814127 0.056959 -0.110192 0.812637 -0.936772 -0.882466 -0.594758 0.620133 -0.045738 -0.646158 0.377140 0.196992 0.951233 0.108737 0.363643 0.312669 0.062553 0.577432 0.085247 0.433714 -0.561889 1.315280 -0.046503 1.064645 -0.535019 -0.173368 -0.653338 0.681322 -0.250618 0.710895 0.240201 -0.413712 -0.050010 0.009633 -0.610238 -0.342928 0.126470 0.558831 0.700774 0.322080 0.095641 0.450095 -0.186828 0.389571 0.042733 -0.028652 0.072356 -0.591279 0.306309 1.063946 -0.136931 -0.370101 -0.133079 -0.435311 -0.852584 0.450015 0.808773 0.596418 -0.594216 0.450295 0.264785 0.314351 -0.079821 0.326998 -0.191889 0.554631 0.185501 0.550335 0.010618 0.740444 -0.118180 -0.088854 0.899637 -0.636072 -0.017279 -0.687941 -0.471457 0.413444 0.003071 -0.017811 0.194908 -0.023812 -0.580133 0.906154 -0.002010 0.835716 -0.461930 -1.249504

第一行中,999994 表示这份词向量文件中一共有 999994 个词,300 表示词向量的维度为 300。

接下来,从第二行开始,每一行分别为一个词和其对应的词向量。

使用 gensim 加载与预训练好的词向量:

 

from gensim.models import KeyedVectors
wv_from_text = KeyedVectors.load_word2vec_format("model_kv_c.w2v", binary=False)

可以使用wv_from_text['时间']的方式获取某个词的词向量。那么我们将原来的句子“我 喜欢 学习”进行向量化,是不是可以使用这样的代码:

 

data = []
for word in words:
if word in w2v_model_matrix:
data.append(w2v_model_matrix[word])

这样,用预训练好的词向量去初始化我们的 Embedding 层的目的就达到了。

词性标注

词性标注(Part-of-Speech tagging或POS tagging),又称词类标注或简称标注,是指分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程。

在汉语中,词性标注比较简单,因为汉语词汇词性多变的情况比较少见,大多数词语只有一个词性,或者出现频次最高的词性远远高于第二位的词性。只需选取最高频词性,即可实现80%准确率的中文词性标注程序。以jieba为例:

1)Ag 形语素,形容词代码为a,语素代码g前面置以A。

2)a 形容词,取英语形容词adjective的第一个字母。

3)ad 副形词,直接作状语的形容词。形容词代码a和副词代码d并在一起。

4)an,名形词,具有名词功能的形容词,形容词代码a和名词代码n并在一起。

4)v,动词,取英语动词verb的第一个字母。

5)vd,副动词,直接做状语的动词。动词和副动词的代码并在一起。

6)vn,名动词,指具有名词功能的动词。动词和名词的代码并在一起。

7)w,标点符号

8)x,非语素字,非语素字只是一个符号,字母x通常用于代表未知数、符号。

例如:

中文分词是其他中文信息处理的基础。

词性标注的结果是:

中文/n 分词/n 是/v 其他/p 中文/n 信息/n 处理/v 的基础。

使用jieba进行中文词性标注很方便,具体操作如下:

 

import jieba.posseg as pseg

然后首先分词:

 

words = pseg.cut("我爱数据科学杂谈公众号")

 

for w in words:
    print(w.word,w.flag)

 

words = pseg.cut("我爱Shanghai")
for w in words:
    print(w.word,w.flag)

Jieba 分词中的词性标注功能与中文分词类似,也是结合规则方法和统计方法的方式,在词性标注的过程中,词典匹配和 HMM 共同作用。词性标注的流程如下:

(1)首先基于正则表达式,进行汉字的判断;

(2)若符合正则表达式,则判断为汉字,然后基于前缀词典构建有向无环图;

(3)再基于有向无环图计算最大概率路径,同时在前缀词典中找出它所分出的词性,若在词典中未找到,则赋予词性为“x”(代表未知)。

(4)若不符合正则表达式,那么将继续通过正则表达式进行类型判断,分别赋予“x”“m”和“eng”(英文),例如上面例子中的 Shanghai 标注结果是 eng 。

如果你在对英文处理的时候,也是按照先分词,再词性标注的流程来,具体操作如下:

首先安装 nltk 库

pip install nltk 即可

然后可以使用以下的代码:

 

import nltk

document = r"it's easy to learn and use Python."
sentences = nltk.sent_tokenize(document)
for sent in sentences:
    print(nltk.pos_tag(nltk.word_tokenize(sent)))

词性标注的结果如下:

[('it', 'PRP'), ("'s", 'VBZ'), ('easy', 'JJ'), ('to', 'TO'), ('learn', 'VB'), ('and', 'CC'), ('use', 'VB'), ('Python', 'NNP'), ('.', '.')]

具体词性可以参考如下:

 

CC  并列连词          NNS 名词复数        UH 感叹词
CD  基数词            NNP 专有名词        VB 动词原型
DT  限定符            NNP 专有名词复数    VBD 动词过去式
EX  存在词            PDT 前置限定词      VBG 动名词或现在分词
FW  外来词            POS 所有格结尾      VBN 动词过去分词
IN  介词或从属连词     PRP 人称代词        VBP 非第三人称单数的现在时
JJ  形容词            PRP$ 所有格代词     VBZ 第三人称单数的现在时
JJR 比较级的形容词     RB  副词            WDT 以wh开头的限定词
JJS 最高级的形容词     RBR 副词比较级      WP 以wh开头的代词
LS  列表项标记         RBS 副词最高级      WP$ 以wh开头的所有格代词
MD  情态动词           RP  小品词          WRB 以wh开头的副词
NN  名词单数           SYM 符号            TO  to

当然,除了jieba和NLTK,还有很多工具可以做词性标注。

命名实体识别

什么是命名实体识别呢?

命名实体识别通常包括两部分:(1)实体边界识别;(2) 确定实体类别(人名、地名、机构名或其他)。

英语中的命名实体具有比较明显的形式标志(即实体中的每个词的第一个字母要大写),所以实体边界识别相对容易,任务的重点是确定实体的类别。

和英语相比,汉语命名实体识别任务更加复杂,而且相对于实体类别标注子任务,实体边界的识别更加困难。

NER任务用于识别文本中的人名(PER)、地名(LOC)等具有特定意义的实体。非实体用O来表示。我们以人名来举例:

以上是关于从零开始学自然语言处理-十万字长文带你深入学习自然语言处理全流程的主要内容,如果未能解决你的问题,请参考以下文章

从零开始学自然语言处理——手把手带你用代码实现word2vec

Linux疑难杂症解决方案100篇(十五)-万字长文带你深入Linux 内核学习:环境搭建和内核编译

Linux疑难杂症解决方案100篇(十五)-万字长文带你深入Linux 内核学习:环境搭建和内核编译

预训练模型需要知道的知识点总结,万字长文带你深入学习(建议收藏)

C语言学习笔记-入门整合篇(十万字长文)

C语言学习笔记-入门整合篇(十万字长文)