week7——语言模型

一、 语言模型

定义:对于语言序列词ω1,ω2,ω3,...,ωn,语言模型就是计算该词序列的概率,即P(ω1,ω2,ω3,...,ωn)。

本质:语言模型是对语句的概率分布建模。

通俗:语言模型用来计算一个句子出现的概率,也是判断一句话是否合理的概率。

公式:给定一个词序列S=(w1,w2,w3......wn),它的概率表示为:

其中:


问题:
自由参数问题:模型的自由参数是随着字符串长度的增加而指数级暴增的,这使我们几乎不可能正确的估计出这些参数;

零概率问题(OOV问题):每一个w都具有V种取值,这样构造出了非常多的词对,但实际中训练语料是不会出现这么多种组合的,那么依据最大似然估计,最终得到的概率实际是很可能是0。

二、 N-gram语言模型

为了解决自由参数数目过多的问题,引入了马尔科夫假设:随意一个词出现的概率只与它前面出现的有限的n-1个词有关。基于上述假设的统计语言模型被称为N-gram语言模型。

即用前N-1个词作为历史,估计当前(第N个)词。

 

一般用<s>和</s>来标记开头结尾,没有在vocabulary中的词(OOV, out of vocabulary),标记为<UNK>。

当n=1时,即一个词的出现与它周围的词是独立,称为unigram。

当n=2时,即一个词的出现仅与它前面的一个词有关时,称为bigram。

当n=3时,即一个词的出现仅与它前面的两个词有关,称为trigram。

自由参数的数量级是n取值的指数倍。

从模型的效果来看,理论上n的取值越大,效果越好。但随着n取值的增加,效果提升的幅度是在下降的。同时还涉及到一个可靠性和可区别性的问题,参数越多,可区别性越好,但同时单个参数的实例变少从而降低了可靠性。

三、数据平滑算法

为了解决零概率问题,即由于语料的稀疏性,有些词序列找不到,需要对数据进行平滑。

(1)加一平滑(Add-one Smoothing)

思想:将每个计数加一,从而使得任何词序列都有计数,这样的话就可以把本来概率为0结果变为一个很小的值。为了保证所有实例的概率总和为1,将分母增加实例的种类数;即:

优点:算法简单,解决了概率为0的问题

缺点:Add-one给训练语料中没有出现过的 N-grams 分配了太多的概率空间,认为所有未出现的N-grams概率相等也有点不合理。

(2)古德-图灵平滑(Good-turing Smoothing)

思想:用你看见过一次的事情(Seen Once)估计你未看见的事件(Unseen Events),并依次类推,用看见过两次的事情估计看见过一次的事情等等。

对于任何一个发生r次的n-gram,都假设它发生r*次,即:

则在样本中出现r事件的概率为:

(3)回退平滑(Katz smoothing)

思想:又称为Back-off 回退,是对古德图灵模型的改进。若N阶语言模型存在,直接使用打折后的概率(常使用Good-turing算法进行打折);若高阶语言模型不存在,将打折节省出的概率量,依照N-1阶的语言模型概率进行分配,依此类推。

(4)插值平滑(Jelinek-Mercer smoothing)

思想:用线性差值把不同阶的 N-gram 结合起来,这里结合了 trigram,bigram 和 unigram。用 lambda 进行加权。

其中,

(5)Witten-Bell smoothing

思想:如果在训练语料中对应的n元文法出现次数大于1,则使用高阶模型;否则,后退到低阶模型。

(6)Kneser-Ney Smoothing

思想:对于一个词,如果它在语料库中出现更多种不同上下文(context) 时,它可能应该有更高的概率。

为了刻画这种想法,定义接续概率(continuation probability):

四、 困惑度

N-gram语言模型与评价方法:

实用方法:通过查看该模型在实际应用(如拼写检查、机器翻译)中的表现来评价,优点是直观、实用,缺点是缺乏针对性、不够客观。

理论方法:困惑度(preplexity),其基本思想是给测试集的句子赋予较高概率值的语言模型较好。

理解:句子越好(概率大),困惑度越小,也就是模型对句子越不困惑。

困惑度->困难度,求出来的困惑度值相当于一个虚拟词典大小,下一个词就从这个虚拟词典中选。值越大,选择就越多,选对就越困难,说明语言模型训练的就越差。值越小,选择就越少,选对的可能性就越大,越简单,说明语言模型训练的越好。

熵(entropy):又称自信息,描述一个随机变量的不确定性的数量,熵越大,不确定性越大,正确估计其值的可能性越小。越不确定的随机变量越需要大的信息量以确定其值。

 其中,p(x)表示x的分布概率。

相对熵(relativeentropy):又称KL距离,Kullback-Leibler divergence。

衡量相同事件空间里两个概率分布相对差距的测度,当p=q的时候,相对熵为0,当p和q差距变大时,交叉熵也变大。

其中,p(x)和q(x)代表x的两种概率分布。

交叉熵(crossentropy):衡量估计模型和真实概率分布之间的差异。

困惑度(perplexity):困惑度是交叉熵的指数形式。

 

 总结

(RNN语言模型很好,可以对很长的上下文关系进行建模。但是它在语音识别中不常用。因为用RNN语言模型的话,解码出每一个词都得现算语言模型分数,效率不高。它一般用在二次解码rescore中。

N-gram可以编译成加权有限状态转换器,可以看成一种有向图。这样解码就变成了在图中搜索的过程,比较高效。所以语音识别一般用的还是N-gram)

语言模型如何配合声学模型来提高整个识别结果?

这就是解码器所做的事情。

``` {—————————————— 系统参数模块(行业中性化处理) ——————————————} 行业代码:=INDUSTRY; DYNPETTM:=IF(FINANCE(33)>0, CLOSE/(FINANCE(33)/FINANCE(1)+0.0001), 1000); PB_RATE:=IF(FINANCE(5)>0, CLOSE/FINANCE(5), 1000); PEG_VAL:=DYNPETTM/MAX(FINANCE(54)/FINANCE(34)*100,0.0001); {——估值参数行业分位数优化——} PETTM_QUANTILE:=DYNPETTM/REF(HHV(DYNPETTM,240),行业代码); PB_QUANTILE:=PB_RATE/REF(HHV(PB_RATE,240),行业代码); PEG_QUANTILE:=PEG_VAL/REF(HHV(PEG_VAL,240),行业代码); {——波动率动态加权——} VOLATILITY:=EMA(STD(CLOSE,20)/MA(CLOSE,20),5); VAR_PERIOD:=IF(VOLATILITY<0.06,55,IF(VOLATILITY<0.12,34,21))*0.6 + REF(VAR_PERIOD,1)*0.4; FAST_LEN:=CEILING(EMA(VAR_PERIOD*0.382,3)); SLOW_LEN:=FLOOR(EMA(VAR_PERIOD*1.618,3)); SGNL_LEN:=IF(VAR_PERIOD<=21,5,7); {—————————————— 核心指标模块(动量增强) ——————————————} {——MACD状态机——} DIF:=EMA(CLOSE,FAST_LEN) - EMA(CLOSE,SLOW_LEN); DEA:=EMA(DIF,SGNL_LEN); MACD:=2*(DIF-DEA); MACD_PHASE:=IF(DIF>DEA AND DEA>0,2,IF(DIF>DEA,1,IF(DIF<DEA AND DEA<0,-2,-1))); {——均线收敛系统——} MA5:=EMA(CLOSE,5); MA10:=EMA(CLOSE,10); MA_CONV:=ATAN(MA5/MA10)*180/3.1416; TREND_ARR:=MA5>MA10 AND MA10>MA20 AND MA20>MA60 AND MA_CONV>15; {——量价共振模型——} VOL_MA5:=MA(VOL,5); VOL_MA20:=EMA(VOL,20); VOL_SIG:=VOL>VOL_MA20*1.3 AND VOL>REF(HHV(VOL,5),1)*1.1 AND (CLOSE-OPEN)/(HIGH-LOW+0.0001)>0.5; {——动量状态检测——} MOMENTUM:=EMA(C,5)/REF(EMA(C,5),3)-1; WEEK_CHG:=(C-REF(C,5))/REF(C,5)*100; MOM_CONF:=EMA(C,5)>EMA(C,13) AND C>EMA(C,34)*1.05 AND WEEK_CHG>HHV(WEEK_CHG,20)*0.6; {—————————————— 信号合成模块(分时/盘后双模式) ——————————————} {——盘中异动预警——} INTRADAY_SIG:VOL>DYNAINFO(5)*1.5 AND (C-DYNAINFO(3))/DYNAINFO(3)*100>2.5 AND MACD_PHASE>=1 AND MOMENTUM>0.015 FILTER(CROSS(VOL_MA5,VOL_MA20),30); {——盘后主升浪选股——} VALUATION:=PETTM_QUANTILE<0.7 AND PB_QUANTILE<0.8 AND PEG_QUANTILE<0.9; TREND_SIG:=TREND_ARR AND BETWEEN(C/MA60,1.08,1.35); MOM_SIG:=MACD_PHASE>=1 AND MOM_CONF; PRICE_VOL:=VOL_SIG AND WEEK_CHG>5; {——风险过滤(行业适配)——} BETA_COEF:=SLOPE(C/INDEXC,60)*STD(C,60)/STD(INDEXC,60); DEBT_RATIO:=FINANCE(42)/FINANCE(1); CASH_RATIO:=FINANCE(10)/FINANCE(1); RISK_FLT:=IF(INSTR(行业代码,'银行|地产'),DEBT_RATIO<0.85 AND CASH_RATIO>0.15, DEBT_RATIO<0.55 AND CASH_RATIO>0.25); {——周期共振验证——} CY_MON:=MA(C,10)>REF(MA(C,10),5) AND MA(C,20)>REF(MA(C,20),10); CY_WK_DIFF:=EMA(C,10)-EMA(C,30); CY_WK_DEA:=EMA(CY_WK_DIFF,8); CY_WK:=CY_WK_DIFF>CY_WK_DEA AND CY_WK_DIFF>0; {——最终信号生成——} SCAN_SIG:VALUATION AND RISK_FLT AND CY_MON AND CY_WK AND COUNT(TREND_SIG AND MOM_SIG,5)>=2 AND WEEK_CHG>HHV(WEEK_CHG,20)*0.6; FINAL_SIGNAL:FILTER(SCAN_SIG,3),COLORGREEN;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我正在编辑【通达信量化择时选股】代码,遇到了 【错误句 : {—————————————— 系统参数模块(行业中性化处理) ——————————————} 行业代码:=INDUSTRY 详细信息 : 未知字符串 INDUSTRY 错误起始位置 : 102 ; 长度: 8】,请帮我检查并改正错误点补全正确代码,生成修正后完整代码。原有选股逻辑完整保留,所有参数计算关系和信号触发条件均不改变。
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值