Word2Vec

Word2Vec是谷歌提出的词向量学习框架,包含CBOW和Skip-gram模型。CBOW通过上下文预测中心词,适合小数据;Skip-gram反之。为了加速训练,提出了层次softmax和负采样方法,前者对低频词效果好,后者对高频词和低维向量效果佳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

Word2Vec是google提出的一个学习word vecor(也叫word embedding)的框架。

它主要提出了两个模型结构CBOW和Skip-gram,这两个模型都属于Log Linear模型,结构如下所示:

1

CBOW对小型数据比较合适,而Skip-gram在大型语料中表现得更好。

CBOW模型

CBOW main idea:Predict center word from (bag of) context words.

cbow全称为continues bag of words,之所以称为continues是因为学习出来的word vector是连续的分布式表示的,而又称它是一个bag of words模型是因为在训练时,历史信息的词语顺序不影响Projection,因为之后不是将各个词concate,而是sum,而且这样也大大较少了计算量!

CBOW的详细结构如下:


输入是one-hot向量表示的词,之后Projection成N维的低维稠密向

以下是基于STM32智能药箱中,DHT11药品环境监测模块的主要代码: ``` #include "dht11.h" #include "delay.h" #define DHT11_IO_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;} #define DHT11_IO_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;} u8 DHT11_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); DHT11_IO_OUT(); DHT11_DOUT_1; delay_ms(1000); return DHT11_Check(); } u8 DHT11_Check(void) { u8 retry=0; DHT11_IO_IN(); while (DHT11_DIN&&retry<100) { retry++; delay_us(1); } if(retry>=100)return 1; else retry=0; while (!DHT11_DIN&&retry<100) { retry++; delay_us(1); } if(retry>=100)return 1; return 0; } u8 DHT11_Read_Bit(void) { u8 retry=0; while(DHT11_DIN&&retry<100) { retry++; delay_us(1); } retry=0; while(!DHT11_DIN&&retry<100) { retry++; delay_us(1); } delay_us(40); if(DHT11_DIN)return 1; else return 0; } u8 DHT11_Read_Byte(void) { u8 i,dat; dat=0; for (i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit(); } return dat; } u8 DHT11_Read_Data(u8 *temperature,u8 *humidity) { u8 buf[5]; u8 i; DHT11_DOUT_1; DHT11_Check(); buf[0]=DHT11_Read_Byte(); buf[1]=DHT11_Read_Byte(); buf[2]=DHT11_Read_Byte(); buf[3]=DHT11_Read_Byte(); buf[4]=DHT11_Read_Byte(); if(buf[0]+buf[1]+buf[2]+buf[3]==buf[4]) { *humidity=buf[0]; *temperature=buf[2]; return 0; } else return 1; } ``` 这段代码主要包括了DHT11模块的初始化、检测、读取等功能。其中,DHT11_Init()函数用于初始化DHT11模块;DHT11_Check()函数用于检测DHT11模块是否正常工作;DHT11_Read_Bit()函数和DHT11_Read_Byte()函数用于读取模块返回的数据;DHT11_Read_Data()函数用于读取温湿度数据,并将其传递给主程序进行处理。 需要注意的是,这段代码中使用了一些宏定义,如DHT11_IO_IN()、DHT11_IO_OUT()、DHT11_DOUT_1等,这些宏定义需要在其他文件中进行定义和声明。同时,这段代码中使用了stm32f10x.h库,需要在工程中添加该库文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值