《基于Tensorflow的知识图谱实战》| 有趣的词嵌入--word embedding(一)| 文本数据处理

⚽开发平台:jupyter lab

🎈运行环境:python3、TensorFlow2.x

word embedding(词嵌入),常用来进行情感分析、同义词聚类、文章分类和打标签。
(1)该部分内容介绍:通过多种计算word embedding的方法循序渐进的了解如何获取对应的word embedding,之后通过实战使用word embedding进行文本分类。
(2)该章节将分为两个部分,

组建能够代表文本内容的矩阵向量的主要步骤:文本分词 --> 词向量训练 --> 特征词抽取。

1. 数据集介绍和数据清洗

· 新闻分类数据集“AG”,是从2000多个不同的新闻来源搜索的超过一百万的新闻文章。用于研究分类、聚类、信息获取(排序、搜索)等非商业活动。
· AG News下载地址: https://s3.amazonaws.com/fast-ai-nlp/ag_news_csv.tgz

1.1 数据集显示

## 由于该数据集没有标题,可以添加标题列:names=rankings_colname
rankings_colname=['label','title','text']
agnews_train = pd.read_csv('./ag_news_csv/train.csv',encoding='utf-8',engine='python',header=None,names=rankings_colname)
agnews_train  ##结果如下图

AG-news

1.2 清洗数据

### 对文本数据的清洗类
import re
def text_clear(text):
    text = text.lower()    #将文本转化成小写
    text = re.sub(r'[^a-z0-9]',' ',text)    #用空格替换非标准字符,^为求反操作
    text = re.sub(r' +',' ',text)   # 替换多重空格为单空格
    text = text.strip()     #去除首尾空格
    text = text.split(' ')    # 对句子按照空格进行划分
    return text

### 读取文本,并对每行数据进行遍历
import csv
import numpy as np
agnews_label = []
agnews_title = []
agnews_text = []
## 便于处理数据
agnews_train = csv.reader(open('./ag_news_csv/train.csv','r'))
for line in agnews_train:
     ## 对于数字,得数字化转换;对于文字,得格式处理
     #print(line)
     agnews_label.append(np.float32(line[0]))
     agnews_title.append(line[1])
     agnews_text.append(text_clear(line[2]))

## 对获取的数据进行展示
merge = pd.DataFrame({
   
    'label':agnews_label,
    'title':agnews_title,
    'text':agnews_text
})
merge  ##可观察到处理后的数据与原始数据的不同

在这里插入图片描述

2. 停用词的使用(后续完善)

import re
import nltk
def text_clear(text):
    syoplist = stopwords.words('english')
    text = text.lower()    #将文本转化成小写
    text = re.sub(r'[^a-z0-9]',' ',text)    #用空格替换非标准字符,^为求反操作
    text = re.sub(r' +',' ',text)   # 替换多重空格为单空格
    text = text.strip()     #去除首尾空格
    text = text.split(' ')    # 对句子按照空格进行划分
    text = [word for word in text if word not in stoplist]   # 去除停用词
    text = [PorterStemmer().stem(word) for word in text]   # 还原词干部分
    text.append('eos')  # 添加结束符
    text = ['bos'] + text   #添加开始符
    return text

3. 词向量训练模型word2vec使用介绍

3.1 word2vec模型的介绍

Word2vec 在整个 NLP 里的位置

one-hot 存在的问题:one-hot用来表达词向量非常简单,但是存在着很多问题。最大的问题是词汇表一般非常大,表达的效率不高。使用在卷积神经网络中会使得网络难以收敛。
------------------------------------------------------------分割线-------------------------------------------------------------------------
介绍:word2vec是一个NLP工具,是 Word Embedding 的方法之一,是一种可以解决one-hot的方法。
思路:通过训练将每个词都映射到一个较短的词向量上,所有的这些词向量就构成了向量空间。
特点:将所有的词向量化,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词与词之间的联系。
word2vec的功能:就是将「不可计算」「非结构化」的词转化为「可计算」「结构化」的向量。
------------------------------------------------------------分割线-------------------------------------------------------------------------
百度百科版本:Word2vec,是一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏层。

word2vec的功能

3.2 word2vec的优缺点

其优点
(1)由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
(2)比之前的 Embedding方法维度更少,所以速度更快。
其缺点
(1)由于词和向量是一对一的关系,所以多义词的问题无法解决。
(2)Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化。

3.3 word2vec的模型训练结构

在这里插入图片描述

如上图, word2vec具体的训练方法主要由2个方法:CBOW(Continuous Bag-of-Word Model,连续词袋模型)和Skip-gram模型。

  • CBOW模型(左):CBOW是一个三层网络神经,该模型的特点是输入已知上下文,输出对当前单词的预测。
  • Skip-gram模型(右):与CBOW模型相反,由当前词预测上下文词。

在这里插入图片描述

1.4 以gensim包对数据进行训练(程序7-5)

### 1.定义工具类
import re
def text_clear(text):
    text = text.lower()    #将文本转化成小写
    text = re.sub(r'[^a-z0-9]',' '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值