news 2026/6/24 10:41:04

FastText方案——毫秒级文本分类实现___5

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastText方案——毫秒级文本分类实现___5

FastText 核心创新在于将子词(subword)信息引入神经网络语言模型,解决了传统 Word2Vec 无法处理未知词(OOV)的问题,同时显著提升了低频词的表示质量。


算法:分层 Softmax + N-gram 子词嵌入

子词(Subword)基本思想

每个单词被表示为字符级 n-gram 的集合,而非单一向量。例如单词 "apple",设定 n=3 时:

<ap, app, ppl, ple, le>

其中 <和 >为边界符号,用于区分前缀/后缀与完整词。

工程实现:

构建类别字典:

# create id to class dictionary id_to_class = {} # use enumerate(f:file) to extract all categories with open(config.class_datapath,'r',encoding='utf-8') as f: for index,class_name in enumerate(f): id_to_class[index] = class_name

检查数据EDA:

counter = Counter(train_data["label"]) print(counter) for label, count in counter.items(): print(f"category:{label},amount:{count}") # get the length of text train_data["text_length"] = train_data["text"].str.len() print(train_data[["text", "text_length"]].head(5)) # optimal text length # 3σ principle : length = μ + 3σ μ = train_data['text_length'].mean() σ = train_data['text_length'].std() print("EDA check:") print(f"μ:{train_data['text_length'].mean():.2f}") print(f"σ:{train_data['text_length'].std():.2f}") print(f"max length of all texts:{train_data['text_length'].max():.2f}") print(f"min length of all texts:{train_data['text_length'].min():.2f}")

对于中文版本的FastText来说,EDA是必须要做的,经过我们的EDA检查,推荐句子长度是32。

数据处理:

原始数据是text+空格+数字类别形式,而FastText需要接收的是__label__类别名+空格+文本的形式

# data pre-process and save data # read data and process our data into FastText format # char example : __label__education 华 中 科 技 大 学 2 0 1 0 年 考 研 成 绩 查 询 开 通 # word example : __label__education 南开大学 实行 学业 警示 学分 不够 将 “ 吃 黄牌 ” with open (config.train_datapath,'r',encoding='utf8') as f: datas = [] # a list for terminal data storage ★★★★ terminal data -> str for line in f: # split data -> text label # lines of raw datas are separated by '/t' text,label = line.strip().split('\t') # process text -> words:list # ★★★★★ use char segmentation words = list(text) if config.use_char_segmentation else jieba.lcut(text) text_process = " ".join(word for word in words if word.strip()) # process label -> __label__ id_to_class label_process = f"__label__{id_to_class[int(label)]}" # concat two parts of data text_label = label_process.strip() + " " + text_process datas.append(text_label)

这个接口提供两个方案,如果需要以字符形式那就直接转list,如果需要分词形式则用jieba分词进行分词处理。处理好后,保存文件。

with open(output_file, 'w', encoding='utf-8') as f: for line in datas: f.write(line + '\n') # save processed data

fasttext.train_supervised() 自动训练函数内置自动构建词表,我们可以直接调用api进行训练。

n-gram推荐设置为2.

# auto train model = fasttext.train_supervised(input="上一步预处理后保存的数据文件路径", autotuneValidationFile = "验证集路径", autotuneDuration = 60, maxn=32 verbose = 3) # save model model.save_model("你想保存的文件路径和格式")

API做了什么?

扫描整个训练语料,按空格切分 token

区分词与标签——以 __label__为前缀的记为 label,其余记为 word

统计词频,根据 minCount(默认 1,低于此频次的词被丢弃)过滤低频词

分配词 ID,同时为每个词生成字符级 n-gram(minn~maxn),n-gram 经哈希映射到 bucket大小的哈希桶中

按照默认参数值或者传入的超参数进行训练并验证,然后自动调整每轮的参数。

训练好并保存模型,接下来我们就可以进行样本预测了:

def predict(datas): # fetch user input # load model -> fasttext.load_model() fasttext_model = fasttext.load_model("你的模型保存路径和模型文件名") ## data process -> list(text) text = " ".join(list(datas['text'])) # model predict pred = fasttext_model.predict(text) # fetch result res = pred[0][0][9:] # return result datas['result'] = res return datas
if __name__ == '__main__': data = {"text":"清华大学化学系专业硕士点于2027年停止招生"} start = time.time() result = predict(data) print("time consume(s):",time.time()-start) print("result:",result)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 10:37:48

AI 正在「吃掉」数据库工具!从 SQLark 小百灵看智能数据库管理的三大趋势,写 SQL 的日子要结束了 - 微元算力(weytoken)

摘要&#xff1a;当大模型遇见数据库工具&#xff0c;一场静悄悄的革命正在发生。以 SQLark 小百灵 AI 为代表的智能数据库工具&#xff0c;正在将自然语言转 SQL、AI 辅助调试、仿真数据自动生成等能力变成标配。本文从 SQLark 的实际功能出发&#xff0c;深入分析 AI 驱动数据…

作者头像 李华
网站建设 2026/6/24 10:35:39

Codex 最新功能亮点:GPT-5.5、长周期任务、插件生态和安全扫描全面升级

如果你还把 Codex 理解成“AI 写代码工具”,这个认知已经有点旧了。 截至 2026 年 6 月 23 日,OpenAI 官方资料里最新的 Codex 重点可以概括成一句话:Codex 正在从代码助手,升级成一个覆盖本地开发、云端执行、团队协作、知识工作和安全治理的工程 agent 平台。 这篇文章…

作者头像 李华
网站建设 2026/6/24 10:35:28

终极指南:为什么OCRmyPDF是扫描PDF文本识别的最佳选择

终极指南&#xff1a;为什么OCRmyPDF是扫描PDF文本识别的最佳选择 【免费下载链接】OCRmyPDF OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched 项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF 你是否曾经面对一堆扫描…

作者头像 李华
网站建设 2026/6/24 10:34:34

ESP32关于MD5验证失败

我最近在移植一套esp32程序&#xff0c;因为在S3上面跑起来很吃力&#xff0c;于是换成了乐鑫官方新出品得P4&#xff0c;但是烧录官方小demo---hello world时&#xff0c;出现了MD5验证失败的报错。Writing bootloader/bootloader.bin at 0x00002000...SHA digest in image up…

作者头像 李华