使用语言模型纠错,看了很多都是前n个字来预测,那第一个字咋纠错呢
语言模型训练的时候,会给所有句子加一个开始符,所以考虑开始符的话第一个词实际上是第二个词,并不存在你说的问题。
■网友
题外话,语言纠错是语言建模的一个应用场景。任何一个语言模型都可以 adapt 来做纠错,其效果好坏决定于语言模型有多强。在没有足够好的语言模型的时候,做纠错其实是空中楼阁。基于某一个语言模型做纠错的科研角度意义不大。更有意义的角度可能是把语言模型当作黑箱,研究一下这个黑箱内部的何种结构会在算法意义上更有利于纠错的实现。然后再考虑构建黑箱。
【使用语言模型纠错,看了很多都是前n个字来预测,那第一个字咋纠错呢】 === 俺之前做过通信里的纠错编码,跟这个问题很接近,所以再扯几句哈 ==
语言纠错问题的formulation 大致应该是这样的。假设你有个已经训练好的语言模型A, 用来 描述正确句子X。但是正确的句子 X 并没有被观测到;所观测到的是这个正确句子被噪声污染后的结果,Y (这里的噪声可以有各种模型,比如替词的替换,缺失,插入等)。那么纠错问题可以如下构造:给定模型A和观测到的句子 Y,infer 正确的句子 X. (当然这里的句子X 和Y 不一定需要是句子本身,可以是它们 embedding vector 的序列)。那么这样就构造出一个统计推断问题。 这个formulation 的好处是它并没有预先假设哪个词是错的(当然也没有如你题中假设的是前n个词是对的),相反它假设的是每个词都有一定几率出错。然后通过做inference 确定句子中的哪些词错了,并改正。 通信里纠错编码的解码就是这样的思想。 上述的formulation就是如法炮制,应该是最标准最自然的构造。(你问题里提到的纠错思路看起来是一个greedy 的思路,即依此判断每一个词。这种greedy 的办法一般都是比较弱的,它的致命弱点是error propagation。因为你一旦在某个词上判断错了,之后的判断就都错了。)
下面你就可以问这个问题:在这样的构造下,模型A 应该有什么性质/结构才能最有利于我实现纠错呢?这个答案会跟你决定使用的inference 算法相关。。。剩下的就自己想吧。
■网友
Bidirectional and even bidirectional+iterative.
■网友
题主你可以看看word2vec了,你的思路类似于里面的bow模型。另外就是现在序列建模,一般都是双向的,例如双向RNN。这样第一个字其实就是最后一个字。
推荐阅读
- 『先进』长江流域最先进洗舱站在宁投运 油可分离回收,水能循环使用
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- OC为何跌出语言榜前十
- 汽车|迈凯伦Artura不再使用迈凯伦祖传V8引擎了?
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 人民车市|新语言、新起点,捷达VS7 强势入局
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- C语言 指针引用数组的地址问题
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
- 可不可能利用网盘的秒传功能使用伪造的MD5(或其他信息)值进行文件分享
