.. role:: python(code) :language: python 背景知识介绍 ======================================== 以下主要介绍文本情感分析模型以及相关的评测算法的一些背景知识。 名词解释 -------- 余弦距离 ~~~~~~~~~~~~~~~~~~~~~~~~ 对于两个相同维数的非零向量 :math:`\mathbf {A}` 与 :math:`\mathbf {B}` ,他们的余弦相似度定义为 .. math:: {\displaystyle {\operatorname{CosSim}(\mathbf {A}, \mathbf {B})}={\mathbf {A} \cdot \mathbf {B} \over \|\mathbf {A} \|\|\mathbf {B} \|}={\frac {\sum \limits_{i=1}^{n}{A_{i}B_{i}}}{{\sqrt {\sum \limits_{i=1}^{n}{A_{i}^{2}}}}{\sqrt {\sum \limits _{i=1}^{n}{B_{i}^{2}}}}}}} 分词 ~~~~~~~~~~~~~~~~~~~~~~~~ 分词是中文文本自然语言处理相较于英文文本自然语言处理需要额外进行的预处理工作。因为没有像空格那样的分隔符,当需要进行词级别的操作的时候,需要对中文文本进行分词的操作,例如“我爱北京天安门”应被被分词器分为“我”“爱”“北京”“天安门”。 停用词(stop words) ~~~~~~~~~~~~~~~~~~~~~~~~ 停用词一般指的是语言中出现频率极高的词,这些词包括并无实际意义的功能词,例如“了”,“呢”;或是泛用性很强的词,例如“然后”。文本自然语言处理很多时候需要在预处理的时候把这类词去掉。 词性(part-of-speech) ~~~~~~~~~~~~~~~~~~~~~~~~ 词性,又称词类是一个语言学术语,是一种语言中词的语法分类,是以语法特征(包括句法功能和形态变化)为主要依据、兼顾词汇意义对词进行划分的结果,例如名词,动词,形容词,副词等。这些划分还可以进行进一步细化分类,例如名词可以进一步细分为普通名词,方位名词,处所名词,人名,地名等。以下是比较有代表性的 :code:`python` 包 :code:`jieba` 在 :code:`paddle` 模式下的词性(POS)和专名类别(NER, name entity recognition)标签集合 .. csv-table:: python包jieba在paddle模式下的词性和专名类别标签集合 :header: "标签", "含义", "标签", "含义", "标签", "含义", "标签", "含义" :widths: 10, 20, 10, 20, 10, 20, 10, 20 n, 普通名词, f, 方位名词, s, 处所名词, t, 时间 nr, 人名, ns, 地名, nt, 机构名, nw, 作品名 nz, 其他专名, v, 普通动词, vd, 动副词, vn, 名动词 a, 形容词, ad, 副形词, an, 名形词, d, 副词 m, 数量词, q, 量词, r, 代词, p, 介词 c, 连词, u, 助词, xc, 其他虚词, w, 标点符号 PER, 人名, LOC, 地名, ORG, 机构名, TIME, 时间 文本攻击方法(黑白盒) ~~~~~~~~~~~~~~~~~~~~~~~~ 白盒攻击 ^^^^^^^^ 项目的部分攻击算法是白盒的攻击方式,需要完整的知道文本模型的结构和对应的梯度等信息。 黑盒攻击 ^^^^^^^^ 项目的部分攻击算法是黑盒的攻击方式,不需要完整的知道文本模型的结构和对应的梯度等信息,只需要知道经过该模型的预测结果,用于作为评测的数据输入。 文本攻击方法(目标/非目标) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 目标攻击 ^^^^^^^^ 目标攻击是指将原始样本通过攻击后,指定攻击后的结果类别 非目标攻击 ^^^^^^^^^^ 非目标攻击是指将原始样本通过攻击后,结果类别与原有的模型类别不同即可 文本攻击粒度 ---------------------- 字符(字母)级别攻击 ~~~~~~~~~~~~~~~~~~~~~~~~ 字符(字母)级别攻击方式包括相邻字符交换,添加、删除、替换字符以及对某些字符进行重复等方式。 单词级别攻击 ~~~~~~~~~~~~~~~~~~~~~~~~ 单词级别攻击方式包括同义词替换,添加单词,删除单词等方式。 句子级别攻击 ~~~~~~~~~~~~~~~~~~~~~~~~ 句子级别攻击方式包括添加句子,调换句子的位置,或者改写(paraphrasing)等方式。 文本攻击限制条件 ------------------------- 文本由于其特殊性,在对模型进行攻击,生成对抗样本的时候,不仅仅需要满足扰动足够小,即对向量化的原输入文本 :math:`x` 与对抗样本 :math:`x'` 有 .. math:: \lVert x - x' \rVert \leqslant \epsilon 其中 :math:`\epsilon` 是扰动大小,还需要满足一些额外的拼写、语法、语义等条件,例如(待细化): 1. 词替换比例(word modification rate) 2. 词嵌入向量距离(word embedding distance) 3. 词性一致性(part-of-speech consistency) 4. 编辑距离(edit (Levenshtein) distance) 5. 语法错误数(一般可以通过语法检查器进行语法错误检查与计数) 6. 语义相似度(一般可以通过句编码模型,例如Universal Sentence Encoder,向量化之后的余弦距离进行度量) 文本攻击效果评价方法 --------------------- 除了 **攻击成功率** (attack success rate),以及 **攻击效率** (平均单次攻击尝试次数以及花费时间)之外,文本攻击限制条件中大部分项目也能作为文本攻击效果评价的方法。