STM32移植到GD32的注意事项
GD32的性价比和稳定性都很高。我更喜欢用GD32.。但不是100%兼容的。需要注意一些细节。2.内部 Flash1)芯片设置读保护用法描述由于GD的Fash是自己的专利技术,STM的Fash是第三方提供的,所以GD的 Flash和STM的Fash有些许差异。GD的擦除时间会长一点解决方法在写完KEY序列以后,需要读该位,确认key已生效。所以,这里应该插入While(! (FLASH->CR &0x200);//Wait OPTWRE或可简单插入两个NOPNOPONOPO在ST库中,只有FLASH Status FLaSH Erase Option Bytes(void)FLaSH Status FlaSH ProgramOption Byte Data(uint32 t Address, uint8 t DataFLASH Status FLASH_ Enable WriteProtectionuint32 t FLASH PagesFLASH Status FLASH ReadOutProtection (Functional State New State)四个函数需要修改。2)IAP在应用中编程描述GD32由于有fash的0访问时序,同SM32在Fash的Ease和 Program上存在差别,GD32的 Erase和 Program时间比STM32的稍微长些建议对 Erase和 Progran时间进行修改解决方法将宏定义井 define erase timeout(luint32 t)OX000B000O)#define ProgramTimeout(uint32_t)ox00002000修改为:#define erasetimeout((uint32_t)OX00OFFFFF#define ProgramTimeout(uint32 t)OxOOOOFFFF备注: Erase和 Program时间宏定义在stm3210 x flash. c源文件中路径: braiesSTM32F10 x Std Periph Driversr)3)用IAR下载配置解决方法在批量牛产的时候首先会烧写一个USB的boot,这个boot自动运行后在由上位机软件进行烧写应用程序。如果boot程序不能自动运行则需要重新插拔次电源。给生产造成一些麻烦。产生不能自动运行程序的原因是如果程序设置读保护的话需要等待 FLASH CR的第9[ OPTWRE]位为1.如果没有置位的话继续执行就会出错。由」ST的执行速度慢,程序执行到读 FLASH CR寄存器的时候该位已经置1,GD的执行速度比较快,程序运行到这的时候该位还没置1,因此需要在 FLASH ReadOut Protection函数里面添加一些轮询该位为1或者加延时3.ISP烧写软件1)ISP烧写,建议使用官方烧写软件性述芯片内部同有区别解决方法建以到下载最新版本的另外也有专门的烧写软件(可以到论坛下毂如果使用自制的软件或脱机编程器,实现和完全兼容,建议修改以下参数。页擦除等待超时时间增加至整片擦除等待超时时间增加至左右字编程等待超时时间增加至,臾编程等笭超时时间增加至I/0日1)I0口外部中断使用方法措述在关闭期间,如果外部引脚有电平的变化,在使用MR打开中断后会马上进入中断服务程序。理论是打开中断前,不管管脚是否有电平的变化,都不会影响到打开后的中断响应。解决方法所以解决方法就是通过禁用上升沿或者下降沿检测寄存器来开关中断,不能使用IMR屏蔽奇存器。程序如下关闭沿检测,以达到关闭中断的目的,下降沿使用寄存器,上升沿使用寄存器2)在待机模式,PA8引脚特殊设置描述在使用低功耗的情况下,PA8会被MCU在内部被设置为地PA8复用为MU内部频率输出,超低功耗设时需要悬空解决方法在待机模式,PA8悬空不用3)低功耗下必须注意描述在使用低功耗情况下,把软件全部端口(AF)时钟关掉,无论是否有该端凵。4)当有脉冲群冲击管脚摧述需要在在进入中断后关闭中断4.定时器1)定时器输入捕获模式需要软件清中断描述sTM定吋时器输入捕获模式默认能硬件清中断,GD为了更加严格要求配置,需要做软件清中断解决方法软件清除标志位2)定时器向上脉冲计数模式设置述定时器的用法差异解决方法脉冲计数模式下,装载值必须设置为比预期值大,否则不计数在ST上如果重载值不设置(初始为0)的时候,CNT可以正常计数。在GD上如果重载值不设置保持初始为0的时候,会因为重载值为零,即便是来一个脉冲也会导致所有的寄存器复位从而不能正常计数。型号GD32F1系列MCUF|ah256B8及以上的型号)3)TIM、ADC模块描述Tmer、ADC模块的触发信号宽度要求解决方法|由于内部有高速和低速两条外围总线,Tmer、ADC模块和其他外设共同使用这两个总线。GD32F103/101系列Fash128KB及以下的型号, Timer、ADC等模块识別触发信号的条件是触发信号宽度大于模块所在总线的时钟宽度5.串口 USART1) USART连续发送数据字节有空闲位带述字节间有空闲位解决方法|对于一般的通讯米说,不会有影响,只对于一般在通讯上有特殊协议的,才会产生数据不准确的情况所以,特定情况,修改程序6.I2C总线1)硬件L2C特殊配置述GD的C相对STM的来说要少一个标志位解决、宏地址定义改交方法2、硬件I2C在会在向从机发送7bits地址完成后,从札还没来得及识别。(看客户应用)我们可以在发送完7bits后加个延时,让从机完全识别I2C Send7bitAddress(I2C1, EEPROM ADDRESS, I2C Direction TransmitterintOfffhile(i --3、检测ADDR不能使用I2 C Checkevent函数,因为他会清除ADR,可以使用I2 C Get FlagStatus函数就是把while(! I2C CheckEvent(I2C1I2C EVENT MASTER TRANSMITTER MODE SELECTED))Ey while(! I2C GetFlagStatus(I2C1, I2C FLAG ADDR))4、还有个关于编程步骤的严谨性,跟STW想比,我们是先 Clcar ack,再 Clear Arrd。7.ADC采集1)ADC采样设置述ADC启动解决方法|分三个方面时写入后,需要等待一段时间,如果用库的话就在 ADC CMD后面加20us左右的延付如果采用中断获得采样数据后,需要软件清除中断。8. SDio1) SDIO DAT3pin的在1 bit bus mode和4 bit bus mode下的配置摧述1、SD|O在1 bit bus mode下,DAT3pin是低电平,这样会导致 SD Card进入SP!模式。原因:初始化失败的原因主要是因为GD32的芯片SDO的DAT3∏存在BUG2、在4位模式下,通过上面的方法,程序能止常初始化,但不能正常读写SD卡原因:因为DAT3∏在前面已经配置成推挽输出,所以在4位模式下,不危正常读下。在调用4位模式前,把DAT3的端凵配置成复用推挽输入即可解决问题解决方法「1、1 bit bus mode的解决方法:建议在使能之前,先把配置成推挽输出,)且要置成高电平,使保持高电平即可2、4 bit bus mode的解决方法:在调用4位模式前,把DAT3的端口配置成复用输出即可解决问题。2)程序在刚烧完后能正常读写SD卡,断电再上电后,SD卡初始化失败,需要手动复位一次后才正常描述在某些SD卡中,GD32断电再上电,会引起SD卡上的时钟信号不正常,导致SD卡发送命令失败。解决方法在程序中,打开时钟后,增加一小段延时,以保证下时钟信号稳定。这个延时添加的地方:在即的配置文件中,然后在这个函数中找到就在这个后面加个延时。10. USBA, USB OTG1)客户使用的原工程时需要注意几点解|1、在中,增加如下图红色字体语句for (1=0; 18; i++) EPli= GetEndPoiNT(i)for(i=0:iregs. HC REGS [num]->HCCHAR, hcchar d3 2)pdev->host hc Status =HC NAK而V2.1.0版本的NAK处理过程如下else if (hcint b nak)if(hcchar b. eptype = EP TYPE_ INTR)UNMASK HOST INT CHH(num)USB OTG HC Halt(pdev, numelse if ((hcchar. b. eptype = EP TYPE CTRL)(hcchar b eptype = EP_ TYPE BULK))A re-activate the channel *hcchar, b chen =1hcchar b chris =0USB OTG WRITE REG32(&pdev->regs. HC REGS [num]->HCCHAR, hcchar d32)pdey->host HC Status [num]=HC_NAKCLEAR HC INT(hcreg, nak)唯一的区别就是 CLEAR HC INT( here,nak)的位置,在Ⅵ1.0.0版本中对于CTRL和BUK端点的NAK中断没有清除NAK,我们的芯片会因此产生多次IN传输的请求,导致数据传输错误。改为V2.1.1的写法后传输正常。(注意 HC Status在V2.1.0是数组,在Ⅵ1.0.0是单个数据,直接拷贝的话要去掉后面的[num])B.USB外设的工作频率有限制摧述有最低工作频率的要求,也就是APB1分频后的时钟必须大于12MHz,比如HCLK为56MHz,APB1的最大分频系数为4,56/4=14MHz,可以正常工作。11 SPI1)输入与输出配置要求(STM32不需要如此要求)解决丨GD32在使用SP时,o的配置必须严格遵守主从模式下的输入与输出配置,而方法STM32无此要求,相关代码如下主机模式下|o配置(主机以SP为例):GPIO InitStructure gPio Mode gPio Mode af plGPIO_ Init Structure GPIo Speed GPlO Speed 50MHzGPIO InitStructure. GPio Pin= GPlO Pin 5 GPIO Pin_ 7;GPIO Init(GPIOA, &GPIO InitstructureGPio Init Structure gPio Mode gPio Mode IN floating:GPio InitStructure gpio Pin gpio pin 6GPIO Init(GPIOA, &GPIO InitStructure)从机模式下o配置(从机以SP2为例)GPIo Init Structure GPio Mode gPlo Mode IN FloatingGPIO InitStructure GPIO Speed= GPl Speed 50MHzGPIO_InitStructure GPIO_ Pin GPIO Pin_13 GPIO_ Pin_15GPIO Init(GPIOB, &GPIO InitStructure)gPio Initstructure gpio mode gpio mode af pp.GPIO InitStructure. GPio Pin= GPIo Pin 14:GPIO_Init(GPIOB, &GPIO_Initstructure);3)在GD32的SP的时钟信号,空闲状态需要配置成高电平,以保证数据的稳定性,具体代码如下:红色字体代码解决SPI_ InitStructure SPl Direction =SPI_ Direction_ 2Lines fullDuplex;方法SPI InitStructure SPl Mode SPi Mode master.SPI Initstructure SPl Data Size= SPl Data Size 8bSPlInitStructure SPl_CPOL= SPI CPOL HighSPl Initstructure SPl CPHA= SPI CPHA 2EdgeSPI InitStructure SPI NSS= SPI NSS SoftSPI InitStructure SPl BaudRate Prescaler =SPI Baud Rate Prescaler 256:SPI Initstructure, Spi FirstBit= SPI FirstBit MSBSPI InitStructure SPl CRCPolynomial =7;SPl Init(sPl1, &SPl Initstructure);4)当作为从机时,在GD32中,时钟信号必须为8的整数倍。例如:红色字体代码解决SPI_InitStructure SPl_ Direction =SPl_ Direction_ 2Lines_ Full Duplex;方法SPI InitStructure. SPl Mode= SPl Mode MasterSPI InitStructure SPSPi Data Size 8SPl InitStructure SPl CPOL= SPI CPOL High;SPI Init Structure. SPl CPHA SPI CPHA_ 2EdgeSPI Initstructure SPl NSS= SPI NSs SoftSPI Initstructure Spl BaudRatePrescaler= SPl BaudRatePrescaler 256SPI InitStructure. SPl FirstBit= SPl First Bit MSBSPl Initstructure SPl CRCPolynomial =7;SPI Init(SPI1, &SPl InitStructure)5)在GD32中,不能使用SPLS_FLAG_BSY该位来判断SP总线数据是否接收或发送完成12.看门狗1)进入SToP模式前打开看门狗,通过RTc的ALR唤醒后,程序会不断被复位的现像摧述WDG内部有个 Reload信号,KEY奇器写AAA会使其拉高,过段时间自动拉低。在拉底之前进入STOP状态会使 Reload信号一直为高,等到退出SToP后也保持为高,之后再写AAAA没有办法让 Reload产生上升沿,也就没办法更新计数器了解决方法「进STOP之前不要 Reload,也可以调整下程序的顺序,把WwDG的配置放到RIC配置之前,效果是一样的。
- 2021-05-06下载
- 积分:1
word2vec_中的数学原理详解
word2vec_中的数学原理详解个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!wordzvec中的数学hoty@163.com2014年7月目录前言2预备知识2.1 sigmoid函数2.2逻辑回归3 Bayes公式2.4 Huffman编码,,,,,,,,524.1Humu树242 Huttman树的构造62.4.3 Huffman编码..,.3背景知识3.1统计语言模3.2n-gram模型103.3神经概率语言模型123.4词向量的理解4基于 Hierarchical softmanⅹ的模型41CBOW模型..191.1.1网络结构41.2梯度计算201.2 Skip-gram模型42.1网络结构42.2梯度计算255基于 Negative sampling的模型285.1CBOW模型285.2 Skip-gram模型53负采样算法326若干源码细节346.1a(x)的近似计算62词典的存储63换行符3564低频词和高频词366.5窗口及上下文3766自应学习率3767参数初始化与训练386.8多线程并行3869几点疑问和思考11m3881前言word2vec是 Google于2013年开源推出的一个用于获取 word vector的工具包,它简单、高效,因此引起了很多人的关注,由于word2vec的作者 Tomas nikolov在两篇相关的论文(,[4)中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感些按捺不住的人于是选择了通过解剖源代码的方式来一窥究竟第一次接触word2ve是2013年的10月份,当时读了复且大学郑骁庆老师发表的论文7,其主要工作是将SENA的那套算法(8])搬到中文场景.觉得挺有意思,于是做了一个实现(可参见[20),但苦于其中字向量的训练时间太长,便选择使用word2we来提供字向量,没想到中文分词效果还不错,立马对word2vec刮目相看了一把,好奇心也随之增长后来.陆陆续续看到∫word2ve的一些具体应用,而 lomas nikolov团队本身也将其推广到了句子和文档(),因此觉得确实有必要对word2vec里的算法原理做个了解,以便对他们的后续研究进行追踪.于是,沉下心来,仔细读了一回代码,算是基本搞明臼里面的做法了.筼一个感觉就是,“明明是个很简单的浅层结构,为什么被那么多人沸沸扬扬地说成是Decp Learning呢?”解剖word2vec溟代码的过程中,除了算法层面的收获,其实编程技巧方面的收获乜颇多.既然花了功夫来读代码,还是把理解到的东西整理成文,给有需要的朋友提供点参考吧在整理本文的过程中,和深度学习群的群友北流浪子(15,16)进行了多次有益的讨论在比表示感谢另外,也参考了其他人的一些资料,鄱列在参考文献了,在此对他们的工作也并表示感谢2预备知识本节介绍word2vee中将用到的些重要知识点,包括 sigmoid函数、 Beyes公式和Huffman编码等821 sigmoid函数sigmoid函数是神经网络中常用的激活函数之一,其定义为1+e该函数的定义域为(-x,+x),值域为(0,1).图1给出了 sigmoid函数的图像0.5图1 sigmoid函数的图像sigmoid数的导函数具有以下形式)=0(x)1-0(x)由此易得,函数logo(a)和log(1-0(x)的导函数分别为log o(a)(21)公式(2.1)在后面的推寻中将用到822逻辑回归生活中经常会碰到二分类问题,例如,某封电子邮件是否为垃圾邮件,某个客户是否为在客户,某次在线交易是舌仔在诈行为,等等.设{(x,)}1为一个二分类问题的样本数据,其中x∈R",∈{0,1},当1=1时称相应的样本为正例,当v=0时称相应的样本为负例利用 sigmoid函数,对于任意样木x=(x1,x2,…,xn),可将二分类问题的 hypothesis函数写成h(x)=0(o+61x1+622+…+nxn),其中0=(0o,01,…,O)为待定参数.为了符号上简化起见,引入x0=1将x扩展为(x0,x1,x2,…,xrn)},且在不引起混淆的情况下仍将其记为ⅹ.于是,he可简写为取阀值T-0.5,则二分类的判别公式为1,b(x)≥0.5y(x0.5那参数θ如何求呢?通常的做法是,先确定一个形如下式的整体损失函数∑co(x,v)然后对其进行优化,从而得到最优的參数θ实际应用中,单个样本的损失函数cost(x,)常取为对数似然函数cosl(xi, yi)),v-1;(1-(x),v=0注意,上式是一个分段函数,也可将其写成如下的整体表达式cost(x2,3)=·log(ho(x)(1y1)·log(1h(x)323 Baves公式贝叶斯公式是英国数学家贝叶斯( Thomas Bayes)提出来的,用来描述两个条件概率之间的关系.若记P(A),P(B)分别表示事件A和事件B发生的概率,P(AB)我示事件B发生的情况下事件4发生的慨率P(A,B)表示事A.B同时发生的概率.则有P(AB)P(B), P(BLA)=P(A, B)P(A, B利用上式,进一步可得P(B AP(AB)-P(A)P(B)这就是 Bayes公式g2.4 Huffman编码本节简单介绍Humn编码(具体内容主要来白百度百F的词条.[10),为此,首先介绍Huffman树的定义及其构造算法§24.1 Huffman树在计算机科学中,树是一种重要的非线性数据结构,它是数据元素(在树中称为结点)按分支关系组织起来的结构.若干棵互不相交的树所构成的集合称为森林.下面给出几个与树相关的常用概念·路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径.通路中分支的数目称为路径长度.若规定根结点的层号为1,则从根结点到第L层结虑的路径长度为L-1●结点的权和带权路径长度若为树中结点赋予一个具有某种含义的(非负)数值,则这个数值称为该结点的权结点的带权路径长度是指,从根结点到该结点之间的路径长度亐该结点的杈的乘矾·树的带权路径长度树的带权路径长度规定为所有叶子结点的带权路径长度之和二叉树是每个结点最多有两个子树的有序树.两个子树通常被称为“左子树”和“右子树”,定义中的“有序”是指两个子树有左石之分,顺序不能颠倒给定n个权值作为n个叶子结点,树造一棵二叉树,若它的带权路径长度达到最小,则称这样的二叉树为最优二叉树,也称为 Huffman树82.4.2 Huffman树的构造给定m个权值{mn,m2;…,mn}作为二叉树的m个叶子结点,可通过以下算法来构造颗 Huffman树算法2.Ⅰ(Hu「man树构造算法)(1)将{1,2,……,wn}看成是有n棵树的表林(每树仅有一个结点)2)在森林中选出两个根结,的权值最小的树合并,作为-棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和〔3)从森林中燜除选取的两樑树,并将新树加入森林(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求的 luffman树接下来,给出算法2.1的一个具体实例例2.1假设2114年世界杯期间,从新浪毀博中抓取了若干条与足球相关的微博,经统计,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词岀现的次薮分别为15,8,6,5,3,1.请以这6个词为叶子结点,以相应词频当权值,构造一棵Hu∥n树.⊙Q⑨Q⊙只66如→只只③⊙图2 Huffman树的构造过程利用算法.,易知其枃造过程如国g所示,团中第六步给出了最终的 Hutman树,由囚可见词频越大的词离根结点越近构造过程中,通过合并新増的结点被标记为黄色.由于每两个结点邡要进行一次合并,因此,若叶子结点的个数为η,刘枃造的H們πω树中新増结点的个数为π-1.本例中n6,因此新增结,的个数为5注意,前面有捉到,二叉树的丙个子树是分左右的,对于某个非叶子结点来说,就是其两个孩子结点是分左右的,在本例中,统一将词频大的结点作为左孩子结点,词频小的作为右孩子结点当然,这只昃一个约定:你要将词頻大的结点作为右孩子结点也浸有问题§24.3 Huffman编码在数据通倍中,需要将传送的文宁转换成二进制的字符串,用0,1码的不同排列米表示字符.例如,需传送的报文为“A上 TER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为84,5,3,1,1,现要求为这些字母设计编码要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制(23=8>6),可分别用000.001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码显然编码的长度取决报文中不同字符的个数,若报文中可能出现26个不同字符,则固定编码长度为5(2=32>26).然而,传送报文时总是希望总长度尽可能短.在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、7,自然会想到设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码.为使不等长编码为前缀编码(即要求一个字符的编码不能是另一个字符編码的前缀),可用字符集中的每个宇符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的岀现频率作为字符结烹的权值赋予该结点上,显然字使用频率越小权值越小,权值越小叶子就越靠下,于是颎率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度,效果上就是传送报文的最短长度.因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的Hman树的问题.利用 Hultman树设计的二进制前缀編码,称为 LuminaL编码,它既能满足前缀编码的条件,又能保证报文编码总长最短本文将介绍的word2ve工具中也将用到 Huffman编码,它把训练语料中的词当成叶子缩点,其在语料中出现的次数当作权值,通过构造相应的 Huttman树来对每一个词进行Huffman编码图3给岀了例2.1中六个词的 Huffman编码,其中约定(词频较大的)左孩子结点编码为1,(词频较小的)石孩子编码为θ.这惮一米,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词的 Huffman编码分别为0.111,110,101,1001和10000我告欢巴匹0足球图3 Huffman编码示意图注意,到目前为止,关于 Huttman树和 Huttman編码,有两个约定:(1)将权值大的结点作为左孩子结点,权值小的作为右孩子结点(2)左孩子结点编码为1,右孩子结点编码为0.在word2vec源码中将权值较大的孩子结点编码为1,较小的孩子结点编码为0.为与上述约定统一起见,下文中提到的“左孩了结点"都是指权值较大的孩了结点83背景知识word2vec是用来生成词向量的工具,而词向量与语言模型有着密切的关系,为此,不妨先了解一些语言模型方面的知识83.1统计语言模型当今的互联网迅猛发展,每天都在产生大量的文本、图片、语音和视频数据,要对这些数据进行处理并从中挖掘岀有价值的信息,离不开自然语言处理( Nature Language processing,NP)技术,其中统计语言模型( Statistical language model)就是很重要的一环,它是所有NLP的基础,被广泛应用于语音识别、机器翻译、分词、词性标注和信息检索等任务.例.1在语音识别糸统中,对于给定的语音段Vire,霄要找到一个使概率p( TertVoice最大的文本段Tert.利用 Bayes公式,有P(Teat voice)p(VoiceText). p(Textp(Voice)其中p( CicetE.c)为声学模型,而 elEct)为语言模型(18])简单地说统计语言模型是用来计算一个句子的概率的概率模驷,它通常基于一个语料库来构建.那什么叫做一个句子的概率呢?假设W=m1:=(m1,2,…,mr)表示由T个词,2,……,按顺序构成的一个句子,则1,c2…,w的联合慨率p()=p(x1)=p(01,t2,…,r)就是这个句子的概率利用 Bayes公式,上式可以被链式地分解为p(uh)-p(1)·p(u2lu1)p(u3lu2)…p( wru-1),(3.1)其中的(条件)概率p(1),p(2t1),p(un),…,p(mr1-)就是语言模型的参数,若这些参数已经全部算得,那么给定一个句子U1,就可以很快地算出相应的p(1)了看起来奷像很简单,是吧?但是,具体实现起来还是有点麻烦.例如.先来看看模型参数的个数.剛刚才是考虑一个给定的长度为T的句子,就需要计算T个参数.不妨假设语料库对应词典D的大小(即词汇量)为N,那么,如果考虑长度为T的任意句子,理论上就有M种可能.而每种可能都要计算T个参数,总共就需要计算TN7个参数.当然,这里只是简单估算,并没有考虑重复参数,但这个量级还是有蛮吓人.此外,这些概率计算好后,还得保存下来,因此,存储这些信息乜需要很大的內存开销此外,这些参数如何计算呢?常见的方法有n-gram模型、决策树、最大熵模型、最大熵马尔科夫模型、条件随机场、神经网络等方法,本文只讨论n-gram模型和神经网络两种方法.首先来看看 n-gram模型
- 2020-12-04下载
- 积分:1