🍨 本文为🔗365天深度学习训练营中的学习记录博客
🍖 原作者:K同学啊
🏡 我的环境:
语言环境:Python3.10
编译器:Jupyter Lab
深度学习环境:torch==2.5.1 torchvision==0.20.1
------------------------------分割线---------------------------------
from torchtext.vocab import build_vocab_from_iterator
from collections import Counter
from torchtext.data.utils import get_tokenizer
import jieba, re, torch
data = [
"我是K同学啊!",
"我是一个深度学习博主,",
"这是我的365天深度学习训练营教案,",
"你可以通过百度、微信搜索关键字【K同学啊】找到我"
]
# 中文分词方法
tokenizer = jieba.lcut
# 加载自定义词典
jieba.load_userdict("C:/Users/scu/pytorch_study/weekn2/mydict.txt")
# 去除标点符号的函数
def remove_punctuation(text):
return re.sub(r'[^\w\s]', '', text)
# 假设我们有一个停用词表,内容如下:
stopwords = set(["的", "这", "是"])
# 去除停用词的函数
def remove_stopwords(words):
return [word for word in words if word not in stopwords]
# 定义一个迭代器来返回文本数据中的词汇
def yield_tokens(data_iter):
for text in data_iter:
# 去除标点符号
text = remove_punctuation(text)
# 分词并生成词汇
text = tokenizer(text)
# 去除停用词
text = remove_stopwords(text)
yield text
# 使用 build_vocab_from_iterator 来构建词汇表
vocab = build_vocab_from_iterator(yield_tokens(data), specials=["<unk>"])
# 将未知的词汇索引为 <unk>
vocab.set_default_index(vocab["<unk>"])
iterator = yield_tokens(data)
vocab = build_vocab_from_iterator(
iterator, # 必需:可迭代对象(如分词后的文本列表)
min_freq=1, # 可选:词汇最小出现频次,默认1
specials=None, # 可选:特殊符号列表(如 ['<unk>', '<pad>'])
special_first=True, # 可选:是否将特殊符号放在词汇表开头
max_tokens=None # 可选:词汇表最大长度
)
# 打印词汇表中的内容
print("词典大小:", len(vocab))
print("词典内部映射:", vocab.get_stoi())
text = "这是我的365天深度学习训练营教案"
words = remove_stopwords(jieba.lcut(text))
print("\n")
print("jieba分词后的文本: ", jieba.lcut(text))
print("去除停用词后的文本: ", remove_stopwords(jieba.lcut(text)))
print("数字化后的文本: ", [vocab[word] for word in words])
最终运行结果:
-----------小结-----------------
在本周深度学习训练营的项目实践中,我掌握了利用自然语言处理相关方法进行文本预处理与词典构建。起初,我学会了从原始文本提取核心词汇,通过去除标点和常见无意义词,显著减少了数据噪声,这样一来模型能更好地聚焦于文本的有效信息。比如剔除“的”、“是”等停用词后,语义内容得以更加凸显,有助于模型捕捉到要点。
随后,我实践了jieba分词工具在中文文本处理中的应用,通过自定义词典,将“K同学啊”与“365天深度学习训练营”这类专有词条纳入词库,避免了分词过程中的误拆分。该方法对于领域文本处理尤为重要,能够提升分词的准确率。
最后,我还学习了如何用torchtext库的build_vocab_from_iterator函数生成词表,并将文本转化为数字序列。通过这一流程,我理解了文本如何转换为模型可接受的数值输入。例如,在将“这是我的365天深度学习训练营教案”分词、去除停用词后,顺利将其编码为数字序列,便于后续模型训练。