NLP基础1-词向量之序号化,One-Hot,BOW/TF,TF-IDF

NLP基础1-词向量之序号化,One-Hot,BOW/TF,TF-IDF
NLP基础2-词向量之Word2Vec
NLP基础3-词向量之Word2Vec的Gensim实现



前言

在分词之后,需要将文本数据转换成数值型数据。常用方式如下:

  • 序号化、哑编码 (One-Hot)、
  • 词袋法 (BOW/TF)、TF-IDF
  • 主题模型 (LSA、LDA等)
  • Word2Vec (重要)
  • Char2Vec、Doc2Vec、FastText、cw2vec

一、序号化

1. 基本介绍

根据单词字典来序号化文本中的每个单词 (token):

  • 字典:key:token,value:序号 (0,vocab_size)
  • 序号的编号是从零到词汇表大小
  • 其中包含特殊字符,比如说:
    • <PAD>-表示填充字符,在每个批次中文本长度大小不一致,我们需要对他们进行填充补齐
    • <UNK>-表示未知字符,也就是说该字符不存在单词词典中
    • <NUM>-表示数字
    • <PUN>-表示标点符号
    • <SYMBOL>表示特殊字符

2. 举例说明

假设现在有已经经过分词后的三个文本:
[[“我”, “是”, “小明”],
[“我”, “来自”, “湖南”, “长沙”],
[“我”, “喜欢”, “辣椒”]]
根据单词词典:
dict = {“<\PAD>”: 0, “<\UNK>”: 1, “我”: 2, “湖南”: 3, “长沙”: 4, “是”: 5, “来自”: 6, “喜欢”: 7, “辣椒”: 8 , …}
那么对应三个文本序号化后就是
[[2, 5, 1, 0],
[2, 6, 3, 4 ],
[2, 7, 8, 0]]
其中:<\PAD>表示填充字符, <\UNK>未知字符

3. 代码实现

# 1. 得到分词后的文本
text = [["我", "是", "小明"],
 ["我", "来自", "湖南", "长沙"],
 ["我", "喜欢", "辣椒"]]
print("="*100)
print("text:")
print(text)

# 2. 构建词典
tokens = set() 
for sentence in text:
    for token in sentence:
        tokens.add(token)
tokens = list(tokens)   # {} → [] set转换为list
tokens.insert(0, "<PAD>")  # 在第一个位置插入<PAD>
tokens.insert(1, "<UNK>")  # 在第二个位置插入<UNK>
print("="*100)
print("tokens:")
print(tokens)
dict = {
   token: i for i, token in enumerate(tokens)}  # 构建字典

# dict = {token: i for i, token in zip(tokens, range(len(tokens)))}
print(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值