FastText 和 Faiss 的初探了解
概览
大模型目前已经是如火如荼的程度,各个大厂都有推出面向大众的基础大模型,同时诸多行业也有在训练专有大模型,而大模型的发展由来却是经过多年从文本检索生成、深度学习、自然语言处理,在Transformer架构出来后,才有了爆发性的发展,今天我们来探索使用下文本解析、词向量方向的事情!
语言模型的演进之路
基于概率的词预测—》 基于向量—》神经网络–》编码解码器架构—》注意力机制—》Transformer
介绍
- FastText:由Facebook开源,用于高效学习词语表示和句子分类的组件库。
- Faiss:由Facebook开源的一个向量数据库,支持开发人员快速搜索彼此相似的多媒体文档的嵌入。它解决了针对基于哈希的搜索进行优化的传统查询搜索引擎的局限性,并提供了更具可扩展性的相似性搜索功能。
FastText
Install
git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ make
这将为所有类以及主二进制文件生成目标文件fasttext.

文本分类
文本分类的目标是将文档(例如电子邮件、帖子、短信、产品评论等)分配到一个或多个类别。这些类别可以是评论分数、垃圾邮件与非垃圾邮件,或文档的输入语言。如今,构建此类分类器的主要方法是机器学习,即从示例中学习分类规则。为了构建此类分类器,我们需要标记数据,它由文档及其相应的类别(或标签或标签)组成。
1、准备待训练的数据集
https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz
__label__sauce __label__cheese How much does potato starch affect a cheese sauce recipe?
__label__food-safety __label__acidity Dangerous pathogens capable of growing in acidic environments
__label__cast-iron __label__stove How do I cover up the white spots on my cast iron stove?
__label__restaurant Michelin Three Star Restaurant; but if the chef is not there
__label__knife-skills __label__dicing Without knife skills, how can I quickly and accurately dice vegetables?
__label__storage-method __label__equipment __label__bread What's the purpose of a bread box?
__label__baking __label__food-safety __label__substitutions __label__peanuts how to seperate peanut oil from roasted peanuts at home?
__label__chocolate American equivalent for British chocolate terms
__label__baking __label__oven __label__convection Fan bake vs bake
__label__sauce __label__storage-lifetime __label__acidity __label__mayonnaise Regulation and balancing of readymade packed mayonnaise and other sauces
__label__tea What kind of tea do you boil for 45minutes?
__label__baking __label__baking-powder __label__baking-soda __label__leavening How long can batter sit before chemical leaveners lose their power?
__label__food-safety __label__soup Can I RE-freeze chicken soup after it has thawed?
__label__sous-vide __label__vacuum Ziploc vacuumed bags expand in sous vide
__label__baking __label__substitutions __label__syrup What can I use instead of corn syrup?
__label__vegan __label__almonds __label__almond-milk Does soaking almonds have the same effect as blanching and removing the skins when making almond milk?
__label__baking __label__cake __label__soda Cake sinks in the middle when baking. Only happens when I make a Coca-Cola Cake
__label__baking Which plastic wrap is okay for oven use?
__label__tea Can I dissolve sugar first before steeping tea?
__label__food-safety __label__salmon Is it safe to eat food that was heated in plastic wrap to the point the plastic wrap flamed?
__label__flavor __label__spices __label__chemistry Flavor and Chemical Composition of Thyme
__label__equipment What can I use as a manual hard cheese slicer?
__label__flour __label__milling Are stone or metal grinding wheels better for flour?
__label__beans Do fava beans need to cook longer than other kinds of beans?
__label__baking __label__bread __label__kneading Kneading Bread After Rising
__label__beef __label__roast __label__gravy __label__roast-beef Extraordinary Beef Gravy?
__label__baking __label__bread __label__crust How to heat up already baked french bread in oven to get a crispy crust
__label__chocolate Is there a difference in appearance between semi and unsweetened chocolate?
__label__food-science __label__marinade __label__brining If salt dehydrates the meat, then why would brining make it more juicy as a whole?
__label__cookies __label__texture __label__american-cuisine How long after baking do American chewy cookies get their normal texture?
__label__fruit __label__alcohol __label__liqueur Is cooking with fruit liqueur comparable to cooking with fruit juice?
__label__bread __label__cheese __label__jelly __label__brie Suggestions for Brie + Bread + Preserves
__label__soup __label__texture __label__standards What is the correct consistency of a cream soup?
__label__food-science __label__tea Making tea - milk first or tea first
__label__food-safety __label__salt Sea Salt and Mercury
__label__cinnamon Cinnamon Thickening
__label__sauce __label__flavor __label__syrup Basic carrier sauce/syrup for different sweet flavors?
__label__roasting __label__eggplant What is the 'cleanest' way to roast eggplants indoor?
__label__rice Cooking and storing rice for a whole week
__label__dehydrating dehydrating puree food
__label__soup __label__canning __label__food-processing In industrially produced soup, how does each can contain equal parts of all ingredients?
__label__flavor __label__microwave __label__popcorn How Is Microwave Popcorn Flavoured?
__label__culinary-uses __label__vegetables __label__eggplant What can I do with under-ripe eggplant?
__label__water __label__cocktails __label__whiskey Whiskey and Water
__label__meat __label__ham Wet Cooked Ham Slices
__label__onions __label__deep-frying __label__restaurant-mimicry Beer Battered Onion Rings -- what makes them look shiny?
__label__wok Determining a wok's material
__label__food-safety __label__oil Is cloudy-looking used peanut oil safe?
__label__oil __label__cleaning __label__coconut __label__olive-oil __label__maintenance To finely spray a thin layer of warm liquid Coconut Oil?
__label__candy __label__fudge Why Do We 'Simmer' Fudge Instead of 'Boiling' it?
2、训练数据
./fasttext supervised -input cooking.train -output model_cooking

3、查看训练结果

- model_cooking.bin: 训练好的分类器文件
- model_cooking.vec: 这个里面放的每个单词及其向量
4、简单测试下

说明:
第一个问题问什么烤盘适合做香蕉面包,关联词是 baking 有关联。
第一个问题问为什么不把刀放进洗碗机,关联词是 食物安全 无关联。
5、验证一下训练的结果

上面显示了默认1和设置5时的召回率。
6、一些提高准确率和召回率的方法
- 数据量:增加训练学习的样本数据量
- 预处理:标点符号处理、大小写统一减少词汇量
- 更多周期和更大的学习率:增加学习周期,多学习几次。
- 单词 n-gram:通过使用二元词组而不是一元词组来提高模型的性能。
重新进行训练与验证,准确率提高到了13%。

Word2Vec
通过对一系列的文本进行训练,就能得到每个词的多维向量,比如小明和小刚总是和‘男性’一起出现,那小明和小刚的向量维度中就可能有几个维度是和性别有关。
举个例子,就像用RGB数字来描述颜色,这个世界上每个词都可以用向量来表达它,向量维度越多越准确。
- skipgram: 通过邻近单词来学习预测目标单词。
- cbow: 根据上下文来预测目标单词。
1、使用skipgram模式生成词向量

2、查看生成结果

3、词搜索

Faiss
通过并行搜索(GPU)、
其他
1、什么是二元词组?
首先“unigram” 是指单个不可分割的单元或标记,通常用作模型的输入。例如,unigram 可以是单词或字母,具体取决于模型。在 fastText 中,我们在单词级别工作,因此 unigram 就是单词。
比如下面这句话,
我爱吃家乡富平县的大红苹果
“unigram’拆分如下
‘我’、‘爱’、‘吃’、‘家乡’、‘富平县’、‘的’、‘大’、‘红’、‘苹果’
二元词组拆分如下
‘我爱’、‘爱吃’、‘吃家乡’、‘家乡富平县’、‘富平县的’、‘的大’、‘大红’、‘红苹果’
计算每个二元词组在一个大训练集中的出现概览,就能用概览去预测新的文本生成序列。
| 条目 | 概览 |
|---|---|
| 我爱 | 30% |
| 我恨 | 40% |
| 我想 | 30% |
2、分层 softmax
建立一个二叉树,其叶子与标签相对应。每个中间节点都有一个经过训练的二元决策激活(例如 S 形),并预测我们应该向左还是向右。然后,输出单元的概率由从根到输出单元叶子的路径上中间节点的概率的乘积给出。
在 fastText 中,使用哈夫曼树,这样对于更频繁的输出,查找时间更快,因此输出的平均查找时间是最佳的。
相关文章:
FastText 和 Faiss 的初探了解
概览 大模型目前已经是如火如荼的程度,各个大厂都有推出面向大众的基础大模型,同时诸多行业也有在训练专有大模型,而大模型的发展由来却是经过多年从文本检索生成、深度学习、自然语言处理,在Transformer架构出来后,才…...
微服务保护学习笔记(五)Sentinel授权规则、获取origin、自定义异常结果、规则持久化
文章目录 前言4 授权规则4.1 基本原理4.2 获取origin4.3 配置授权规则 5 自定义异常结果6 规则持久化 前言 微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装 微服务保护学习笔记(二)簇点链路、流控操作、流控模式(关联、链路) 微服务保护学习笔记(三)流控效果(…...
YOLOv8目标检测模型——遥感小目标检测经验分享
小目标检测——YOLOV8 一、引言 背景介绍 (1)目标检测的重要性 目标检测在许多领域都具有极其重要的作用。在自动驾驶中,目标检测能够识别道路上的障碍物和行人,确保行车安全。在视频监控中,目标检测能够实时发现异…...
构建响应式 Web 应用:Vue.js 基础指南
构建响应式 Web 应用:Vue.js 基础指南 一 . Vue 的介绍1.1 介绍1.2 好处1.3 特点 二 . Vue 的快速入门2.1 案例 1 : 快速搭建 Vue 的运行环境 , 在 div 视图中获取 Vue 中的数据2.2 案例 2 : 点击按钮执行 vue 中的函数输出 vue 中 data 的数据2.3 小结 三 . Vue 常…...
计算机毕业设计选题推荐-在线投票系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
【C/C++】程序的构建(编译)过程概述
🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:C_小米里的大麦的博客-CSDN博客 🎁代码托管:C: 探索C编程精髓,打造高效代码仓库 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、预处理(Preprocessi…...
ElasticSearch-2-核心语法集群高可用实战-Week2
ES批量操作 1.批量获取文档数据 这里多个文档是指,批量操作多个文档,搜索查询文档将在之后的章节讲解 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式:GET 请求地址:_mget 功能说明 &#…...
STM的CAN通信学习
显性电平:0 隐性电平:1 一、帧结构 1.帧类型 1)数据帧:发送设备主动发送数据(广播式) 2)请求帧:接收设备主动请求数据(请求式) 2.帧结构 1ÿ…...
【高等数学学习记录】函数
【高等数学&学习记录】函数 从事测绘工作多年,深刻感受到基础知识的重要及自身在这方面的短板。 为此,打算重温测绘工作所需基础知识。练好基本功,为测绘工作赋能。 1 知识点 1.1 函数 设数集 D ⊂ R D\subset R D⊂R,称映射…...
【springboot过ingress后无法获取X-Forwarded-For头信息】
springboot过ingress后无法获取X-Forwarded-For头信息 一、现象结论修改步骤ingressspringboot 排查流程本文参考 一、现象 项目使用spring boot 2.7.18,有个新需求是校验X-Forwarded-For头的所有来源ip合法性,线上环境出现取不到X-Forwarded-For头的问…...
表格标记<table>
一.表格标记、 1table:表格标记 2.caption:表单标题标记 3.tr:表格行标记 4.td:表格中数据单元格标记 5.th:标题单元格 table标记是表格中最外层标记,tr表示表格中的行标记,一对<tr>表示表格中的一行,在<tr>中可…...
Rust练手项目,写个有趣的小工具定时从一言网获取一段有趣的话并推送通知
Rust练手项目,写个有趣的小工具 代码 继续练习Rust, 写个小工具定时从一言网获取一段有趣的话并提示,如下 练习以下Rust点 并发编程 Mutex, Arc指针使用HTTP请求Windows Gui 代码 Cargo.toml [package] name "funny_word" edition "20…...
【隐私计算】Paillier半同态加密算法
一、何为同态加密(HE)? HE是一种特殊的加密方法,它允许直接对加密数据执行计算,如加法和乘法,而计算过程不会泄露原文的任何信息。计算的结果仍然是加密的,拥有密钥的用户对处理过的密文数据进…...
判断数字的奇偶[中秋快乐~]
题目描述 给定一个整数 n,编写程序判断数字 n 是奇数还是偶数,是奇数则输出 “odd”,偶数则输出 “even”。 输入格式 一行,一个整数 n。 输出格式 一行,如果 n 是奇数则输出 “odd”; 如果 nn 是偶数则输出 “even”。 样例…...
文件操作及重定向详解
1、linux下一切皆文件: 在linux中,一切皆文件是一个重要的概念,用于描述linux操作系统中所有资源和设备都以文件的形式进行访问和处理。 这个概念可以理解为,无论是硬盘上的文件、网卡、设备、进程等,都被抽象为文件的形式存在。在linux系统中,通…...
鸿蒙next json解析 ArkUI 带你玩转 arkts json解析
前言导读 相信很多同学再开发过程中都会遇到json解析的处理,不管是跟服务端交互 或者是读取本地的json 都会遇到json解析 那么正好今天有空正好讲一下鸿蒙next里面的json解析 JSON解析与生成 本模块提供了将JSON文本转换为JSON对应对象或值,以及将对象…...
东土科技加码芯片业务投资,携手神经元共建新型工业生态
为抢抓国产化芯片发展的重大机遇,东土科技决定进一步加大对神经元信息技术(成都)有限公司的投资。这一战略布局有利于东土科技鸿道Intewell工业操作系统与神经元公司芯片的深度协同,推动实现“信息技术、网络技术、控制技术、数字…...
指纹与指甲检测系统源码分享
指纹与指甲检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…...
C++3D迷宫
目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好,我叫这是我58。 程序 #include <iostream> using namespace std; void printmaze(char strmaze[5][5][5]) {cout << "-----" << endl;int i 0;int ia 0…...
跨界融合,GIS如何赋能游戏商业——以《黑神话:悟空》为例
在数字化时代,地理信息系统(GIS)技术正以其独特的空间分析和可视化能力,为游戏产业带来革命性的变革。《黑神话:悟空》作为中国首款3A级别的动作角色扮演游戏,不仅在游戏设计和技术上取得了突破,…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
