diff --git "a/\346\210\221\345\257\271\345\256\211\345\205\250\344\270\216NLP\347\232\204\346\200\235\350\200\203\345\222\214\345\256\236\350\267\265.md" "b/\346\210\221\345\257\271\345\256\211\345\205\250\344\270\216NLP\347\232\204\346\200\235\350\200\203\345\222\214\345\256\236\350\267\265.md" index 5eb1dd2..7284cc1 100644 --- "a/\346\210\221\345\257\271\345\256\211\345\205\250\344\270\216NLP\347\232\204\346\200\235\350\200\203\345\222\214\345\256\236\350\267\265.md" +++ "b/\346\210\221\345\257\271\345\256\211\345\205\250\344\270\216NLP\347\232\204\346\200\235\350\200\203\345\222\214\345\256\236\350\267\265.md" @@ -34,7 +34,7 @@ 总计有20+个问题,我们把问题归类,分成安全场景、数据特征化、模型三类,其中问题较多的是数据特征化部分,重点说说这部分。 -![image-20200410214327089](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200410214327089.png) +![image-20200410214327089](https://github.com/404notf0und/Always-Learning/blob/master/images/image-20200410214327089.png) 按照流程的先后顺序,我们把问题划分在分词粒度、预训练前字典的建立、序列、词向量等部位。首先是分词粒度,粒度这里主要考虑字符粒度和词粒度。在不同的安全场景中,安全数据不同,采用的分词粒度也可能不同,例如用于恶意样本检测的动态API行为序列数据,需要进行单词粒度的划分。域名安全检测中的域名数据,最好采用字符粒度划分。URL安全检测中的URL数据,使用字符和单词粒度划分都可以。需要根据具体的安全场景,选择合适的粒度,FXY特征化类wordindex和word2vec中参数char_level实现了该功能。基于深度学习的XSS检测文中,是根据具体的XSS攻击模式,写成正则分词函数,对XSS数据进行划分,这是一种基于攻击模式的词粒度分词模式,但这种分词模式很难扩展到其他安全场景中。在其他安全场景中,可以根据此思路,写自定义的基于攻击模式的分词,但适用范围有限。我这里提供了两种通用词粒度分词模式,第一种是忽略特殊符号的简洁版分词模式,第二种是考虑全量特殊符号的完整版分词模式,这两种分词模式可以适用于各种安全场景中。FXY特征化类word2vec中参数punctuation的值‘concise’,‘all’和‘define’实现了两种通用分词和自定义安全分词功能。下文的实验部分,会测试不同安全场景中,使用字符粒度和词粒度,使用不同词粒度分词模式训练模型的性能对比。