自然语言处理自学笔记-01 基于TensorFlow 单词表示的经典方法

本文介绍了自然语言处理中处理单词表示的几种经典方法,包括WordNet、独热编码、TF-IDF和共现矩阵。WordNet是一个包含词汇信息的数据库,利用同义词关系表示单词。独热编码是简单的单词表示法,TF-IDF通过词频和逆文档频率评估单词重要性,共现矩阵则编码单词的上下文关系。
摘要由CSDN通过智能技术生成

自然语言处理-01 基于TensorFlow 单词表示的经典方法

WordNet

WordNet是处理单词表示的最流行的经典方法。它是一个外部词汇数据库,对给定单词的定义、同义词、祖先、派生词等信息进行编码。它可以推断给定单词的各种信息。
WordNet是一个词汇数据库,用于对单词间的磁性标签关系(名词、动词、形容词、副词)进行编码。由美国普林斯顿大学心理学系首创。WordNet考虑单词之间的同义性来评估单词之间的关系。有多国的语言可供选择:http://globalwordnet.org/resources/wordnets-in-the-world/。
WordNet使用synset来表示一群或一组同义词。没个synset都有一个definition用来结合四synset的内容。synset中包含的同义词称为lemmas。
对于给定的synset存在上位词和下位词,比如苹果的上位词是水果,下位词是红苹果。

import nltk
from nltk.corpus import wordnet as wn

nltk.download('wordnet')

# shows all the available synsets
word = 'car'
car_syns = wn.synsets(word)
print('All the available Synsets for ', word)
print('\t', car_syns,'\n')

# The definition of the first two synsets
syns_defs = [car_syns[i].definition() for i in range(len(car_syns))]
print('Example definitions of available Synsets ...')
for i in range(3):
    print('\t',car_syns[i].name(),': ',syns_defs[i])
print('\n')

# Get the lemmas for the first Synset
print('Example lemmas for the Synset ', car_syns[i].name())
car_lemmas = car_syns[0].lemmas()[:3]
print('\t', [lemma.name() for lemma in car_lemmas], '\n')

# Let us get hypernyms for a Synset (general superclass)
syn = car_syns[0]
print('Hypernyms of the Synset ', syn.name())
print('\t', syn.hypernyms()[0].name(),'\n')

# Let us get hyponyms for a Synset (specific subclass)
syn = car_syns[0]
print('Hyponyms of the Synset ', syn.name())
print('\t', [hypo.name() for hypo in syn.hyponyms()[:3]], '\n')

# Let us get part-holonyms for a Synset (specific subclass)
# also there is another holonym category called "substance-holonyms"
syn = car_syns[2]
print('Holonyms (Part) of the Synset ',syn.name())
print('\t', [holo.name() for holo in syn.part_holonyms()], '\n')

# Let us get meronyms for a Synset (specific subclass)
# also there is another meronym category called "substance-meronyms"
syn = car_syns[0]
print('Meronyms (Part) of the Synset ', syn.name())
print('\t', [mero.name() for mero in syn.part_meronyms()[:3]], '\n')

word1, word2, word3 = 'car', 'lorry', 'tree'
w1_syns, w2_syns, w3_syns = wn.synsets(word1), wn.synsets(word2), wn.synsets(word3)

print('Word Similarity (%s)<->(%s): ' % (word1, word2), wn.wup_similarity(w1_syns[0], w2_syns[0]))
print('Word Similarity (%s)<->(%s): ' % (word1, word3), wn.wup_similarity(w1_syns[0], w3_syns[0]))

结果展示:

All the available Synsets for  car
	 [Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'), Synset('cable_car.n.01')] 

Example definitions of available Synsets ...
	 car.n.01 :  a motor vehicle with four wheels; usually propelled by an internal combustion engine
	 car.n.02 :  a wheeled vehicle adapted to the rails of railroad
	 car.n.03 :  the compartment that is suspended from an airship and that carries personnel and the cargo and the power plant


Example lemmas for the Synset  car.n.03
	 ['car', 'auto', 'automobile'] 

Hypernyms of the Synset  car.n.01
	 motor_vehicle.n.01 

Hyponyms of the Synset  car.n.01
	 ['ambulance.n.01', 'beach_wagon.n.01', 'bus.n.04'] 

Holonyms (Part) of the Synset  car.n.03
	 ['airship.n.01'] 

Meronyms (Part) of the Synset  car.n.01
	 ['accelerator.n.01', 'air_bag.n.01', 'auto_accessory.n.01'] 

Word Similarity (car)<->(lorry):  0.6956521739130435
Word Similarity (car)<->(tree):  0.38095238095238093

独热编码

表示单词的更简单方式是独热编码。如果有一个V大小的单词表,对于第 i i i个词 w i w_i wi,用一个长度为V的向量 [ 0 , 0 , 0 , . . . , 0 , 1 , 0 , . . . , 0 , 0 ] [0,0,0,...,0,1,0,...,0,0] [0,0,0,...,0,1,0,...,0,0]来表示单词 w i w_i wi其中第 i i i个元素为1,其余元素都是0。比如,我们是朋友这句话。每个单词的独热表示如下:
我: [ 1 , 0 , 0 , 0 , 0 ] [1,0,0,0,0] [1,0,0,0,0]
们: [ 0 , 1 , 0 , 0 , 0 ] [0,1,0,0,0] [0,1,0,0,0]
是: [ 0 , 0 , 1 , 0 , 0 ] [0,0,1,0,0] [0,0,1,0,0]
朋: [ 0 , 0 , 0 , 1 , 0 ] [0,0,0,1,0] [0,0,0,1,0]
友: [ 0 , 0 , 0 , 0 , 1 ] [0,0,0,0,1] [0,0,0,0,1]

TF-IDF方法

TF-IDF方法是一种基于频率的方法,它考虑单词在语料库中出现的频率。单词在文档中出现的频率越高,该单词在文档中越重要。同时还要去除像的、了这样的常用词,将他们的频率置为0。
TF代表词频率:
T F ( w i ) = 单 词 出 现 的 次 数 / 单 词 数 TF(w_i)=单词出现的次数/单词数 TF(wi)=/
IDF代表逆文档频率:
I D F ( w i ) = l o g ( 文 档 总 数 / 拥 有 该 单 词 的 文 档 数 ) IDF(w_i)=log(文档总数/拥有该单词的文档数) IDF(wi)=log(/)
T F − I D F ( w i ) = T F ( w i ) ∗ I D F ( w i ) TF-IDF(w_i)=TF(w_i)*IDF(w_i) TFIDF(wi)=TF(wi)IDF(wi)
例如:

  • 文件1:这是一只小狗。
  • 文件2:这是一只小猫。
    T F − I D F ( 猫 , 文 件 2 ) = ( 1 / 6 ) ∗ l o g ( 2 / 1 ) = 0.05 TF-IDF(猫,文件2)=(1/6)*log(2/1)=0.05 TFIDF(,2)=(1/6)log(2/1)=0.05
    T F − I D F ( 这 , 文 件 2 ) = ( 1 / 6 ) ∗ l o g ( 2 / 2 ) = 0 TF-IDF(这,文件2)=(1/6)*log(2/2)=0 TFIDF(,2)=(1/6)log(2/2)=0
    因此猫这个词比这这个词更具有丰富的信息。

共现矩阵

共现矩阵对单词上下文进行编码。
例如:

  • Jerry and Mary are friends.
  • Jerry buy flowers for Mary.
    可以得到如下的矩阵。
JerryandMaryarefriendsbuysflowersfor
Jerry01000100
and10100000
Marry01010001
are00101000
friends00010000
buys10000000
flowers00000101
flowers00100010
### 文本分类 #### 数据预处理 要求训练集和测试集分开存储,对于中文的数据必须先分词,对分词后的词用空格符分开,并且将标签连接到每条数据的尾部,标签和句子用分隔符\分开。具体的如下: * 今天 的 天气 真好\积极 #### 文件结构介绍 * config文件:配置各种模型的配置参数 * data:存放训练集和测试集 * ckpt_model:存放checkpoint模型文件 * data_helpers:提供数据处理的方法 * pb_model:存放pb模型文件 * outputs:存放vocab,word_to_index, label_to_index, 处理后的数据 * models:存放模型代码 * trainers:存放训练代码 * predictors:存放预测代码 #### 训练模型 * python train.py --config_path="config/textcnn_config.json" #### 预测模型 * 预测代码都在predictors/predict.py中,初始化Predictor对象,调用predict方法即可。 #### 模型的配置参数详述 ##### textcnn:基于textcnn的文本分类 * model_name:模型名称 * epochs:全样本迭代次数 * checkpoint_every:迭代多少步保存一次模型文件 * eval_every:迭代多少步验证一次模型 * learning_rate:学习速率 * optimization:优化算法 * embedding_size:embedding层大小 * num_filters:卷积核的数量 * filter_sizes:卷积核的尺寸 * batch_size:批样本大小 * sequence_length:序列长度 * vocab_size:词汇表大小 * num_classes:样本的类别数,二分类时置为1,多分类时置为实际类别数 * keep_prob:保留神经元的比例 * l2_reg_lambda:L2正则化的系数,主要对全连接层的参数正则化 * max_grad_norm:梯度阶段临界值 * train_data:训练数据的存储路径 * eval_data:验证数据的存储路径 * stop_word:停用词表的存储路径 * output_path:输出路径,用来存储vocab,处理后的训练数据,验证数据 * word_vectors_path:词向量的路径 * ckpt_model_path:checkpoint 模型的存储路径 * pb_model_path:pb 模型的存储路径 ##### bilstm:基于bilstm的文本分类 * model_name:模型名称 * epochs:全样本迭代次数 * checkpoint_every:迭代多少步保存一次模型文件 * eval_every:迭代多少步验证一次模型 * learning_rate:学习速率 * optimization:优化算法 * embedding_size:embedding层大小 * hidden_sizes:lstm的隐层大小,列表对象,支持多层lstm,只要在列表中添加相应的层对应的隐层大小 * batch_size:批样本大小 * sequence_length:序列长度 * vocab_size:词汇表大小 * num_classes:样本的类别数,二分类时置为1,多分类时置为实际类别数 * keep_prob:保留神经元的比例 * l2_reg_lambda:L2正则化的系数,主要对全连接层的参数正则化 * max_grad_norm:梯度阶段临界值 * train_data:训练数据的存储路径 * eval_data:验证数据的存储路径 * stop_word:停用词表的存储路径 * output_path:输出路径,用来存储vocab,处理后的训练数据,验证数据 * word_vectors_path:词向量的路径 * ckpt_model_path:checkpoint 模型的存储路径 * pb_model_path:pb 模型的存储路径 ##### bilstm atten:基于bilstm + attention 的文本分类 * model_name:模型名称 * epochs:全样本迭代次数 * checkpoint_every:迭代多少步保存一次模型文件 * eval_every:迭代多少步验证一次模型 * learning_rate:学习速率 * optimization:优化算法 * embedding_size:embedding层大小 * hidd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值