当前位置:   article > 正文

从jieba分词到BERT-wwm——中文自然语言处理(NLP)基础分享系列(7)_jieba向量空间模型示例

jieba向量空间模型示例

从『词袋』到『词序列』

我们之前对于文档的数字化表示,采用的是向量空间模型(例如TF-IDF),又被形象地称为『词袋』模型(Bag-of-words model)。就像是把文档里的词汇,放入到以词典作为标签的袋子里。
我们可以看到,基于词袋模型的文档表示方法,虽然考虑了词的重要程度,但它只是根据词的统计特性表示一个文档,而没有考虑到词在文中的次序。
比方说有这样两句话:
•“熊二/的/哥哥/是/熊大。”
•“熊二/是/熊大/的/哥哥。”
这两句话的TF-IDF数据表示形式是一样的,但它们的语义是截然相反的。

究其原因,是因为词袋模型丢失了文档中的上下文信息。

这样就有了一个新的思路:将文档表示成词编码的一个序列,这样词在文档上下文关系信息就能够保留下来。

建立词典并将文本转成数字序列

接下来我们尝试将文档转换成一个数字序列,方便电脑处理。
首先我们要根据语料库中出现的词建立一个词典,建立数字索引(Index),分别对应到特定的词汇。实际上,这个建立词典的步骤在之前的TF-IDF模型训练函数TfidfVectorizer中已经隐含地做过。但现在我们不再使用TF-IDF,因此需要把这一过程单独拿出来显性实现一下。

在李孟博士的原博客里,后续演示使用的是TensorFlow.Keras相关包,我们改为全部使用Pytorch演示相关功能的实现。

首先,把Jieba分词结果和语料库调入内存。

import pandas as pd 
import pickle 
 
pkl_file_rb = open(r'./save_file', 'rb') 
train =pickle.load(pkl_file_rb) 
 
corpus = pd.concat([train . title1_tokenized, train . title2_tokenized]) 
corpus = [c for c in corpus] 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
type(train[0:1])
  • 1
pandas.core.frame.DataFrame
  • 1
corpus[16].strip().split() 
  • 1
['男人', '在', '机舱', '口', '跪下', '原来', '一切', '都', '只', '因为', '爱']
  • 1

定义一个迭代器对语料库中的分词数据进行预处理:

def yield_tokens(corpus): 
    for i in range(len(corpus)): 
        yield corpus[i].strip().split() 
  • 1
  • 2
  • 3

使用 torchtextbuild_vocab_from_iterator 函数建立词典。

from torchtext.vocab import build_vocab_from_iterator 
 
vocab = build_vocab_from_iterator(yield_tokens(corpus), min_freq=
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/378295?site
推荐阅读
相关标签
  

闽ICP备14008679号