OOV问题的解决

1)使用subword的方式来解决,可以使用fasttext工具 训练词向量时候会生成subword的词向量的信息[1];

2)在训练词向量时候,随机删除一些词,置为unknow,训练得到的unkonw就是OOV的词向量信息;

3)skip-thoughts  中有个扩大词库的方法 ;

4)未完待续;

 

 

 

参考:

1)https://blog.youkuaiyun.com/sinat_26917383/article/details/83041424

### OOV Token 的概念及其在机器学习中的应用 OOV(Out-of-Vocabulary)Token 是指训练数据集中未出现但在测试或推理阶段遇到的新单词。处理这些未知单词对于自然语言处理(NLP)任务至关重要,因为它们可能导致模型性能下降。 #### 什么是 OOV Token? 当构建词汇表时,通常会基于训练集来定义一组固定的词汇集合。然而,在实际应用场景中,可能会遇到不在该固定词汇范围内的新词。为了应对这种情况,引入了一个特殊的标记 `<OOV>` 或其他类似的占位符作为默认替代项[^1]。 #### 如何实现 OOV Token? 以下是 Python 中通过 Keras 实现的一个简单例子: ```python from tensorflow.keras.preprocessing.text import Tokenizer # 初始化 tokenizer 并指定 oov_token 参数 tokenizer = Tokenizer(oov_token="<OOV>") # 假设这是我们的语料库 corpus = [ 'this is the first document', 'this document is the second document', 'and this is the third one', 'is this the first document' ] # 训练 tokenizer tokenizer.fit_on_texts(corpus) # 查看词汇索引映射关系 word_index = tokenizer.word_index print(word_index) # 测试新的句子 test_sentence = ['this sentence contains an unknown word zzz'] sequences = tokenizer.texts_to_sequences(test_sentence) print(sequences) ``` 在这个代码片段里,`<OOV>` 被用来代替任何未曾见过的词语。如果输入中有这样的不可知术语,则会被编码成相同的整数值——即分配给 `<OOV>` 的编号。 #### 数据分割的影响因素分析 另外值得注意的是,在准备数据的过程中如何划分训练/验证/测试子集也会影响最终得到的结果分布情况以及可能产生的 OOV 数量。例如前面提到的数据尺寸信息显示出了各个部分的具体大小比例[^2]: - **Training Set**: 输入维度为 `(25000,)`, 输出同样如此; - **Validation Set**: 各自长度均为 `10000`; - **Testing Set**: 则分别具有形状 `(6250,)`. 这种设定有助于评估模型泛化能力的同时也要考虑到由于样本数量差异而导致的不同频率下低频次项目的覆盖率变化从而间接影响到 OOV 处理策略的选择与效果评价标准制定等方面的工作进展状况反馈机制建立等问题解决方案探讨交流平台建设等等相关内容延伸开来进一步深入研究下去的话就会发现更多值得思考的地方啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值